From 5d0c1b4e0d33c2d1077264636d0a65ce206d0d96 Mon Sep 17 00:00:00 2001 From: Andre Vieira Date: Wed, 19 Jun 2024 17:05:45 +0100 Subject: [PATCH 001/114] doloop: Add support for predicated vectorized loops This patch adds support in the target agnostic doloop pass for the detection of predicated vectorized hardware loops. Arm is currently the only target that will make use of this feature. gcc/ChangeLog: * df-core.cc (df_bb_regno_only_def_find): New helper function. * df.h (df_bb_regno_only_def_find): Declare new function. * loop-doloop.cc (doloop_condition_get): Add support for detecting predicated vectorized hardware loops. (doloop_modify): Add support for GTU condition checks. (doloop_optimize): Update costing computation to support alterations to desc->niter_expr by the backend. Co-authored-by: Stam Markianos-Wright --- gcc/df-core.cc | 15 +++++ gcc/df.h | 1 + gcc/loop-doloop.cc | 164 +++++++++++++++++++++++++++------------------ 3 files changed, 113 insertions(+), 67 deletions(-) diff --git a/gcc/df-core.cc b/gcc/df-core.cc index f0eb4c93957ff..b0e8a88d433bb 100644 --- a/gcc/df-core.cc +++ b/gcc/df-core.cc @@ -1964,6 +1964,21 @@ df_bb_regno_last_def_find (basic_block bb, unsigned int regno) return NULL; } +/* Return the one and only def of REGNO within BB. If there is no def or + there are multiple defs, return NULL. */ + +df_ref +df_bb_regno_only_def_find (basic_block bb, unsigned int regno) +{ + df_ref temp = df_bb_regno_first_def_find (bb, regno); + if (!temp) + return NULL; + else if (temp == df_bb_regno_last_def_find (bb, regno)) + return temp; + else + return NULL; +} + /* Finds the reference corresponding to the definition of REG in INSN. DF is the dataflow object. */ diff --git a/gcc/df.h b/gcc/df.h index 84e5aa8b524df..c4e690b40cf21 100644 --- a/gcc/df.h +++ b/gcc/df.h @@ -987,6 +987,7 @@ extern void df_check_cfg_clean (void); #endif extern df_ref df_bb_regno_first_def_find (basic_block, unsigned int); extern df_ref df_bb_regno_last_def_find (basic_block, unsigned int); +extern df_ref df_bb_regno_only_def_find (basic_block, unsigned int); extern df_ref df_find_def (rtx_insn *, rtx); extern bool df_reg_defined (rtx_insn *, rtx); extern df_ref df_find_use (rtx_insn *, rtx); diff --git a/gcc/loop-doloop.cc b/gcc/loop-doloop.cc index 529e810e530c2..8953e1de96094 100644 --- a/gcc/loop-doloop.cc +++ b/gcc/loop-doloop.cc @@ -85,10 +85,10 @@ doloop_condition_get (rtx_insn *doloop_pat) forms: 1) (parallel [(set (pc) (if_then_else (condition) - (label_ref (label)) - (pc))) - (set (reg) (plus (reg) (const_int -1))) - (additional clobbers and uses)]) + (label_ref (label)) + (pc))) + (set (reg) (plus (reg) (const_int -1))) + (additional clobbers and uses)]) The branch must be the first entry of the parallel (also required by jump.cc), and the second entry of the parallel must be a set of @@ -96,19 +96,33 @@ doloop_condition_get (rtx_insn *doloop_pat) the loop counter in an if_then_else too. 2) (set (reg) (plus (reg) (const_int -1)) - (set (pc) (if_then_else (reg != 0) - (label_ref (label)) - (pc))). + (set (pc) (if_then_else (reg != 0) + (label_ref (label)) + (pc))). - Some targets (ARM) do the comparison before the branch, as in the + 3) Some targets (Arm) do the comparison before the branch, as in the following form: - 3) (parallel [(set (cc) (compare ((plus (reg) (const_int -1), 0))) - (set (reg) (plus (reg) (const_int -1)))]) - (set (pc) (if_then_else (cc == NE) - (label_ref (label)) - (pc))) */ - + (parallel [(set (cc) (compare (plus (reg) (const_int -1)) 0)) + (set (reg) (plus (reg) (const_int -1)))]) + (set (pc) (if_then_else (cc == NE) + (label_ref (label)) + (pc))) + + 4) This form supports a construct that is used to represent a vectorized + do loop with predication, however we do not need to care about the + details of the predication here. + Arm uses this construct to support MVE tail predication. + + (parallel + [(set (pc) + (if_then_else (gtu (plus (reg) (const_int -n)) + (const_int n-1)) + (label_ref) + (pc))) + (set (reg) (plus (reg) (const_int -n))) + (additional clobbers and uses)]) + */ pattern = PATTERN (doloop_pat); if (GET_CODE (pattern) != PARALLEL) @@ -173,15 +187,17 @@ doloop_condition_get (rtx_insn *doloop_pat) if (! REG_P (reg)) return 0; - /* Check if something = (plus (reg) (const_int -1)). + /* Check if something = (plus (reg) (const_int -n)). On IA-64, this decrement is wrapped in an if_then_else. */ inc_src = SET_SRC (inc); if (GET_CODE (inc_src) == IF_THEN_ELSE) inc_src = XEXP (inc_src, 1); if (GET_CODE (inc_src) != PLUS - || XEXP (inc_src, 0) != reg - || XEXP (inc_src, 1) != constm1_rtx) + || !rtx_equal_p (XEXP (inc_src, 0), reg) + || !CONST_INT_P (XEXP (inc_src, 1)) + || INTVAL (XEXP (inc_src, 1)) >= 0) return 0; + int dec_num = -INTVAL (XEXP (inc_src, 1)); /* Check for (set (pc) (if_then_else (condition) (label_ref (label)) @@ -196,60 +212,63 @@ doloop_condition_get (rtx_insn *doloop_pat) /* Extract loop termination condition. */ condition = XEXP (SET_SRC (cmp), 0); - /* We expect a GE or NE comparison with 0 or 1. */ - if ((GET_CODE (condition) != GE - && GET_CODE (condition) != NE) - || (XEXP (condition, 1) != const0_rtx - && XEXP (condition, 1) != const1_rtx)) + /* We expect a GE or NE comparison with 0 or 1, or a GTU comparison with + dec_num - 1. */ + if (!((GET_CODE (condition) == GE + || GET_CODE (condition) == NE) + && (XEXP (condition, 1) == const0_rtx + || XEXP (condition, 1) == const1_rtx )) + &&!(GET_CODE (condition) == GTU + && ((INTVAL (XEXP (condition, 1))) == (dec_num - 1)))) return 0; - if ((XEXP (condition, 0) == reg) + if (rtx_equal_p (XEXP (condition, 0), reg) /* For the third case: */ || ((cc_reg != NULL_RTX) && (XEXP (condition, 0) == cc_reg) - && (reg_orig == reg)) + && (rtx_equal_p (reg_orig, reg))) || (GET_CODE (XEXP (condition, 0)) == PLUS - && XEXP (XEXP (condition, 0), 0) == reg)) - { - if (GET_CODE (pattern) != PARALLEL) - /* For the second form we expect: + && rtx_equal_p (XEXP (XEXP (condition, 0), 0), reg, NULL))) + { + if (GET_CODE (pattern) != PARALLEL) + /* For the second form we expect: - (set (reg) (plus (reg) (const_int -1)) - (set (pc) (if_then_else (reg != 0) - (label_ref (label)) - (pc))). + (set (reg) (plus (reg) (const_int -1)) + (set (pc) (if_then_else (reg != 0) + (label_ref (label)) + (pc))). - is equivalent to the following: + is equivalent to the following: - (parallel [(set (pc) (if_then_else (reg != 1) - (label_ref (label)) - (pc))) - (set (reg) (plus (reg) (const_int -1))) - (additional clobbers and uses)]) + (parallel [(set (pc) (if_then_else (reg != 1) + (label_ref (label)) + (pc))) + (set (reg) (plus (reg) (const_int -1))) + (additional clobbers and uses)]) - For the third form we expect: + For the third form we expect: - (parallel [(set (cc) (compare ((plus (reg) (const_int -1)), 0)) - (set (reg) (plus (reg) (const_int -1)))]) - (set (pc) (if_then_else (cc == NE) - (label_ref (label)) - (pc))) + (parallel [(set (cc) (compare ((plus (reg) (const_int -1)), 0)) + (set (reg) (plus (reg) (const_int -1)))]) + (set (pc) (if_then_else (cc == NE) + (label_ref (label)) + (pc))) - which is equivalent to the following: + which is equivalent to the following: - (parallel [(set (cc) (compare (reg, 1)) - (set (reg) (plus (reg) (const_int -1))) - (set (pc) (if_then_else (NE == cc) - (label_ref (label)) - (pc))))]) + (parallel [(set (cc) (compare (reg, 1)) + (set (reg) (plus (reg) (const_int -1))) + (set (pc) (if_then_else (NE == cc) + (label_ref (label)) + (pc))))]) - So we return the second form instead for the two cases. + So we return the second form instead for the two cases. */ - condition = gen_rtx_fmt_ee (NE, VOIDmode, inc_src, const1_rtx); + condition = gen_rtx_fmt_ee (NE, VOIDmode, inc_src, const1_rtx); return condition; - } + } /* ??? If a machine uses a funny comparison, we could return a canonicalized form here. */ @@ -507,6 +526,11 @@ doloop_modify (class loop *loop, class niter_desc *desc, nonneg = 1; break; + case GTU: + /* The iteration count does not need incrementing for a GTU test. */ + increment_count = false; + break; + /* Abort if an invalid doloop pattern has been generated. */ default: gcc_unreachable (); @@ -529,6 +553,10 @@ doloop_modify (class loop *loop, class niter_desc *desc, if (desc->noloop_assumptions) { + /* The GTU case has only been implemented for Arm, where + noloop_assumptions gets explicitly set to NULL for that case, so + assert here for safety. */ + gcc_assert (GET_CODE (condition) != GTU); rtx ass = copy_rtx (desc->noloop_assumptions); basic_block preheader = loop_preheader_edge (loop)->src; basic_block set_zero = split_edge (loop_preheader_edge (loop)); @@ -642,7 +670,7 @@ doloop_optimize (class loop *loop) { scalar_int_mode mode; rtx doloop_reg; - rtx count; + rtx count = NULL_RTX; widest_int iterations, iterations_max; rtx_code_label *start_label; rtx condition; @@ -685,17 +713,6 @@ doloop_optimize (class loop *loop) return false; } - max_cost - = COSTS_N_INSNS (param_max_iterations_computation_cost); - if (set_src_cost (desc->niter_expr, mode, optimize_loop_for_speed_p (loop)) - > max_cost) - { - if (dump_file) - fprintf (dump_file, - "Doloop: number of iterations too costly to compute.\n"); - return false; - } - if (desc->const_iter) iterations = widest_int::from (rtx_mode_t (desc->niter_expr, mode), UNSIGNED); @@ -716,12 +733,25 @@ doloop_optimize (class loop *loop) /* Generate looping insn. If the pattern FAILs then give up trying to modify the loop since there is some aspect the back-end does - not like. */ - count = copy_rtx (desc->niter_expr); + not like. If this succeeds, there is a chance that the loop + desc->niter_expr has been altered by the backend, so only extract + that data after the gen_doloop_end. */ start_label = block_label (desc->in_edge->dest); doloop_reg = gen_reg_rtx (mode); rtx_insn *doloop_seq = targetm.gen_doloop_end (doloop_reg, start_label); + max_cost + = COSTS_N_INSNS (param_max_iterations_computation_cost); + if (set_src_cost (desc->niter_expr, mode, optimize_loop_for_speed_p (loop)) + > max_cost) + { + if (dump_file) + fprintf (dump_file, + "Doloop: number of iterations too costly to compute.\n"); + return false; + } + + count = copy_rtx (desc->niter_expr); word_mode_size = GET_MODE_PRECISION (word_mode); word_mode_max = (HOST_WIDE_INT_1U << (word_mode_size - 1) << 1) - 1; if (! doloop_seq From 3dfc28dbbd21b1d708aa40064380ef4c42c994d7 Mon Sep 17 00:00:00 2001 From: Andre Vieira Date: Wed, 19 Jun 2024 17:05:55 +0100 Subject: [PATCH 002/114] arm: Add support for MVE Tail-Predicated Low Overhead Loops This patch adds support for MVE Tail-Predicated Low Overhead Loops by using the doloop funcitonality added to support predicated vectorized hardware loops. gcc/ChangeLog: * config/arm/arm-protos.h (arm_target_bb_ok_for_lob): Change declaration to pass basic_block. (arm_attempt_dlstp_transform): New declaration. * config/arm/arm.cc (TARGET_LOOP_UNROLL_ADJUST): Define targethook. (TARGET_PREDICT_DOLOOP_P): Likewise. (arm_target_bb_ok_for_lob): Adapt condition. (arm_mve_get_vctp_lanes): New function. (arm_dl_usage_type): New internal enum. (arm_get_required_vpr_reg): New function. (arm_get_required_vpr_reg_param): New function. (arm_get_required_vpr_reg_ret_val): New function. (arm_mve_get_loop_vctp): New function. (arm_mve_insn_predicated_by): New function. (arm_mve_across_lane_insn_p): New function. (arm_mve_load_store_insn_p): New function. (arm_mve_impl_pred_on_outputs_p): New function. (arm_mve_impl_pred_on_inputs_p): New function. (arm_last_vect_def_insn): New function. (arm_mve_impl_predicated_p): New function. (arm_mve_check_reg_origin_is_num_elems): New function. (arm_mve_dlstp_check_inc_counter): New function. (arm_mve_dlstp_check_dec_counter): New function. (arm_mve_loop_valid_for_dlstp): New function. (arm_predict_doloop_p): New function. (arm_loop_unroll_adjust): New function. (arm_emit_mve_unpredicated_insn_to_seq): New function. (arm_attempt_dlstp_transform): New function. * config/arm/arm.opt (mdlstp): New option. * config/arm/iterators.md (dlstp_elemsize, letp_num_lanes, letp_num_lanes_neg, letp_num_lanes_minus_1): New attributes. (DLSTP, LETP): New iterators. * config/arm/mve.md (predicated_doloop_end_internal, dlstp_insn): New insn patterns. * config/arm/thumb2.md (doloop_end): Adapt to support tail-predicated loops. (doloop_begin): Likewise. * config/arm/types.md (mve_misc): New mve type to represent predicated_loop_end insn sequences. * config/arm/unspecs.md: (DLSTP8, DLSTP16, DLSTP32, DSLTP64, LETP8, LETP16, LETP32, LETP64): New unspecs for DLSTP and LETP. gcc/testsuite/ChangeLog: * gcc.target/arm/lob.h: Add new helpers. * gcc.target/arm/lob1.c: Use new helpers. * gcc.target/arm/lob6.c: Likewise. * gcc.target/arm/mve/dlstp-compile-asm-1.c: New test. * gcc.target/arm/mve/dlstp-compile-asm-2.c: New test. * gcc.target/arm/mve/dlstp-compile-asm-3.c: New test. * gcc.target/arm/mve/dlstp-int8x16.c: New test. * gcc.target/arm/mve/dlstp-int8x16-run.c: New test. * gcc.target/arm/mve/dlstp-int16x8.c: New test. * gcc.target/arm/mve/dlstp-int16x8-run.c: New test. * gcc.target/arm/mve/dlstp-int32x4.c: New test. * gcc.target/arm/mve/dlstp-int32x4-run.c: New test. * gcc.target/arm/mve/dlstp-int64x2.c: New test. * gcc.target/arm/mve/dlstp-int64x2-run.c: New test. * gcc.target/arm/mve/dlstp-invalid-asm.c: New test. Co-authored-by: Stam Markianos-Wright --- gcc/config/arm/arm-protos.h | 4 +- gcc/config/arm/arm.cc | 1249 ++++++++++++++++- gcc/config/arm/arm.opt | 3 + gcc/config/arm/iterators.md | 15 + gcc/config/arm/mve.md | 50 + gcc/config/arm/thumb2.md | 138 +- gcc/config/arm/types.md | 6 +- gcc/config/arm/unspecs.md | 14 +- gcc/testsuite/gcc.target/arm/lob.h | 128 +- gcc/testsuite/gcc.target/arm/lob1.c | 23 +- gcc/testsuite/gcc.target/arm/lob6.c | 8 +- .../gcc.target/arm/mve/dlstp-compile-asm-1.c | 146 ++ .../gcc.target/arm/mve/dlstp-compile-asm-2.c | 749 ++++++++++ .../gcc.target/arm/mve/dlstp-compile-asm-3.c | 46 + .../gcc.target/arm/mve/dlstp-int16x8-run.c | 44 + .../gcc.target/arm/mve/dlstp-int16x8.c | 31 + .../gcc.target/arm/mve/dlstp-int32x4-run.c | 45 + .../gcc.target/arm/mve/dlstp-int32x4.c | 31 + .../gcc.target/arm/mve/dlstp-int64x2-run.c | 48 + .../gcc.target/arm/mve/dlstp-int64x2.c | 28 + .../gcc.target/arm/mve/dlstp-int8x16-run.c | 44 + .../gcc.target/arm/mve/dlstp-int8x16.c | 32 + .../gcc.target/arm/mve/dlstp-invalid-asm.c | 521 +++++++ 23 files changed, 3321 insertions(+), 82 deletions(-) create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-1.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-3.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8-run.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4-run.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2-run.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16-run.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/dlstp-invalid-asm.c diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index 2cd560c99254b..34d6be76e94ac 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -65,8 +65,8 @@ extern void arm_emit_speculation_barrier_function (void); extern void arm_decompose_di_binop (rtx, rtx, rtx *, rtx *, rtx *, rtx *); extern bool arm_q_bit_access (void); extern bool arm_ge_bits_access (void); -extern bool arm_target_insn_ok_for_lob (rtx); - +extern bool arm_target_bb_ok_for_lob (basic_block); +extern int arm_attempt_dlstp_transform (rtx); #ifdef RTX_CODE enum reg_class arm_mode_base_reg_class (machine_mode); diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index b8c32db0a1d7f..7d67d2cfee9f4 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -668,6 +668,12 @@ static const scoped_attribute_specs *const arm_attribute_table[] = #undef TARGET_HAVE_CONDITIONAL_EXECUTION #define TARGET_HAVE_CONDITIONAL_EXECUTION arm_have_conditional_execution +#undef TARGET_LOOP_UNROLL_ADJUST +#define TARGET_LOOP_UNROLL_ADJUST arm_loop_unroll_adjust + +#undef TARGET_PREDICT_DOLOOP_P +#define TARGET_PREDICT_DOLOOP_P arm_predict_doloop_p + #undef TARGET_LEGITIMATE_CONSTANT_P #define TARGET_LEGITIMATE_CONSTANT_P arm_legitimate_constant_p @@ -34659,19 +34665,1236 @@ arm_invalid_within_doloop (const rtx_insn *insn) } bool -arm_target_insn_ok_for_lob (rtx insn) -{ - basic_block bb = BLOCK_FOR_INSN (insn); - /* Make sure the basic block of the target insn is a simple latch - having as single predecessor and successor the body of the loop - itself. Only simple loops with a single basic block as body are - supported for 'low over head loop' making sure that LE target is - above LE itself in the generated code. */ - - return single_succ_p (bb) - && single_pred_p (bb) - && single_succ_edge (bb)->dest == single_pred_edge (bb)->src - && contains_no_active_insn_p (bb); +arm_target_bb_ok_for_lob (basic_block bb) +{ + /* Make sure the basic block is a simple latch having as the single + predecessor and successor the body of the loop itself. + Only simple loops with a single basic block as body are supported for + low over head loops, making sure that LE target is above LE instruction + in the generated code. */ + return (single_succ_p (bb) + && single_pred_p (bb) + && single_succ_edge (bb)->dest == single_pred_edge (bb)->src); +} + +/* Utility fuction: Given a VCTP or a VCTP_M insn, return the number of MVE + lanes based on the machine mode being used. */ + +static int +arm_mve_get_vctp_lanes (rtx_insn *insn) +{ + rtx insn_set = single_set (insn); + if (insn_set + && GET_CODE (SET_SRC (insn_set)) == UNSPEC + && (XINT (SET_SRC (insn_set), 1) == VCTP + || XINT (SET_SRC (insn_set), 1) == VCTP_M)) + { + machine_mode mode = GET_MODE (SET_SRC (insn_set)); + return ((VECTOR_MODE_P (mode) && VALID_MVE_PRED_MODE (mode)) + ? GET_MODE_NUNITS (mode) : 0); + } + return 0; +} + +enum arm_dl_usage_type { DL_USAGE_ANY = 0, + DL_USAGE_READ = 1, + DL_USAGE_WRITE = 2 }; + +/* Check if INSN requires the use of the VPR reg, if it does, return the + sub-rtx of the VPR reg. The TYPE argument controls whether + this function should: + * For TYPE == DL_USAGE_ANY, check all operands, including the OUT operands, + and return the first occurrence of the VPR reg. + * For TYPE == DL_USAGE_READ, only check the input operands. + * For TYPE == DL_USAGE_WRITE, only check the output operands. + (INOUT operands are considered both as input and output operands) +*/ +static rtx +arm_get_required_vpr_reg (rtx_insn *insn, + arm_dl_usage_type type = DL_USAGE_ANY) +{ + gcc_assert (type < 3); + if (!NONJUMP_INSN_P (insn)) + return NULL_RTX; + + bool requires_vpr; + extract_constrain_insn (insn); + int n_operands = recog_data.n_operands; + if (recog_data.n_alternatives == 0) + return NULL_RTX; + + /* Fill in recog_op_alt with information about the constraints of + this insn. */ + preprocess_constraints (insn); + + for (int op = 0; op < n_operands; op++) + { + requires_vpr = true; + if (type == DL_USAGE_READ + && recog_data.operand_type[op] == OP_OUT) + continue; + else if (type == DL_USAGE_WRITE + && recog_data.operand_type[op] == OP_IN) + continue; + + /* Iterate through alternatives of operand "op" in recog_op_alt and + identify if the operand is required to be the VPR. */ + for (int alt = 0; alt < recog_data.n_alternatives; alt++) + { + const operand_alternative *op_alt + = &recog_op_alt[alt * n_operands]; + /* Fetch the reg_class for each entry and check it against the + VPR_REG reg_class. */ + if (alternative_class (op_alt, op) != VPR_REG) + requires_vpr = false; + } + /* If all alternatives of the insn require the VPR reg for this operand, + it means that either this is VPR-generating instruction, like a vctp, + vcmp, etc., or it is a VPT-predicated insruction. Return the subrtx + of the VPR reg operand. */ + if (requires_vpr) + return recog_data.operand[op]; + } + return NULL_RTX; +} + +/* Wrapper function of arm_get_required_vpr_reg with TYPE == DL_USAGE_READ, + so return the VPR only if it is an input operand to the insn. */ + +static rtx +arm_get_required_vpr_reg_param (rtx_insn *insn) +{ + return arm_get_required_vpr_reg (insn, DL_USAGE_READ); +} + +/* Wrapper function of arm_get_required_vpr_reg with TYPE == DL_USAGE_WRITE, + so return the VPR only if it is the return value, an output of, or is + clobbered by the insn. */ + +static rtx +arm_get_required_vpr_reg_ret_val (rtx_insn *insn) +{ + return arm_get_required_vpr_reg (insn, DL_USAGE_WRITE); +} + +/* Return the first VCTP instruction in BB, if it exists, or NULL otherwise. */ + +static rtx_insn * +arm_mve_get_loop_vctp (basic_block bb) +{ + rtx_insn *insn = BB_HEAD (bb); + + /* Now scan through all the instruction patterns and pick out the VCTP + instruction. We require arm_get_required_vpr_reg_param to be false + to make sure we pick up a VCTP, rather than a VCTP_M. */ + FOR_BB_INSNS (bb, insn) + if (NONDEBUG_INSN_P (insn)) + if (arm_get_required_vpr_reg_ret_val (insn) + && (arm_mve_get_vctp_lanes (insn) != 0) + && !arm_get_required_vpr_reg_param (insn)) + return insn; + return NULL; +} + +/* Return true if INSN is a MVE instruction that is VPT-predicable and is + predicated on VPR_REG. */ + +static bool +arm_mve_insn_predicated_by (rtx_insn *insn, rtx vpr_reg) +{ + rtx insn_vpr_reg_operand = (MVE_VPT_PREDICATED_INSN_P (insn) + ? arm_get_required_vpr_reg_param (insn) + : NULL_RTX); + return (insn_vpr_reg_operand + && rtx_equal_p (vpr_reg, insn_vpr_reg_operand)); +} + +/* Utility function to identify if INSN is an MVE instruction that performs + some across lane operation (and as a result does not align with normal + lane predication rules). All such instructions give one only scalar + output, except for vshlcq which gives a PARALLEL of a vector and a scalar + (one vector result and one carry output). */ + +static bool +arm_mve_across_lane_insn_p (rtx_insn* insn) +{ + df_ref insn_defs = NULL; + if (!MVE_VPT_PREDICABLE_INSN_P (insn)) + return false; + + FOR_EACH_INSN_DEF (insn_defs, insn) + if (!VALID_MVE_MODE (GET_MODE (DF_REF_REG (insn_defs))) + && !arm_get_required_vpr_reg_ret_val (insn)) + return true; + + return false; +} + +/* Utility function to identify if INSN is an MVE load or store instruction. + * For TYPE == DL_USAGE_ANY, check all operands. If the function returns + true, INSN is a load or a store insn. + * For TYPE == DL_USAGE_READ, only check the input operands. If the + function returns true, INSN is a load insn. + * For TYPE == DL_USAGE_WRITE, only check the output operands. If the + function returns true, INSN is a store insn. */ + +static bool +arm_mve_load_store_insn_p (rtx_insn* insn, + arm_dl_usage_type type = DL_USAGE_ANY) +{ + gcc_assert (type < 3); + int n_operands = recog_data.n_operands; + extract_insn (insn); + + for (int op = 0; op < n_operands; op++) + { + if (type == DL_USAGE_READ && recog_data.operand_type[op] == OP_OUT) + continue; + else if (type == DL_USAGE_WRITE && recog_data.operand_type[op] == OP_IN) + continue; + if (mve_memory_operand (recog_data.operand[op], + GET_MODE (recog_data.operand[op]))) + return true; + } + return false; +} + +/* Return TRUE if INSN is validated for implicit predication by how its outputs + are used. + + If INSN is a MVE operation across lanes that is not predicated by + VCTP_VPR_GENERATED it can not be validated by the use of its ouputs. + + Any other INSN is safe to implicit predicate if we don't use its outputs + outside the loop. The instructions that use this INSN's outputs will be + validated as we go through the analysis. */ + +static bool +arm_mve_impl_pred_on_outputs_p (rtx_insn *insn, rtx vctp_vpr_generated) +{ + /* Reject any unpredicated across lane operation. */ + if (!arm_mve_insn_predicated_by (insn, vctp_vpr_generated) + && arm_mve_across_lane_insn_p (insn)) + return false; + + /* Next, scan forward to the various USEs of the DEFs in this insn. */ + df_ref insn_def = NULL; + basic_block insn_bb = BLOCK_FOR_INSN (insn); + FOR_EACH_INSN_DEF (insn_def, insn) + { + for (df_ref use = DF_REG_USE_CHAIN (DF_REF_REGNO (insn_def)); + use; + use = DF_REF_NEXT_REG (use)) + { + rtx_insn *next_use_insn = DF_REF_INSN (use); + if (!INSN_P (next_use_insn) || DEBUG_INSN_P (next_use_insn)) + continue; + + if (insn_bb != BLOCK_FOR_INSN (next_use_insn)) + return false; + } + } + return true; +} + + +/* Returns the prevailing definition of OP before CUR_INSN in the same + basic block as CUR_INSN, if one exists, returns NULL otherwise. */ + +static rtx_insn* +arm_last_vect_def_insn (rtx op, rtx_insn *cur_insn) +{ + if (!REG_P (op) + || !BLOCK_FOR_INSN (cur_insn)) + return NULL; + + df_ref def_insns; + rtx_insn *last_def = NULL; + for (def_insns = DF_REG_DEF_CHAIN (REGNO (op)); + def_insns; + def_insns = DF_REF_NEXT_REG (def_insns)) + { + rtx_insn *def_insn = DF_REF_INSN (def_insns); + /* Definition not in the loop body or after the current insn. */ + if (DF_REF_BB (def_insns) != BLOCK_FOR_INSN (cur_insn) + || INSN_UID (def_insn) >= INSN_UID (cur_insn)) + continue; + + if (!last_def || INSN_UID (def_insn) > INSN_UID (last_def)) + last_def = def_insn; + } + return last_def; +} + + +/* This function returns TRUE if we can validate the implicit predication of + INSN_IN with VCTP_VPR_GENERATED based on the definition of the instruction's + input operands. + + If INSN_IN is a MVE operation across lanes then all of its MVE vector + operands must have its tail-predicated lanes be zeroes. We keep track of any + instructions that define vector operands for which this is true in + PROPS_ZERO_SET. + + For any other INSN_IN, the definition of all its operands must be defined + inside the loop body by an instruction that comes before INSN_IN and not be + a MVE load predicated by a different VPR. These instructions have all been + validated for explicit or implicit predication. + */ + +static bool +arm_mve_impl_pred_on_inputs_p (vec *props_zero_set, + rtx_insn *insn_in, rtx vctp_vpr_generated) +{ + /* If all inputs come from instructions that are explicitly or + implicitly predicated by the same predicate then it is safe to + implicitly predicate this instruction. */ + df_ref insn_uses = NULL; + bool across_lane = arm_mve_across_lane_insn_p (insn_in); + FOR_EACH_INSN_USE (insn_uses, insn_in) + { + rtx op = DF_REF_REG (insn_uses); + rtx_insn *def_insn = arm_last_vect_def_insn (op, insn_in); + if (across_lane) + { + if (!VALID_MVE_MODE (GET_MODE (op))) + continue; + if (!def_insn || !props_zero_set->contains (def_insn)) + return false; + + continue; + } + + if (!def_insn + || (!arm_mve_insn_predicated_by (def_insn, vctp_vpr_generated) + && arm_mve_load_store_insn_p (def_insn, DL_USAGE_READ))) + return false; + } + + return true; +} + + +/* Determine whether INSN_IN is safe to implicitly predicate based on the type + of instruction and where needed the definition of its inputs and the uses of + its outputs. + Return TRUE if it is safe to implicitly predicate and FALSE otherwise. + + * If INSN_IN is a store, then it is always unsafe to implicitly predicate it. + * If INSN_IN is a load, only reject implicit predication if its uses + directly invalidate it. + * If INSN_IN operates across vector lanes and does not have the + "mve_safe_imp_xlane_pred" attribute, then it is always unsafe to implicitly + predicate. + * If INSN_IN operates on Floating Point elements and we are not compiling + with -Ofast, then it is unsafe to implicitly predicate it as we may be + changing exception and cumulative bits behaviour. + * If INSN_IN is a VCTP instruction, then it is safe to implicitly predicate, + but instructions that use this predicate will need to be checked + just like any other UNPREDICATED MVE instruction. + * Otherwise check if INSN_IN's inputs or uses of outputs can validate its + implicit predication. + + * If all inputs come from instructions that are explicitly or implicitly + predicated by the same predicate then it is safe to implicitly predicate + this instruction. + * If INSN_IN is an operation across lanes with the "mve_safe_imp_xlane_pred" + attribute, then all it's operands must have zeroed falsely predicated tail + lanes. + + * Otherwise, check if the implicit predication of INSN_IN can be validated + based on its inputs, and if not check whether it can be validated based on + how its outputs are used. */ + +static bool +arm_mve_impl_predicated_p (vec *props_zero_set, + rtx_insn *insn_in, rtx vctp_vpr_generated) +{ + + /* If INSN_IN is a store, then it is always unsafe to implicitly + predicate it. */ + if (arm_mve_load_store_insn_p (insn_in, DL_USAGE_WRITE)) + return false; + + /* If INSN_IN is a load, only reject implicit predication if its uses + directly invalidate it. */ + if (arm_mve_load_store_insn_p (insn_in, DL_USAGE_READ)) + { + if (!arm_mve_impl_pred_on_outputs_p (insn_in, vctp_vpr_generated)) + return false; + return true; + } + + /* If INSN_IN operates across vector lanes and does not have the + "mve_safe_imp_xlane_pred" attribute, then it is always unsafe to implicitly + predicate. */ + if (arm_mve_across_lane_insn_p (insn_in) + && (get_attr_mve_safe_imp_xlane_pred (insn_in) + != MVE_SAFE_IMP_XLANE_PRED_YES)) + return false; + + /* If INSN_IN operates on Floating Point elements and we are not compiling + with -Ofast, then it is unsafe to implicitly predicate it as we may be + changing exception and cumulative bits behaviour. */ + if (!flag_unsafe_math_optimizations + && flag_trapping_math + && MVE_VPT_UNPREDICATED_INSN_P (insn_in)) + { + df_ref def; + FOR_EACH_INSN_DEF (def, insn_in) + if (DF_REF_TYPE (def) == DF_REF_REG_DEF + && FLOAT_MODE_P (GET_MODE (DF_REF_REG (def)))) + return false; + FOR_EACH_INSN_USE (def, insn_in) + if (DF_REF_TYPE (def) == DF_REF_REG_DEF + && FLOAT_MODE_P (GET_MODE (DF_REF_REG (def)))) + return false; + } + + /* If INSN_IN is a VCTP instruction, then it is safe to implicitly predicate, + but instructions that use this predicate will need to be checked + just like any other UNPREDICATED MVE instruction. */ + if (arm_get_required_vpr_reg_ret_val (insn_in) + && (arm_mve_get_vctp_lanes (insn_in) != 0)) + return true; + + /* Otherwise, check if the implicit predication of INSN_IN can be validated + based on its inputs, and if not check whether it can be validated based on + how its outputs are used. */ + return (arm_mve_impl_pred_on_inputs_p (props_zero_set, insn_in, vctp_vpr_generated) + || arm_mve_impl_pred_on_outputs_p (insn_in, vctp_vpr_generated)); +} + +/* Helper function to `arm_mve_dlstp_check_inc_counter` and to + `arm_mve_dlstp_check_dec_counter`. In the situations where the loop counter + is incrementing by 1 or decrementing by 1 in each iteration, ensure that the + number of iterations, the value of REG, going into the loop, was calculated + as: + REG = (N + [1, VCTP_STEP - 1]) / VCTP_STEP + + where N is equivalent to the VCTP_REG. +*/ + +static bool +arm_mve_check_reg_origin_is_num_elems (loop *loop, rtx reg, rtx vctp_step, + rtx vctp_reg) +{ + df_ref counter_max_last_def = NULL; + + /* More than one reaching definition. */ + if (DF_REG_DEF_COUNT (REGNO (reg)) > 2) + return false; + + /* Look for a single defition of REG going into the loop. The DEF_CHAIN will + have at least two values, as this is a loop induction variable that is + defined outside the loop. */ + for (df_ref def = DF_REG_DEF_CHAIN (REGNO (reg)); + def; + def = DF_REF_NEXT_REG (def)) + { + /* Skip the update inside the loop, this has already been checked by the + iv_analyze call earlier. */ + if (DF_REF_BB (def) == loop->header) + continue; + + counter_max_last_def = def; + break; + } + + if (!counter_max_last_def) + return false; + + rtx counter_max_last_set = single_set (DF_REF_INSN (counter_max_last_def)); + + if (!counter_max_last_set) + return false; + + /* If we encounter a simple SET from a REG, follow it through. */ + if (REG_P (SET_SRC (counter_max_last_set))) + { + if (DF_REG_DEF_COUNT (REGNO (SET_SRC (counter_max_last_set))) != 1) + return false; + + counter_max_last_def + = DF_REG_DEF_CHAIN (REGNO (SET_SRC (counter_max_last_set))); + counter_max_last_set + = single_set (DF_REF_INSN (counter_max_last_def)); + + if (!counter_max_last_set) + return false; + } + + /* We are looking for: + COUNTER_MAX_LAST_SET = (N + VCTP_STEP - 1) / VCTP_STEP. + We currently only support the unsigned VCTP_OP case. */ + rtx division = SET_SRC (counter_max_last_set); + if (GET_CODE (division) != LSHIFTRT) + return false; + + /* Now check that we are dividing by VCTP_STEP, i.e. the number of lanes. */ + rtx divisor = XEXP (division, 1); + unsigned vctp_step_cst = abs_hwi (INTVAL (vctp_step)); + if (!CONST_INT_P (divisor) + || (1U << INTVAL (divisor) != vctp_step_cst)) + return false; + + rtx dividend = XEXP (division, 0); + if (!REG_P (dividend)) + /* Subreg? */ + return false; + + /* For now only support the simple case, this only works for unsigned N, any + signed N will have further computations to deal with overflow. */ + if (DF_REG_DEF_COUNT (REGNO (dividend)) != 1) + return false; + + rtx_insn *dividend_insn = DF_REF_INSN (DF_REG_DEF_CHAIN (REGNO (dividend))); + rtx dividend_op = single_set (dividend_insn); + if (!dividend_op + && GET_CODE (SET_SRC (dividend_op)) != PLUS) + return false; + + /* Check if PLUS_OP is (VCTP_OP + VAL), where VAL = [1, VCTP_STEP - 1]. */ + rtx plus_op = SET_SRC (dividend_op); + if (!REG_P (XEXP (plus_op, 0)) + || !CONST_INT_P (XEXP (plus_op, 1)) + || !IN_RANGE (INTVAL (XEXP (plus_op, 1)), 1, vctp_step_cst - 1)) + return false; + + /* VCTP_REG may have been copied before entering the loop, let's see if we can + trace such a copy back. If we have more than one reaching definition then + bail out as analysis will be too difficult. */ + if (DF_REG_DEF_COUNT (REGNO (vctp_reg)) > 2) + return false; + + /* Look for the definition of N. */ + for (df_ref def = DF_REG_DEF_CHAIN (REGNO (vctp_reg)); + def; + def = DF_REF_NEXT_REG (def)) + { + if (DF_REF_BB (def) == loop->header) + continue; + rtx set = single_set (DF_REF_INSN (def)); + if (set + && REG_P (SET_SRC (set)) + && !HARD_REGISTER_P (SET_SRC (set))) + vctp_reg = SET_SRC (set); + } + + return rtx_equal_p (vctp_reg, XEXP (plus_op, 0)); +} + +/* If we have identified the loop to have an incrementing counter, we need to + make sure that it increments by 1 and that the loop is structured correctly: + * The counter starts from 0 + * The counter terminates at (num_of_elem + num_of_lanes - 1) / num_of_lanes + * The vctp insn uses a reg that decrements appropriately in each iteration. +*/ + +static rtx_insn* +arm_mve_dlstp_check_inc_counter (loop *loop, rtx_insn* vctp_insn, + rtx condconst, rtx condcount) +{ + rtx vctp_reg = XVECEXP (XEXP (PATTERN (vctp_insn), 1), 0, 0); + /* The loop latch has to be empty. When compiling all the known MVE LoLs in + user applications, none of those with incrementing counters had any real + insns in the loop latch. As such, this function has only been tested with + an empty latch and may misbehave or ICE if we somehow get here with an + increment in the latch, so, for correctness, error out early. */ + if (!empty_block_p (loop->latch)) + return NULL; + + class rtx_iv vctp_reg_iv; + /* For loops of DLSTP_TYPE_B, the loop counter is independent of the decrement + of the reg used in the vctp_insn. So run iv analysis on that reg. This + has to succeed for such loops to be supported. */ + if (!iv_analyze (vctp_insn, as_a (GET_MODE (vctp_reg)), + vctp_reg, &vctp_reg_iv)) + return NULL; + + /* Extract the decrementnum of the vctp reg from the iv. This decrementnum + is the number of lanes/elements it decrements from the remaining number of + lanes/elements to process in the loop, for this reason this is always a + negative number, but to simplify later checks we use it's absolute value. */ + HOST_WIDE_INT decrementnum = INTVAL (vctp_reg_iv.step); + if (decrementnum >= 0) + return NULL; + decrementnum = abs_hwi (decrementnum); + + /* Find where both of those are modified in the loop header bb. */ + df_ref condcount_reg_set_df = df_bb_regno_only_def_find (loop->header, + REGNO (condcount)); + df_ref vctp_reg_set_df = df_bb_regno_only_def_find (loop->header, + REGNO (vctp_reg)); + if (!condcount_reg_set_df || !vctp_reg_set_df) + return NULL; + rtx condcount_reg_set = single_set (DF_REF_INSN (condcount_reg_set_df)); + rtx vctp_reg_set = single_set (DF_REF_INSN (vctp_reg_set_df)); + if (!condcount_reg_set || !vctp_reg_set) + return NULL; + + /* Ensure the modification of the vctp reg from df is consistent with + the iv and the number of lanes on the vctp insn. */ + if (GET_CODE (SET_SRC (vctp_reg_set)) != PLUS + || !REG_P (SET_DEST (vctp_reg_set)) + || !REG_P (XEXP (SET_SRC (vctp_reg_set), 0)) + || REGNO (SET_DEST (vctp_reg_set)) + != REGNO (XEXP (SET_SRC (vctp_reg_set), 0)) + || !CONST_INT_P (XEXP (SET_SRC (vctp_reg_set), 1)) + || INTVAL (XEXP (SET_SRC (vctp_reg_set), 1)) >= 0 + || decrementnum != abs_hwi (INTVAL (XEXP (SET_SRC (vctp_reg_set), 1))) + || decrementnum != arm_mve_get_vctp_lanes (vctp_insn)) + return NULL; + + if (REG_P (condcount) && REG_P (condconst)) + { + /* First we need to prove that the loop is going 0..condconst with an + inc of 1 in each iteration. */ + if (GET_CODE (SET_SRC (condcount_reg_set)) == PLUS + && CONST_INT_P (XEXP (SET_SRC (condcount_reg_set), 1)) + && INTVAL (XEXP (SET_SRC (condcount_reg_set), 1)) == 1) + { + rtx counter_reg = SET_DEST (condcount_reg_set); + /* Check that the counter did indeed start from zero. */ + df_ref this_set = DF_REG_DEF_CHAIN (REGNO (counter_reg)); + if (!this_set) + return NULL; + df_ref last_set_def = DF_REF_NEXT_REG (this_set); + if (!last_set_def) + return NULL; + rtx_insn* last_set_insn = DF_REF_INSN (last_set_def); + rtx last_set = single_set (last_set_insn); + if (!last_set) + return NULL; + rtx counter_orig_set; + counter_orig_set = SET_SRC (last_set); + if (!CONST_INT_P (counter_orig_set) + || (INTVAL (counter_orig_set) != 0)) + return NULL; + /* And finally check that the target value of the counter, + condconst, is of the correct shape. */ + if (!arm_mve_check_reg_origin_is_num_elems (loop, condconst, + vctp_reg_iv.step, + vctp_reg)) + return NULL; + } + else + return NULL; + } + else + return NULL; + + /* Everything looks valid. */ + return vctp_insn; +} + +/* Helper function to `arm_mve_loop_valid_for_dlstp`. In the case of a + counter that is decrementing, ensure that it is decrementing by the + right amount in each iteration and that the target condition is what + we expect. */ + +static rtx_insn* +arm_mve_dlstp_check_dec_counter (loop *loop, rtx_insn* vctp_insn, + rtx condconst, rtx condcount) +{ + rtx vctp_reg = XVECEXP (XEXP (PATTERN (vctp_insn), 1), 0, 0); + class rtx_iv vctp_reg_iv; + HOST_WIDE_INT decrementnum; + /* For decrementing loops of DLSTP_TYPE_A, the counter is usually present in the + loop latch. Here we simply need to verify that this counter is the same + reg that is also used in the vctp_insn and that it is not otherwise + modified. */ + rtx_insn *dec_insn = BB_END (loop->latch); + /* If not in the loop latch, try to find the decrement in the loop header. */ + if (!NONDEBUG_INSN_P (dec_insn)) + { + df_ref temp = df_bb_regno_only_def_find (loop->header, REGNO (condcount)); + /* If we haven't been able to find the decrement, bail out. */ + if (!temp) + return NULL; + dec_insn = DF_REF_INSN (temp); + } + + rtx dec_set = single_set (dec_insn); + + /* Next, ensure that it is a PLUS of the form: + (set (reg a) (plus (reg a) (const_int))) + where (reg a) is the same as condcount. */ + if (!dec_set + || !REG_P (SET_DEST (dec_set)) + || !REG_P (XEXP (SET_SRC (dec_set), 0)) + || !CONST_INT_P (XEXP (SET_SRC (dec_set), 1)) + || REGNO (SET_DEST (dec_set)) + != REGNO (XEXP (SET_SRC (dec_set), 0)) + || REGNO (SET_DEST (dec_set)) != REGNO (condcount)) + return NULL; + + decrementnum = INTVAL (XEXP (SET_SRC (dec_set), 1)); + + /* This decrementnum is the number of lanes/elements it decrements from the + remaining number of lanes/elements to process in the loop, for this reason + this is always a negative number, but to simplify later checks we use its + absolute value. */ + if (decrementnum >= 0) + return NULL; + decrementnum = -decrementnum; + + /* If the decrementnum is a 1, then we need to look at the loop vctp_reg and + verify that it also decrements correctly. + Then, we need to establish that the starting value of the loop decrement + originates from the starting value of the vctp decrement. */ + if (decrementnum == 1) + { + class rtx_iv vctp_reg_iv, condcount_reg_iv; + /* The loop counter is found to be independent of the decrement + of the reg used in the vctp_insn, again. Ensure that IV analysis + succeeds and check the step. */ + if (!iv_analyze (vctp_insn, as_a (GET_MODE (vctp_reg)), + vctp_reg, &vctp_reg_iv)) + return NULL; + /* Ensure it matches the number of lanes of the vctp instruction. */ + if (abs (INTVAL (vctp_reg_iv.step)) + != arm_mve_get_vctp_lanes (vctp_insn)) + return NULL; + + if (!arm_mve_check_reg_origin_is_num_elems (loop, condcount, + vctp_reg_iv.step, + vctp_reg)) + return NULL; + } + /* If the decrements are the same, then the situation is simple: either they + are also the same reg, which is safe, or they are different registers, in + which case makse sure that there is a only simple SET from one to the + other inside the loop.*/ + else if (decrementnum == arm_mve_get_vctp_lanes (vctp_insn)) + { + if (REGNO (condcount) != REGNO (vctp_reg)) + { + /* It wasn't the same reg, but it could be behild a + (set (vctp_reg) (condcount)), so instead find where + the VCTP insn is DEF'd inside the loop. */ + rtx_insn *vctp_reg_insn + = DF_REF_INSN (df_bb_regno_only_def_find (loop->header, + REGNO (vctp_reg))); + rtx vctp_reg_set = single_set (vctp_reg_insn); + /* This must just be a simple SET from the condcount. */ + if (!vctp_reg_set + || !REG_P (SET_DEST (vctp_reg_set)) + || !REG_P (SET_SRC (vctp_reg_set)) + || REGNO (SET_SRC (vctp_reg_set)) != REGNO (condcount)) + return NULL; + } + } + else + return NULL; + + /* We now only need to find out that the loop terminates with a LE + zero condition. If condconst is a const_int, then this is easy. + If its a REG, look at the last condition+jump in a bb before + the loop, because that usually will have a branch jumping over + the loop header. */ + rtx_insn *jump_insn = BB_END (loop->header); + if (CONST_INT_P (condconst) + && !(INTVAL (condconst) == 0 && JUMP_P (jump_insn) + && GET_CODE (XEXP (PATTERN (jump_insn), 1)) == IF_THEN_ELSE + && (GET_CODE (XEXP (XEXP (PATTERN (jump_insn), 1), 0)) == NE + ||GET_CODE (XEXP (XEXP (PATTERN (jump_insn), 1), 0)) == GT))) + return NULL; + else if (REG_P (condconst)) + { + basic_block pre_loop_bb = single_pred (loop_preheader_edge (loop)->src); + if (!pre_loop_bb) + return NULL; + + rtx initial_compare = NULL_RTX; + if (!(prev_nonnote_nondebug_insn_bb (BB_END (pre_loop_bb)) + && INSN_P (prev_nonnote_nondebug_insn_bb (BB_END (pre_loop_bb))))) + return NULL; + else + initial_compare + = single_set (prev_nonnote_nondebug_insn_bb (BB_END (pre_loop_bb))); + if (!(initial_compare + && cc_register (SET_DEST (initial_compare), VOIDmode) + && GET_CODE (SET_SRC (initial_compare)) == COMPARE + && CONST_INT_P (XEXP (SET_SRC (initial_compare), 1)) + && INTVAL (XEXP (SET_SRC (initial_compare), 1)) == 0)) + return NULL; + + /* Usually this is a LE condition, but it can also just be a GT or an EQ + condition (if the value is unsigned or the compiler knows its not negative) */ + rtx_insn *loop_jumpover = BB_END (pre_loop_bb); + if (!(JUMP_P (loop_jumpover) + && GET_CODE (XEXP (PATTERN (loop_jumpover), 1)) == IF_THEN_ELSE + && (GET_CODE (XEXP (XEXP (PATTERN (loop_jumpover), 1), 0)) == LE + || GET_CODE (XEXP (XEXP (PATTERN (loop_jumpover), 1), 0)) == GT + || GET_CODE (XEXP (XEXP (PATTERN (loop_jumpover), 1), 0)) == EQ))) + return NULL; + } + + /* Everything looks valid. */ + return vctp_insn; +} + +/* Function to check a loop's structure to see if it is a valid candidate for + an MVE Tail Predicated Low-Overhead Loop. Returns the loop's VCTP_INSN if + it is valid, or NULL if it isn't. */ + +static rtx_insn* +arm_mve_loop_valid_for_dlstp (loop *loop) +{ + /* Doloop can only be done "elementwise" with predicated dlstp/letp if it + contains a VCTP on the number of elements processed by the loop. + Find the VCTP predicate generation inside the loop body BB. */ + rtx_insn *vctp_insn = arm_mve_get_loop_vctp (loop->header); + if (!vctp_insn) + return NULL; + + /* We only support two loop forms for tail predication: + DLSTP_TYPE_A) Loops of the form: + int num_of_lanes = 128 / elem_size; + while (num_of_elem > 0) + { + p = vctp (num_of_elem); + num_of_elem -= num_of_lanes; + } + DLSTP_TYPE_B) Loops of the form: + int num_of_lanes = 128 / elem_size; + int num_of_iters = (num_of_elem + num_of_lanes - 1) / num_of_lanes; + for (i = 0; i < num_of_iters; i++) + { + p = vctp (num_of_elem); + num_of_elem -= num_of_lanes; + } + + Then, depending on the type of loop above we need will need to do + different sets of checks. */ + iv_analysis_loop_init (loop); + + /* In order to find out if the loop is of DLSTP_TYPE_A or DLSTP_TYPE_B above + look for the loop counter: it will either be incrementing by one per + iteration or it will be decrementing by num_of_lanes. We can find the + loop counter in the condition at the end of the loop. */ + rtx_insn *loop_cond = prev_nonnote_nondebug_insn_bb (BB_END (loop->header)); + if (!(cc_register (XEXP (PATTERN (loop_cond), 0), VOIDmode) + && GET_CODE (XEXP (PATTERN (loop_cond), 1)) == COMPARE)) + return NULL; + + /* The operands in the condition: Try to identify which one is the + constant and which is the counter and run IV analysis on the latter. */ + rtx cond_arg_1 = XEXP (XEXP (PATTERN (loop_cond), 1), 0); + rtx cond_arg_2 = XEXP (XEXP (PATTERN (loop_cond), 1), 1); + + rtx loop_cond_constant; + rtx loop_counter; + class rtx_iv cond_counter_iv, cond_temp_iv; + + if (CONST_INT_P (cond_arg_1)) + { + /* cond_arg_1 is the constant and cond_arg_2 is the counter. */ + loop_cond_constant = cond_arg_1; + loop_counter = cond_arg_2; + iv_analyze (loop_cond, as_a (GET_MODE (cond_arg_2)), + cond_arg_2, &cond_counter_iv); + } + else if (CONST_INT_P (cond_arg_2)) + { + /* cond_arg_2 is the constant and cond_arg_1 is the counter. */ + loop_cond_constant = cond_arg_2; + loop_counter = cond_arg_1; + iv_analyze (loop_cond, as_a (GET_MODE (cond_arg_1)), + cond_arg_1, &cond_counter_iv); + } + else if (REG_P (cond_arg_1) && REG_P (cond_arg_2)) + { + /* If both operands to the compare are REGs, we can safely + run IV analysis on both and then determine which is the + constant by looking at the step. + First assume cond_arg_1 is the counter. */ + loop_counter = cond_arg_1; + loop_cond_constant = cond_arg_2; + iv_analyze (loop_cond, as_a (GET_MODE (cond_arg_1)), + cond_arg_1, &cond_counter_iv); + iv_analyze (loop_cond, as_a (GET_MODE (cond_arg_2)), + cond_arg_2, &cond_temp_iv); + + /* Look at the steps and swap around the rtx's if needed. Error out if + one of them cannot be identified as constant. */ + if (!CONST_INT_P (cond_counter_iv.step) || !CONST_INT_P (cond_temp_iv.step)) + return NULL; + if (INTVAL (cond_counter_iv.step) != 0 && INTVAL (cond_temp_iv.step) != 0) + return NULL; + if (INTVAL (cond_counter_iv.step) == 0 && INTVAL (cond_temp_iv.step) != 0) + { + loop_counter = cond_arg_2; + loop_cond_constant = cond_arg_1; + cond_counter_iv = cond_temp_iv; + } + } + else + return NULL; + + if (!REG_P (loop_counter)) + return NULL; + if (!(REG_P (loop_cond_constant) || CONST_INT_P (loop_cond_constant))) + return NULL; + + /* Now we have extracted the IV step of the loop counter, call the + appropriate checking function. */ + if (INTVAL (cond_counter_iv.step) > 0) + return arm_mve_dlstp_check_inc_counter (loop, vctp_insn, + loop_cond_constant, loop_counter); + else if (INTVAL (cond_counter_iv.step) < 0) + return arm_mve_dlstp_check_dec_counter (loop, vctp_insn, + loop_cond_constant, loop_counter); + else + return NULL; +} + +/* Predict whether the given loop in gimple will be transformed in the RTL + doloop_optimize pass. It could be argued that turning large enough loops + into low-overhead loops would not show a signficant performance boost. + However, in the case of tail predication we would still avoid using VPT/VPST + instructions inside the loop, and in either case using low-overhead loops + would not be detrimental, so we decided to not consider size, avoiding the + need of a heuristic to determine what an appropriate size boundary is. */ + +static bool +arm_predict_doloop_p (struct loop *loop) +{ + gcc_assert (loop); + /* On arm, targetm.can_use_doloop_p is actually + can_use_doloop_if_innermost. Ensure the loop is innermost, + it is valid and as per arm_target_bb_ok_for_lob and the + correct architecture flags are enabled. */ + if (!(TARGET_HAVE_LOB && optimize > 0)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Predict doloop failure due to" + " target architecture or optimisation flags.\n"); + return false; + } + else if (loop->inner != NULL) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Predict doloop failure due to" + " loop nesting.\n"); + return false; + } + else if (!arm_target_bb_ok_for_lob (loop->header->next_bb)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Predict doloop failure due to" + " loop bb complexity.\n"); + return false; + } + + return true; +} + +/* Implement targetm.loop_unroll_adjust. Use this to block unrolling of loops + that may later be turned into MVE Tail Predicated Low Overhead Loops. The + performance benefit of an MVE LoL is likely to be much higher than that of + the unrolling. */ + +unsigned +arm_loop_unroll_adjust (unsigned nunroll, struct loop *loop) +{ + if (TARGET_HAVE_MVE + && arm_target_bb_ok_for_lob (loop->latch) + && arm_mve_loop_valid_for_dlstp (loop)) + return 0; + else + return nunroll; +} + +/* Function to hadle emitting a VPT-unpredicated version of a VPT-predicated + insn to a sequence. */ + +static bool +arm_emit_mve_unpredicated_insn_to_seq (rtx_insn* insn) +{ + rtx insn_vpr_reg_operand = arm_get_required_vpr_reg_param (insn); + int new_icode = get_attr_mve_unpredicated_insn (insn); + if (!in_sequence_p () + || !MVE_VPT_PREDICATED_INSN_P (insn) + || (!insn_vpr_reg_operand) + || (!new_icode)) + return false; + + extract_insn (insn); + rtx arr[8]; + int j = 0; + + /* When transforming a VPT-predicated instruction into its unpredicated + equivalent we need to drop the VPR operand and we may need to also drop a + merge "vuninit" input operand, depending on the instruction pattern. Here + ensure that we have at most a two-operand difference between the two + instrunctions. */ + int n_operands_diff + = recog_data.n_operands - insn_data[new_icode].n_operands; + if (!(n_operands_diff > 0 && n_operands_diff <= 2)) + return false; + + rtx move = NULL_RTX; + /* Then, loop through the operands of the predicated + instruction, and retain the ones that map to the + unpredicated instruction. */ + for (int i = 0; i < recog_data.n_operands; i++) + { + /* Ignore the VPR and, if needed, the vuninit + operand. */ + if (insn_vpr_reg_operand == recog_data.operand[i]) + continue; + if (n_operands_diff == 2 + && !strcmp (recog_data.constraints[i], "0")) + { + move = gen_rtx_SET (arr[0], recog_data.operand[i]); + arr[0] = recog_data.operand[i]; + } + else + arr[j++] = recog_data.operand[i]; + } + + /* Finally, emit the upredicated instruction. */ + rtx_insn *new_insn; + switch (j) + { + case 1: + new_insn = emit_insn (GEN_FCN (new_icode) (arr[0])); + break; + case 2: + new_insn = emit_insn (GEN_FCN (new_icode) (arr[0], arr[1])); + break; + case 3: + new_insn = emit_insn (GEN_FCN (new_icode) (arr[0], arr[1], arr[2])); + break; + case 4: + new_insn = emit_insn (GEN_FCN (new_icode) (arr[0], arr[1], arr[2], + arr[3])); + break; + case 5: + new_insn = emit_insn (GEN_FCN (new_icode) (arr[0], arr[1], arr[2], + arr[3], arr[4])); + break; + case 6: + new_insn = emit_insn (GEN_FCN (new_icode) (arr[0], arr[1], arr[2], + arr[3], arr[4], arr[5])); + break; + case 7: + new_insn = emit_insn (GEN_FCN (new_icode) (arr[0], arr[1], arr[2], + arr[3], arr[4], arr[5], + arr[6])); + break; + default: + gcc_unreachable (); + } + INSN_LOCATION (new_insn) = INSN_LOCATION (insn); + if (move) + { + new_insn = emit_insn (move); + INSN_LOCATION (new_insn) = INSN_LOCATION (insn); + } + return true; +} + +/* Return TRUE if INSN defines a MVE vector operand that has zeroed + tail-predicated lanes. This is either true if: + * INSN is predicated by VCTP_VPR_GENERATED and the 'invalid lanes' operand + is in the PROPS_ZERO_SET, + * all MVE vector operands are in the PROPS_ZERO_SET +*/ + +static bool +arm_mve_propagate_zero_pred_p (vec *props_zero_set, + rtx_insn *insn, rtx vctp_vpr_generated) +{ + if (arm_mve_load_store_insn_p (insn, DL_USAGE_READ)) + return true; + if (arm_mve_load_store_insn_p (insn, DL_USAGE_WRITE)) + return false; + + int inactive_idx = -1; + + extract_insn (insn); + /* If INSN is predicated by VCTP_VPR_GENERATED, then all tail-predicated + lanes will keep the value that is in the 'invalid lanes' register which we + identify by the "0" constraint, to ensure it is the same as the 'result' + register of this instruction. */ + if (arm_mve_insn_predicated_by (insn, vctp_vpr_generated)) + { + for (int i = 0; i < recog_data.n_operands; i++) + { + if (strcmp (recog_data.constraints[i], "0") == 0 + && VALID_MVE_MODE (GET_MODE (recog_data.operand[i]))) + { + inactive_idx = i; + break; + } + } + } + + if (inactive_idx > 0) + { + rtx op = recog_data.operand[inactive_idx]; + rtx_insn *def_insn = arm_last_vect_def_insn (op, insn); + return def_insn != NULL_RTX && props_zero_set->contains (def_insn); + } + + /* If this instruction is not predicated by VCTP_VPR_GENERATED, then we must + check that all vector operands have zeroed tail-predicated lanes, and that + it has at least one vector operand. */ + bool at_least_one_vector = false; + df_ref insn_uses; + FOR_EACH_INSN_USE (insn_uses, insn) + { + rtx reg = DF_REF_REG (insn_uses); + if (!VALID_MVE_MODE (GET_MODE (reg))) + continue; + + rtx_insn *def_insn = arm_last_vect_def_insn (reg, insn); + if (def_insn && props_zero_set->contains (def_insn)) + at_least_one_vector |= true; + else + return false; + + } + return at_least_one_vector; +} + + +/* Attempt to transform the loop contents of loop basic block from VPT + predicated insns into unpredicated insns for a dlstp/letp loop. Returns + the number to decrement from the total number of elements each iteration. + Returns 1 if tail predication can not be performed and fallback to scalar + low-overhead loops. */ + +int +arm_attempt_dlstp_transform (rtx label) +{ + if (!dlstp_enabled) + return 1; + + basic_block body = single_succ (BLOCK_FOR_INSN (label)); + + /* Ensure that the bb is within a loop that has all required metadata. */ + if (!body->loop_father || !body->loop_father->header + || !body->loop_father->simple_loop_desc) + return 1; + + loop *loop = body->loop_father; + /* Instruction that sets the predicate mask depending on how many elements + are left to process. */ + rtx_insn *vctp_insn = arm_mve_loop_valid_for_dlstp (loop); + if (!vctp_insn) + return 1; + + gcc_assert (single_set (vctp_insn)); + + rtx vctp_vpr_generated = single_set (vctp_insn); + if (!vctp_vpr_generated) + return 1; + + vctp_vpr_generated = SET_DEST (vctp_vpr_generated); + + if (!vctp_vpr_generated || !REG_P (vctp_vpr_generated) + || !VALID_MVE_PRED_MODE (GET_MODE (vctp_vpr_generated))) + return 1; + + /* decrementunum is already known to be valid at this point. */ + int decrementnum = arm_mve_get_vctp_lanes (vctp_insn); + + rtx_insn *insn = 0; + rtx_insn *cur_insn = 0; + rtx_insn *seq; + auto_vec props_zero_set; + + /* Scan through the insns in the loop bb and emit the transformed bb + insns to a sequence. */ + start_sequence (); + FOR_BB_INSNS (body, insn) + { + if (GET_CODE (insn) == CODE_LABEL || NOTE_INSN_BASIC_BLOCK_P (insn)) + continue; + else if (NOTE_P (insn)) + emit_note ((enum insn_note)NOTE_KIND (insn)); + else if (DEBUG_INSN_P (insn)) + emit_debug_insn (PATTERN (insn)); + else if (!INSN_P (insn)) + { + end_sequence (); + return 1; + } + /* If the transformation is successful we no longer need the vctp + instruction. */ + else if (insn == vctp_insn) + continue; + /* If the insn pattern requires the use of the VPR value from the + vctp as an input parameter for predication. */ + else if (arm_mve_insn_predicated_by (insn, vctp_vpr_generated)) + { + /* Check whether this INSN propagates the zeroed tail-predication + lanes. */ + if (arm_mve_propagate_zero_pred_p (&props_zero_set, insn, + vctp_vpr_generated)) + props_zero_set.safe_push (insn); + bool success = arm_emit_mve_unpredicated_insn_to_seq (insn); + if (!success) + { + end_sequence (); + return 1; + } + } + /* If the insn isn't VPT predicated on vctp_vpr_generated, we need to + make sure that it is still valid within the dlstp/letp loop. */ + else + { + /* If this instruction USE-s the vctp_vpr_generated other than for + predication, this blocks the transformation as we are not allowed + to optimise the VPR value away. */ + df_ref insn_uses = NULL; + FOR_EACH_INSN_USE (insn_uses, insn) + { + if (rtx_equal_p (vctp_vpr_generated, DF_REF_REG (insn_uses))) + { + end_sequence (); + return 1; + } + } + /* If within the loop we have an MVE vector instruction that is + unpredicated, the dlstp/letp looping will add implicit + predication to it. This will result in a change in behaviour + of the instruction, so we need to find out if any instructions + that feed into the current instruction were implicitly + predicated. */ + if (MVE_VPT_PREDICABLE_INSN_P (insn) + && !arm_mve_impl_predicated_p (&props_zero_set, insn, + vctp_vpr_generated)) + { + end_sequence (); + return 1; + } + emit_insn (PATTERN (insn)); + } + } + seq = get_insns (); + end_sequence (); + + /* Re-write the entire BB contents with the transformed + sequence. */ + FOR_BB_INSNS_SAFE (body, insn, cur_insn) + if (!(GET_CODE (insn) == CODE_LABEL || NOTE_INSN_BASIC_BLOCK_P (insn))) + delete_insn (insn); + + emit_insn_after (seq, BB_END (body)); + + /* The transformation has succeeded, so now modify the "count" + (a.k.a. niter_expr) for the middle-end. Also set noloop_assumptions + to NULL to stop the middle-end from making assumptions about the + number of iterations. */ + simple_loop_desc (body->loop_father)->niter_expr + = XVECEXP (SET_SRC (PATTERN (vctp_insn)), 0, 0); + simple_loop_desc (body->loop_father)->noloop_assumptions = NULL_RTX; + return decrementnum; } #if CHECKING_P diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt index 0cd3fc2cd0cc6..d88c7a52e7591 100644 --- a/gcc/config/arm/arm.opt +++ b/gcc/config/arm/arm.opt @@ -363,5 +363,8 @@ Target Joined RejectNegative String Var(arm_stack_protector_guard_offset_str) Use an immediate to offset from the TLS register. This option is for use with fstack-protector-guard=tls and not for use in user-land code. +mdlstp +Target Var(dlstp_enabled) Init(1) Undocumented + TargetVariable long arm_stack_protector_guard_offset = 0 diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 8d066fcf05df6..987602da1bf5f 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -2686,6 +2686,17 @@ (define_int_attr mrrc [(VUNSPEC_MRRC "mrrc") (VUNSPEC_MRRC2 "mrrc2")]) (define_int_attr MRRC [(VUNSPEC_MRRC "MRRC") (VUNSPEC_MRRC2 "MRRC2")]) +(define_int_attr dlstp_elemsize [(DLSTP8 "8") (DLSTP16 "16") (DLSTP32 "32") + (DLSTP64 "64")]) + +(define_int_attr letp_num_lanes [(LETP8 "16") (LETP16 "8") (LETP32 "4") + (LETP64 "2")]) +(define_int_attr letp_num_lanes_neg [(LETP8 "-16") (LETP16 "-8") (LETP32 "-4") + (LETP64 "-2")]) + +(define_int_attr letp_num_lanes_minus_1 [(LETP8 "15") (LETP16 "7") (LETP32 "3") + (LETP64 "1")]) + (define_int_attr opsuffix [(UNSPEC_DOT_S "s8") (UNSPEC_DOT_U "u8") (UNSPEC_DOT_US "s8") @@ -2926,6 +2937,10 @@ (define_int_iterator VSHLCQ_M [VSHLCQ_M_S VSHLCQ_M_U]) (define_int_iterator VQSHLUQ_M_N [VQSHLUQ_M_N_S]) (define_int_iterator VQSHLUQ_N [VQSHLUQ_N_S]) +(define_int_iterator DLSTP [DLSTP8 DLSTP16 DLSTP32 + DLSTP64]) +(define_int_iterator LETP [LETP8 LETP16 LETP32 + LETP64]) ;; Define iterators for VCMLA operations (define_int_iterator VCMLA_OP [UNSPEC_VCMLA diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 9fe51298cdc2b..4b4d6298ffb18 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -6930,3 +6930,53 @@ } } ) + +;; Originally expanded by 'predicated_doloop_end'. +;; In the rare situation where the branch is too far, we do also need to +;; revert FPSCR.LTPSIZE back to 0x100 after the last iteration. +(define_insn "predicated_doloop_end_internal" + [(set (pc) + (if_then_else + (gtu (plus:SI (reg:SI LR_REGNUM) + (const_int )) + (const_int )) + (match_operand 0 "" "") + (pc))) + (set (reg:SI LR_REGNUM) + (plus:SI (reg:SI LR_REGNUM) (const_int ))) + ;; We use UNSPEC here to guarantee this pattern can not be + ;; generated by a RTL optimization and be matched by other + ;; patterns, since this pattern is also responsible for turning off + ;; the tail predication machinery if we were to exit the loop. + ;; This is done by either the LETP or the LCTP instructions that + ;; this pattern generates. + (use (unspec:SI [(const_int 0)] LETP)) + (clobber (reg:CC CC_REGNUM))] + "TARGET_HAVE_MVE" + { + if (get_attr_length (insn) == 4) + return "letp\t%|lr, %l0"; + else + return "subs\t%|lr, #\n\tbhi\t%l0\n\tlctp"; + } + [(set (attr "length") + (if_then_else + (ltu (minus (pc) (match_dup 0)) (const_int 1024)) + (const_int 4) + (const_int 12))) + (set_attr "type" "branch") + (set_attr "conds" "unconditional")]) + +(define_insn "dlstp_insn" + [ + (set (reg:SI LR_REGNUM) +;; Similar to the previous pattern, we use UNSPEC here to make sure this +;; rtx construct is not matched by other patterns, as this pattern is also +;; responsible for setting the element size of the tail predication machinery +;; using the dlsp. instruction. + (unspec_volatile:SI [(match_operand:SI 0 "s_register_operand" "r")] + DLSTP)) + ] + "TARGET_HAVE_MVE" + "dlstp.\t%|lr, %0" + [(set_attr "type" "mve_misc")]) diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md index 84c9c3dfe8009..66b3ae6040c0c 100644 --- a/gcc/config/arm/thumb2.md +++ b/gcc/config/arm/thumb2.md @@ -1613,7 +1613,7 @@ (use (match_operand 1 "" ""))] ; label "TARGET_32BIT" " - { +{ /* Currently SMS relies on the do-loop pattern to recognize loops where (1) the control part consists of all insns defining and/or using a certain 'count' register and (2) the loop count can be @@ -1623,41 +1623,75 @@ Also used to implement the low over head loops feature, which is part of the Armv8.1-M Mainline Low Overhead Branch (LOB) extension. */ - if (optimize > 0 && (flag_modulo_sched || TARGET_HAVE_LOB)) - { - rtx s0; - rtx bcomp; - rtx loc_ref; - rtx cc_reg; - rtx insn; - rtx cmp; - - if (GET_MODE (operands[0]) != SImode) - FAIL; - - s0 = operands [0]; - - /* Low over head loop instructions require the first operand to be LR. */ - if (TARGET_HAVE_LOB && arm_target_insn_ok_for_lob (operands [1])) - s0 = gen_rtx_REG (SImode, LR_REGNUM); - - if (TARGET_THUMB2) - insn = emit_insn (gen_thumb2_addsi3_compare0 (s0, s0, GEN_INT (-1))); - else - insn = emit_insn (gen_addsi3_compare0 (s0, s0, GEN_INT (-1))); - - cmp = XVECEXP (PATTERN (insn), 0, 0); - cc_reg = SET_DEST (cmp); - bcomp = gen_rtx_NE (VOIDmode, cc_reg, const0_rtx); - loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands [1]); - emit_jump_insn (gen_rtx_SET (pc_rtx, - gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp, - loc_ref, pc_rtx))); - DONE; - } - else - FAIL; - }") + if (optimize > 0 && (flag_modulo_sched || TARGET_HAVE_LOB)) + { + rtx s0; + rtx bcomp; + rtx loc_ref; + rtx cc_reg; + rtx insn; + rtx cmp; + int decrement_num; + + if (GET_MODE (operands[0]) != SImode) + FAIL; + + s0 = operands[0]; + + if (TARGET_HAVE_LOB + && arm_target_bb_ok_for_lob (BLOCK_FOR_INSN (operands[1]))) + { + /* If we have a compatible MVE target, try and analyse the loop + contents to determine if we can use predicated dlstp/letp + looping. These patterns implicitly use LR as the loop counter. */ + if (TARGET_HAVE_MVE + && ((decrement_num = arm_attempt_dlstp_transform (operands[1])) + != 1)) + { + loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[1]); + switch (decrement_num) + { + case 2: + insn = gen_predicated_doloop_end_internal2 (loc_ref); + break; + case 4: + insn = gen_predicated_doloop_end_internal4 (loc_ref); + break; + case 8: + insn = gen_predicated_doloop_end_internal8 (loc_ref); + break; + case 16: + insn = gen_predicated_doloop_end_internal16 (loc_ref); + break; + default: + gcc_unreachable (); + } + emit_jump_insn (insn); + DONE; + } + /* Remaining LOB cases need to explicitly use LR. */ + s0 = gen_rtx_REG (SImode, LR_REGNUM); + } + + /* Otherwise, try standard decrement-by-one dls/le looping. */ + if (TARGET_THUMB2) + insn = emit_insn (gen_thumb2_addsi3_compare0 (s0, s0, + GEN_INT (-1))); + else + insn = emit_insn (gen_addsi3_compare0 (s0, s0, GEN_INT (-1))); + + cmp = XVECEXP (PATTERN (insn), 0, 0); + cc_reg = SET_DEST (cmp); + bcomp = gen_rtx_NE (VOIDmode, cc_reg, const0_rtx); + loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[1]); + emit_jump_insn (gen_rtx_SET (pc_rtx, + gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp, + loc_ref, pc_rtx))); + DONE; + } + else + FAIL; +}") (define_insn "*clear_apsr" [(unspec_volatile:SI [(const_int 0)] VUNSPEC_CLRM_APSR) @@ -1755,7 +1789,37 @@ { if (REGNO (operands[0]) == LR_REGNUM) { - emit_insn (gen_dls_insn (operands[0])); + /* Pick out the number by which we are decrementing the loop counter + in every iteration. If it's > 1, then use dlstp. */ + int const_int_dec_num + = abs (INTVAL (XEXP (XEXP (XVECEXP (PATTERN (operands[1]), 0, 1), + 1), + 1))); + switch (const_int_dec_num) + { + case 16: + emit_insn (gen_dlstp8_insn (operands[0])); + break; + + case 8: + emit_insn (gen_dlstp16_insn (operands[0])); + break; + + case 4: + emit_insn (gen_dlstp32_insn (operands[0])); + break; + + case 2: + emit_insn (gen_dlstp64_insn (operands[0])); + break; + + case 1: + emit_insn (gen_dls_insn (operands[0])); + break; + + default: + gcc_unreachable (); + } DONE; } else diff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md index e2b70da1001f2..9527bdb9e87e7 100644 --- a/gcc/config/arm/types.md +++ b/gcc/config/arm/types.md @@ -574,6 +574,7 @@ ; mve_move ; mve_store ; mve_load +; mve_misc (define_attr "type" "adc_imm,\ @@ -1126,7 +1127,8 @@ ls64,\ mve_move,\ mve_store,\ - mve_load" + mve_load, \ + mve_misc" (cond [(eq_attr "autodetect_type" "alu_shift_lsr_op2,alu_shift_asr_op2") (const_string "alu_shift_imm_other") (eq_attr "autodetect_type" "alu_shift_lsl_op2") @@ -1292,7 +1294,7 @@ ;; No otherwise. (define_attr "is_mve_type" "yes,no" (if_then_else (eq_attr "type" - "mve_move, mve_load, mve_store, mrs") + "mve_move, mve_load, mve_store, mrs, mve_misc") (const_string "yes") (const_string "no"))) diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md index 46ac8b3715740..f5f4d1543645b 100644 --- a/gcc/config/arm/unspecs.md +++ b/gcc/config/arm/unspecs.md @@ -591,6 +591,10 @@ VADDLVQ_U VCTP VCTP_M + LETP8 + LETP16 + LETP32 + LETP64 VPNOT VCREATEQ_F VCVTQ_N_TO_F_S @@ -1259,6 +1263,14 @@ UQRSHLL_48 SQRSHRL_64 SQRSHRL_48 - VSHLCQ_M_ REINTERPRET ]) + +; DLSTP unspecs must be volatile to guarantee the scheduler does not reschedule +; these instructions within the loop preheader. +(define_c_enum "unspecv" [ + DLSTP8 + DLSTP16 + DLSTP32 + DLSTP64 +]) diff --git a/gcc/testsuite/gcc.target/arm/lob.h b/gcc/testsuite/gcc.target/arm/lob.h index feaae7cc89959..3941fe7a8b620 100644 --- a/gcc/testsuite/gcc.target/arm/lob.h +++ b/gcc/testsuite/gcc.target/arm/lob.h @@ -1,15 +1,131 @@ #include - +#include /* Common code for lob tests. */ #define NO_LOB asm volatile ("@ clobber lr" : : : "lr" ) -#define N 10000 +#define N 100 + +static void +reset_data (int *a, int *b, int *c, int x) +{ + memset (a, -1, x * sizeof (*a)); + memset (b, -1, x * sizeof (*b)); + memset (c, 0, x * sizeof (*c)); +} + +static void +reset_data8 (int8_t *a, int8_t *b, int8_t *c, int x) +{ + memset (a, -1, x * sizeof (*a)); + memset (b, -1, x * sizeof (*b)); + memset (c, 0, x * sizeof (*c)); +} + +static void +reset_data16 (int16_t *a, int16_t *b, int16_t *c, int x) +{ + memset (a, -1, x * sizeof (*a)); + memset (b, -1, x * sizeof (*b)); + memset (c, 0, x * sizeof (*c)); +} + +static void +reset_data32 (int32_t *a, int32_t *b, int32_t *c, int x) +{ + memset (a, -1, x * sizeof (*a)); + memset (b, -1, x * sizeof (*b)); + memset (c, 0, x * sizeof (*c)); +} + +static void +reset_data64 (int64_t *a, int64_t *c, int x) +{ + memset (a, -1, x * sizeof (*a)); + memset (c, 0, x * sizeof (*c)); +} + +static void +check_plus (int *a, int *b, int *c, int x) +{ + for (int i = 0; i < N; i++) + { + NO_LOB; + if (i < x) + { + if (c[i] != (a[i] + b[i])) abort (); + } + else + { + if (c[i] != 0) abort (); + } + } +} + +static void +check_plus8 (int8_t *a, int8_t *b, int8_t *c, int x) +{ + for (int i = 0; i < N; i++) + { + NO_LOB; + if (i < x) + { + if (c[i] != (a[i] + b[i])) abort (); + } + else + { + if (c[i] != 0) abort (); + } + } +} + +static void +check_plus16 (int16_t *a, int16_t *b, int16_t *c, int x) +{ + for (int i = 0; i < N; i++) + { + NO_LOB; + if (i < x) + { + if (c[i] != (a[i] + b[i])) abort (); + } + else + { + if (c[i] != 0) abort (); + } + } +} + +static void +check_plus32 (int32_t *a, int32_t *b, int32_t *c, int x) +{ + for (int i = 0; i < N; i++) + { + NO_LOB; + if (i < x) + { + if (c[i] != (a[i] + b[i])) abort (); + } + else + { + if (c[i] != 0) abort (); + } + } +} static void -reset_data (int *a, int *b, int *c) +check_memcpy64 (int64_t *a, int64_t *c, int x) { - memset (a, -1, N * sizeof (*a)); - memset (b, -1, N * sizeof (*b)); - memset (c, -1, N * sizeof (*c)); + for (int i = 0; i < N; i++) + { + NO_LOB; + if (i < x) + { + if (c[i] != a[i]) abort (); + } + else + { + if (c[i] != 0) abort (); + } + } } diff --git a/gcc/testsuite/gcc.target/arm/lob1.c b/gcc/testsuite/gcc.target/arm/lob1.c index ba5c82cd55c58..c8ce653a5c39f 100644 --- a/gcc/testsuite/gcc.target/arm/lob1.c +++ b/gcc/testsuite/gcc.target/arm/lob1.c @@ -54,29 +54,18 @@ loop3 (int *a, int *b, int *c) } while (i < N); } -void -check (int *a, int *b, int *c) -{ - for (int i = 0; i < N; i++) - { - NO_LOB; - if (c[i] != a[i] + b[i]) - abort (); - } -} - int main (void) { - reset_data (a, b, c); + reset_data (a, b, c, N); loop1 (a, b ,c); - check (a, b ,c); - reset_data (a, b, c); + check_plus (a, b, c, N); + reset_data (a, b, c, N); loop2 (a, b ,c); - check (a, b ,c); - reset_data (a, b, c); + check_plus (a, b, c, N); + reset_data (a, b, c, N); loop3 (a, b ,c); - check (a, b ,c); + check_plus (a, b, c, N); return 0; } diff --git a/gcc/testsuite/gcc.target/arm/lob6.c b/gcc/testsuite/gcc.target/arm/lob6.c index 17b6124295e8a..4fe116e2c2be3 100644 --- a/gcc/testsuite/gcc.target/arm/lob6.c +++ b/gcc/testsuite/gcc.target/arm/lob6.c @@ -79,14 +79,14 @@ check (void) int main (void) { - reset_data (a1, b1, c1); - reset_data (a2, b2, c2); + reset_data (a1, b1, c1, N); + reset_data (a2, b2, c2, N); loop1 (a1, b1, c1); ref1 (a2, b2, c2); check (); - reset_data (a1, b1, c1); - reset_data (a2, b2, c2); + reset_data (a1, b1, c1, N); + reset_data (a2, b2, c2, N); loop2 (a1, b1, c1); ref2 (a2, b2, c2); check (); diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-1.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-1.c new file mode 100644 index 0000000000000..6e6da3d3d596b --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-1.c @@ -0,0 +1,146 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O3 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include + +#define IMM 5 + +#define TEST_COMPILE_IN_DLSTP_TERNARY(BITS, LANES, LDRSTRYTPE, TYPE, SIGN, NAME, PRED) \ +void test_##NAME##PRED##_##SIGN##BITS (TYPE##BITS##_t *a, TYPE##BITS##_t *b, TYPE##BITS##_t *c, int n) \ +{ \ + while (n > 0) \ + { \ + mve_pred16_t p = vctp##BITS##q (n); \ + TYPE##BITS##x##LANES##_t va = vldr##LDRSTRYTPE##q_z_##SIGN##BITS (a, p); \ + TYPE##BITS##x##LANES##_t vb = vldr##LDRSTRYTPE##q_z_##SIGN##BITS (b, p); \ + TYPE##BITS##x##LANES##_t vc = NAME##PRED##_##SIGN##BITS (va, vb, p); \ + vstr##LDRSTRYTPE##q_p_##SIGN##BITS (c, vc, p); \ + c += LANES; \ + a += LANES; \ + b += LANES; \ + n -= LANES; \ + } \ +} + +#define TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY(BITS, LANES, LDRSTRYTPE, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY (BITS, LANES, LDRSTRYTPE, int, s, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY (BITS, LANES, LDRSTRYTPE, uint, u, NAME, PRED) + +#define TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY(NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY (8, 16, b, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY (16, 8, h, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY (32, 4, w, NAME, PRED) + + +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY (vaddq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY (vmulq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY (vsubq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY (vhaddq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY (vorrq, _x) + + +#define TEST_COMPILE_IN_DLSTP_TERNARY_M(BITS, LANES, LDRSTRYTPE, TYPE, SIGN, NAME, PRED) \ +void test_##NAME##PRED##_##SIGN##BITS (TYPE##BITS##x##LANES##_t __inactive, TYPE##BITS##_t *a, TYPE##BITS##_t *b, TYPE##BITS##_t *c, int n) \ +{ \ + while (n > 0) \ + { \ + mve_pred16_t p = vctp##BITS##q (n); \ + TYPE##BITS##x##LANES##_t va = vldr##LDRSTRYTPE##q_z_##SIGN##BITS (a, p); \ + TYPE##BITS##x##LANES##_t vb = vldr##LDRSTRYTPE##q_z_##SIGN##BITS (b, p); \ + TYPE##BITS##x##LANES##_t vc = NAME##PRED##_##SIGN##BITS (__inactive, va, vb, p); \ + vstr##LDRSTRYTPE##q_p_##SIGN##BITS (c, vc, p); \ + c += LANES; \ + a += LANES; \ + b += LANES; \ + n -= LANES; \ + } \ +} + +#define TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M(BITS, LANES, LDRSTRYTPE, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY_M (BITS, LANES, LDRSTRYTPE, int, s, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY_M (BITS, LANES, LDRSTRYTPE, uint, u, NAME, PRED) + +#define TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M(NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M (8, 16, b, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M (16, 8, h, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M (32, 4, w, NAME, PRED) + + +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M (vaddq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M (vmulq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M (vsubq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M (vhaddq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M (vorrq, _m) + +#define TEST_COMPILE_IN_DLSTP_TERNARY_N(BITS, LANES, LDRSTRYTPE, TYPE, SIGN, NAME, PRED) \ +void test_##NAME##PRED##_n_##SIGN##BITS (TYPE##BITS##_t *a, TYPE##BITS##_t *c, int n) \ +{ \ + while (n > 0) \ + { \ + mve_pred16_t p = vctp##BITS##q (n); \ + TYPE##BITS##x##LANES##_t va = vldr##LDRSTRYTPE##q_z_##SIGN##BITS (a, p); \ + TYPE##BITS##x##LANES##_t vc = NAME##PRED##_n_##SIGN##BITS (va, IMM, p); \ + vstr##LDRSTRYTPE##q_p_##SIGN##BITS (c, vc, p); \ + c += LANES; \ + a += LANES; \ + n -= LANES; \ + } \ +} + +#define TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_N(BITS, LANES, LDRSTRYTPE, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY_N (BITS, LANES, LDRSTRYTPE, int, s, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY_N (BITS, LANES, LDRSTRYTPE, uint, u, NAME, PRED) + +#define TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N(NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_N (8, 16, b, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_N (16, 8, h, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_N (32, 4, w, NAME, PRED) + +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N (vaddq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N (vmulq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N (vsubq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N (vhaddq, _x) + +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N (vbrsrq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N (vshlq, _x) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_N (vshrq, _x) + +#define TEST_COMPILE_IN_DLSTP_TERNARY_M_N(BITS, LANES, LDRSTRYTPE, TYPE, SIGN, NAME, PRED) \ +void test_##NAME##PRED##_n_##SIGN##BITS (TYPE##BITS##x##LANES##_t __inactive, TYPE##BITS##_t *a, TYPE##BITS##_t *c, int n) \ +{ \ + while (n > 0) \ + { \ + mve_pred16_t p = vctp##BITS##q (n); \ + TYPE##BITS##x##LANES##_t va = vldr##LDRSTRYTPE##q_z_##SIGN##BITS (a, p); \ + TYPE##BITS##x##LANES##_t vc = NAME##PRED##_n_##SIGN##BITS (__inactive, va, IMM, p); \ + vstr##LDRSTRYTPE##q_p_##SIGN##BITS (c, vc, p); \ + c += LANES; \ + a += LANES; \ + n -= LANES; \ + } \ +} + +#define TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M_N(BITS, LANES, LDRSTRYTPE, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY_M_N (BITS, LANES, LDRSTRYTPE, int, s, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_TERNARY_M_N (BITS, LANES, LDRSTRYTPE, uint, u, NAME, PRED) + +#define TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N(NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M_N (8, 16, b, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M_N (16, 8, h, NAME, PRED) \ +TEST_COMPILE_IN_DLSTP_SIGNED_UNSIGNED_TERNARY_M_N (32, 4, w, NAME, PRED) + +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N (vaddq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N (vmulq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N (vsubq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N (vhaddq, _m) + +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N (vbrsrq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N (vshlq, _m) +TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY_M_N (vshrq, _m) + +/* The final number of DLSTPs currently is calculated by the number of + `TEST_COMPILE_IN_DLSTP_INTBITS_SIGNED_UNSIGNED_TERNARY.*` macros * 6. */ +/* { dg-final { scan-assembler-times {\tdlstp} 144 } } */ +/* { dg-final { scan-assembler-times {\tletp} 144 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c new file mode 100644 index 0000000000000..84f4a2fc4f9bc --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c @@ -0,0 +1,749 @@ + +/* { dg-do compile { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O3 -save-temps -fno-schedule-insns2 " } */ +/* { dg-add-options arm_v8_1m_mve } */ +/* { dg-additional-options "-mtune=cortex-m55" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#include +/* Using a >=1 condition. */ +void test1 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n >= 1) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c+=4; + a+=4; + b+=4; + n-=4; + } +} +/* +** test1: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vldrw.32 q[0-9]+, \[r1\], #16 +** vadd.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Test a for loop format of decrementing to zero */ +int32_t a[] = {0, 1, 2, 3, 4, 5, 6, 7}; +void test2 (int32_t *b, int num_elems) +{ + for (int i = num_elems; i > 0; i-= 4) + { + mve_pred16_t p = vctp32q (i); + int32x4_t va = vldrwq_z_s32 (&(a[i]), p); + vstrwq_p_s32 (b + i, va, p); + } +} +/* +** test2: +**... +** dlstp.32 lr, r1 +**... +** vldrw.32 (q[0-9]+), \[r3\], #-16 +** vstrw.32 \1, \[r0\], #-16 +** letp lr, .* +**... +*/ + +/* Iteration counter counting up to num_iter. */ +void test3 (uint8_t *a, uint8_t *b, uint8_t *c, unsigned n) +{ + int num_iter = (n + 15)/16; + for (int i = 0; i < num_iter; i++) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + n-=16; + a += 16; + b += 16; + c += 16; + } +} + +/* +** test3: +**... +** dlstp.8 lr, r3 +**... +** vldrb.8 q[0-9]+, \[(r[0-9]+|ip)\] +** vldrb.8 q[0-9]+, \[(r[0-9]+|ip)\] +**... +** vadd.i8 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrb.8 \3, \[(r[0-9]+|ip)\] +**... +** letp lr, .* +**... +*/ + +/* Iteration counter counting down from num_iter. */ +void test4 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + int num_iter = (n + 15)/16; + for (int i = num_iter; i > 0; i--) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + n-=16; + a += 16; + b += 16; + c += 16; + } +} +/* +** test4: +**... +** dlstp.8 lr, r3 +**... +** vldrb.8 q[0-9]+, \[(r[0-9]+|ip)\] +** vldrb.8 q[0-9]+, \[(r[0-9]+|ip)\] +**... +** vadd.i8 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrb.8 \3, \[(r[0-9]+|ip)\] +**... +** letp lr, .* +**... +*/ + +/* Using an unpredicated arithmetic instruction within the loop. */ +void test5 (uint8_t *a, uint8_t *b, uint8_t *c, uint8_t *d, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_u8 (b); + /* Is affected by implicit predication, because vb also + came from an unpredicated load, but there is no functional + problem, because the result is used in a predicated store. */ + uint8x16_t vc = vaddq_u8 (va, vb); + uint8x16_t vd = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + vstrbq_p_u8 (d, vd, p); + n-=16; + a += 16; + b += 16; + c += 16; + } +} + +/* +** test5: +**... +** dlstp.8 lr, r[0-9]+ +**... +** vldrb.8 q[0-9]+, \[r1\] +** vldrb.8 q[0-9]+, \[r2\] +**... +** vadd.i8 (q[0-9]+), q[0-9]+, q[0-9]+ +**... +** vstrb.8 \1, \[r2\] +** vstrb.8 \1, \[r3\] +** letp lr, .* +**... +*/ + +/* Using a different VPR value for one instruction in the loop. */ +void test6 (int32_t *a, int32_t *b, int32_t *c, int n, mve_pred16_t p1) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p1); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* +** test6: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vpst +** vldrwt.32 q[0-9]+, \[r1\], #16 +** vadd.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Generating and using another VPR value in the loop, with a vctp. + The doloop logic will always try to do the transform on the first + vctp it encounters, so this is still expected to work. */ +void test7 (int32_t *a, int32_t *b, int32_t *c, int n, int g) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + mve_pred16_t p1 = vctp32q (g); + int32x4_t vb = vldrwq_z_s32 (b, p1); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} +/* +** test7: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vpst +** vldrwt.32 q[0-9]+, \[r1\], #16 +** vadd.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Generating and using a different VPR value in the loop, with a vctp, + but this time the p1 will also change in every loop (still fine) */ +void test8 (int32_t *a, int32_t *b, int32_t *c, int n, int g) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + mve_pred16_t p1 = vctp32q (g); + int32x4_t vb = vldrwq_z_s32 (b, p1); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + g++; + } +} + +/* +** test8: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vctp.32 r4 +** vpst +** vldrwt.32 q[0-9]+, \[r1\], #16 +**... +** vadd.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Generating and using a different VPR value in the loop, with a vctp_m + that is independent of the loop vctp VPR. */ +void test9 (int32_t *a, int32_t *b, int32_t *c, int n, mve_pred16_t p1) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + mve_pred16_t p2 = vctp32q_m (n, p1); + int32x4_t vb = vldrwq_z_s32 (b, p1); + int32x4_t vc = vaddq_x_s32 (va, vb, p2); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* +** test9: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vmsr p0, (r[0-9]+) @ movhi +** vpst +** vctpt.32 r3 +** vmrs (r[0-9]+), p0 @ movhi +** vmsr p0, \1 @ movhi +** vpst +** vldrwt.32 q[0-9]+, \[r1\], #16 +** vmsr p0, \2 @ movhi +** vpst +** vaddt.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +**... +** vstrw.32 \3, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Generating and using a different VPR value in the loop, + with a vctp_m that is tied to the base vctp VPR. This + is still fine, because the vctp_m will be transformed + into a vctp and be implicitly predicated. */ +void test10 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + mve_pred16_t p1 = vctp32q_m (n, p); + int32x4_t vb = vldrwq_z_s32 (b, p1); + int32x4_t vc = vaddq_x_s32 (va, vb, p1); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} +/* + We don't need that extra vctp in the loop, but we currently do not optimize + it away, however, it is not wrong to use it... +*/ +/* +** test10: +**... +** dlstp.32 lr, r3 +** vctp.32 r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +**... +** vpst +** vldrwt.32 q[0-9]+, \[r1\], #16 +** vpst +** vaddt.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Generating and using a different VPR value in the loop, with a vcmp. */ +void test11 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + mve_pred16_t p1 = vcmpeqq_s32 (va, vb); + int32x4_t vc = vaddq_x_s32 (va, vb, p1); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* +** test11: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vldrw.32 q[0-9]+, \[r1\], #16 +** vcmp.i32 eq, q[0-9]+, q[0-9]+ +** vpst +** vaddt.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Generating and using a different VPR value in the loop, with a vcmp_m. */ +void test12 (int32_t *a, int32_t *b, int32_t *c, int n, mve_pred16_t p1) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + mve_pred16_t p2 = vcmpeqq_m_s32 (va, vb, p1); + int32x4_t vc = vaddq_x_s32 (va, vb, p2); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* +** test12: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vldrw.32 q[0-9]+, \[r1\], #16 +** vmsr p0, (r[0-9]+|ip) @ movhi +** vpst +** vcmpt.i32 eq, q[0-9]+, q[0-9]+ +** vpst +** vaddt.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \2, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Generating and using a different VPR value in the loop, with a vcmp_m + that is tied to the base vctp VPR (same as above, this will be turned + into a vcmp and be implicitly predicated). */ +void test13 (int32_t *a, int32_t *b, int32_t *c, int n, mve_pred16_t p1) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + mve_pred16_t p2 = vcmpeqq_m_s32 (va, vb, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p2); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* +** test13: +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vldrw.32 q[0-9]+, \[r1\], #16 +** vcmp.i32 eq, q[0-9]+, q[0-9]+ +** vpst +** vaddt.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + +/* Similar to test27 in dsltp-invalid-asm.c, but use a predicated load to make + it safe to implicitly predicate the vaddv. */ +void test14 (int32_t *a, int32_t *c, int n) +{ + int32_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + res += vaddvq_s32 (va); + int32x4_t vc = vdupq_n_s32 (res); + vstrwq_p_s32 (c, vc, p); + a += 4; + n -= 4; + } +} + +/* +** test14: +**... +** dlstp.32 lr, r2 +** vldrw.32 (q[0-9]+), \[r0\], #16 +** vaddv.s32 (r[0-9]+|ip), \1 +** add (r[0-9]+|ip), \3, \2 +** vdup.32 (q[0-9]+), \3 +** vstrw.32 \4, \[r1\] +** letp lr, .* +**... +*/ + +uint8_t test15 (uint8_t *a, uint8_t *b, int n) +{ + uint8_t res = 0; + uint8x16_t vc = vdupq_n_u8 (0); + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_u8 (b); + vc = vaddq_m (vc, va, vc, p); + res = vgetq_lane (vc, 5); + + a += 16; + b += 16; + n -= 16; + } + return res; +} + +/* +** test15: +**... +** dlstp.8 lr, r2 +**... +** vldrb.8 q[0-9]+, \[(r[0-9]+|ip)\] +**... +** vadd.i8 (q[0-9]+), q[0-9]+, q[0-9]+ +**... +** letp lr, .* +** vmov.u8 r[0-9]+, \2\[5\] +**... +*/ + +uint8_t test16 (uint8_t *a, uint8_t *b, int n) +{ + uint8_t res = 0; + uint8x16_t vc = vdupq_n_u8 (0); + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_u8 (b); + vc = vaddq (va, vc); + vc = vaddq_m (vc, va, vc, p); + res = vgetq_lane (vc, 5); + + a += 16; + b += 16; + n -= 16; + } + return res; +} + +/* +** test16: +**... +** dlstp.8 lr, r2 +**... +** vldrb.8 q[0-9]+, \[(r[0-9]+|ip)\] +**... +** vadd.i8 (q[0-9]+), q[0-9]+, q[0-9]+ +** vadd.i8 \2, q[0-9]+, q[0-9]+ +** letp lr, .* +** vmov.u8 r[0-9]+, \2\[5\] +**... +*/ + + + +/* Using an across-vector unpredicated instruction in a valid way. + This tests that "vc" has correctly masked the risky "vb". */ +uint16_t test18 (uint16_t *a, uint16_t *b, uint16_t *c, int n) +{ + uint16x8_t vb = vldrhq_u16 (b); + uint16_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + uint16x8_t va = vldrhq_z_u16 (a, p); + uint16x8_t vc = vaddq_m_u16 (va, va, vb, p); + res += vaddvq_u16 (vc); + c += 8; + a += 8; + b += 8; + n -= 8; + } + return res; +} + +/* +** test18: +**... +** dlstp.16 lr, r3 +** vldrh.16 (q[0-9]+), \[r2\], #16 +** vadd.i16 \1, q[0-9]+, q[0-9]+ +** vaddv.u16 (r[0-9]+|ip), \1 +** add (r[0-9]+|ip), \3, \2 +** uxth \3, \3 +** letp lr, .* +**... +*/ + +/* Using an across-vector unpredicated instruction with implicit scalar adding from outside the loop. */ +uint16_t test19 (uint16_t *a, uint16_t *b, uint16_t *c, int n) +{ + uint16x8_t vb = vldrhq_u16 (b); + uint16_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + uint16x8_t va = vldrhq_z_u16 (a, p); + uint16x8_t vc = vaddq_m_u16 (va, va, vb, p); + res = vaddvaq_u16 (res, vc); + c += 8; + a += 8; + b += 8; + n -= 8; + } + return res; +} + +/* +** test19: +**... +** dlstp.16 lr, r3 +** vldrh.16 (q[0-9]+), \[r2\], #16 +** vadd.i16 \1, q[0-9]+, q[0-9]+ +** vaddva.u16 (r[0-9]+|ip), \1 +** uxth \2, \2 +** letp lr, .* +**... +*/ + + +/* Using an across-vector predicated instruction in a valid way. */ +uint16_t test20 (uint16_t *a, uint16_t *b, uint16_t *c, int n) +{ + uint16_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + uint16x8_t va = vldrhq_u16 (a); + res = vaddvaq_p_u16 (res, va, p); + c += 8; + a += 8; + b += 8; + n -= 8; + } + return res; +} + +/* The uxth could be moved outside the loop. */ +/* +** test20: +**... +** dlstp.16 lr, r3 +** vldrh.16 (q[0-9]+), \[r2\], #16 +** vaddva.u16 (r[0-9]+|ip), \1 +** uxth \2, \2 +** letp lr, .* +**... +*/ + +/* Using an across-vector predicated instruction in a valid way. */ +uint16_t test21 (uint16_t *a, uint16_t *b, uint16_t *c, int n) +{ + uint16_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + uint16x8_t va = vldrhq_u16 (a); + res++; + res = vaddvaq_p_u16 (res, va, p); + c += 8; + a += 8; + b += 8; + n -= 8; + } + return res; +} + +/* Also think it'd be safe to move uxth outside of the loop here. */ +/* +** test21: +**... +** dlstp.16 lr, r3 +** vldrh.16 (q[0-9]+), \[r2\], #16 +** adds (r[0-9]+|ip), \2, #1 +** uxth \2, \2 +** vaddva.u16 \2, \1 +** uxth \2, \2 +** letp lr, .* +**... +*/ + +int test22 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + int res = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + res = vmaxvq (res, va); + n-=16; + a+=16; + } + return res; +} + +/* +** test22: +**... +** dlstp.8 lr, r3 +**... +** vldrb.8 (q[0-9]+), \[r[0-9]+\] +**... +** vmaxv.u8 (r[0-9]+|ip), \1 +** uxtb \2, \2 +** letp lr, .* +**... +*/ + +int test23 (int8_t *a, int8_t *b, int8_t *c, int n) +{ + int res = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + int8x16_t va = vldrbq_z_s8 (a, p); + res = vmaxavq (res, va); + n-=16; + a+=16; + } + return res; +} + +/* +** test23: +**... +** dlstp.8 lr, r3 +**... +** vldrb.8 (q[0-9]+), \[r3\] +**... +** vmaxav.s8 (r[0-9]+|ip), \1 +** uxtb \2, \2 +** letp lr, .* +**... +*/ + +/* Like test1, but update n before vctp, meaning we should only iterate for n-4 + elements. */ +void test24 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n >= 1) + { + n-=4; + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c+=4; + a+=4; + b+=4; + } +} +/* +** test24: +**... +** subs r3, r3, #4 +**... +** dlstp.32 lr, r3 +** vldrw.32 q[0-9]+, \[r0\], #16 +** vldrw.32 q[0-9]+, \[r1\], #16 +** vadd.i32 (q[0-9]+), q[0-9]+, q[0-9]+ +** vstrw.32 \1, \[r2\], #16 +** letp lr, .* +**... +*/ + diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-3.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-3.c new file mode 100644 index 0000000000000..c784f54013177 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-3.c @@ -0,0 +1,46 @@ + +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O3 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include + +/* We don't support pattern recognition of signed N values when computing num_iter. */ +void test3 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + int num_iter = (n + 15)/16; + for (int i = 0; i < num_iter; i++) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + n-=16; + a += 16; + b += 16; + c += 16; + } +} + +/* Using a predicated vcmp to generate a new predicate value in the + loop and then using it in a predicated store insn. */ +void test17 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_s32 (va, vb); + mve_pred16_t p1 = vcmpeqq_m_s32 (va, vc, p); + vstrwq_p_s32 (c, vc, p1); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} +/* This is an example of a loop that we could tail predicate but currently don't. */ +/* { dg-final { scan-assembler "letp" { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8-run.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8-run.c new file mode 100644 index 0000000000000..6966a3966046f --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8-run.c @@ -0,0 +1,44 @@ +/* { dg-do run { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-require-effective-target arm_mve_hw } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ +#include "dlstp-int16x8.c" + +int main () +{ + int i; + int16_t temp1[N]; + int16_t temp2[N]; + int16_t temp3[N]; + reset_data16 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 0); + check_plus16 (temp1, temp2, temp3, 0); + + reset_data16 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 1); + check_plus16 (temp1, temp2, temp3, 1); + + reset_data16 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 7); + check_plus16 (temp1, temp2, temp3, 7); + + reset_data16 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 8); + check_plus16 (temp1, temp2, temp3, 8); + + reset_data16 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 9); + check_plus16 (temp1, temp2, temp3, 9); + + reset_data16 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 16); + check_plus16 (temp1, temp2, temp3, 16); + + reset_data16 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 17); + check_plus16 (temp1, temp2, temp3, 17); + + reset_data16 (temp1, temp2, temp3, N); +} + diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8.c new file mode 100644 index 0000000000000..33632c5f14dc6 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int16x8.c @@ -0,0 +1,31 @@ +/* { dg-do compile { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include +#include +#include +#include "../lob.h" + +void __attribute__ ((noinline)) test (int16_t *a, int16_t *b, int16_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + int16x8_t va = vldrhq_z_s16 (a, p); + int16x8_t vb = vldrhq_z_s16 (b, p); + int16x8_t vc = vaddq_x_s16 (va, vb, p); + vstrhq_p_s16 (c, vc, p); + c+=8; + a+=8; + b+=8; + n-=8; + } +} + +/* { dg-final { scan-assembler-times {\tdlstp.16} 1 } } */ +/* { dg-final { scan-assembler-times {\tletp} 1 } } */ +/* { dg-final { scan-assembler-not "\tvctp" } } */ +/* { dg-final { scan-assembler-not "\tvpst" } } */ +/* { dg-final { scan-assembler-not "p0" } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4-run.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4-run.c new file mode 100644 index 0000000000000..6833dddde92b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4-run.c @@ -0,0 +1,45 @@ +/* { dg-do run { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-require-effective-target arm_mve_hw } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include "dlstp-int32x4.c" + +int main () +{ + int i; + int32_t temp1[N]; + int32_t temp2[N]; + int32_t temp3[N]; + reset_data32 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 0); + check_plus32 (temp1, temp2, temp3, 0); + + reset_data32 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 1); + check_plus32 (temp1, temp2, temp3, 1); + + reset_data32 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 3); + check_plus32 (temp1, temp2, temp3, 3); + + reset_data32 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 4); + check_plus32 (temp1, temp2, temp3, 4); + + reset_data32 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 5); + check_plus32 (temp1, temp2, temp3, 5); + + reset_data32 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 8); + check_plus32 (temp1, temp2, temp3, 8); + + reset_data32 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 9); + check_plus32 (temp1, temp2, temp3, 9); + + reset_data32 (temp1, temp2, temp3, N); +} + diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4.c new file mode 100644 index 0000000000000..5d09f784b7716 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int32x4.c @@ -0,0 +1,31 @@ +/* { dg-do compile { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include +#include +#include +#include "../lob.h" + +void __attribute__ ((noinline)) test (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c+=4; + a+=4; + b+=4; + n-=4; + } +} + +/* { dg-final { scan-assembler-times {\tdlstp.32} 1 } } */ +/* { dg-final { scan-assembler-times {\tletp} 1 } } */ +/* { dg-final { scan-assembler-not "\tvctp" } } */ +/* { dg-final { scan-assembler-not "\tvpst" } } */ +/* { dg-final { scan-assembler-not "p0" } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2-run.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2-run.c new file mode 100644 index 0000000000000..cc0b9ce7ee9a5 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2-run.c @@ -0,0 +1,48 @@ +/* { dg-do run { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-require-effective-target arm_mve_hw } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include "dlstp-int64x2.c" + +int main () +{ + int i; + int64_t temp1[N]; + int64_t temp3[N]; + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 0); + check_memcpy64 (temp1, temp3, 0); + + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 1); + check_memcpy64 (temp1, temp3, 1); + + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 2); + check_memcpy64 (temp1, temp3, 2); + + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 3); + check_memcpy64 (temp1, temp3, 3); + + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 4); + check_memcpy64 (temp1, temp3, 4); + + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 5); + check_memcpy64 (temp1, temp3, 5); + + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 6); + check_memcpy64 (temp1, temp3, 6); + + reset_data64 (temp1, temp3, N); + test (temp1, temp3, 7); + check_memcpy64 (temp1, temp3, 7); + + reset_data64 (temp1, temp3, N); +} + diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2.c new file mode 100644 index 0000000000000..21e882424ec3b --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int64x2.c @@ -0,0 +1,28 @@ +/* { dg-do compile { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include +#include +#include +#include "../lob.h" + +void __attribute__ ((noinline)) test (int64_t *a, int64_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp64q (n); + int64x2_t va = vldrdq_gather_offset_z_s64 (a, vcreateq_u64 (0, 8), p); + vstrdq_scatter_offset_p_s64 (c, vcreateq_u64 (0, 8), va, p); + c+=2; + a+=2; + n-=2; + } +} + +/* { dg-final { scan-assembler-times {\tdlstp.64} 1 } } */ +/* { dg-final { scan-assembler-times {\tletp} 1 } } */ +/* { dg-final { scan-assembler-not "\tvctp" } } */ +/* { dg-final { scan-assembler-not "\tvpst" } } */ +/* { dg-final { scan-assembler-not "p0" } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16-run.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16-run.c new file mode 100644 index 0000000000000..d46571f329cf3 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16-run.c @@ -0,0 +1,44 @@ +/* { dg-do run { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-require-effective-target arm_mve_hw } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include "dlstp-int8x16.c" + +int main () +{ + int i; + int8_t temp1[N]; + int8_t temp2[N]; + int8_t temp3[N]; + reset_data8 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 0); + check_plus8 (temp1, temp2, temp3, 0); + + reset_data8 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 1); + check_plus8 (temp1, temp2, temp3, 1); + + reset_data8 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 15); + check_plus8 (temp1, temp2, temp3, 15); + + reset_data8 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 16); + check_plus8 (temp1, temp2, temp3, 16); + + reset_data8 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 17); + check_plus8 (temp1, temp2, temp3, 17); + + reset_data8 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 32); + check_plus8 (temp1, temp2, temp3, 32); + + reset_data8 (temp1, temp2, temp3, N); + test (temp1, temp2, temp3, 33); + check_plus8 (temp1, temp2, temp3, 33); + + reset_data8 (temp1, temp2, temp3, N); +} diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16.c new file mode 100644 index 0000000000000..d5f22b5026259 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-int8x16.c @@ -0,0 +1,32 @@ +/* { dg-do compile { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O2 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include +#include +#include +#include "../lob.h" + +void __attribute__ ((noinline)) test (int8_t *a, int8_t *b, int8_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + int8x16_t va = vldrbq_z_s8 (a, p); + int8x16_t vb = vldrbq_z_s8 (b, p); + int8x16_t vc = vaddq_x_s8 (va, vb, p); + vstrbq_p_s8 (c, vc, p); + c+=16; + a+=16; + b+=16; + n-=16; + } +} + + +/* { dg-final { scan-assembler-times {\tdlstp.8} 1 } } */ +/* { dg-final { scan-assembler-times {\tletp} 1 } } */ +/* { dg-final { scan-assembler-not "\tvctp" } } */ +/* { dg-final { scan-assembler-not "\tvpst" } } */ +/* { dg-final { scan-assembler-not "p0" } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-invalid-asm.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-invalid-asm.c new file mode 100644 index 0000000000000..26df2d30523ce --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-invalid-asm.c @@ -0,0 +1,521 @@ +/* { dg-do compile { target { arm*-*-* } } } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-options "-O3 -save-temps" } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include +#include + +/* Terminating on a non-zero number of elements. */ +void test0 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + while (n > 1) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + n -= 16; + } +} + +/* Terminating on n >= 0. */ +void test1 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + while (n >= 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + n -= 16; + } +} + +/* Similar, terminating on a non-zero number of elements, but in a for loop + format. */ +int32_t a[] = {0, 1, 2, 3, 4, 5, 6, 7}; +void test2 (int32_t *b, int num_elems) +{ + for (int i = num_elems; i >= 2; i-= 4) + { + mve_pred16_t p = vctp32q (i); + int32x4_t va = vldrwq_z_s32 (&(a[i]), p); + vstrwq_p_s32 (b + i, va, p); + } +} + +/* Iteration counter counting up to num_iter, with a non-zero starting num. */ +void test3 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + int num_iter = (n + 15)/16; + for (int i = 1; i < num_iter; i++) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + n -= 16; + } +} + +/* Iteration counter counting up to num_iter, with a larger increment */ +void test4 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + int num_iter = (n + 15)/16; + for (int i = 0; i < num_iter; i+=2) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_x_u8 (va, vb, p); + vstrbq_p_u8 (c, vc, p); + n -= 16; + } +} + +/* Using an unpredicated store instruction within the loop. */ +void test5 (uint8_t *a, uint8_t *b, uint8_t *c, uint8_t *d, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_u8 (va, vb); + uint8x16_t vd = vaddq_x_u8 (va, vb, p); + vstrbq_u8 (d, vd); + n -= 16; + } +} + +/* Using an unpredicated store outside the loop. */ +void test6 (uint8_t *a, uint8_t *b, uint8_t *c, int n, uint8x16_t vx) +{ + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_m_u8 (vx, va, vb, p); + vx = vaddq_u8 (vx, vc); + a += 16; + b += 16; + n -= 16; + } + vstrbq_u8 (c, vx); +} + +/* Using a VPR that gets modified within the loop. */ +void test9 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + p++; + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* Using a VPR that gets re-generated within the loop. */ +void test10 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + mve_pred16_t p = vctp32q (n); + while (n > 0) + { + int32x4_t va = vldrwq_z_s32 (a, p); + p = vctp32q (n); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* Using vctp32q_m instead of vctp32q. */ +void test11 (int32_t *a, int32_t *b, int32_t *c, int n, mve_pred16_t p0) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q_m (n, p0); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* Using an unpredicated op with a scalar output, where the result is valid + outside the bb. This is invalid, because one of the inputs to the + unpredicated op is also unpredicated. */ +uint8_t test12 (uint8_t *a, uint8_t *b, uint8_t *c, int n, uint8x16_t vx) +{ + uint8_t sum = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_u8 (b); + uint8x16_t vc = vaddq_u8 (va, vb); + sum += vaddvq_u8 (vc); + a += 16; + b += 16; + n -= 16; + } + return sum; +} + +/* Using an unpredicated vcmp to generate a new predicate value in the + loop and then using that VPR to predicate a store insn. */ +void test13 (int32_t *a, int32_t *b, int32x4_t vc, int32_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_s32 (a); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_s32 (va, vb); + mve_pred16_t p1 = vcmpeqq_s32 (va, vc); + vstrwq_p_s32 (c, vc, p1); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* Using an across-vector unpredicated instruction. "vb" is the risk. */ +uint16_t test14 (uint16_t *a, uint16_t *b, uint16_t *c, int n) +{ + uint16x8_t vb = vldrhq_u16 (b); + uint16_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + uint16x8_t va = vldrhq_z_u16 (a, p); + vb = vaddq_u16 (va, vb); + res = vaddvq_u16 (vb); + c += 8; + a += 8; + b += 8; + n -= 8; + } + return res; +} + +/* Using an across-vector unpredicated instruction. "vc" is the risk. */ +uint16_t test15 (uint16_t *a, uint16_t *b, uint16_t *c, int n) +{ + uint16x8_t vb = vldrhq_u16 (b); + uint16_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + uint16x8_t va = vldrhq_z_u16 (a, p); + uint16x8_t vc = vaddq_u16 (va, vb); + res = vaddvaq_u16 (res, vc); + c += 8; + a += 8; + b += 8; + n -= 8; + } + return res; +} + +uint16_t test16 (uint16_t *a, uint16_t *b, uint16_t *c, int n) +{ + uint16_t res =0; + while (n > 0) + { + mve_pred16_t p = vctp16q (n); + uint16x8_t vb = vldrhq_u16 (b); + uint16x8_t va = vldrhq_z_u16 (a, p); + res = vaddvaq_u16 (res, vb); + res = vaddvaq_p_u16 (res, va, p); + c += 8; + a += 8; + b += 8; + n -= 8; + } + return res; +} + +int test17 (int8_t *a, int8_t *b, int8_t *c, int n) +{ + int res = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + int8x16_t va = vldrbq_z_s8 (a, p); + res = vmaxvq (res, va); + n-=16; + a+=16; + } + return res; +} + + + +int test18 (int8_t *a, int8_t *b, int8_t *c, int n) +{ + int res = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + int8x16_t va = vldrbq_z_s8 (a, p); + res = vminvq (res, va); + n-=16; + a+=16; + } + return res; +} + +int test19 (int8_t *a, int8_t *b, int8_t *c, int n) +{ + int res = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + int8x16_t va = vldrbq_z_s8 (a, p); + res = vminavq (res, va); + n-=16; + a+=16; + } + return res; +} + +int test20 (uint8_t *a, uint8_t *b, uint8_t *c, int n) +{ + int res = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + res = vminvq (res, va); + n-=16; + a+=16; + } + return res; +} + +uint8x16_t test21 (uint8_t *a, uint32_t *b, int n, uint8x16_t res) +{ + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + res = vshlcq_u8 (va, b, 1); + n-=16; + a+=16; + } + return res; +} + +int8x16_t test22 (int8_t *a, int32_t *b, int n, int8x16_t res) +{ + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + int8x16_t va = vldrbq_z_s8 (a, p); + res = vshlcq_s8 (va, b, 1); + n-=16; + a+=16; + } + return res; +} + +/* Using an unsigned number of elements to count down from, with a >0*/ +void test23 (int32_t *a, int32_t *b, int32_t *c, unsigned int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c+=4; + a+=4; + b+=4; + n-=4; + } +} + +/* Using an unsigned number of elements to count up to, with a = 1) + { + n-=4; + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_z_s32 (b, p); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + vstrwq_p_s32 (c, vc, p); + c+=4; + a+=4; + b+=4; + n-=4; + } +} + +void test27 (int32_t *a, int32_t *c, int n) +{ + int32_t res = 0; + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_s32 (a); + res += vaddvq_s32 (va); + int32x4_t vc = vdupq_n_s32 (res); + vstrwq_p_s32 (c, vc, p); + a += 4; + n -= 4; + } +} + +/* Using an unpredicated vcmp to generate a new predicate value in the + loop and then using it in a predicated store insn. */ +void test28 (int32_t *a, int32_t *b, int32_t *c, int n) +{ + while (n > 0) + { + mve_pred16_t p = vctp32q (n); + int32x4_t va = vldrwq_z_s32 (a, p); + int32x4_t vb = vldrwq_s32 (b); + int32x4_t vc = vaddq_x_s32 (va, vb, p); + mve_pred16_t p1 = vcmpeqq_s32 (va, vc); + vstrwq_p_s32 (c, vc, p1); + c += 4; + a += 4; + b += 4; + n -= 4; + } +} + +/* Using an unpredicated op with a scalar output, where the result is valid + outside the bb. The unpredicated lanes are not guaranteed zero, so would + affect the vaddv in the non-tail predicated case. */ +uint8_t test29 (uint8_t *a, uint8_t *b, uint8_t *c, int n, uint8x16_t vx) +{ + uint8_t sum = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_m_u8 (vx, va, vb, p); + sum += vaddvq_u8 (vc); + a += 16; + b += 16; + n -= 16; + } + return sum; +} + +/* Same as above, but with another scalar op between the unpredicated op and + the scalar op outside the loop. */ +uint8_t test30 (uint8_t *a, uint8_t *b, uint8_t *c, int n, uint8x16_t vx, int g) +{ + uint8_t sum = 0; + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_z_u8 (b, p); + uint8x16_t vc = vaddq_m_u8 (vx, va, vb, p); + sum += vaddvq_u8 (vc); + sum += g; + a += 16; + b += 16; + n -= 16; + } + return sum; +} + +uint8_t test31 (uint8_t *a, uint8_t *b, int n) +{ + uint8_t res = 0; + uint8x16_t vc = vdupq_n_u8 (0); + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_u8 (b); + vc = vaddq (vb, vc); + res = vgetq_lane (vc, 5); + + a += 16; + b += 16; + n -= 16; + } + return res; +} + +uint8_t test32 (uint8_t *a, uint8_t *b, int n) +{ + uint8_t res = 0; + uint8x16_t vc = vdupq_n_u8 (0); + while (n > 0) + { + mve_pred16_t p = vctp8q (n); + uint8x16_t va = vldrbq_z_u8 (a, p); + uint8x16_t vb = vldrbq_u8 (b); + vc = vaddq_m (vc, va, vc, p); + vc = vaddq (vb, vc); + res = vgetq_lane (vc, 5); + + a += 16; + b += 16; + n -= 16; + } + return res; +} + +/* { dg-final { scan-assembler-not "\tdlstp" } } */ +/* { dg-final { scan-assembler-not "\tletp" } } */ From 954f9011c4923b72f42cc6ca8460333e7c7aad98 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 18 Jun 2024 21:57:19 +0200 Subject: [PATCH 003/114] Fortran: fix for CHARACTER(len=*) dummies with bind(C) [PR115390] gcc/fortran/ChangeLog: PR fortran/115390 * trans-decl.cc (gfc_conv_cfi_to_gfc): Move derivation of type sizes for character via gfc_trans_vla_type_sizes to after character length has been set. gcc/testsuite/ChangeLog: PR fortran/115390 * gfortran.dg/bind_c_char_11.f90: New test. --- gcc/fortran/trans-decl.cc | 4 +- gcc/testsuite/gfortran.dg/bind_c_char_11.f90 | 45 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/bind_c_char_11.f90 diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index 88538713a02b4..f7fb6eec336a8 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -7063,8 +7063,8 @@ gfc_conv_cfi_to_gfc (stmtblock_t *init, stmtblock_t *finally, if (sym->ts.type == BT_CHARACTER && !INTEGER_CST_P (sym->ts.u.cl->backend_decl)) { - gfc_conv_string_length (sym->ts.u.cl, NULL, init); - gfc_trans_vla_type_sizes (sym, init); + gfc_conv_string_length (sym->ts.u.cl, NULL, &block); + gfc_trans_vla_type_sizes (sym, &block); } /* gfc->data = cfi->base_addr - or for scalars: gfc = cfi->base_addr. diff --git a/gcc/testsuite/gfortran.dg/bind_c_char_11.f90 b/gcc/testsuite/gfortran.dg/bind_c_char_11.f90 new file mode 100644 index 0000000000000..5ed8e82853bf0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_char_11.f90 @@ -0,0 +1,45 @@ +! { dg-do compile } +! { dg-additional-options "-Wuninitialized" } +! +! PR fortran/115390 - fixes for CHARACTER(len=*) dummies with bind(C) + +module test + implicit none +contains + subroutine bar(s,t) bind(c) + character(*), intent(in) :: s,t + optional :: t + call foo(s,t) + end + subroutine bar1(s,t) bind(c) + character(*), intent(in) :: s(:),t(:) + optional :: t + call foo1(s,t) + end + subroutine bar4(s,t) bind(c) + character(len=*,kind=4), intent(in) :: s,t + optional :: t + call foo4(s,t) + end + subroutine bar5(s,t) bind(c) + character(len=*,kind=4), intent(in) :: s(:),t(:) + optional :: t + call foo5(s,t) + end + subroutine foo(s,t) + character(*), intent(in) :: s,t + optional :: t + end + subroutine foo1(s,t) + character(*), intent(in) :: s(:),t(:) + optional :: t + end + subroutine foo4(s,t) + character(len=*,kind=4), intent(in) :: s,t + optional :: t + end + subroutine foo5(s,t) + character(len=*,kind=4), intent(in) :: s(:),t(:) + optional :: t + end +end From 9651d6005f9c1ac60aecf7b36d6c0bd1ead8a63b Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 18 Jun 2024 20:57:24 +0100 Subject: [PATCH 004/114] libstdc++: Add conditional noexcept to std::pair default ctor Most of std::pair constructors implemented using C++20 concepts have a conditional noexcept-specifier, but the default constructor doesn't. This fixes that. libstdc++-v3/ChangeLog: * include/bits/stl_pair.h [__cpp_lib_concepts] (pair()): Add conditional noexcept. --- libstdc++-v3/include/bits/stl_pair.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index 0c1e5719a1a3b..0d60eaba1941e 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -344,6 +344,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION explicit(__not_<__and_<__is_implicitly_default_constructible<_T1>, __is_implicitly_default_constructible<_T2>>>()) pair() + noexcept(is_nothrow_default_constructible_v<_T1> + && is_nothrow_default_constructible_v<_T2>) requires is_default_constructible_v<_T1> && is_default_constructible_v<_T2> : first(), second() From 5d156a91853a7863d674ed35df87562e3a1eba0e Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 18 Jun 2024 20:59:25 +0100 Subject: [PATCH 005/114] libstdc++: Add noexcept to some std::promise shared state internals Making the state ready for a std::promise only needs to move a unique_ptr, which cannot throw. Make its call operator noexcept. Similarly, making the state ready by storing an exception_ptr also can't throw, so make that call operator noexcept too. libstdc++-v3/ChangeLog: * include/std/future (_State_baseV2::_Setter): Add noexcept to call operator. (_State_baseV2::_Setter): Likewise. --- libstdc++-v3/include/std/future | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index 9e75ae98b13d2..d7be205af5061 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -532,7 +532,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { static_assert(is_void<_Res>::value, "Only used for promise"); - typename promise<_Res>::_Ptr_type operator()() const + typename promise<_Res>::_Ptr_type operator()() const noexcept { return std::move(_M_promise->_M_storage); } promise<_Res>* _M_promise; @@ -545,7 +545,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct _Setter<_Res, __exception_ptr_tag> { // Used by std::promise to store an exception as the result. - typename promise<_Res>::_Ptr_type operator()() const + typename promise<_Res>::_Ptr_type operator()() const noexcept { _M_promise->_M_storage->_M_error = *_M_ex; return std::move(_M_promise->_M_storage); From bcb9dad9f6123c14ab8b14d2c3d360461dd5ee17 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 19 Jun 2024 14:16:27 +0100 Subject: [PATCH 006/114] libstdc++: Consistently indent with tabs libstdc++-v3/ChangeLog: * include/std/future: Adjust whitespace to use tabs for indentation. --- libstdc++-v3/include/std/future | 328 ++++++++++++++++---------------- 1 file changed, 164 insertions(+), 164 deletions(-) diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index d7be205af5061..6ce7d89ca3ffe 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -292,7 +292,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { using __allocator_type = __alloc_rebind<_Alloc, _Result_alloc>; - explicit + explicit _Result_alloc(const _Alloc& __a) : _Result<_Res>(), _Alloc(__a) { } @@ -362,9 +362,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template - future_status - wait_for(const chrono::duration<_Rep, _Period>& __rel) - { + future_status + wait_for(const chrono::duration<_Rep, _Period>& __rel) + { // First, check if the future has been made ready. Use acquire MO // to synchronize with the thread that made it ready. if (_M_status._M_load(memory_order_acquire) == _Status::__ready) @@ -396,9 +396,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template - future_status - wait_until(const chrono::time_point<_Clock, _Duration>& __abs) - { + future_status + wait_until(const chrono::time_point<_Clock, _Duration>& __abs) + { #if __cplusplus > 201703L static_assert(chrono::is_clock_v<_Clock>); #endif @@ -430,8 +430,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_set_result(function<_Ptr_type()> __res, bool __ignore_failure = false) { bool __did_set = false; - // all calls to this function are serialized, - // side-effects of invoking __res only happen once + // all calls to this function are serialized, + // side-effects of invoking __res only happen once call_once(_M_once, &_State_baseV2::_M_do_set, this, std::__addressof(__res), std::__addressof(__did_set)); if (__did_set) @@ -439,7 +439,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_status._M_store_notify_all(_Status::__ready, memory_order_release); else if (!__ignore_failure) - __throw_future_error(int(future_errc::promise_already_satisfied)); + __throw_future_error(int(future_errc::promise_already_satisfied)); } // Provide a result to the shared state but delay making it ready @@ -451,12 +451,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { bool __did_set = false; unique_ptr<_Make_ready> __mr{new _Make_ready}; - // all calls to this function are serialized, - // side-effects of invoking __res only happen once + // all calls to this function are serialized, + // side-effects of invoking __res only happen once call_once(_M_once, &_State_baseV2::_M_do_set, this, std::__addressof(__res), std::__addressof(__did_set)); if (!__did_set) - __throw_future_error(int(future_errc::promise_already_satisfied)); + __throw_future_error(int(future_errc::promise_already_satisfied)); __mr->_M_shared_state = std::move(__self); __mr->_M_set(); __mr.release(); @@ -490,41 +490,41 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template - struct _Setter; + struct _Setter; // set lvalues template - struct _Setter<_Res, _Arg&> - { - // check this is only used by promise::set_value(const R&) - // or promise::set_value(R&) - static_assert(is_same<_Res, _Arg&>::value // promise - || is_same::value, // promise - "Invalid specialisation"); + struct _Setter<_Res, _Arg&> + { + // check this is only used by promise::set_value(const R&) + // or promise::set_value(R&) + static_assert(is_same<_Res, _Arg&>::value // promise + || is_same::value, // promise + "Invalid specialisation"); // Used by std::promise to copy construct the result. - typename promise<_Res>::_Ptr_type operator()() const - { - _M_promise->_M_storage->_M_set(*_M_arg); - return std::move(_M_promise->_M_storage); - } - promise<_Res>* _M_promise; - _Arg* _M_arg; - }; + typename promise<_Res>::_Ptr_type operator()() const + { + _M_promise->_M_storage->_M_set(*_M_arg); + return std::move(_M_promise->_M_storage); + } + promise<_Res>* _M_promise; + _Arg* _M_arg; + }; // set rvalues template - struct _Setter<_Res, _Res&&> - { + struct _Setter<_Res, _Res&&> + { // Used by std::promise to move construct the result. - typename promise<_Res>::_Ptr_type operator()() const - { - _M_promise->_M_storage->_M_set(std::move(*_M_arg)); - return std::move(_M_promise->_M_storage); - } - promise<_Res>* _M_promise; - _Res* _M_arg; - }; + typename promise<_Res>::_Ptr_type operator()() const + { + _M_promise->_M_storage->_M_set(std::move(*_M_arg)); + return std::move(_M_promise->_M_storage); + } + promise<_Res>* _M_promise; + _Res* _M_arg; + }; // set void template @@ -542,35 +542,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // set exceptions template - struct _Setter<_Res, __exception_ptr_tag> - { + struct _Setter<_Res, __exception_ptr_tag> + { // Used by std::promise to store an exception as the result. - typename promise<_Res>::_Ptr_type operator()() const noexcept - { - _M_promise->_M_storage->_M_error = *_M_ex; - return std::move(_M_promise->_M_storage); - } + typename promise<_Res>::_Ptr_type operator()() const noexcept + { + _M_promise->_M_storage->_M_error = *_M_ex; + return std::move(_M_promise->_M_storage); + } - promise<_Res>* _M_promise; - exception_ptr* _M_ex; - }; + promise<_Res>* _M_promise; + exception_ptr* _M_ex; + }; template __attribute__((__always_inline__)) - static _Setter<_Res, _Arg&&> - __setter(promise<_Res>* __prom, _Arg&& __arg) noexcept - { - return _Setter<_Res, _Arg&&>{ __prom, std::__addressof(__arg) }; - } + static _Setter<_Res, _Arg&&> + __setter(promise<_Res>* __prom, _Arg&& __arg) noexcept + { + return _Setter<_Res, _Arg&&>{ __prom, std::__addressof(__arg) }; + } template __attribute__((__always_inline__)) - static _Setter<_Res, __exception_ptr_tag> - __setter(exception_ptr& __ex, promise<_Res>* __prom) noexcept - { - __glibcxx_assert(__ex != nullptr); // LWG 2276 - return _Setter<_Res, __exception_ptr_tag>{ __prom, &__ex }; - } + static _Setter<_Res, __exception_ptr_tag> + __setter(exception_ptr& __ex, promise<_Res>* __prom) noexcept + { + __glibcxx_assert(__ex != nullptr); // LWG 2276 + return _Setter<_Res, __exception_ptr_tag>{ __prom, &__ex }; + } template __attribute__((__always_inline__)) @@ -581,24 +581,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template - static void - _S_check(const shared_ptr<_Tp>& __p) - { - if (!static_cast(__p)) - __throw_future_error((int)future_errc::no_state); - } + static void + _S_check(const shared_ptr<_Tp>& __p) + { + if (!static_cast(__p)) + __throw_future_error((int)future_errc::no_state); + } private: // The function invoked with std::call_once(_M_once, ...). void _M_do_set(function<_Ptr_type()>* __f, bool* __did_set) { - _Ptr_type __res = (*__f)(); - // Notify the caller that we did try to set; if we do not throw an - // exception, the caller will be aware that it did set (e.g., see - // _M_set_result). + _Ptr_type __res = (*__f)(); + // Notify the caller that we did try to set; if we do not throw an + // exception, the caller will be aware that it did set (e.g., see + // _M_set_result). *__did_set = true; - _M_result.swap(__res); // nothrow + _M_result.swap(__res); // nothrow } // Wait for completion of async function. @@ -719,49 +719,49 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void wait() const { - _State_base::_S_check(_M_state); - _M_state->wait(); + _State_base::_S_check(_M_state); + _M_state->wait(); } template - future_status - wait_for(const chrono::duration<_Rep, _Period>& __rel) const - { - _State_base::_S_check(_M_state); - return _M_state->wait_for(__rel); - } + future_status + wait_for(const chrono::duration<_Rep, _Period>& __rel) const + { + _State_base::_S_check(_M_state); + return _M_state->wait_for(__rel); + } template - future_status - wait_until(const chrono::time_point<_Clock, _Duration>& __abs) const - { - _State_base::_S_check(_M_state); - return _M_state->wait_until(__abs); - } + future_status + wait_until(const chrono::time_point<_Clock, _Duration>& __abs) const + { + _State_base::_S_check(_M_state); + return _M_state->wait_until(__abs); + } protected: /// Wait for the state to be ready and rethrow any stored exception __result_type _M_get_result() const { - _State_base::_S_check(_M_state); - _Result_base& __res = _M_state->wait(); - if (!(__res._M_error == nullptr)) - rethrow_exception(__res._M_error); - return static_cast<__result_type>(__res); + _State_base::_S_check(_M_state); + _Result_base& __res = _M_state->wait(); + if (!(__res._M_error == nullptr)) + rethrow_exception(__res._M_error); + return static_cast<__result_type>(__res); } void _M_swap(__basic_future& __that) noexcept { - _M_state.swap(__that._M_state); + _M_state.swap(__that._M_state); } // Construction of a future by promise::get_future() explicit __basic_future(const __state_type& __state) : _M_state(__state) { - _State_base::_S_check(_M_state); - _M_state->_M_set_retrieved_flag(); + _State_base::_S_check(_M_state); + _M_state->_M_set_retrieved_flag(); } // Copy construction from a shared_future @@ -780,9 +780,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct _Reset { - explicit _Reset(__basic_future& __fut) noexcept : _M_fut(__fut) { } - ~_Reset() { _M_fut._M_state.reset(); } - __basic_future& _M_fut; + explicit _Reset(__basic_future& __fut) noexcept : _M_fut(__fut) { } + ~_Reset() { _M_fut._M_state.reset(); } + __basic_future& _M_fut; }; }; @@ -801,8 +801,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend class promise<_Res>; template friend class packaged_task; template - friend future<__async_result_of<_Fn, _Args...>> - async(launch, _Fn&&, _Args&&...); + friend future<__async_result_of<_Fn, _Args...>> + async(launch, _Fn&&, _Args&&...); typedef __basic_future<_Res> _Base_type; typedef typename _Base_type::__state_type __state_type; @@ -822,16 +822,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION future& operator=(future&& __fut) noexcept { - future(std::move(__fut))._M_swap(*this); - return *this; + future(std::move(__fut))._M_swap(*this); + return *this; } /// Retrieving the value _Res get() { - typename _Base_type::_Reset __reset(*this); - return std::move(this->_M_get_result()._M_value()); + typename _Base_type::_Reset __reset(*this); + return std::move(this->_M_get_result()._M_value()); } shared_future<_Res> share() noexcept; @@ -844,8 +844,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend class promise<_Res&>; template friend class packaged_task; template - friend future<__async_result_of<_Fn, _Args...>> - async(launch, _Fn&&, _Args&&...); + friend future<__async_result_of<_Fn, _Args...>> + async(launch, _Fn&&, _Args&&...); typedef __basic_future<_Res&> _Base_type; typedef typename _Base_type::__state_type __state_type; @@ -865,16 +865,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION future& operator=(future&& __fut) noexcept { - future(std::move(__fut))._M_swap(*this); - return *this; + future(std::move(__fut))._M_swap(*this); + return *this; } /// Retrieving the value _Res& get() { - typename _Base_type::_Reset __reset(*this); - return this->_M_get_result()._M_get(); + typename _Base_type::_Reset __reset(*this); + return this->_M_get_result()._M_get(); } shared_future<_Res&> share() noexcept; @@ -887,8 +887,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend class promise; template friend class packaged_task; template - friend future<__async_result_of<_Fn, _Args...>> - async(launch, _Fn&&, _Args&&...); + friend future<__async_result_of<_Fn, _Args...>> + async(launch, _Fn&&, _Args&&...); typedef __basic_future _Base_type; typedef typename _Base_type::__state_type __state_type; @@ -908,16 +908,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION future& operator=(future&& __fut) noexcept { - future(std::move(__fut))._M_swap(*this); - return *this; + future(std::move(__fut))._M_swap(*this); + return *this; } /// Retrieving the value void get() { - typename _Base_type::_Reset __reset(*this); - this->_M_get_result(); + typename _Base_type::_Reset __reset(*this); + this->_M_get_result(); } shared_future share() noexcept; @@ -955,14 +955,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION shared_future& operator=(const shared_future& __sf) noexcept { - shared_future(__sf)._M_swap(*this); - return *this; + shared_future(__sf)._M_swap(*this); + return *this; } shared_future& operator=(shared_future&& __sf) noexcept { - shared_future(std::move(__sf))._M_swap(*this); - return *this; + shared_future(std::move(__sf))._M_swap(*this); + return *this; } /// Retrieving the value @@ -994,14 +994,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION shared_future& operator=(const shared_future& __sf) { - shared_future(__sf)._M_swap(*this); - return *this; + shared_future(__sf)._M_swap(*this); + return *this; } shared_future& operator=(shared_future&& __sf) noexcept { - shared_future(std::move(__sf))._M_swap(*this); - return *this; + shared_future(std::move(__sf))._M_swap(*this); + return *this; } /// Retrieving the value @@ -1033,14 +1033,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION shared_future& operator=(const shared_future& __sf) { - shared_future(__sf)._M_swap(*this); - return *this; + shared_future(__sf)._M_swap(*this); + return *this; } shared_future& operator=(shared_future&& __sf) noexcept { - shared_future(std::move(__sf))._M_swap(*this); - return *this; + shared_future(std::move(__sf))._M_swap(*this); + return *this; } // Retrieving the value @@ -1115,31 +1115,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { } template - promise(allocator_arg_t, const _Allocator& __a) - : _M_future(std::allocate_shared<_State>(__a)), + promise(allocator_arg_t, const _Allocator& __a) + : _M_future(std::allocate_shared<_State>(__a)), _M_storage(__future_base::_S_allocate_result<_Res>(__a)) - { } + { } template - promise(allocator_arg_t, const _Allocator&, promise&& __rhs) - : _M_future(std::move(__rhs._M_future)), + promise(allocator_arg_t, const _Allocator&, promise&& __rhs) + : _M_future(std::move(__rhs._M_future)), _M_storage(std::move(__rhs._M_storage)) - { } + { } promise(const promise&) = delete; ~promise() { - if (static_cast(_M_future) && !_M_future.unique()) - _M_future->_M_break_promise(std::move(_M_storage)); + if (static_cast(_M_future) && !_M_future.unique()) + _M_future->_M_break_promise(std::move(_M_storage)); } // Assignment promise& operator=(promise&& __rhs) noexcept { - promise(std::move(__rhs)).swap(*this); - return *this; + promise(std::move(__rhs)).swap(*this); + return *this; } promise& operator=(const promise&) = delete; @@ -1147,8 +1147,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void swap(promise& __rhs) noexcept { - _M_future.swap(__rhs._M_future); - _M_storage.swap(__rhs._M_storage); + _M_future.swap(__rhs._M_future); + _M_storage.swap(__rhs._M_storage); } // Retrieving the result @@ -1234,31 +1234,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { } template - promise(allocator_arg_t, const _Allocator& __a) - : _M_future(std::allocate_shared<_State>(__a)), + promise(allocator_arg_t, const _Allocator& __a) + : _M_future(std::allocate_shared<_State>(__a)), _M_storage(__future_base::_S_allocate_result<_Res&>(__a)) - { } + { } template - promise(allocator_arg_t, const _Allocator&, promise&& __rhs) - : _M_future(std::move(__rhs._M_future)), + promise(allocator_arg_t, const _Allocator&, promise&& __rhs) + : _M_future(std::move(__rhs._M_future)), _M_storage(std::move(__rhs._M_storage)) - { } + { } promise(const promise&) = delete; ~promise() { - if (static_cast(_M_future) && !_M_future.unique()) - _M_future->_M_break_promise(std::move(_M_storage)); + if (static_cast(_M_future) && !_M_future.unique()) + _M_future->_M_break_promise(std::move(_M_storage)); } // Assignment promise& operator=(promise&& __rhs) noexcept { - promise(std::move(__rhs)).swap(*this); - return *this; + promise(std::move(__rhs)).swap(*this); + return *this; } promise& operator=(const promise&) = delete; @@ -1266,8 +1266,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void swap(promise& __rhs) noexcept { - _M_future.swap(__rhs._M_future); - _M_storage.swap(__rhs._M_storage); + _M_future.swap(__rhs._M_future); + _M_storage.swap(__rhs._M_storage); } // Retrieving the result @@ -1332,33 +1332,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { } template - promise(allocator_arg_t, const _Allocator& __a) - : _M_future(std::allocate_shared<_State>(__a)), + promise(allocator_arg_t, const _Allocator& __a) + : _M_future(std::allocate_shared<_State>(__a)), _M_storage(__future_base::_S_allocate_result(__a)) - { } + { } // _GLIBCXX_RESOLVE_LIB_DEFECTS // 2095. missing constructors needed for uses-allocator construction template - promise(allocator_arg_t, const _Allocator&, promise&& __rhs) - : _M_future(std::move(__rhs._M_future)), + promise(allocator_arg_t, const _Allocator&, promise&& __rhs) + : _M_future(std::move(__rhs._M_future)), _M_storage(std::move(__rhs._M_storage)) - { } + { } promise(const promise&) = delete; ~promise() { - if (static_cast(_M_future) && !_M_future.unique()) - _M_future->_M_break_promise(std::move(_M_storage)); + if (static_cast(_M_future) && !_M_future.unique()) + _M_future->_M_break_promise(std::move(_M_storage)); } // Assignment promise& operator=(promise&& __rhs) noexcept { - promise(std::move(__rhs)).swap(*this); - return *this; + promise(std::move(__rhs)).swap(*this); + return *this; } promise& operator=(const promise&) = delete; @@ -1366,8 +1366,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void swap(promise& __rhs) noexcept { - _M_future.swap(__rhs._M_future); - _M_storage.swap(__rhs._M_storage); + _M_future.swap(__rhs._M_future); + _M_storage.swap(__rhs._M_storage); } // Retrieving the result @@ -1596,7 +1596,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ~packaged_task() { - if (static_cast(_M_state) && !_M_state.unique()) + if (static_cast(_M_state) && !_M_state.unique()) _M_state->_M_break_promise(std::move(_M_state->_M_result)); } @@ -1709,7 +1709,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // result in _M_result, swaps that with the base _M_result and makes // the state ready. Tell _M_set_result to ignore failure so all later // calls do nothing. - _M_set_result(_S_task_setter(_M_result, _M_fn), true); + _M_set_result(_S_task_setter(_M_result, _M_fn), true); } // Caller should check whether the state is ready first, because this From 0982552bc4eeffb5520deba10dedecfb2390a8de Mon Sep 17 00:00:00 2001 From: Takayuki 'January June' Suwa Date: Wed, 19 Jun 2024 13:59:54 +0900 Subject: [PATCH 007/114] xtensa: Eliminate double MEMW insertions for volatile memory This patch makes avoid inserting a MEMW instruction before a load/store nstruction with volatile memory reference if there is already a MEMW immediately before it. gcc/ChangeLog: * config/xtensa/xtensa.cc (print_operand): When outputting MEMW before the instruction, check if the previous instruction is already that. --- gcc/config/xtensa/xtensa.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index bc127997ac6cb..e2549de5df050 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -3078,7 +3078,17 @@ print_operand (FILE *file, rtx x, int letter) /* For a volatile memory reference, emit a MEMW before the load or store. */ if (MEM_VOLATILE_P (x) && TARGET_SERIALIZE_VOLATILE) - fprintf (file, "memw\n\t"); + { + rtx_insn *prev_insn + = prev_nonnote_nondebug_insn (current_output_insn); + rtx pat, src; + + if (! (prev_insn && NONJUMP_INSN_P (prev_insn) + && GET_CODE (pat = PATTERN (prev_insn)) == SET + && GET_CODE (src = SET_SRC (pat)) == UNSPEC + && XINT (src, 1) == UNSPEC_MEMW)) + fprintf (file, "memw\n\t"); + } } else output_operand_lossage ("invalid %%v value"); From 6f6ea27d17e9bbc917b94ffea1c933755e736bdc Mon Sep 17 00:00:00 2001 From: mayshao Date: Wed, 19 Jun 2024 16:03:25 +0200 Subject: [PATCH 008/114] i386: Zhaoxin shijidadao enablement This patch enables -march/-mtune=shijidadao, costs and tunings are set according to the characteristics of the processor. gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_zhaoxin_cpu): Recognize shijidadao. * common/config/i386/i386-common.cc: Add shijidadao. * common/config/i386/i386-cpuinfo.h (enum processor_subtypes): Add ZHAOXIN_FAM7H_SHIJIDADAO. * config.gcc: Add shijidadao. * config/i386/driver-i386.cc (host_detect_local_cpu): Let -march=native recognize shijidadao processors. * config/i386/i386-c.cc (ix86_target_macros_internal): Add shijidadao. * config/i386/i386-options.cc (m_ZHAOXIN): Add m_SHIJIDADAO. (m_SHIJIDADAO): New definition. * config/i386/i386.h (enum processor_type): Add PROCESSOR_SHIJIDADAO. * config/i386/x86-tune-costs.h (struct processor_costs): Add shijidadao_cost. * config/i386/x86-tune-sched.cc (ix86_issue_rate): Add shijidadao. (ix86_adjust_cost): Ditto. * config/i386/x86-tune.def (X86_TUNE_USE_GATHER_2PARTS): Add m_SHIJIDADAO. (X86_TUNE_USE_GATHER_4PARTS): Ditto. (X86_TUNE_USE_GATHER_8PARTS): Ditto. (X86_TUNE_AVOID_128FMA_CHAINS): Ditto. * doc/extend.texi: Add details about shijidadao. * doc/invoke.texi: Ditto. gcc/testsuite/ChangeLog: * g++.target/i386/mv32.C: Handle new -march * gcc.target/i386/funcspec-56.inc: Ditto. --- gcc/common/config/i386/cpuinfo.h | 8 +- gcc/common/config/i386/i386-common.cc | 8 +- gcc/common/config/i386/i386-cpuinfo.h | 1 + gcc/config.gcc | 14 ++- gcc/config/i386/driver-i386.cc | 11 +- gcc/config/i386/i386-c.cc | 7 ++ gcc/config/i386/i386-options.cc | 4 +- gcc/config/i386/i386.h | 1 + gcc/config/i386/x86-tune-costs.h | 116 ++++++++++++++++++ gcc/config/i386/x86-tune-sched.cc | 2 + gcc/config/i386/x86-tune.def | 8 +- gcc/doc/extend.texi | 3 + gcc/doc/invoke.texi | 6 + gcc/testsuite/g++.target/i386/mv32.C | 6 + gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 + 15 files changed, 183 insertions(+), 14 deletions(-) diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h index 4610bf6d6a458..936039725ab6c 100644 --- a/gcc/common/config/i386/cpuinfo.h +++ b/gcc/common/config/i386/cpuinfo.h @@ -667,12 +667,18 @@ get_zhaoxin_cpu (struct __processor_model *cpu_model, reset_cpu_feature (cpu_model, cpu_features2, FEATURE_F16C); cpu_model->__cpu_subtype = ZHAOXIN_FAM7H_LUJIAZUI; } - else if (model >= 0x5b) + else if (model == 0x5b) { cpu = "yongfeng"; CHECK___builtin_cpu_is ("yongfeng"); cpu_model->__cpu_subtype = ZHAOXIN_FAM7H_YONGFENG; } + else if (model >= 0x6b) + { + cpu = "shijidadao"; + CHECK___builtin_cpu_is ("shijidadao"); + cpu_model->__cpu_subtype = ZHAOXIN_FAM7H_SHIJIDADAO; + } break; default: break; diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc index 5d9c188c9c7db..e38b1b22ffb10 100644 --- a/gcc/common/config/i386/i386-common.cc +++ b/gcc/common/config/i386/i386-common.cc @@ -2066,6 +2066,7 @@ const char *const processor_names[] = "intel", "lujiazui", "yongfeng", + "shijidadao", "geode", "k6", "athlon", @@ -2271,10 +2272,13 @@ const pta processor_alias_table[] = | PTA_SSSE3 | PTA_SSE4_1 | PTA_FXSR, 0, P_NONE}, {"lujiazui", PROCESSOR_LUJIAZUI, CPU_LUJIAZUI, PTA_LUJIAZUI, - M_CPU_SUBTYPE (ZHAOXIN_FAM7H_LUJIAZUI), P_NONE}, + M_CPU_SUBTYPE (ZHAOXIN_FAM7H_LUJIAZUI), P_PROC_BMI}, {"yongfeng", PROCESSOR_YONGFENG, CPU_YONGFENG, PTA_YONGFENG, - M_CPU_SUBTYPE (ZHAOXIN_FAM7H_YONGFENG), P_NONE}, + M_CPU_SUBTYPE (ZHAOXIN_FAM7H_YONGFENG), P_PROC_AVX2}, + {"shijidadao", PROCESSOR_SHIJIDADAO, CPU_YONGFENG, + PTA_YONGFENG, + M_CPU_SUBTYPE (ZHAOXIN_FAM7H_SHIJIDADAO), P_PROC_AVX2}, {"k8", PROCESSOR_K8, CPU_K8, PTA_64BIT | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A | PTA_SSE | PTA_SSE2 | PTA_NO_SAHF | PTA_FXSR, 0, P_NONE}, diff --git a/gcc/common/config/i386/i386-cpuinfo.h b/gcc/common/config/i386/i386-cpuinfo.h index 3ec9e005a6ad5..ccc6deb63853e 100644 --- a/gcc/common/config/i386/i386-cpuinfo.h +++ b/gcc/common/config/i386/i386-cpuinfo.h @@ -104,6 +104,7 @@ enum processor_subtypes INTEL_COREI7_PANTHERLAKE, ZHAOXIN_FAM7H_YONGFENG, AMDFAM1AH_ZNVER5, + ZHAOXIN_FAM7H_SHIJIDADAO, CPU_SUBTYPE_MAX }; diff --git a/gcc/config.gcc b/gcc/config.gcc index e500ba63e3222..644c456290dc1 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -711,9 +711,9 @@ atom slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \ silvermont skylake-avx512 cannonlake icelake-client icelake-server \ skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \ sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \ -nano-x2 eden-x4 nano-x4 lujiazui yongfeng x86-64 x86-64-v2 x86-64-v3 x86-64-v4 \ -sierraforest graniterapids graniterapids-d grandridge arrowlake arrowlake-s \ -clearwaterforest pantherlake native" +nano-x2 eden-x4 nano-x4 lujiazui yongfeng shijidadao x86-64 x86-64-v2 \ +x86-64-v3 x86-64-v4 sierraforest graniterapids graniterapids-d grandridge \ +arrowlake arrowlake-s clearwaterforest pantherlake native" # Additional x86 processors supported by --with-cpu=. Each processor # MUST be separated by exactly one space. @@ -3855,6 +3855,10 @@ case ${target} in arch=yongfeng cpu=yongfeng ;; + shijidadao-*) + arch=shijidadao + cpu=shijidadao + ;; pentium2-*) arch=pentium2 cpu=pentium2 @@ -3980,6 +3984,10 @@ case ${target} in arch=yongfeng cpu=yongfeng ;; + shijidadao-*) + arch=shijidadao + cpu=shijidadao + ;; nocona-*) arch=nocona cpu=nocona diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc index 0176d8b6cd296..11470eaea1254 100644 --- a/gcc/config/i386/driver-i386.cc +++ b/gcc/config/i386/driver-i386.cc @@ -558,10 +558,12 @@ const char *host_detect_local_cpu (int argc, const char **argv) switch (family) { case 7: - if (model == 0x3b) - processor = PROCESSOR_LUJIAZUI; - else if (model >= 0x5b) + if (model >= 0x6b) + processor = PROCESSOR_SHIJIDADAO; + else if (model == 0x5b) processor = PROCESSOR_YONGFENG; + else if (model == 0x3b) + processor = PROCESSOR_LUJIAZUI; break; default: break; @@ -853,6 +855,9 @@ const char *host_detect_local_cpu (int argc, const char **argv) case PROCESSOR_YONGFENG: cpu = "yongfeng"; break; + case PROCESSOR_SHIJIDADAO: + cpu = "shijidadao"; + break; default: /* Use something reasonable. */ diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc index 7b0ad9e9181ee..403475d5b6bb2 100644 --- a/gcc/config/i386/i386-c.cc +++ b/gcc/config/i386/i386-c.cc @@ -156,6 +156,10 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, def_or_undef (parse_in, "__yongfeng"); def_or_undef (parse_in, "__yongfeng__"); break; + case PROCESSOR_SHIJIDADAO: + def_or_undef (parse_in, "__shijidadao"); + def_or_undef (parse_in, "__shijidadao__"); + break; case PROCESSOR_PENTIUM4: def_or_undef (parse_in, "__pentium4"); def_or_undef (parse_in, "__pentium4__"); @@ -386,6 +390,9 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, case PROCESSOR_YONGFENG: def_or_undef (parse_in, "__tune_yongfeng__"); break; + case PROCESSOR_SHIJIDADAO: + def_or_undef (parse_in, "__tune_shijidadao__"); + break; case PROCESSOR_PENTIUM4: def_or_undef (parse_in, "__tune_pentium4__"); break; diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index f2cecc0e2545b..65c5bad9c285e 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -155,7 +155,8 @@ along with GCC; see the file COPYING3. If not see #define m_LUJIAZUI (HOST_WIDE_INT_1U<integer move cost is 2. */ + 8, /* cost for loading QImode using movzbl. */ + {8, 8, 8}, /* cost of loading integer registers + in QImode, HImode and SImode. + Relative to reg-reg move (2). */ + {8, 8, 8}, /* cost of storing integer registers. */ + 2, /* cost of reg,reg fld/fst. */ + {8, 8, 8}, /* cost of loading fp registers + in SFmode, DFmode and XFmode. */ + {8, 8, 8}, /* cost of storing fp registers + in SFmode, DFmode and XFmode. */ + 2, /* cost of moving MMX register. */ + {8, 8}, /* cost of loading MMX registers + in SImode and DImode. */ + {8, 8}, /* cost of storing MMX registers + in SImode and DImode. */ + 2, 3, 4, /* cost of moving XMM,YMM,ZMM register. */ + {8, 8, 8, 10, 15}, /* cost of loading SSE registers + in 32,64,128,256 and 512-bit. */ + {8, 8, 8, 10, 15}, /* cost of storing SSE registers + in 32,64,128,256 and 512-bit. */ + 8, 8, /* SSE->integer and integer->SSE moves. */ + 8, 8, /* mask->integer and integer->mask moves. */ + {8, 8, 8}, /* cost of loading mask register + in QImode, HImode, SImode. */ + {8, 8, 8}, /* cost if storing mask register + in QImode, HImode, SImode. */ + 2, /* cost of moving mask register. */ + /* End of register allocator costs. */ + }, + + COSTS_N_INSNS (1), /* cost of an add instruction. */ + COSTS_N_INSNS (1), /* cost of a lea instruction. */ + COSTS_N_INSNS (1), /* variable shift costs. */ + COSTS_N_INSNS (1), /* constant shift costs. */ + {COSTS_N_INSNS (2), /* cost of starting multiply for QI. */ + COSTS_N_INSNS (3), /* HI. */ + COSTS_N_INSNS (2), /* SI. */ + COSTS_N_INSNS (2), /* DI. */ + COSTS_N_INSNS (3)}, /* other. */ + 0, /* cost of multiply per each bit set. */ + {COSTS_N_INSNS (9), /* cost of a divide/mod for QI. */ + COSTS_N_INSNS (10), /* HI. */ + COSTS_N_INSNS (9), /* SI. */ + COSTS_N_INSNS (50), /* DI. */ + COSTS_N_INSNS (50)}, /* other. */ + COSTS_N_INSNS (1), /* cost of movsx. */ + COSTS_N_INSNS (1), /* cost of movzx. */ + 8, /* "large" insn. */ + 17, /* MOVE_RATIO. */ + 6, /* CLEAR_RATIO. */ + {8, 8, 8}, /* cost of loading integer registers + in QImode, HImode and SImode. + Relative to reg-reg move (2). */ + {8, 8, 8}, /* cost of storing integer registers. */ + {8, 8, 8, 12, 15}, /* cost of loading SSE register + in 32bit, 64bit, 128bit, 256bit and 512bit. */ + {8, 8, 8, 12, 15}, /* cost of storing SSE register + in 32bit, 64bit, 128bit, 256bit and 512bit. */ + {8, 8, 8, 12, 15}, /* cost of unaligned loads. */ + {8, 8, 8, 12, 15}, /* cost of unaligned storess. */ + 2, 3, 4, /* cost of moving XMM,YMM,ZMM register. */ + 8, /* cost of moving SSE register to integer. */ + 18, 6, /* Gather load static, per_elt. */ + 18, 6, /* Gather store static, per_elt. */ + 32, /* size of l1 cache. */ + 256, /* size of l2 cache. */ + 64, /* size of prefetch block. */ + 12, /* number of parallel prefetches. */ + 3, /* Branch cost. */ + COSTS_N_INSNS (3), /* cost of FADD and FSUB insns. */ + COSTS_N_INSNS (3), /* cost of FMUL instruction. */ + COSTS_N_INSNS (13), /* cost of FDIV instruction. */ + COSTS_N_INSNS (2), /* cost of FABS instruction. */ + COSTS_N_INSNS (2), /* cost of FCHS instruction. */ + COSTS_N_INSNS (44), /* cost of FSQRT instruction. */ + + COSTS_N_INSNS (1), /* cost of cheap SSE instruction. */ + COSTS_N_INSNS (3), /* cost of ADDSS/SD SUBSS/SD insns. */ + COSTS_N_INSNS (3), /* cost of MULSS instruction. */ + COSTS_N_INSNS (3), /* cost of MULSD instruction. */ + COSTS_N_INSNS (5), /* cost of FMA SS instruction. */ + COSTS_N_INSNS (5), /* cost of FMA SD instruction. */ + COSTS_N_INSNS (11), /* cost of DIVSS instruction. */ + COSTS_N_INSNS (14), /* cost of DIVSD instruction. */ + COSTS_N_INSNS (11), /* cost of SQRTSS instruction. */ + COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */ + 4, 4, 4, 4, /* reassoc int, fp, vec_int, vec_fp. */ + shijidadao_memcpy, + shijidadao_memset, + COSTS_N_INSNS (3), /* cond_taken_branch_cost. */ + COSTS_N_INSNS (1), /* cond_not_taken_branch_cost. */ + "16:11:8", /* Loop alignment. */ + "16:11:8", /* Jump alignment. */ + "0:0:8", /* Label alignment. */ + "16", /* Func alignment. */ + 4, /* Small unroll limit. */ + 2, /* Small unroll factor. */ +}; + + /* Generic should produce code tuned for Core-i7 (and newer chips) and btver1 (and newer chips). */ diff --git a/gcc/config/i386/x86-tune-sched.cc b/gcc/config/i386/x86-tune-sched.cc index f70846e628e57..d77298b0e34dc 100644 --- a/gcc/config/i386/x86-tune-sched.cc +++ b/gcc/config/i386/x86-tune-sched.cc @@ -79,6 +79,7 @@ ix86_issue_rate (void) case PROCESSOR_CANNONLAKE: case PROCESSOR_ALDERLAKE: case PROCESSOR_YONGFENG: + case PROCESSOR_SHIJIDADAO: case PROCESSOR_GENERIC: return 4; @@ -446,6 +447,7 @@ ix86_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn, int cost, break; case PROCESSOR_YONGFENG: + case PROCESSOR_SHIJIDADAO: /* Stack engine allows to execute push&pop instructions in parallel. */ if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP) && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP)) diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def index 66512992b7b5b..343c32c291fa8 100644 --- a/gcc/config/i386/x86-tune.def +++ b/gcc/config/i386/x86-tune.def @@ -477,7 +477,7 @@ DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES, "avoid_4byte_prefixes", elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, "use_gather_2parts", ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_CORE_HYBRID - | m_YONGFENG | m_CORE_ATOM | m_GENERIC | m_GDS)) + | m_YONGFENG | m_SHIJIDADAO | m_CORE_ATOM | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2 elements. */ @@ -488,7 +488,7 @@ DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts", elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, "use_gather_4parts", ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_CORE_HYBRID - | m_YONGFENG | m_CORE_ATOM | m_GENERIC | m_GDS)) + | m_YONGFENG | m_SHIJIDADAO | m_CORE_ATOM | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4 elements. */ @@ -499,7 +499,7 @@ DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts", elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_8PARTS, "use_gather_8parts", ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER4 | m_CORE_HYBRID | m_CORE_ATOM - | m_YONGFENG | m_GENERIC | m_GDS)) + | m_YONGFENG | m_SHIJIDADAO | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more elements. */ @@ -509,7 +509,7 @@ DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, "use_scatter_8parts", /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or smaller FMA chain. */ DEF_TUNE (X86_TUNE_AVOID_128FMA_CHAINS, "avoid_fma_chains", m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 - | m_YONGFENG | m_GENERIC) + | m_YONGFENG | m_SHIJIDADAO | m_GENERIC) /* X86_TUNE_AVOID_256FMA_CHAINS: Avoid creating loops with tight 256bit or smaller FMA chain. */ diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 173cdef013160..b2e41a581dd1c 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -26245,6 +26245,9 @@ ZHAOXIN lujiazui CPU. @item yongfeng ZHAOXIN yongfeng CPU. +@item shijidadao +ZHAOXIN shijidadao CPU. + @item amdfam10h AMD Family 10h CPU. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 5d7a87fde86c4..c790e2f35184c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -34873,6 +34873,12 @@ SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, F16C, FXSR, RDSEED, AVX2, FMA, SHA, LZCNT instruction set support. +@item shijidadao +ZHAOXIN shijidadao CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, +SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16, +ABM, BMI, BMI2, F16C, FXSR, RDSEED, AVX2, FMA, SHA, LZCNT +instruction set support. + @item geode AMD Geode embedded processor with MMX and 3DNow!@: instruction set support. @end table diff --git a/gcc/testsuite/g++.target/i386/mv32.C b/gcc/testsuite/g++.target/i386/mv32.C index 6c993218d01c3..b311c35baa3d9 100644 --- a/gcc/testsuite/g++.target/i386/mv32.C +++ b/gcc/testsuite/g++.target/i386/mv32.C @@ -21,6 +21,10 @@ int __attribute__ ((target("arch=yongfeng"))) foo () { return 2; } +int __attribute__ ((target("arch=shijidadao"))) foo () { + return 3; +} + int main () { int val = foo (); @@ -29,6 +33,8 @@ int main () assert (val == 1); else if (__builtin_cpu_is ("yongfeng")) assert (val == 2); + else if (__builtin_cpu_is ("shijidadao")) + assert (val == 3); else assert (val == 0); diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc index 2a50f5bf67c86..c4dc89367ef58 100644 --- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc +++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc @@ -208,6 +208,7 @@ extern void test_arch_arrowlake_s (void) __attribute__((__target__("arch=arrowla extern void test_arch_pantherlake (void) __attribute__((__target__("arch=pantherlake"))); extern void test_arch_lujiazui (void) __attribute__((__target__("arch=lujiazui"))); extern void test_arch_yongfeng (void) __attribute__((__target__("arch=yongfeng"))); +extern void test_arch_shijidadao (void) __attribute__((__target__("arch=shijidadao"))); extern void test_arch_k8 (void) __attribute__((__target__("arch=k8"))); extern void test_arch_k8_sse3 (void) __attribute__((__target__("arch=k8-sse3"))); extern void test_arch_opteron (void) __attribute__((__target__("arch=opteron"))); @@ -233,6 +234,7 @@ extern void test_tune_corei7_avx (void) __attribute__((__target__("tune=corei7- extern void test_tune_core_avx2 (void) __attribute__((__target__("tune=core-avx2"))); extern void test_tune_lujiazui (void) __attribute__((__target__("tune=lujiazui"))); extern void test_tune_yongfeng (void) __attribute__((__target__("tune=yongfeng"))); +extern void test_tune_shijidadao (void) __attribute__((__target__("tune=shijidadao"))); extern void test_tune_k8 (void) __attribute__((__target__("tune=k8"))); extern void test_tune_k8_sse3 (void) __attribute__((__target__("tune=k8-sse3"))); extern void test_tune_opteron (void) __attribute__((__target__("tune=opteron"))); From 25860fd2a674373a6476af5ff0bd92354fc53d06 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 19 Jun 2024 21:10:39 +0200 Subject: [PATCH 009/114] bitint: Fix up lowering of COMPLEX_EXPR [PR115544] We don't really support _Complex _BitInt(N), the only place we use bitint complex types is for the .{ADD,SUB,MUL}_OVERFLOW internal function results and COMPLEX_EXPR in the usual case should be either not present yet because the ifns weren't folded and will be lowered, or optimized into something simpler, because normally the complex bitint should be used just for extracting the 2 subparts from it. Still, with disabled optimizations it can occassionally happen that it appears in the IL and that is why there is support for lowering those, but it doesn't handle optimizing those too much, so if it uses SSA_NAME, it relies on them having a backing VAR_DECL during the lowering. This is normally achieves through the && ((is_gimple_assign (use_stmt) && (gimple_assign_rhs_code (use_stmt) != COMPLEX_EXPR)) || gimple_code (use_stmt) == GIMPLE_COND) hunk in gimple_lower_bitint, but as the following testcase shows, there is one thing I've missed, the load optimization isn't guarded by the above stuff. So, either we'd need to add support for loads to lower_complexexpr_stmt, or because they should be really rare, this patch just disables the load optimization if at least one load use is a COMPLEX_EXPR (like we do already for PHIs, calls, asm). 2024-06-19 Jakub Jelinek PR tree-optimization/115544 * gimple-lower-bitint.cc (gimple_lower_bitint): Disable optimizing loads used by COMPLEX_EXPR operands. * gcc.dg/bitint-107.c: New test. --- gcc/gimple-lower-bitint.cc | 5 ++++- gcc/testsuite/gcc.dg/bitint-107.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/bitint-107.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 56e5f826a8d9f..f955f3eabd9b6 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -6630,7 +6630,10 @@ gimple_lower_bitint (void) continue; if (gimple_code (use_stmt) == GIMPLE_PHI || is_gimple_call (use_stmt) - || gimple_code (use_stmt) == GIMPLE_ASM) + || gimple_code (use_stmt) == GIMPLE_ASM + || (is_gimple_assign (use_stmt) + && (gimple_assign_rhs_code (use_stmt) + == COMPLEX_EXPR))) { optimizable_load = false; break; diff --git a/gcc/testsuite/gcc.dg/bitint-107.c b/gcc/testsuite/gcc.dg/bitint-107.c new file mode 100644 index 0000000000000..a3f5f534088f3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-107.c @@ -0,0 +1,16 @@ +/* PR tree-optimization/115544 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-O -fno-tree-fre -fno-tree-ccp -fno-tree-forwprop" } */ + +#if __BITINT_MAXWIDTH__ >= 129 +typedef _BitInt(129) B; +#else +typedef _BitInt(63) B; +#endif +B a, b; + +int +foo (void) +{ + return __builtin_mul_overflow (a, 1, &b); +} From e03583e7ee99552276a90a4094776fda55ab2e02 Mon Sep 17 00:00:00 2001 From: Patrick O'Neill Date: Tue, 18 Jun 2024 14:40:15 -0700 Subject: [PATCH 010/114] RISC-V: Promote Zaamo/Zalrsc to a when using an old binutils Binutils 2.42 and before don't support Zaamo/Zalrsc. When users specify both Zaamo and Zalrsc, promote them to 'a' in the -march string. This does not affect testsuite results for users with old versions of binutils. Testcases that failed due to 'call'/isa string continue to fail after this PATCH when using an old version of binutils. gcc/ChangeLog: * common/config/riscv/riscv-common.cc: Add 'a' extension to riscv_combine_info. Signed-off-by: Patrick O'Neill --- gcc/common/config/riscv/riscv-common.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index 1dc1d9904c7bd..410e673f5e017 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -401,6 +401,7 @@ static const struct riscv_ext_version riscv_ext_version_table[] = /* Combine extensions defined in this table */ static const struct riscv_ext_version riscv_combine_info[] = { + {"a", ISA_SPEC_CLASS_20191213, 2, 1}, {"zk", ISA_SPEC_CLASS_NONE, 1, 0}, {"zkn", ISA_SPEC_CLASS_NONE, 1, 0}, {"zks", ISA_SPEC_CLASS_NONE, 1, 0}, From f0204ae3861e5f2e6099719c2cb1718e064c8c12 Mon Sep 17 00:00:00 2001 From: "demin.han" Date: Wed, 19 Jun 2024 16:21:13 -0600 Subject: [PATCH 011/114] [PATCH v2] RISC-V: Remove float vector eqne pattern We can unify eqne and other comparison operations. Tested on RV32 and RV64 gcc/ChangeLog: * config/riscv/riscv-vector-builtins-bases.cc: Remove eqne cond * config/riscv/vector.md (@pred_eqne_scalar): Remove patterns (*pred_eqne_scalar_merge_tie_mask): Ditto (*pred_eqne_scalar): Ditto (*pred_eqne_scalar_narrow): Ditto gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/float-point-cmp-eqne.c: New test. --- .../riscv/riscv-vector-builtins-bases.cc | 8 +- gcc/config/riscv/vector.md | 86 ------------------- .../riscv/rvv/base/float-point-cmp-eqne.c | 54 ++++++++++++ 3 files changed, 56 insertions(+), 92 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/float-point-cmp-eqne.c diff --git a/gcc/config/riscv/riscv-vector-builtins-bases.cc b/gcc/config/riscv/riscv-vector-builtins-bases.cc index b6f6e4ff37e78..596b88cc8a3cd 100644 --- a/gcc/config/riscv/riscv-vector-builtins-bases.cc +++ b/gcc/config/riscv/riscv-vector-builtins-bases.cc @@ -1420,12 +1420,8 @@ class fcmp : public function_base switch (e.op_info->op) { case OP_TYPE_vf: { - if (CODE == EQ || CODE == NE) - return e.use_compare_insn (CODE, code_for_pred_eqne_scalar ( - e.vector_mode ())); - else - return e.use_compare_insn (CODE, code_for_pred_cmp_scalar ( - e.vector_mode ())); + return e.use_compare_insn (CODE, code_for_pred_cmp_scalar ( + e.vector_mode ())); } case OP_TYPE_vv: { return e.use_compare_insn (CODE, diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md index fbcdf96f038ba..f8fae6557d935 100644 --- a/gcc/config/riscv/vector.md +++ b/gcc/config/riscv/vector.md @@ -7545,92 +7545,6 @@ (set_attr "mode" "") (set_attr "spec_restriction" "none,thv,thv,none,none")]) -(define_expand "@pred_eqne_scalar" - [(set (match_operand: 0 "register_operand") - (if_then_else: - (unspec: - [(match_operand: 1 "vector_mask_operand") - (match_operand 6 "vector_length_operand") - (match_operand 7 "const_int_operand") - (match_operand 8 "const_int_operand") - (reg:SI VL_REGNUM) - (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (match_operator: 3 "equality_operator" - [(vec_duplicate:V_VLSF - (match_operand: 5 "register_operand")) - (match_operand:V_VLSF 4 "register_operand")]) - (match_operand: 2 "vector_merge_operand")))] - "TARGET_VECTOR" - {}) - -(define_insn "*pred_eqne_scalar_merge_tie_mask" - [(set (match_operand: 0 "register_operand" "=vm") - (if_then_else: - (unspec: - [(match_operand: 1 "register_operand" " 0") - (match_operand 5 "vector_length_operand" " rK") - (match_operand 6 "const_int_operand" " i") - (match_operand 7 "const_int_operand" " i") - (reg:SI VL_REGNUM) - (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (match_operator: 2 "equality_operator" - [(vec_duplicate:V_VLSF - (match_operand: 4 "register_operand" " f")) - (match_operand:V_VLSF 3 "register_operand" " vr")]) - (match_dup 1)))] - "TARGET_VECTOR" - "vmf%B2.vf\t%0,%3,%4,v0.t" - [(set_attr "type" "vfcmp") - (set_attr "mode" "") - (set_attr "merge_op_idx" "1") - (set_attr "vl_op_idx" "5") - (set (attr "ma") (symbol_ref "riscv_vector::get_ma(operands[6])")) - (set (attr "avl_type_idx") (const_int 7))]) - -;; We don't use early-clobber for LMUL <= 1 to get better codegen. -(define_insn "*pred_eqne_scalar" - [(set (match_operand: 0 "register_operand" "=vr, vr, &vr, &vr") - (if_then_else: - (unspec: - [(match_operand: 1 "vector_mask_operand" "vmWc1,vmWc1,vmWc1,vmWc1") - (match_operand 6 "vector_length_operand" " rK, rK, rK, rK") - (match_operand 7 "const_int_operand" " i, i, i, i") - (match_operand 8 "const_int_operand" " i, i, i, i") - (reg:SI VL_REGNUM) - (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (match_operator: 3 "equality_operator" - [(vec_duplicate:V_VLSF - (match_operand: 5 "register_operand" " f, f, f, f")) - (match_operand:V_VLSF 4 "register_operand" " vr, vr, vr, vr")]) - (match_operand: 2 "vector_merge_operand" " vu, 0, vu, 0")))] - "TARGET_VECTOR && riscv_vector::cmp_lmul_le_one (mode)" - "vmf%B3.vf\t%0,%4,%5%p1" - [(set_attr "type" "vfcmp") - (set_attr "mode" "") - (set_attr "spec_restriction" "thv,thv,rvv,rvv")]) - -;; We use early-clobber for source LMUL > dest LMUL. -(define_insn "*pred_eqne_scalar_narrow" - [(set (match_operand: 0 "register_operand" "=vm, vr, vr, &vr, &vr") - (if_then_else: - (unspec: - [(match_operand: 1 "vector_mask_operand" " 0,vmWc1,vmWc1,vmWc1,vmWc1") - (match_operand 6 "vector_length_operand" " rK, rK, rK, rK, rK") - (match_operand 7 "const_int_operand" " i, i, i, i, i") - (match_operand 8 "const_int_operand" " i, i, i, i, i") - (reg:SI VL_REGNUM) - (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (match_operator: 3 "equality_operator" - [(vec_duplicate:V_VLSF - (match_operand: 5 "register_operand" " f, f, f, f, f")) - (match_operand:V_VLSF 4 "register_operand" " vr, 0, 0, vr, vr")]) - (match_operand: 2 "vector_merge_operand" " vu, vu, 0, vu, 0")))] - "TARGET_VECTOR && riscv_vector::cmp_lmul_gt_one (mode)" - "vmf%B3.vf\t%0,%4,%5%p1" - [(set_attr "type" "vfcmp") - (set_attr "mode" "") - (set_attr "spec_restriction" "none,thv,thv,none,none")]) - ;; ------------------------------------------------------------------------------- ;; ---- Predicated floating-point merge ;; ------------------------------------------------------------------------------- diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-cmp-eqne.c b/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-cmp-eqne.c new file mode 100644 index 0000000000000..572bcb8f291be --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-cmp-eqne.c @@ -0,0 +1,54 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */ + +#include "riscv_vector.h" + +#define CMP_FLOAT_VF_1(ID, S, OP, IMM) \ + vbool##S##_t test_float_1_##ID##_##S (vfloat##S##m1_t op1, size_t vl) \ + { \ + return __riscv_vmf##OP##_vf_f##S##m1_b##S (op1, IMM, vl); \ + } + +CMP_FLOAT_VF_1 (0, 32, eq, 0.0) +CMP_FLOAT_VF_1 (1, 32, eq, 1.0) +CMP_FLOAT_VF_1 (2, 32, eq, __builtin_nanf ("123")) +CMP_FLOAT_VF_1 (3, 32, ne, 0.0) +CMP_FLOAT_VF_1 (4, 32, ne, 1.0) +CMP_FLOAT_VF_1 (5, 32, ne, __builtin_nanf ("123")) + +CMP_FLOAT_VF_1 (0, 64, eq, 0.0) +CMP_FLOAT_VF_1 (1, 64, eq, 1.0) +CMP_FLOAT_VF_1 (2, 64, eq, __builtin_nan ("123")) +CMP_FLOAT_VF_1 (3, 64, ne, 0.0) +CMP_FLOAT_VF_1 (4, 64, ne, 1.0) +CMP_FLOAT_VF_1 (5, 64, ne, __builtin_nan ("123")) + +#define CMP_FLOAT_VF_2(ID, S, OP, IMM) \ + vfloat##S##m1_t test_float_2_##ID##_##S (vfloat##S##m1_t op1, \ + vfloat##S##m1_t op2, size_t vl) \ + { \ + vfloat##S##m1_t op3 = __riscv_vfmv_s_f_f##S##m1 (IMM, vl); \ + vbool##S##_t mask1 = __riscv_vmf##OP##_vf_f##S##m1_b##S (op1, IMM, vl); \ + vbool##S##_t mask2 = __riscv_vmf##OP##_vv_f##S##m1_b##S (op1, op3, vl); \ + vbool##S##_t mask3 = __riscv_vmor (mask1, mask2, vl); \ + return __riscv_vmerge_vvm_f##S##m1_tu (op1, op1, op2, mask3, vl); \ + } + +CMP_FLOAT_VF_2 (0, 32, eq, 0.0) +CMP_FLOAT_VF_2 (1, 32, eq, 1.0) +CMP_FLOAT_VF_2 (2, 32, eq, __builtin_nanf ("123")) +CMP_FLOAT_VF_2 (3, 32, ne, 0.0) +CMP_FLOAT_VF_2 (4, 32, ne, 1.0) +CMP_FLOAT_VF_2 (5, 32, ne, __builtin_nanf ("123")) + +CMP_FLOAT_VF_2 (0, 64, eq, 0.0) +CMP_FLOAT_VF_2 (1, 64, eq, 1.0) +CMP_FLOAT_VF_2 (2, 64, eq, __builtin_nan ("123")) +CMP_FLOAT_VF_2 (3, 64, ne, 0.0) +CMP_FLOAT_VF_2 (4, 64, ne, 1.0) +CMP_FLOAT_VF_2 (5, 64, ne, __builtin_nan ("123")) + +/* { dg-final { scan-assembler-times {vmfeq\.vf} 12 } } */ +/* { dg-final { scan-assembler-times {vmfne\.vf} 12 } } */ +/* { dg-final { scan-assembler-times {vmfeq\.vv} 6 } } */ +/* { dg-final { scan-assembler-times {vmfne\.vv} 6 } } */ From a334189739e13f8de1f9af99f8d16970435cebc4 Mon Sep 17 00:00:00 2001 From: YunQiang Su Date: Thu, 20 Jun 2024 07:02:33 +0800 Subject: [PATCH 012/114] Revert "Build: Fix typo ac_cv_search_pthread_crate" This reverts commit 8088374a868aacab4dff208ec3e3fde790a1d9a3. --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 1469cd735392a..6e95b27d9df4a 100755 --- a/configure +++ b/configure @@ -9002,7 +9002,7 @@ fi if test "$ac_cv_search_pthread_create" = -lpthread; then CRAB1_LIBS="$CRAB1_LIBS -lpthread" -elif test "$ac_cv_search_pthread_create" = no; then +elif test "$ac_cv_search_pthread_crate" = no; then missing_rust_dynlibs="$missing_rust_dynlibs, libpthread" fi diff --git a/configure.ac b/configure.ac index 20457005e2993..88576b31bfcd5 100644 --- a/configure.ac +++ b/configure.ac @@ -2053,7 +2053,7 @@ fi if test "$ac_cv_search_pthread_create" = -lpthread; then CRAB1_LIBS="$CRAB1_LIBS -lpthread" -elif test "$ac_cv_search_pthread_create" = no; then +elif test "$ac_cv_search_pthread_crate" = no; then missing_rust_dynlibs="$missing_rust_dynlibs, libpthread" fi From 6d6587bc37f2039225e4fba9acaf7b26e600e3d3 Mon Sep 17 00:00:00 2001 From: YunQiang Su Date: Thu, 20 Jun 2024 07:02:47 +0800 Subject: [PATCH 013/114] Revert "build: Fix missing variable quotes" This reverts commit c6a9ab8c920f297c4efd289182aef9fbc73f5906. --- configure | 10 +++++----- configure.ac | 8 ++++---- gcc/configure | 2 +- gcc/configure.ac | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 6e95b27d9df4a..51576a41f3037 100755 --- a/configure +++ b/configure @@ -8994,15 +8994,15 @@ if test "$ac_res" != no; then : fi -if test "$ac_cv_search_dlopen" = -ldl; then +if test $ac_cv_search_dlopen = -ldl; then CRAB1_LIBS="$CRAB1_LIBS -ldl" -elif test "$ac_cv_search_dlopen" = no; then +elif test $ac_cv_search_dlopen = no; then missing_rust_dynlibs="libdl" fi -if test "$ac_cv_search_pthread_create" = -lpthread; then +if test $ac_cv_search_pthread_create = -lpthread; then CRAB1_LIBS="$CRAB1_LIBS -lpthread" -elif test "$ac_cv_search_pthread_crate" = no; then +elif test $ac_cv_search_pthread_crate = no; then missing_rust_dynlibs="$missing_rust_dynlibs, libpthread" fi @@ -19746,7 +19746,7 @@ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." diff --git a/configure.ac b/configure.ac index 88576b31bfcd5..5eda8dcdbf726 100644 --- a/configure.ac +++ b/configure.ac @@ -2045,15 +2045,15 @@ missing_rust_dynlibs=none AC_SEARCH_LIBS([dlopen], [dl]) AC_SEARCH_LIBS([pthread_create], [pthread]) -if test "$ac_cv_search_dlopen" = -ldl; then +if test $ac_cv_search_dlopen = -ldl; then CRAB1_LIBS="$CRAB1_LIBS -ldl" -elif test "$ac_cv_search_dlopen" = no; then +elif test $ac_cv_search_dlopen = no; then missing_rust_dynlibs="libdl" fi -if test "$ac_cv_search_pthread_create" = -lpthread; then +if test $ac_cv_search_pthread_create = -lpthread; then CRAB1_LIBS="$CRAB1_LIBS -lpthread" -elif test "$ac_cv_search_pthread_crate" = no; then +elif test $ac_cv_search_pthread_crate = no; then missing_rust_dynlibs="$missing_rust_dynlibs, libpthread" fi diff --git a/gcc/configure b/gcc/configure index b536af664d3de..9dc0b65dfaace 100755 --- a/gcc/configure +++ b/gcc/configure @@ -30239,7 +30239,7 @@ else fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_mips_explicit_relocs_pcrel" >&5 $as_echo "$gcc_cv_as_mips_explicit_relocs_pcrel" >&6; } -if test "x$gcc_cv_as_mips_explicit_relocs_pcrel" = "xyes"; then +if test $gcc_cv_as_mips_explicit_relocs_pcrel = yes; then $as_echo "#define MIPS_EXPLICIT_RELOCS MIPS_EXPLICIT_RELOCS_PCREL" >>confdefs.h diff --git a/gcc/configure.ac b/gcc/configure.ac index 1501bf89c89da..b2243e9954aac 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -5317,7 +5317,7 @@ x: AC_MSG_CHECKING(assembler and linker for explicit JALR relocation) gcc_cv_as_ld_jalr_reloc=no - if test "x$gcc_cv_as_mips_explicit_relocs" = "xyes"; then + if test $gcc_cv_as_mips_explicit_relocs = yes; then if test $in_tree_ld = yes ; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 20 -o "$gcc_cv_gld_major_version" -gt 2 \ && test $in_tree_ld_is_elf = yes; then From ebfffb6c6557f1375c230ae6751f697cdfab4a60 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Thu, 20 Jun 2024 00:17:14 +0000 Subject: [PATCH 014/114] Daily bump. --- ChangeLog | 32 +++++ gcc/ChangeLog | 140 +++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/fortran/ChangeLog | 16 +++ gcc/testsuite/ChangeLog | 261 ++++++++++++++++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 24 ++++ 6 files changed, 474 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index bdd1e5e342422..201193fee8c0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,35 @@ +2024-06-19 YunQiang Su + + Revert: + 2024-06-19 Collin Funk + + * configure.ac: Quote variable result of AC_SEARCH_LIBS. + * configure: Regenerate. + +2024-06-19 YunQiang Su + + Revert: + 2024-06-19 YunQiang Su + + PR bootstrap/115453 + * configure.ac: Fix typo ac_cv_search_pthread_crate. + * configure: Regnerate. + +2024-06-19 YunQiang Su + + PR bootstrap/115453 + * configure.ac: Fix typo ac_cv_search_pthread_crate. + * configure: Regnerate. + +2024-06-19 Collin Funk + + * configure.ac: Quote variable result of AC_SEARCH_LIBS. + * configure: Regenerate. + +2024-06-19 Ramana Radhakrishnan + + * MAINTAINERS: Update my email address. + 2024-06-18 Kyrylo Tkachov * MAINTAINERS (aarch64 port): Update my email address. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d64a751a55ea5..8610e76b07b30 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,143 @@ +2024-06-19 YunQiang Su + + Revert: + 2024-06-19 Collin Funk + + * configure.ac: Add missing quotation of variable + gcc_cv_as_mips_explicit_relocs. + * configure: Regenerate. + +2024-06-19 demin.han + + * config/riscv/riscv-vector-builtins-bases.cc: Remove eqne cond + * config/riscv/vector.md (@pred_eqne_scalar): Remove patterns + (*pred_eqne_scalar_merge_tie_mask): Ditto + (*pred_eqne_scalar): Ditto + (*pred_eqne_scalar_narrow): Ditto + +2024-06-19 Patrick O'Neill + + * common/config/riscv/riscv-common.cc: Add 'a' extension to + riscv_combine_info. + +2024-06-19 Jakub Jelinek + + PR tree-optimization/115544 + * gimple-lower-bitint.cc (gimple_lower_bitint): Disable optimizing + loads used by COMPLEX_EXPR operands. + +2024-06-19 mayshao + + * common/config/i386/cpuinfo.h (get_zhaoxin_cpu): Recognize shijidadao. + * common/config/i386/i386-common.cc: Add shijidadao. + * common/config/i386/i386-cpuinfo.h (enum processor_subtypes): + Add ZHAOXIN_FAM7H_SHIJIDADAO. + * config.gcc: Add shijidadao. + * config/i386/driver-i386.cc (host_detect_local_cpu): + Let -march=native recognize shijidadao processors. + * config/i386/i386-c.cc (ix86_target_macros_internal): Add shijidadao. + * config/i386/i386-options.cc (m_ZHAOXIN): Add m_SHIJIDADAO. + (m_SHIJIDADAO): New definition. + * config/i386/i386.h (enum processor_type): Add PROCESSOR_SHIJIDADAO. + * config/i386/x86-tune-costs.h (struct processor_costs): + Add shijidadao_cost. + * config/i386/x86-tune-sched.cc (ix86_issue_rate): Add shijidadao. + (ix86_adjust_cost): Ditto. + * config/i386/x86-tune.def (X86_TUNE_USE_GATHER_2PARTS): Add m_SHIJIDADAO. + (X86_TUNE_USE_GATHER_4PARTS): Ditto. + (X86_TUNE_USE_GATHER_8PARTS): Ditto. + (X86_TUNE_AVOID_128FMA_CHAINS): Ditto. + * doc/extend.texi: Add details about shijidadao. + * doc/invoke.texi: Ditto. + +2024-06-19 Takayuki 'January June' Suwa + + * config/xtensa/xtensa.cc (print_operand): + When outputting MEMW before the instruction, check if the previous + instruction is already that. + +2024-06-19 Andre Vieira + Stam Markianos-Wright + + * config/arm/arm-protos.h (arm_target_bb_ok_for_lob): Change + declaration to pass basic_block. + (arm_attempt_dlstp_transform): New declaration. + * config/arm/arm.cc (TARGET_LOOP_UNROLL_ADJUST): Define targethook. + (TARGET_PREDICT_DOLOOP_P): Likewise. + (arm_target_bb_ok_for_lob): Adapt condition. + (arm_mve_get_vctp_lanes): New function. + (arm_dl_usage_type): New internal enum. + (arm_get_required_vpr_reg): New function. + (arm_get_required_vpr_reg_param): New function. + (arm_get_required_vpr_reg_ret_val): New function. + (arm_mve_get_loop_vctp): New function. + (arm_mve_insn_predicated_by): New function. + (arm_mve_across_lane_insn_p): New function. + (arm_mve_load_store_insn_p): New function. + (arm_mve_impl_pred_on_outputs_p): New function. + (arm_mve_impl_pred_on_inputs_p): New function. + (arm_last_vect_def_insn): New function. + (arm_mve_impl_predicated_p): New function. + (arm_mve_check_reg_origin_is_num_elems): New function. + (arm_mve_dlstp_check_inc_counter): New function. + (arm_mve_dlstp_check_dec_counter): New function. + (arm_mve_loop_valid_for_dlstp): New function. + (arm_predict_doloop_p): New function. + (arm_loop_unroll_adjust): New function. + (arm_emit_mve_unpredicated_insn_to_seq): New function. + (arm_attempt_dlstp_transform): New function. + * config/arm/arm.opt (mdlstp): New option. + * config/arm/iterators.md (dlstp_elemsize, letp_num_lanes, + letp_num_lanes_neg, letp_num_lanes_minus_1): New attributes. + (DLSTP, LETP): New iterators. + * config/arm/mve.md (predicated_doloop_end_internal, + dlstp_insn): New insn patterns. + * config/arm/thumb2.md (doloop_end): Adapt to support tail-predicated + loops. + (doloop_begin): Likewise. + * config/arm/types.md (mve_misc): New mve type to represent + predicated_loop_end insn sequences. + * config/arm/unspecs.md: + (DLSTP8, DLSTP16, DLSTP32, DSLTP64, + LETP8, LETP16, LETP32, LETP64): New unspecs for DLSTP and LETP. + +2024-06-19 Andre Vieira + Stam Markianos-Wright + + * df-core.cc (df_bb_regno_only_def_find): New helper function. + * df.h (df_bb_regno_only_def_find): Declare new function. + * loop-doloop.cc (doloop_condition_get): Add support for detecting + predicated vectorized hardware loops. + (doloop_modify): Add support for GTU condition checks. + (doloop_optimize): Update costing computation to support alterations to + desc->niter_expr by the backend. + +2024-06-19 Collin Funk + + * configure.ac: Add missing quotation of variable + gcc_cv_as_mips_explicit_relocs. + * configure: Regenerate. + +2024-06-19 Takayuki 'January June' Suwa + + * config/xtensa/xtensa-protos.h (xtensa_constantsynth): + Change the second argument from HOST_WIDE_INT to rtx. + * config/xtensa/xtensa.cc (#include): + Add "context.h" and "pass_manager.h". + (machine_function): Add a new hash_map field "litpool_usage". + (xtensa_constantsynth): Make "src" (the second operand) accept + RTX literal instead of its value, and treat both bare and pooled + SI/SFmode literals equally by bit-exact canonicalization into + CONST_INT RTX internally. And then, make avoid synthesis if + such multiple identical canonicalized literals are found in same + function when optimizing for size. Finally, for literals where + synthesis is not possible or has been avoided, re-emit "move" + RTXes with canonicalized ones to increase the chances of sharing + literal pool entries. + * config/xtensa/xtensa.md (split patterns for constant synthesis): + Change to simply invoke xtensa_constantsynth() as mentioned above, + and add new patterns for when TARGET_AUTO_LITPOOLS is enabled. + 2024-06-18 Edwin Lu Robin Dapp diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 6fe37f7c38677..9df1831b6e340 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240619 +20240620 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a2275728a46b9..8fcd6d40c956c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,19 @@ +2024-06-19 Harald Anlauf + + PR fortran/115390 + * trans-decl.cc (gfc_conv_cfi_to_gfc): Move derivation of type sizes + for character via gfc_trans_vla_type_sizes to after character length + has been set. + +2024-06-19 Andre Vehreschild + + PR fortran/90076 + * trans-decl.cc (gfc_generate_function_code): Set vptr for + results to declared class type. + * trans-expr.cc (gfc_reset_vptr): Allow to provide the typespec + instead of the expression. + * trans.h (gfc_reset_vptr): Same. + 2024-06-17 Andre Vehreschild * trans.cc (gfc_deallocate_with_status): Check that object to deref diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2ae5731931d92..69e269330d9f1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,264 @@ +2024-06-19 demin.han + + * gcc.target/riscv/rvv/base/float-point-cmp-eqne.c: New test. + +2024-06-19 Jakub Jelinek + + PR tree-optimization/115544 + * gcc.dg/bitint-107.c: New test. + +2024-06-19 mayshao + + * g++.target/i386/mv32.C: Handle new -march + * gcc.target/i386/funcspec-56.inc: Ditto. + +2024-06-19 Harald Anlauf + + PR fortran/115390 + * gfortran.dg/bind_c_char_11.f90: New test. + +2024-06-19 Andre Vieira + Stam Markianos-Wright + + * gcc.target/arm/lob.h: Add new helpers. + * gcc.target/arm/lob1.c: Use new helpers. + * gcc.target/arm/lob6.c: Likewise. + * gcc.target/arm/mve/dlstp-compile-asm-1.c: New test. + * gcc.target/arm/mve/dlstp-compile-asm-2.c: New test. + * gcc.target/arm/mve/dlstp-compile-asm-3.c: New test. + * gcc.target/arm/mve/dlstp-int8x16.c: New test. + * gcc.target/arm/mve/dlstp-int8x16-run.c: New test. + * gcc.target/arm/mve/dlstp-int16x8.c: New test. + * gcc.target/arm/mve/dlstp-int16x8-run.c: New test. + * gcc.target/arm/mve/dlstp-int32x4.c: New test. + * gcc.target/arm/mve/dlstp-int32x4-run.c: New test. + * gcc.target/arm/mve/dlstp-int64x2.c: New test. + * gcc.target/arm/mve/dlstp-int64x2-run.c: New test. + * gcc.target/arm/mve/dlstp-invalid-asm.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-37.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-38.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-39.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-40.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-37.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-38.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-39.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-40.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-33.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-34.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-35.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-36.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-33.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-34.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-35.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-36.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-29.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-30.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-31.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-32.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-29.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-30.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-31.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-32.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-25.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-26.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-27.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-28.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-25.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-26.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-27.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-28.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-21.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-22.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-23.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-24.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-21.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-22.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-23.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-24.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-17.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-18.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-19.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-20.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-17.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-18.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-19.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-20.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-13.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-14.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-15.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-16.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-13.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-14.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-15.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-16.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add test macro. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-10.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-11.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-12.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-9.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-10.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-11.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-12.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-run-9.c: New test. + +2024-06-19 Richard Biener + + * gcc.dg/vect/bb-slp-32.c: Add check for correctness. + +2024-06-19 Andre Vehreschild + + PR fortran/90076 + * gfortran.dg/class_76.f90: Add declared vtab occurrence. + * gfortran.dg/class_78.f90: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-29.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-30.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-31.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-32.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-29.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-30.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-31.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-32.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-25.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-26.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-27.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-28.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-25.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-26.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-27.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-28.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-21.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-22.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-23.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-24.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-21.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-22.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-23.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-24.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-17.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-18.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-19.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-20.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-17.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-18.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-19.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-20.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-13.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-14.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-15.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-16.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-13.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-14.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-15.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-16.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-10.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-11.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-12.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-9.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-10.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-11.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-12.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-9.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/rvv/autovec/binop/vec_sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-5.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-6.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-7.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-8.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-5.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-6.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-7.c: New test. + * gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-run-8.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/sat_arith.h: Add helper macro for + testing. + * gcc.target/riscv/sat_u_sub-45.c: New test. + * gcc.target/riscv/sat_u_sub-46.c: New test. + * gcc.target/riscv/sat_u_sub-47.c: New test. + * gcc.target/riscv/sat_u_sub-48.c: New test. + * gcc.target/riscv/sat_u_sub-run-45.c: New test. + * gcc.target/riscv/sat_u_sub-run-46.c: New test. + * gcc.target/riscv/sat_u_sub-run-47.c: New test. + * gcc.target/riscv/sat_u_sub-run-48.c: New test. + +2024-06-19 Pan Li + + * gcc.target/riscv/sat_arith.h: Add helper + macro for testing. + * gcc.target/riscv/sat_u_sub-41.c: New test. + * gcc.target/riscv/sat_u_sub-42.c: New test. + * gcc.target/riscv/sat_u_sub-43.c: New test. + * gcc.target/riscv/sat_u_sub-44.c: New test. + * gcc.target/riscv/sat_u_sub-run-41.c: New test. + * gcc.target/riscv/sat_u_sub-run-42.c: New test. + * gcc.target/riscv/sat_u_sub-run-43.c: New test. + * gcc.target/riscv/sat_u_sub-run-44.c: New test. + 2024-06-18 Jeff Law * gcc.target/riscv/zbs-ext-2.c: Do not run for -Os. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 907f6cfb0e83c..94a5ce9a1329c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,27 @@ +2024-06-19 Jonathan Wakely + + * include/std/future: Adjust whitespace to use tabs for + indentation. + +2024-06-19 Jonathan Wakely + + * include/std/future (_State_baseV2::_Setter): Add + noexcept to call operator. + (_State_baseV2::_Setter): Likewise. + +2024-06-19 Jonathan Wakely + + * include/bits/stl_pair.h [__cpp_lib_concepts] (pair()): Add + conditional noexcept. + +2024-06-19 Jonathan Wakely + + * include/bits/stl_tempbuf.h (__get_temporary_buffer): Cast + argument to size_t to handle negative values and suppress + -Wsign-compare warning. + (_Temporary_buffer): Move diagnostic pragmas to new location of + call to std::get_temporary_buffer. + 2024-06-18 Jonathan Wakely * include/bits/cpp_type_traits.h: Fix outdated comment about the From 70466e6f9d9fb87f78ffe2e397ca876b380cb493 Mon Sep 17 00:00:00 2001 From: Feng Xue Date: Sat, 15 Jun 2024 23:17:10 +0800 Subject: [PATCH 015/114] vect: Add a function to check lane-reducing stmt Add a utility function to check if a statement is lane-reducing operation, which could simplify some existing code. 2024-06-16 Feng Xue gcc/ * tree-vectorizer.h (lane_reducing_stmt_p): New function. * tree-vect-slp.cc (vect_analyze_slp): Use new function lane_reducing_stmt_p to check statement. --- gcc/tree-vect-slp.cc | 4 +--- gcc/tree-vectorizer.h | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 7d18b5bfee5d2..a5665946a4ebc 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -3919,7 +3919,6 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size) scalar_stmts.create (loop_vinfo->reductions.length ()); for (auto next_info : loop_vinfo->reductions) { - gassign *g; next_info = vect_stmt_to_vectorize (next_info); if ((STMT_VINFO_RELEVANT_P (next_info) || STMT_VINFO_LIVE_P (next_info)) @@ -3931,8 +3930,7 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size) { /* Do not discover SLP reductions combining lane-reducing ops, that will fail later. */ - if (!(g = dyn_cast (STMT_VINFO_STMT (next_info))) - || !lane_reducing_op_p (gimple_assign_rhs_code (g))) + if (!lane_reducing_stmt_p (STMT_VINFO_STMT (next_info))) scalar_stmts.quick_push (next_info); else { diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 6bb0f5c3a56f6..60224f4e28472 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2169,12 +2169,24 @@ vect_apply_runtime_profitability_check_p (loop_vec_info loop_vinfo) && th >= vect_vf_for_cost (loop_vinfo)); } +/* Return true if CODE is a lane-reducing opcode. */ + inline bool lane_reducing_op_p (code_helper code) { return code == DOT_PROD_EXPR || code == WIDEN_SUM_EXPR || code == SAD_EXPR; } +/* Return true if STMT is a lane-reducing statement. */ + +inline bool +lane_reducing_stmt_p (gimple *stmt) +{ + if (auto *assign = dyn_cast (stmt)) + return lane_reducing_op_p (gimple_assign_rhs_code (assign)); + return false; +} + /* Source location + hotness information. */ extern dump_user_location_t vect_location; From a944e57506fc64b8eede79c2405ba0b498461f0b Mon Sep 17 00:00:00 2001 From: Feng Xue Date: Sun, 16 Jun 2024 12:08:56 +0800 Subject: [PATCH 016/114] vect: Remove duplicated check on reduction operand In vectorizable_reduction, one check on a reduction operand via index could be contained by another one check via pointer, so remove the former. 2024-06-16 Feng Xue gcc/ * tree-vect-loop.cc (vectorizable_reduction): Remove the duplicated check. --- gcc/tree-vect-loop.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index eeb75c09e91aa..aab408d1019db 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -7815,11 +7815,9 @@ vectorizable_reduction (loop_vec_info loop_vinfo, "use not simple.\n"); return false; } - if (i == STMT_VINFO_REDUC_IDX (stmt_info)) - continue; - /* For an IFN_COND_OP we might hit the reduction definition operand - twice (once as definition, once as else). */ + /* Skip reduction operands, and for an IFN_COND_OP we might hit the + reduction operand twice (once as definition, once as else). */ if (op.ops[i] == op.ops[STMT_VINFO_REDUC_IDX (stmt_info)]) continue; From 0726f1cde5459ccdbaa6af8c6904276a28d572ba Mon Sep 17 00:00:00 2001 From: Feng Xue Date: Sun, 16 Jun 2024 12:17:26 +0800 Subject: [PATCH 017/114] vect: Use one reduction_type local variable Two local variables were defined to refer same STMT_VINFO_REDUC_TYPE, better to keep only one. 2024-06-16 Feng Xue gcc/ * tree-vect-loop.cc (vectorizable_reduction): Remove v_reduc_type, and replace it to another local variable reduction_type. --- gcc/tree-vect-loop.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index aab408d1019db..27f77ed8b0b60 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -7868,10 +7868,10 @@ vectorizable_reduction (loop_vec_info loop_vinfo, if (lane_reducing) STMT_VINFO_REDUC_VECTYPE_IN (stmt_info) = vectype_in; - enum vect_reduction_type v_reduc_type = STMT_VINFO_REDUC_TYPE (phi_info); - STMT_VINFO_REDUC_TYPE (reduc_info) = v_reduc_type; + enum vect_reduction_type reduction_type = STMT_VINFO_REDUC_TYPE (phi_info); + STMT_VINFO_REDUC_TYPE (reduc_info) = reduction_type; /* If we have a condition reduction, see if we can simplify it further. */ - if (v_reduc_type == COND_REDUCTION) + if (reduction_type == COND_REDUCTION) { if (slp_node && SLP_TREE_LANES (slp_node) != 1) return false; @@ -8038,7 +8038,7 @@ vectorizable_reduction (loop_vec_info loop_vinfo, STMT_VINFO_REDUC_CODE (reduc_info) = orig_code; - vect_reduction_type reduction_type = STMT_VINFO_REDUC_TYPE (reduc_info); + reduction_type = STMT_VINFO_REDUC_TYPE (reduc_info); if (reduction_type == TREE_CODE_REDUCTION) { /* Check whether it's ok to change the order of the computation. From b9c369d900ccfbd2271028611af3f08b5cf6f998 Mon Sep 17 00:00:00 2001 From: Feng Xue Date: Sun, 16 Jun 2024 13:21:13 +0800 Subject: [PATCH 018/114] vect: Use an array to replace 3 relevant variables It's better to place 3 relevant independent variables into array, since we have requirement to access them via an index in the following patch. At the same time, this change may get some duplicated code be more compact. 2024-06-16 Feng Xue gcc/ * tree-vect-loop.cc (vect_transform_reduction): Replace vec_oprnds0/1/2 with one new array variable vec_oprnds[3]. --- gcc/tree-vect-loop.cc | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 27f77ed8b0b60..1d60ac47e5531 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -8580,9 +8580,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, /* Transform. */ tree new_temp = NULL_TREE; - auto_vec vec_oprnds0; - auto_vec vec_oprnds1; - auto_vec vec_oprnds2; + auto_vec vec_oprnds[3]; if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "transform reduction.\n"); @@ -8630,14 +8628,15 @@ vect_transform_reduction (loop_vec_info loop_vinfo, definition. */ if (!cond_fn_p) { + gcc_assert (reduc_index >= 0 && reduc_index <= 2); vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, single_defuse_cycle && reduc_index == 0 - ? NULL_TREE : op.ops[0], &vec_oprnds0, + ? NULL_TREE : op.ops[0], &vec_oprnds[0], single_defuse_cycle && reduc_index == 1 - ? NULL_TREE : op.ops[1], &vec_oprnds1, + ? NULL_TREE : op.ops[1], &vec_oprnds[1], op.num_ops == 3 && !(single_defuse_cycle && reduc_index == 2) - ? op.ops[2] : NULL_TREE, &vec_oprnds2); + ? op.ops[2] : NULL_TREE, &vec_oprnds[2]); } else { @@ -8645,12 +8644,12 @@ vect_transform_reduction (loop_vec_info loop_vinfo, vectype. */ gcc_assert (single_defuse_cycle && (reduc_index == 1 || reduc_index == 2)); - vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, - op.ops[0], truth_type_for (vectype_in), &vec_oprnds0, + vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, op.ops[0], + truth_type_for (vectype_in), &vec_oprnds[0], reduc_index == 1 ? NULL_TREE : op.ops[1], - NULL_TREE, &vec_oprnds1, + NULL_TREE, &vec_oprnds[1], reduc_index == 2 ? NULL_TREE : op.ops[2], - NULL_TREE, &vec_oprnds2); + NULL_TREE, &vec_oprnds[2]); } /* For single def-use cycles get one copy of the vectorized reduction @@ -8658,20 +8657,21 @@ vect_transform_reduction (loop_vec_info loop_vinfo, if (single_defuse_cycle) { vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, 1, - reduc_index == 0 ? op.ops[0] : NULL_TREE, &vec_oprnds0, - reduc_index == 1 ? op.ops[1] : NULL_TREE, &vec_oprnds1, + reduc_index == 0 ? op.ops[0] : NULL_TREE, + &vec_oprnds[0], + reduc_index == 1 ? op.ops[1] : NULL_TREE, + &vec_oprnds[1], reduc_index == 2 ? op.ops[2] : NULL_TREE, - &vec_oprnds2); + &vec_oprnds[2]); } bool emulated_mixed_dot_prod = vect_is_emulated_mixed_dot_prod (stmt_info); + unsigned num = vec_oprnds[reduc_index == 0 ? 1 : 0].length (); - unsigned num = (reduc_index == 0 - ? vec_oprnds1.length () : vec_oprnds0.length ()); for (unsigned i = 0; i < num; ++i) { gimple *new_stmt; - tree vop[3] = { vec_oprnds0[i], vec_oprnds1[i], NULL_TREE }; + tree vop[3] = { vec_oprnds[0][i], vec_oprnds[1][i], NULL_TREE }; if (masked_loop_p && !mask_by_cond_expr) { /* No conditional ifns have been defined for dot-product yet. */ @@ -8696,7 +8696,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, else { if (op.num_ops >= 3) - vop[2] = vec_oprnds2[i]; + vop[2] = vec_oprnds[2][i]; if (masked_loop_p && mask_by_cond_expr) { @@ -8727,14 +8727,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, } if (single_defuse_cycle && i < num - 1) - { - if (reduc_index == 0) - vec_oprnds0.safe_push (gimple_get_lhs (new_stmt)); - else if (reduc_index == 1) - vec_oprnds1.safe_push (gimple_get_lhs (new_stmt)); - else if (reduc_index == 2) - vec_oprnds2.safe_push (gimple_get_lhs (new_stmt)); - } + vec_oprnds[reduc_index].safe_push (gimple_get_lhs (new_stmt)); else if (slp_node) slp_node->push_vec_def (new_stmt); else From ecbc96bb2873e453b0bd33d602ce34ad0d9d9cfd Mon Sep 17 00:00:00 2001 From: Feng Xue Date: Sun, 16 Jun 2024 13:33:52 +0800 Subject: [PATCH 019/114] vect: Tighten an assertion for lane-reducing in transform According to logic of code nearby the assertion, all lane-reducing operations should not appear, not just DOT_PROD_EXPR. Since "use_mask_by_cond_expr_p" treats SAD_EXPR same as DOT_PROD_EXPR, and WIDEN_SUM_EXPR should not be allowed by the following assertion "gcc_assert (commutative_binary_op_p (...))", so tighten the assertion. 2024-06-16 Feng Xue gcc/ * tree-vect-loop.cc (vect_transform_reduction): Change assertion to cover all lane-reducing ops. --- gcc/tree-vect-loop.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 1d60ac47e5531..347dac97e497e 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -8618,7 +8618,8 @@ vect_transform_reduction (loop_vec_info loop_vinfo, } bool single_defuse_cycle = STMT_VINFO_FORCE_SINGLE_CYCLE (reduc_info); - gcc_assert (single_defuse_cycle || lane_reducing_op_p (code)); + bool lane_reducing = lane_reducing_op_p (code); + gcc_assert (single_defuse_cycle || lane_reducing); /* Create the destination vector */ tree scalar_dest = gimple_get_lhs (stmt_info->stmt); @@ -8674,8 +8675,9 @@ vect_transform_reduction (loop_vec_info loop_vinfo, tree vop[3] = { vec_oprnds[0][i], vec_oprnds[1][i], NULL_TREE }; if (masked_loop_p && !mask_by_cond_expr) { - /* No conditional ifns have been defined for dot-product yet. */ - gcc_assert (code != DOT_PROD_EXPR); + /* No conditional ifns have been defined for lane-reducing op + yet. */ + gcc_assert (!lane_reducing); /* Make sure that the reduction accumulator is vop[0]. */ if (reduc_index == 1) From bea447a2982f3094aa3423b5045cea929f4f4700 Mon Sep 17 00:00:00 2001 From: Collin Funk Date: Wed, 19 Jun 2024 16:36:50 -0700 Subject: [PATCH 020/114] build: Fix missing variable quotes and typo When dlopen and pthread_create are in libc the variable is set to "none required", therefore running configure will show the following errors: ./configure: line 8997: test: too many arguments ./configure: line 8999: test: too many arguments ./configure: line 9003: test: too many arguments ./configure: line 9005: test: =: unary operator expected ChangeLog: PR bootstrap/115453 * configure.ac: Quote variable result of AC_SEARCH_LIBS. Fix typo ac_cv_search_pthread_crate. * configure: Regenerate. Signed-off-by: Collin Funk --- configure | 8 ++++---- configure.ac | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 51576a41f3037..51bf1d1add185 100755 --- a/configure +++ b/configure @@ -8994,15 +8994,15 @@ if test "$ac_res" != no; then : fi -if test $ac_cv_search_dlopen = -ldl; then +if test "$ac_cv_search_dlopen" = -ldl; then CRAB1_LIBS="$CRAB1_LIBS -ldl" -elif test $ac_cv_search_dlopen = no; then +elif test "$ac_cv_search_dlopen" = no; then missing_rust_dynlibs="libdl" fi -if test $ac_cv_search_pthread_create = -lpthread; then +if test "$ac_cv_search_pthread_create" = -lpthread; then CRAB1_LIBS="$CRAB1_LIBS -lpthread" -elif test $ac_cv_search_pthread_crate = no; then +elif test "$ac_cv_search_pthread_create" = no; then missing_rust_dynlibs="$missing_rust_dynlibs, libpthread" fi diff --git a/configure.ac b/configure.ac index 5eda8dcdbf726..20457005e2993 100644 --- a/configure.ac +++ b/configure.ac @@ -2045,15 +2045,15 @@ missing_rust_dynlibs=none AC_SEARCH_LIBS([dlopen], [dl]) AC_SEARCH_LIBS([pthread_create], [pthread]) -if test $ac_cv_search_dlopen = -ldl; then +if test "$ac_cv_search_dlopen" = -ldl; then CRAB1_LIBS="$CRAB1_LIBS -ldl" -elif test $ac_cv_search_dlopen = no; then +elif test "$ac_cv_search_dlopen" = no; then missing_rust_dynlibs="libdl" fi -if test $ac_cv_search_pthread_create = -lpthread; then +if test "$ac_cv_search_pthread_create" = -lpthread; then CRAB1_LIBS="$CRAB1_LIBS -lpthread" -elif test $ac_cv_search_pthread_crate = no; then +elif test "$ac_cv_search_pthread_create" = no; then missing_rust_dynlibs="$missing_rust_dynlibs, libpthread" fi From 46bb4ce4d30ab749d40f6f4cef6f1fb7c7813452 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 19 Jun 2024 12:57:27 +0200 Subject: [PATCH 021/114] tree-optimization/114413 - SLP CSE after permute optimization We currently fail to re-CSE SLP nodes after optimizing permutes which results in off cost estimates. For gcc.dg/vect/bb-slp-32.c this shows in not re-using the SLP node with the load and arithmetic for both the store and the reduction. The following implements CSE by re-bst-mapping nodes as finalization part of vect_optimize_slp. I've tried to make the CSE part of permute materialization but it isn't a very good fit there. I've not bothered to implement something more complete, also handling external defs or defs without SLP_TREE_SCALAR_STMTS. I realize this might result in more BB SLP which in turn might slow down code given costing for BB SLP is difficult (even that we now vectorize gcc.dg/vect/bb-slp-32.c on x86_64 might be not a good idea). This is nevertheless feeding more accurate info to costing which is good. PR tree-optimization/114413 * tree-vect-slp.cc (release_scalar_stmts_to_slp_tree_map): New function, split out from ... (vect_analyze_slp): ... here. Call it. (vect_cse_slp_nodes): New function. (vect_optimize_slp): Call it. * gcc.dg/vect/bb-slp-32.c: Expect CSE and vectorization on x86. --- gcc/testsuite/gcc.dg/vect/bb-slp-32.c | 6 +++ gcc/tree-vect-slp.cc | 76 ++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-32.c b/gcc/testsuite/gcc.dg/vect/bb-slp-32.c index 4f72727b6948c..475b241c36ed6 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-32.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-32.c @@ -38,3 +38,9 @@ int main() abort (); return 0; } + +/* This is a weak test but we want to re-use the arithmetic for both the + store and the reduction. */ +/* { dg-final { scan-tree-dump "re-using SLP tree" "slp2" { target { x86_64-*-* i?86-*-* } } } } */ +/* On i386 we vectorize both the store and the reduction. */ +/* { dg-final { scan-tree-dump-times "basic block part vectorized" 2 "slp2" { target { x86_64-*-* i?86-*-* } } } } */ diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index a5665946a4ebc..4935cf9e52107 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -1585,6 +1585,23 @@ bst_traits::equal (value_type existing, value_type candidate) return true; } +typedef hash_map , slp_tree, + simple_hashmap_traits > + scalar_stmts_to_slp_tree_map_t; + +/* Release BST_MAP. */ + +static void +release_scalar_stmts_to_slp_tree_map (scalar_stmts_to_slp_tree_map_t *bst_map) +{ + /* The map keeps a reference on SLP nodes built, release that. */ + for (scalar_stmts_to_slp_tree_map_t::iterator it = bst_map->begin (); + it != bst_map->end (); ++it) + if ((*it).second) + vect_free_slp_tree ((*it).second); + delete bst_map; +} + /* ??? This was std::pair, tree> but then vec::insert does memmove and that's not compatible with std::pair. */ @@ -1683,10 +1700,6 @@ vect_slp_linearize_chain (vec_info *vinfo, } } -typedef hash_map , slp_tree, - simple_hashmap_traits > - scalar_stmts_to_slp_tree_map_t; - static slp_tree vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node, vec stmts, unsigned int group_size, @@ -4003,14 +4016,7 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size) } } - - - /* The map keeps a reference on SLP nodes built, release that. */ - for (scalar_stmts_to_slp_tree_map_t::iterator it = bst_map->begin (); - it != bst_map->end (); ++it) - if ((*it).second) - vect_free_slp_tree ((*it).second); - delete bst_map; + release_scalar_stmts_to_slp_tree_map (bst_map); if (pattern_found && dump_enabled_p ()) { @@ -6068,6 +6074,43 @@ vect_optimize_slp_pass::run () free_graph (m_slpg); } +/* Apply CSE to NODE and its children using BST_MAP. */ + +static void +vect_cse_slp_nodes (scalar_stmts_to_slp_tree_map_t *bst_map, slp_tree& node) +{ + if (SLP_TREE_DEF_TYPE (node) == vect_internal_def + && SLP_TREE_CODE (node) != VEC_PERM_EXPR + /* Besides some VEC_PERM_EXPR, two-operator nodes also + lack scalar stmts and thus CSE doesn't work via bst_map. Ideally + we'd have sth that works for all internal and external nodes. */ + && !SLP_TREE_SCALAR_STMTS (node).is_empty ()) + { + if (slp_tree *leader = bst_map->get (SLP_TREE_SCALAR_STMTS (node))) + { + if (*leader != node) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "re-using SLP tree %p for %p\n", + (void *)*leader, (void *)node); + vect_free_slp_tree (node); + (*leader)->refcnt += 1; + node = *leader; + } + return; + } + + bst_map->put (SLP_TREE_SCALAR_STMTS (node).copy (), node); + node->refcnt += 1; + /* And recurse. */ + } + + for (slp_tree &child : SLP_TREE_CHILDREN (node)) + if (child) + vect_cse_slp_nodes (bst_map, child); +} + /* Optimize the SLP graph of VINFO. */ void @@ -6076,6 +6119,15 @@ vect_optimize_slp (vec_info *vinfo) if (vinfo->slp_instances.is_empty ()) return; vect_optimize_slp_pass (vinfo).run (); + + /* Apply CSE again to nodes after permute optimization. */ + scalar_stmts_to_slp_tree_map_t *bst_map + = new scalar_stmts_to_slp_tree_map_t (); + + for (auto inst : vinfo->slp_instances) + vect_cse_slp_nodes (bst_map, SLP_INSTANCE_TREE (inst)); + + release_scalar_stmts_to_slp_tree_map (bst_map); } /* Gather loads reachable from the individual SLP graph entries. */ From ccaa39a268bef2a1d8880022696ff2dcaa6af941 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Thu, 20 Jun 2024 08:01:36 +0100 Subject: [PATCH 022/114] Fortran: Auto array allocation with function dependencies [PR59104] 2024-06-20 Paul Thomas gcc/fortran PR fortran/59104 * dependency.cc (dependency_fcn, gfc_function_dependency): New functions to detect dependency in array bounds and character lengths on old style function results. * dependency.h : Add prototype for gfc_function_dependency. * error.cc (error_print): Remove trailing space. * gfortran.h : Remove dummy_order and add fn_result_spec. * symbol.cc : Remove declaration of next_dummy_order.. (gfc_set_sym_referenced): remove setting of symbol dummy order. * trans-array.cc (gfc_trans_auto_array_allocation): Detect non-dummy symbols with function dependencies and put the allocation at the end of the initialization code. * trans-decl.cc : Include dependency.h. (decl_order): New function that determines uses the location field of the symbol 'declared_at' to determine the order of two declarations. (gfc_defer_symbol_init): Call gfc_function_dependency to put dependent symbols in the right part of the tlink chain. Use the location field of the symbol declared_at to determine the order of declarations. (gfc_trans_auto_character_variable): Put character length initialization of dependent symbols at the end of the chain. * trans.cc (gfc_add_init_cleanup): Add boolean argument with default false that determines whther an expression is placed at the back or the front of the initialization chain. * trans.h : Update the prototype for gfc_add_init_cleanup. gcc/testsuite/ PR fortran/59104 * gfortran.dg/dependent_decls_2.f90: New test. --- gcc/fortran/dependency.cc | 82 +++++++++++++++++ gcc/fortran/dependency.h | 4 +- gcc/fortran/error.cc | 2 +- gcc/fortran/gfortran.h | 6 +- gcc/fortran/symbol.cc | 10 --- gcc/fortran/trans-array.cc | 15 +++- gcc/fortran/trans-decl.cc | 51 +++++++++-- gcc/fortran/trans.cc | 5 +- gcc/fortran/trans.h | 3 +- .../gfortran.dg/dependent_decls_2.f90 | 89 +++++++++++++++++++ 10 files changed, 238 insertions(+), 29 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/dependent_decls_2.f90 diff --git a/gcc/fortran/dependency.cc b/gcc/fortran/dependency.cc index bafe8cbc5bc3d..15edf1af9dfff 100644 --- a/gcc/fortran/dependency.cc +++ b/gcc/fortran/dependency.cc @@ -2497,3 +2497,85 @@ gfc_omp_expr_prefix_same (gfc_expr *lexpr, gfc_expr *rexpr) return true; } + + +/* gfc_function_dependency returns true for non-dummy symbols with dependencies + on an old-fashioned function result (ie. proc_name = proc_name->result). + This is used to ensure that initialization code appears after the function + result is treated and that any mutual dependencies between these symbols are + respected. */ + +static bool +dependency_fcn (gfc_expr *e, gfc_symbol *sym, + int *f ATTRIBUTE_UNUSED) +{ + if (e == NULL) + return false; + + if (e && e->expr_type == EXPR_VARIABLE) + { + if (e->symtree && e->symtree->n.sym == sym) + return true; + /* Recurse to see if this symbol is dependent on the function result. If + so an indirect dependence exists, which should be handled in the same + way as a direct dependence. The recursion is prevented from being + infinite by statement order. */ + else if (e->symtree && e->symtree->n.sym) + return gfc_function_dependency (e->symtree->n.sym, sym); + } + + return false; +} + + +bool +gfc_function_dependency (gfc_symbol *sym, gfc_symbol *proc_name) +{ + bool dep = false; + + if (proc_name && proc_name->attr.function + && proc_name == proc_name->result + && !(sym->attr.dummy || sym->attr.result)) + { + if (sym->fn_result_dep) + return true; + + if (sym->as && sym->as->type == AS_EXPLICIT) + { + for (int dim = 0; dim < sym->as->rank; dim++) + { + if (sym->as->lower[dim] + && sym->as->lower[dim]->expr_type != EXPR_CONSTANT) + dep = gfc_traverse_expr (sym->as->lower[dim], proc_name, + dependency_fcn, 0); + if (dep) + { + sym->fn_result_dep = 1; + return true; + } + if (sym->as->upper[dim] + && sym->as->upper[dim]->expr_type != EXPR_CONSTANT) + dep = gfc_traverse_expr (sym->as->upper[dim], proc_name, + dependency_fcn, 0); + if (dep) + { + sym->fn_result_dep = 1; + return true; + } + } + } + + if (sym->ts.type == BT_CHARACTER + && sym->ts.u.cl && sym->ts.u.cl->length + && sym->ts.u.cl->length->expr_type != EXPR_CONSTANT) + dep = gfc_traverse_expr (sym->ts.u.cl->length, proc_name, + dependency_fcn, 0); + if (dep) + { + sym->fn_result_dep = 1; + return true; + } + } + + return false; + } diff --git a/gcc/fortran/dependency.h b/gcc/fortran/dependency.h index ea4bd04b0e82f..8f172f86f08f4 100644 --- a/gcc/fortran/dependency.h +++ b/gcc/fortran/dependency.h @@ -23,7 +23,7 @@ enum gfc_dep_check { NOT_ELEMENTAL, /* Not elemental case: normal dependency check. */ ELEM_CHECK_VARIABLE, /* Test whether variables overlap. */ - ELEM_DONT_CHECK_VARIABLE /* Test whether variables overlap only if used + ELEM_DONT_CHECK_VARIABLE /* Test whether variables overlap only if used in an expression. */ }; @@ -43,3 +43,5 @@ bool gfc_are_equivalenced_arrays (gfc_expr *, gfc_expr *); bool gfc_omp_expr_prefix_same (gfc_expr *, gfc_expr *); gfc_expr * gfc_discard_nops (gfc_expr *); + +bool gfc_function_dependency (gfc_symbol *, gfc_symbol *); diff --git a/gcc/fortran/error.cc b/gcc/fortran/error.cc index a0e1a1c368441..e89667613b181 100644 --- a/gcc/fortran/error.cc +++ b/gcc/fortran/error.cc @@ -892,7 +892,7 @@ error_print (const char *type, const char *format0, va_list argp) #else m = INTTYPE_MAXIMUM (ptrdiff_t); #endif - m = 2 * m + 1; + m = 2 * m + 1; error_uinteger (a & m); } else diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 36ed8eeac2dfd..ed1213a41cbb8 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1893,10 +1893,6 @@ typedef struct gfc_symbol points to C and B's is NULL. */ struct gfc_common_head* common_head; - /* Make sure setup code for dummy arguments is generated in the correct - order. */ - int dummy_order; - gfc_namelist *namelist, *namelist_tail; /* The tlink field is used in the front end to carry the module @@ -1935,6 +1931,8 @@ typedef struct gfc_symbol unsigned forall_index:1; /* Set if the symbol is used in a function result specification . */ unsigned fn_result_spec:1; + /* Set if the symbol spec. depends on an old-style function result. */ + unsigned fn_result_dep:1; /* Used to avoid multiple resolutions of a single symbol. */ /* = 2 if this has already been resolved as an intrinsic, in gfc_resolve_intrinsic, diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc index 5db3c887127bc..2f326492d5fb8 100644 --- a/gcc/fortran/symbol.cc +++ b/gcc/fortran/symbol.cc @@ -96,11 +96,6 @@ const mstring dtio_procs[] = minit ("_dtio_unformatted_write", DTIO_WUF), }; -/* This is to make sure the backend generates setup code in the correct - order. */ - -static int next_dummy_order = 1; - gfc_namespace *gfc_current_ns; gfc_namespace *gfc_global_ns_list; @@ -941,15 +936,10 @@ gfc_check_conflict (symbol_attribute *attr, const char *name, locus *where) void gfc_set_sym_referenced (gfc_symbol *sym) { - if (sym->attr.referenced) return; sym->attr.referenced = 1; - - /* Remember which order dummy variables are accessed in. */ - if (sym->attr.dummy) - sym->dummy_order = next_dummy_order++; } diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index cc50b961a9790..19d69aec9c0dd 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -6885,6 +6885,7 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym, tree space; tree inittree; bool onstack; + bool back; gcc_assert (!(sym->attr.pointer || sym->attr.allocatable)); @@ -6896,6 +6897,12 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym, gcc_assert (GFC_ARRAY_TYPE_P (type)); onstack = TREE_CODE (type) != POINTER_TYPE; + /* In the case of non-dummy symbols with dependencies on an old-fashioned + function result (ie. proc_name = proc_name->result), gfc_add_init_cleanup + must be called with the last, optional argument false so that the alloc- + ation occurs after the processing of the result. */ + back = sym->fn_result_dep; + gfc_init_block (&init); /* Evaluate character string length. */ @@ -6923,7 +6930,8 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym, if (onstack) { - gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE); + gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE, + back); return; } @@ -7010,10 +7018,11 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym, addr = fold_build1_loc (gfc_get_location (&sym->declared_at), ADDR_EXPR, TREE_TYPE (decl), space); gfc_add_modify (&init, decl, addr); - gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE); + gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE, + back); tmp = NULL_TREE; } - gfc_add_init_cleanup (block, inittree, tmp); + gfc_add_init_cleanup (block, inittree, tmp, back); } diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index f7fb6eec336a8..8d4f06a4e1d2b 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -49,6 +49,7 @@ along with GCC; see the file COPYING3. If not see #include "omp-general.h" #include "attr-fnspec.h" #include "tree-iterator.h" +#include "dependency.h" #define MAX_LABEL_VALUE 99999 @@ -833,6 +834,19 @@ gfc_allocate_lang_decl (tree decl) DECL_LANG_SPECIFIC (decl) = ggc_cleared_alloc (); } + +/* Determine order of two symbol declarations. */ + +static bool +decl_order (gfc_symbol *sym1, gfc_symbol *sym2) +{ + if (sym1->declared_at.lb->location > sym2->declared_at.lb->location) + return true; + else + return false; +} + + /* Remember a symbol to generate initialization/cleanup code at function entry/exit. */ @@ -850,18 +864,34 @@ gfc_defer_symbol_init (gfc_symbol * sym) last = head = sym->ns->proc_name; p = last->tlink; + gfc_function_dependency (sym, head); + /* Make sure that setup code for dummy variables which are used in the setup of other variables is generated first. */ if (sym->attr.dummy) { /* Find the first dummy arg seen after us, or the first non-dummy arg. - This is a circular list, so don't go past the head. */ + This is a circular list, so don't go past the head. */ while (p != head - && (!p->attr.dummy || p->dummy_order > sym->dummy_order)) - { - last = p; - p = p->tlink; - } + && (!p->attr.dummy || decl_order (p, sym))) + { + last = p; + p = p->tlink; + } + } + else if (sym->fn_result_dep) + { + /* In the case of non-dummy symbols with dependencies on an old-fashioned + function result (ie. proc_name = proc_name->result), make sure that the + order in the tlink chain is such that the code appears in declaration + order. This ensures that mutual dependencies between these symbols are + respected. */ + while (p != head + && (!p->attr.result || decl_order (sym, p))) + { + last = p; + p = p->tlink; + } } /* Insert in between last and p. */ last->tlink = sym; @@ -4183,12 +4213,19 @@ gfc_trans_auto_character_variable (gfc_symbol * sym, gfc_wrapped_block * block) stmtblock_t init; tree decl; tree tmp; + bool back; gcc_assert (sym->backend_decl); gcc_assert (sym->ts.u.cl && sym->ts.u.cl->length); gfc_init_block (&init); + /* In the case of non-dummy symbols with dependencies on an old-fashioned + function result (ie. proc_name = proc_name->result), gfc_add_init_cleanup + must be called with the last, optional argument false so that the process + ing of the character length occurs after the processing of the result. */ + back = sym->fn_result_dep; + /* Evaluate the string length expression. */ gfc_conv_string_length (sym->ts.u.cl, NULL, &init); @@ -4201,7 +4238,7 @@ gfc_trans_auto_character_variable (gfc_symbol * sym, gfc_wrapped_block * block) tmp = fold_build1_loc (input_location, DECL_EXPR, TREE_TYPE (decl), decl); gfc_add_expr_to_block (&init, tmp); - gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE); + gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE, back); } /* Set the initial value of ASSIGN statement auxiliary variable explicitly. */ diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc index 1335b8cc48bb2..1067e032621be 100644 --- a/gcc/fortran/trans.cc +++ b/gcc/fortran/trans.cc @@ -2806,14 +2806,15 @@ gfc_start_wrapped_block (gfc_wrapped_block* block, tree code) /* Add a new pair of initializers/clean-up code. */ void -gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup) +gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup, + bool back) { gcc_assert (block); /* The new pair of init/cleanup should be "wrapped around" the existing block of code, thus the initialization is added to the front and the cleanup to the back. */ - add_expr_to_chain (&block->init, init, true); + add_expr_to_chain (&block->init, init, !back); add_expr_to_chain (&block->cleanup, cleanup, false); } diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 5e064af5ccbde..f019c89edf224 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -473,7 +473,8 @@ void gfc_conv_class_to_class (gfc_se *, gfc_expr *, gfc_typespec, bool, bool, void gfc_start_wrapped_block (gfc_wrapped_block* block, tree code); /* Add a pair of init/cleanup code to the block. Each one might be a NULL_TREE if not required. */ -void gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup); +void gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup, + bool back = false); /* Finalize the block, that is, create a single expression encapsulating the original code together with init and clean-up code. */ tree gfc_finish_wrapped_block (gfc_wrapped_block* block); diff --git a/gcc/testsuite/gfortran.dg/dependent_decls_2.f90 b/gcc/testsuite/gfortran.dg/dependent_decls_2.f90 new file mode 100644 index 0000000000000..73c84ea3bc505 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dependent_decls_2.f90 @@ -0,0 +1,89 @@ +! { dg-do run } +! +! Fix for PR59104 in which the dependence on the old style function result +! was not taken into account in the ordering of auto array allocation and +! characters with dependent lengths. +! +! Contributed by Tobias Burnus +! +module m + implicit none + integer, parameter :: dp = kind([double precision::]) + contains + function f(x) + integer, intent(in) :: x + real(dp) f(x/2) + real(dp) g(x/2) + integer y(size (f)+1) ! This was the original problem + integer z(size (f) + size (y)) ! Found in development of the fix + integer w(size (f) + size (y) + x) ! Check dummy is OK + integer :: l1(size(y)) + integer :: l2(size(z)) + integer :: l3(size(w)) + f = 10.0 + y = 1 ! Stop -Wall from complaining + z = 1; g = 1; w = 1; l1 = 1; l2 = 1; l3 = 1 + if (size (f) .ne. 1) stop 1 + if (size (g) .ne. 1) stop 2 + if (size (y) .ne. 2) stop 3 + if (size (z) .ne. 3) stop 4 + if (size (w) .ne. 5) stop 5 + if (size (l1) .ne. 2) stop 6 ! Check indirect dependencies + if (size (l2) .ne. 3) stop 7 + if (size (l3) .ne. 5) stop 8 + + end function f + function e(x) result(f) + integer, intent(in) :: x + real(dp) f(x/2) + real(dp) g(x/2) + integer y(size (f)+1) + integer z(size (f) + size (y)) ! As was this. + integer w(size (f) + size (y) + x) + integer :: l1(size(y)) + integer :: l2(size(z)) + integer :: l3(size(w)) + f = 10.0 + y = 1; z = 1; g = 1; w = 1; l1 = 1; l2 = 1; l3 = 1 + if (size (f) .ne. 2) stop 9 + if (size (g) .ne. 2) stop 10 + if (size (y) .ne. 3) stop 11 + if (size (z) .ne. 5) stop 12 + if (size (w) .ne. 9) stop 13 + if (size (l1) .ne. 3) stop 14 ! Check indirect dependencies + if (size (l2) .ne. 5) stop 15 + if (size (l3) .ne. 9) stop 16 + end function + function d(x) ! After fixes to arrays, what was needed was known! + integer, intent(in) :: x + character(len = x/2) :: d + character(len = len (d)) :: line + character(len = len (d) + len (line)) :: line2 + character(len = len (d) + len (line) + x) :: line3 +! Commented out lines give implicit type warnings with gfortran and nagfor +! character(len = len (d)) :: line4 (len (line3)) + character(len = len (line3)) :: line4 (len (line3)) +! character(len = size(len4, 1)) :: line5 + line = repeat ("a", len (d)) + line2 = repeat ("b", x) + line3 = repeat ("c", len (line3)) + if (len (line2) .ne. x) stop 17 + if (line3 .ne. "cccccccc") stop 18 + d = line + line4 = line3 + if (size (line4) .ne. 8) stop 19 + if (any (line4 .ne. "cccccccc")) stop 20 + end +end module m + +program p + use m + implicit none + real(dp) y + + y = sum (f (2)) + if (int (y) .ne. 10) stop 21 + y = sum (e (4)) + if (int (y) .ne. 20) stop 22 + if (d (4) .ne. "aa") stop 23 +end program p From 4867cc815531ede8bc356a2507f1c35ee6e6399c Mon Sep 17 00:00:00 2001 From: Hongyu Wang Date: Mon, 17 Jun 2024 10:34:01 +0800 Subject: [PATCH 023/114] i386: Fix some ISA bit test in option_override Adjust several new feature check in ix86_option_override_interal that directly use TARGET_* instead of TARGET_*_P (opts->ix86_isa_flags) to avoid cmdline option overrides target_attribute isa flag. gcc/ChangeLog: * config/i386/i386-options.cc (ix86_option_override_internal): Use TARGET_*_P (opts->x_ix86_isa_flags*) instead of TARGET_* for UINTR, LAM and APX_F. gcc/testsuite/ChangeLog: * gcc.target/i386/apx-ccmp-2.c: Remove -mno-apxf in option. * gcc.target/i386/funcspec-56.inc: Drop uintr tests. * gcc.target/i386/funcspec-6.c: Add uintr tests. --- gcc/config/i386/i386-options.cc | 14 +++++++++----- gcc/testsuite/gcc.target/i386/apx-ccmp-2.c | 2 +- gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 -- gcc/testsuite/gcc.target/i386/funcspec-6.c | 2 ++ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 65c5bad9c285e..1ef2c71a7a239 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -2115,15 +2115,18 @@ ix86_option_override_internal (bool main_args_p, opts->x_ix86_stringop_alg = no_stringop; } - if (TARGET_APX_F && !TARGET_64BIT) + if (TARGET_APX_F_P (opts->x_ix86_isa_flags2) + && !TARGET_64BIT_P (opts->x_ix86_isa_flags)) error ("%<-mapxf%> is not supported for 32-bit code"); - else if (opts->x_ix86_apx_features != apx_none && !TARGET_64BIT) + else if (opts->x_ix86_apx_features != apx_none + && !TARGET_64BIT_P (opts->x_ix86_isa_flags)) error ("%<-mapx-features=%> option is not supported for 32-bit code"); - if (TARGET_UINTR && !TARGET_64BIT) + if (TARGET_UINTR_P (opts->x_ix86_isa_flags2) + && !TARGET_64BIT_P (opts->x_ix86_isa_flags)) error ("%<-muintr%> not supported for 32-bit code"); - if (ix86_lam_type && !TARGET_LP64) + if (ix86_lam_type && !TARGET_LP64_P (opts->x_ix86_isa_flags)) error ("%<-mlam=%> option: [u48|u57] not supported for 32-bit code"); if (!opts->x_ix86_arch_string) @@ -2504,7 +2507,8 @@ ix86_option_override_internal (bool main_args_p, init_machine_status = ix86_init_machine_status; /* Override APX flag here if ISA bit is set. */ - if (TARGET_APX_F && !OPTION_SET_P (ix86_apx_features)) + if (TARGET_APX_F_P (opts->x_ix86_isa_flags2) + && !OPTION_SET_P (ix86_apx_features)) opts->x_ix86_apx_features = apx_all; /* Validate -mregparm= value. */ diff --git a/gcc/testsuite/gcc.target/i386/apx-ccmp-2.c b/gcc/testsuite/gcc.target/i386/apx-ccmp-2.c index 4a0784394c326..192c045872840 100644 --- a/gcc/testsuite/gcc.target/i386/apx-ccmp-2.c +++ b/gcc/testsuite/gcc.target/i386/apx-ccmp-2.c @@ -1,6 +1,6 @@ /* { dg-do run { target { ! ia32 } } } */ /* { dg-require-effective-target apxf } */ -/* { dg-options "-O3 -mno-apxf" } */ +/* { dg-options "-O3" } */ __attribute__((noinline, noclone, target("apxf"))) int foo_apx(int a, int b, int c, int d) diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc index c4dc89367ef58..e4713eaa88d44 100644 --- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc +++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc @@ -69,7 +69,6 @@ extern void test_avx512vp2intersect (void) __attribute__((__target__("avx512vp2i extern void test_amx_tile (void) __attribute__((__target__("amx-tile"))); extern void test_amx_int8 (void) __attribute__((__target__("amx-int8"))); extern void test_amx_bf16 (void) __attribute__((__target__("amx-bf16"))); -extern void test_uintr (void) __attribute__((__target__("uintr"))); extern void test_hreset (void) __attribute__((__target__("hreset"))); extern void test_keylocker (void) __attribute__((__target__("kl"))); extern void test_widekl (void) __attribute__((__target__("widekl"))); @@ -158,7 +157,6 @@ extern void test_no_avx512vp2intersect (void) __attribute__((__target__("no-avx5 extern void test_no_amx_tile (void) __attribute__((__target__("no-amx-tile"))); extern void test_no_amx_int8 (void) __attribute__((__target__("no-amx-int8"))); extern void test_no_amx_bf16 (void) __attribute__((__target__("no-amx-bf16"))); -extern void test_no_uintr (void) __attribute__((__target__("no-uintr"))); extern void test_no_hreset (void) __attribute__((__target__("no-hreset"))); extern void test_no_keylocker (void) __attribute__((__target__("no-kl"))); extern void test_no_widekl (void) __attribute__((__target__("no-widekl"))); diff --git a/gcc/testsuite/gcc.target/i386/funcspec-6.c b/gcc/testsuite/gcc.target/i386/funcspec-6.c index ea896b7ebfdb7..033c9a50e23c0 100644 --- a/gcc/testsuite/gcc.target/i386/funcspec-6.c +++ b/gcc/testsuite/gcc.target/i386/funcspec-6.c @@ -4,6 +4,8 @@ #include "funcspec-56.inc" +extern void test_uintr (void) __attribute__((__target__("uintr"))); +extern void test_no_uintr (void) __attribute__((__target__("no-uintr"))); extern void test_arch_foo (void) __attribute__((__target__("arch=foo"))); /* { dg-error "bad value" } */ extern void test_tune_foo (void) __attribute__((__target__("tune=foo"))); /* { dg-error "bad value" } */ From 21b54dad4789396f6877e08024c3d40eec2861d6 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Thu, 1 Feb 2024 13:15:27 +0100 Subject: [PATCH 024/114] ada: Fix list of attributes defined by Ada 2022 Recognize references to attributes Put_Image and Object_Size as language-defined in Ada 2022 and implementation-defined in earlier versions of Ada. Other attributes listed in Ada 2022 RM, K.2 and currently implemented in GNAT are correctly categorized. This change only affects code with restriction No_Implementation_Attributes. gcc/ada/ * sem_attr.adb (Attribute_22): Add Put_Image and Object_Size. * sem_attr.ads (Attribute_Impl_Def): Remove Object_Size. --- gcc/ada/sem_attr.adb | 4 +++- gcc/ada/sem_attr.ads | 11 ----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 9c3bc62d32137..c2bb094492d34 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -185,7 +185,9 @@ package body Sem_Attr is (Attribute_Enum_Rep | Attribute_Enum_Val | Attribute_Index | - Attribute_Preelaborable_Initialization => True, + Attribute_Object_Size | + Attribute_Preelaborable_Initialization | + Attribute_Put_Image => True, others => False); -- The following array contains all attributes that imply a modification diff --git a/gcc/ada/sem_attr.ads b/gcc/ada/sem_attr.ads index 52359e40ef68f..17dce1fb0b018 100644 --- a/gcc/ada/sem_attr.ads +++ b/gcc/ada/sem_attr.ads @@ -381,17 +381,6 @@ package Sem_Attr is -- other composite object passed by reference, there is no other way -- of specifying that a zero address should be passed. - ----------------- - -- Object_Size -- - ----------------- - - Attribute_Object_Size => True, - -- Type'Object_Size is the same as Type'Size for all types except - -- fixed-point types and discrete types. For fixed-point types and - -- discrete types, this attribute gives the size used for default - -- allocation of objects and components of the size. See section in - -- Einfo ("Handling of Type'Size values") for further details. - ------------------------- -- Passed_By_Reference -- ------------------------- From cba9a6c978da6c5ef559fba9509b89551ed82812 Mon Sep 17 00:00:00 2001 From: Steve Baird Date: Fri, 10 May 2024 15:03:37 -0700 Subject: [PATCH 025/114] ada: Improve preprocessor error handling. In some cases, gnatprep would correctly emit an error message and then incorrectly exit with a return code of zero, indicating success. In some cases, a correct message about an error detected by the integrated preprocessor would be accompanied by an incorrect message indicating that a source file could not be found. gcc/ada/ * gprep.adb (Process_Files.Process_One_File): When calling OS_Exit in an error path, pass in a Status parameter of 1 instead of 0 (because 0 indicates success). * lib-load.adb (Load_Main_Source): Do not emit a message about a missing source file if other error messages were generated by calling Load_Source_File; the file isn't missing - it failed preprocessing. --- gcc/ada/gprep.adb | 2 +- gcc/ada/lib-load.adb | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/ada/gprep.adb b/gcc/ada/gprep.adb index a95cd634cc143..3cb8026a042dd 100644 --- a/gcc/ada/gprep.adb +++ b/gcc/ada/gprep.adb @@ -552,7 +552,7 @@ package body GPrep is Errutil.Finalize (Source_Type => "input"); - OS_Exit (0); + OS_Exit (1); -- Otherwise, close the output file, and we are done diff --git a/gcc/ada/lib-load.adb b/gcc/ada/lib-load.adb index 59adabc612c74..d5ea087a4fa46 100644 --- a/gcc/ada/lib-load.adb +++ b/gcc/ada/lib-load.adb @@ -313,6 +313,7 @@ package body Lib.Load is Is_Predefined_Renaming_File_Name (Fname); GNAT_Name : constant Boolean := Is_GNAT_File_Name (Fname); + Saved_Error_Count : constant Nat := Total_Errors_Detected; Version : Word := 0; begin @@ -336,7 +337,14 @@ package body Lib.Load is if Main_Source_File > No_Source_File then Version := Source_Checksum (Main_Source_File); - else + -- If we get here and Saved_Error_Count /= Total_Errors_Detected, + -- then an error occurred during preprocessing. In this case + -- we have already generated an error message during preprocessing + -- and we do not want to emit an incorrect "file foo.adb not found" + -- message here. + + elsif Saved_Error_Count = Total_Errors_Detected then + -- To avoid emitting a source location (since there is no file), -- we write a custom error message instead of using the machinery -- in errout.adb. From 6e5f911e779e7571ce8c6f082f8aafaa2d5eca23 Mon Sep 17 00:00:00 2001 From: Justin Squirek Date: Thu, 9 May 2024 19:50:01 +0000 Subject: [PATCH 026/114] ada: Update documentation for 'Super This patch moves the documentation for 'Super from gnat language extensions to experimental language extensions. gcc/ada/ * doc/gnat_rm/gnat_language_extensions.rst: Add entry for 'Super. * doc/gnat_rm/implementation_defined_attributes.rst: Remove entry for 'Super. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate. --- .../doc/gnat_rm/gnat_language_extensions.rst | 27 + .../implementation_defined_attributes.rst | 24 - gcc/ada/gnat_rm.texi | 933 +++++++++--------- gcc/ada/gnat_ugn.texi | 4 +- 4 files changed, 497 insertions(+), 491 deletions(-) diff --git a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst index cf1ad60f13cb1..99cab9d2816b4 100644 --- a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst +++ b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst @@ -368,6 +368,33 @@ support interactions with GPU. Here is a link to the full RFC: https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-storage-model.rst +Attribute Super +--------------- +.. index:: Super + +The ``Super`` attribute can be applied to objects of tagged types in order +to obtain a view conversion to the most immediate specific parent type. + +It cannot be applied to objects of types without any ancestors, or types whose +immediate parent is abstract. + +.. code-block:: ada + + type T1 is tagged null record; + procedure P (V : T1); + + type T2 is new T1 with null record; + procedure P (V : T2); + + procedure Call (V : T2'Class) is + begin + V'Super.P; -- Equivalent to "P (T1 (V));", a nondispatching call + -- to T1's primitive procedure P. + end; + +Here is a link to the full RFC: +https://github.com/QuentinOchem/ada-spark-rfcs/blob/oop/considered/rfc-oop-super.rst + Simpler accessibility model --------------------------- diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst b/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst index d5a55b920fee5..2db245a0b884a 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst @@ -1225,30 +1225,6 @@ type ``RACW_Stub_Type`` declared in the internal implementation-defined unit ``System.Partition_Interface``. Use of this attribute will create an implicit dependency on this unit. -Attribute Super -=============== -.. index:: Super - -The ``Super`` attribute can be applied to objects of tagged types in order -to obtain a view conversion to the most immediate specific parent type. - -It cannot be applied to objects of types without any ancestors, or types whose -immediate parent is an interface type. - -.. code-block:: ada - - type T1 is tagged null record; - procedure P (V : T1); - - type T2 is new T1 with null record; - procedure P (V : T2); - - procedure Call (V : T2'Class) is - begin - V'Super.P; -- Equivalent to "P (T1 (V));", a nondispatching call - -- to T1's primitive procedure P. - end; - Attribute System_Allocator_Alignment ==================================== .. index:: Alignment, allocator diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 4dfb896e42f85..8068b4de4c641 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -19,7 +19,7 @@ @copying @quotation -GNAT Reference Manual , May 28, 2024 +GNAT Reference Manual , Jun 14, 2024 AdaCore @@ -433,7 +433,6 @@ Implementation Defined Attributes * Attribute Small_Numerator:: * Attribute Storage_Unit:: * Attribute Stub_Type:: -* Attribute Super:: * Attribute System_Allocator_Alignment:: * Attribute Target_Name:: * Attribute To_Address:: @@ -902,6 +901,7 @@ Curated Extensions Experimental Language Extensions * Pragma Storage_Model:: +* Attribute Super:: * Simpler accessibility model:: * Case pattern matching:: * Mutably Tagged Types with Size’Class Aspect:: @@ -10277,7 +10277,6 @@ consideration, you should minimize the use of these attributes. * Attribute Small_Numerator:: * Attribute Storage_Unit:: * Attribute Stub_Type:: -* Attribute Super:: * Attribute System_Allocator_Alignment:: * Attribute Target_Name:: * Attribute To_Address:: @@ -11667,7 +11666,7 @@ with coprime factors (i.e. as an irreducible fraction). @code{Standard'Storage_Unit} (@code{Standard} is the only allowed prefix) provides the same value as @code{System.Storage_Unit}. -@node Attribute Stub_Type,Attribute Super,Attribute Storage_Unit,Implementation Defined Attributes +@node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes @anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1b0} @section Attribute Stub_Type @@ -11691,35 +11690,8 @@ type @code{RACW_Stub_Type} declared in the internal implementation-defined unit @code{System.Partition_Interface}. Use of this attribute will create an implicit dependency on this unit. -@node Attribute Super,Attribute System_Allocator_Alignment,Attribute Stub_Type,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-super}@anchor{1b1} -@section Attribute Super - - -@geindex Super - -The @code{Super} attribute can be applied to objects of tagged types in order -to obtain a view conversion to the most immediate specific parent type. - -It cannot be applied to objects of types without any ancestors, or types whose -immediate parent is an interface type. - -@example -type T1 is tagged null record; -procedure P (V : T1); - -type T2 is new T1 with null record; -procedure P (V : T2); - -procedure Call (V : T2'Class) is -begin - V'Super.P; -- Equivalent to "P (T1 (V));", a nondispatching call - -- to T1's primitive procedure P. -end; -@end example - -@node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Super,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1b2} +@node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes +@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1b1} @section Attribute System_Allocator_Alignment @@ -11736,7 +11708,7 @@ with alignment too large or to enable a realignment circuitry if the alignment request is larger than this value. @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1b3} +@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1b2} @section Attribute Target_Name @@ -11749,7 +11721,7 @@ standard gcc target name without the terminating slash (for example, GNAT 5.0 on windows yields “i586-pc-mingw32msv”). @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1b4} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1b3} @section Attribute To_Address @@ -11772,7 +11744,7 @@ modular manner (e.g., -1 means the same as 16#FFFF_FFFF# on a 32 bits machine). @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1b5} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1b4} @section Attribute To_Any @@ -11782,7 +11754,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1b6} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1b5} @section Attribute Type_Class @@ -11812,7 +11784,7 @@ applies to all concurrent types. This attribute is designed to be compatible with the DEC Ada 83 attribute of the same name. @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1b7} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1b6} @section Attribute Type_Key @@ -11824,7 +11796,7 @@ about the type or subtype. This provides improved compatibility with other implementations that support this attribute. @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1b8} +@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1b7} @section Attribute TypeCode @@ -11834,7 +11806,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1b9} +@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1b8} @section Attribute Unconstrained_Array @@ -11848,7 +11820,7 @@ still static, and yields the result of applying this test to the generic actual. @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1ba} +@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1b9} @section Attribute Universal_Literal_String @@ -11876,7 +11848,7 @@ end; @end example @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1bb} +@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1ba} @section Attribute Unrestricted_Access @@ -12063,7 +12035,7 @@ In general this is a risky approach. It may appear to “work” but such uses o of GNAT to another, so are best avoided if possible. @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1bc} +@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1bb} @section Attribute Update @@ -12144,7 +12116,7 @@ A := A'Update ((1, 2) => 20, (3, 4) => 30); which changes element (1,2) to 20 and (3,4) to 30. @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1bd} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1bc} @section Attribute Valid_Value @@ -12156,7 +12128,7 @@ a String, and returns Boolean. @code{T'Valid_Value (S)} returns True if and only if @code{T'Value (S)} would not raise Constraint_Error. @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1be} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1bd} @section Attribute Valid_Scalars @@ -12190,7 +12162,7 @@ write a function with a single use of the attribute, and then call that function from multiple places. @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1bf} +@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1be} @section Attribute VADS_Size @@ -12210,7 +12182,7 @@ gives the result that would be obtained by applying the attribute to the corresponding type. @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{16c}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1c0} +@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{16c}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1bf} @section Attribute Value_Size @@ -12224,7 +12196,7 @@ a value of the given subtype. It is the same as @code{type'Size}, but, unlike @code{Size}, may be set for non-first subtypes. @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1c1} +@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1c0} @section Attribute Wchar_T_Size @@ -12236,7 +12208,7 @@ primarily for constructing the definition of this type in package @code{Interfaces.C}. The result is a static constant. @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1c2} +@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1c1} @section Attribute Word_Size @@ -12247,7 +12219,7 @@ prefix) provides the value @code{System.Word_Size}. The result is a static constant. @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top -@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1c3}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1c4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1c2}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1c3}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} @chapter Standard and Implementation Defined Restrictions @@ -12276,7 +12248,7 @@ language defined or GNAT-specific, are listed in the following. @end menu @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1c5}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1c6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1c4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1c5} @section Partition-Wide Restrictions @@ -12369,7 +12341,7 @@ then all compilation units in the partition must obey the restriction). @end menu @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1c7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1c6} @subsection Immediate_Reclamation @@ -12381,7 +12353,7 @@ deallocation, any storage reserved at run time for an object is immediately reclaimed when the object no longer exists. @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1c8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1c7} @subsection Max_Asynchronous_Select_Nesting @@ -12393,7 +12365,7 @@ detected at compile time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1c9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1c8} @subsection Max_Entry_Queue_Length @@ -12414,7 +12386,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1ca} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1c9} @subsection Max_Protected_Entries @@ -12425,7 +12397,7 @@ bounds of every entry family of a protected unit shall be static, or shall be defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1cb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1ca} @subsection Max_Select_Alternatives @@ -12434,7 +12406,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. [RM D.7] Specifies the maximum number of alternatives in a selective accept. @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1cc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1cb} @subsection Max_Storage_At_Blocking @@ -12445,7 +12417,7 @@ Storage_Size that can be retained by a blocked task. A violation of this restriction causes Storage_Error to be raised. @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1cd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1cc} @subsection Max_Task_Entries @@ -12458,7 +12430,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1ce} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1cd} @subsection Max_Tasks @@ -12471,7 +12443,7 @@ time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1cf} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1ce} @subsection No_Abort_Statements @@ -12481,7 +12453,7 @@ Storage_Error to be raised. no calls to Task_Identification.Abort_Task. @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1d0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1cf} @subsection No_Access_Parameter_Allocators @@ -12492,7 +12464,7 @@ occurrences of an allocator as the actual parameter to an access parameter. @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1d1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1d0} @subsection No_Access_Subprograms @@ -12502,7 +12474,7 @@ parameter. declarations of access-to-subprogram types. @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1d2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1d1} @subsection No_Allocators @@ -12512,7 +12484,7 @@ declarations of access-to-subprogram types. occurrences of an allocator. @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1d3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1d2} @subsection No_Anonymous_Allocators @@ -12522,7 +12494,7 @@ occurrences of an allocator. occurrences of an allocator of anonymous access type. @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1d4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1d3} @subsection No_Asynchronous_Control @@ -12532,7 +12504,7 @@ occurrences of an allocator of anonymous access type. dependences on the predefined package Asynchronous_Task_Control. @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1d5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1d4} @subsection No_Calendar @@ -12542,7 +12514,7 @@ dependences on the predefined package Asynchronous_Task_Control. dependences on package Calendar. @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1d6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1d5} @subsection No_Coextensions @@ -12552,7 +12524,7 @@ dependences on package Calendar. coextensions. See 3.10.2. @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1d7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1d6} @subsection No_Default_Initialization @@ -12569,7 +12541,7 @@ is to prohibit all cases of variables declared without a specific initializer (including the case of OUT scalar parameters). @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1d8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1d7} @subsection No_Delay @@ -12579,7 +12551,7 @@ initializer (including the case of OUT scalar parameters). delay statements and no semantic dependences on package Calendar. @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1d9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1d8} @subsection No_Dependence @@ -12622,7 +12594,7 @@ to support specific constructs of the language. Here are some examples: @end itemize @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1da} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1d9} @subsection No_Direct_Boolean_Operators @@ -12635,7 +12607,7 @@ protocol requires the use of short-circuit (and then, or else) forms for all composite boolean operations. @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1db} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1da} @subsection No_Dispatch @@ -12645,7 +12617,7 @@ composite boolean operations. occurrences of @code{T'Class}, for any (tagged) subtype @code{T}. @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1dc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1db} @subsection No_Dispatching_Calls @@ -12706,7 +12678,7 @@ end Example; @end example @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1dd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1dc} @subsection No_Dynamic_Attachment @@ -12725,7 +12697,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1de} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1dd} @subsection No_Dynamic_Priorities @@ -12734,7 +12706,7 @@ warnings on obsolescent features are activated). [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities. @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1df} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1de} @subsection No_Entry_Calls_In_Elaboration_Code @@ -12746,7 +12718,7 @@ restriction, the compiler can assume that no code past an accept statement in a task can be executed at elaboration time. @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1e0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1df} @subsection No_Enumeration_Maps @@ -12757,7 +12729,7 @@ enumeration maps are used (that is Image and Value attributes applied to enumeration types). @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1e1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1e0} @subsection No_Exception_Handlers @@ -12782,7 +12754,7 @@ statement generated by the compiler). The Line parameter when nonzero represents the line number in the source program where the raise occurs. @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1e2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1e1} @subsection No_Exception_Propagation @@ -12799,7 +12771,7 @@ the package GNAT.Current_Exception is not permitted, and reraise statements (raise with no operand) are not permitted. @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1e3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1e2} @subsection No_Exception_Registration @@ -12813,7 +12785,7 @@ code is simplified by omitting the otherwise-required global registration of exceptions when they are declared. @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1e4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1e3} @subsection No_Exceptions @@ -12824,7 +12796,7 @@ raise statements and no exception handlers and also suppresses the generation of language-defined run-time checks. @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1e5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1e4} @subsection No_Finalization @@ -12865,7 +12837,7 @@ object or a nested component, either declared on the stack or on the heap. The deallocation of a controlled object no longer finalizes its contents. @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1e6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1e5} @subsection No_Fixed_Point @@ -12875,7 +12847,7 @@ deallocation of a controlled object no longer finalizes its contents. occurrences of fixed point types and operations. @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1e7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1e6} @subsection No_Floating_Point @@ -12885,7 +12857,7 @@ occurrences of fixed point types and operations. occurrences of floating point types and operations. @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1e8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1e7} @subsection No_Implicit_Conditionals @@ -12901,7 +12873,7 @@ normal manner. Constructs generating implicit conditionals include comparisons of composite objects and the Max/Min attributes. @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1e9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1e8} @subsection No_Implicit_Dynamic_Code @@ -12931,7 +12903,7 @@ foreign-language convention; primitive operations of nested tagged types. @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1ea} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1e9} @subsection No_Implicit_Heap_Allocations @@ -12940,7 +12912,7 @@ types. [RM D.7] No constructs are allowed to cause implicit heap allocation. @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1eb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1ea} @subsection No_Implicit_Protected_Object_Allocations @@ -12950,7 +12922,7 @@ types. protected object. @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1ec} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1eb} @subsection No_Implicit_Task_Allocations @@ -12959,7 +12931,7 @@ protected object. [GNAT] No constructs are allowed to cause implicit heap allocation of a task. @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1ed} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1ec} @subsection No_Initialize_Scalars @@ -12971,7 +12943,7 @@ code, and in particular eliminates dummy null initialization routines that are otherwise generated for some record and array types. @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1ee} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1ed} @subsection No_IO @@ -12982,7 +12954,7 @@ dependences on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO. @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1ef} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1ee} @subsection No_Local_Allocators @@ -12993,7 +12965,7 @@ occurrences of an allocator in subprograms, generic subprograms, tasks, and entry bodies. @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1f0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1ef} @subsection No_Local_Protected_Objects @@ -13003,7 +12975,7 @@ and entry bodies. only declared at the library level. @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1f1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1f0} @subsection No_Local_Tagged_Types @@ -13013,7 +12985,7 @@ only declared at the library level. declared at the library level. @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1f2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1f1} @subsection No_Local_Timing_Events @@ -13023,7 +12995,7 @@ declared at the library level. declared at the library level. @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1f3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1f2} @subsection No_Long_Long_Integers @@ -13035,7 +13007,7 @@ implicit base type is Long_Long_Integer, and modular types whose size exceeds Long_Integer’Size. @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1f4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1f3} @subsection No_Multiple_Elaboration @@ -13051,7 +13023,7 @@ possible, including non-Ada main programs and Stand Alone libraries, are not permitted and will be diagnosed by the binder. @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1f5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1f4} @subsection No_Nested_Finalization @@ -13060,7 +13032,7 @@ permitted and will be diagnosed by the binder. [RM D.7] All objects requiring finalization are declared at the library level. @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1f6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1f5} @subsection No_Protected_Type_Allocators @@ -13070,7 +13042,7 @@ permitted and will be diagnosed by the binder. expressions that attempt to allocate protected objects. @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1f7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1f6} @subsection No_Protected_Types @@ -13080,7 +13052,7 @@ expressions that attempt to allocate protected objects. declarations of protected types or protected objects. @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1f8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1f7} @subsection No_Recursion @@ -13090,7 +13062,7 @@ declarations of protected types or protected objects. part of its execution. @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1f9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1f8} @subsection No_Reentrancy @@ -13100,7 +13072,7 @@ part of its execution. two tasks at the same time. @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1fa} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1f9} @subsection No_Relative_Delay @@ -13111,7 +13083,7 @@ relative statements and prevents expressions such as @code{delay 1.23;} from appearing in source code. @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1fb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1fa} @subsection No_Requeue_Statements @@ -13129,7 +13101,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on oNobsolescent features are activated). @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1fc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1fb} @subsection No_Secondary_Stack @@ -13142,7 +13114,7 @@ stack is used to implement functions returning unconstrained objects secondary stacks for tasks (excluding the environment task) at run time. @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1fd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1fc} @subsection No_Select_Statements @@ -13152,7 +13124,7 @@ secondary stacks for tasks (excluding the environment task) at run time. kind are permitted, that is the keyword @code{select} may not appear. @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1fe} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1fd} @subsection No_Specific_Termination_Handlers @@ -13162,7 +13134,7 @@ kind are permitted, that is the keyword @code{select} may not appear. or to Ada.Task_Termination.Specific_Handler. @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{1ff} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{1fe} @subsection No_Specification_of_Aspect @@ -13173,7 +13145,7 @@ specification, attribute definition clause, or pragma is given for a given aspect. @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{200} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{1ff} @subsection No_Standard_Allocators_After_Elaboration @@ -13185,7 +13157,7 @@ library items of the partition has completed. Otherwise, Storage_Error is raised. @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{201} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{200} @subsection No_Standard_Storage_Pools @@ -13197,7 +13169,7 @@ have an explicit Storage_Pool attribute defined specifying a user-defined storage pool. @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{202} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{201} @subsection No_Stream_Optimizations @@ -13210,7 +13182,7 @@ due to their superior performance. When this restriction is in effect, the compiler performs all IO operations on a per-character basis. @node No_Streams,No_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{203} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{202} @subsection No_Streams @@ -13237,7 +13209,7 @@ configuration pragmas to avoid exposing entity names at binary level for the entire partition. @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{204} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{203} @subsection No_Tagged_Type_Registration @@ -13252,7 +13224,7 @@ are declared. This restriction may be necessary in order to also apply the No_Elaboration_Code restriction. @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{205} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{204} @subsection No_Task_Allocators @@ -13262,7 +13234,7 @@ the No_Elaboration_Code restriction. or types containing task subcomponents. @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{206} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{205} @subsection No_Task_At_Interrupt_Priority @@ -13274,7 +13246,7 @@ a consequence, the tasks are always created with a priority below that an interrupt priority. @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{207} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{206} @subsection No_Task_Attributes_Package @@ -13291,7 +13263,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{208} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{207} @subsection No_Task_Hierarchy @@ -13301,7 +13273,7 @@ warnings on obsolescent features are activated). directly on the environment task of the partition. @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{209} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{208} @subsection No_Task_Termination @@ -13310,7 +13282,7 @@ directly on the environment task of the partition. [RM D.7] Tasks that terminate are erroneous. @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{20a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{209} @subsection No_Tasking @@ -13323,7 +13295,7 @@ and cause an error message to be output either by the compiler or binder. @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{20b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{20a} @subsection No_Terminate_Alternatives @@ -13332,7 +13304,7 @@ binder. [RM D.7] There are no selective accepts with terminate alternatives. @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{20c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{20b} @subsection No_Unchecked_Access @@ -13342,7 +13314,7 @@ binder. occurrences of the Unchecked_Access attribute. @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{20d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{20c} @subsection No_Unchecked_Conversion @@ -13352,7 +13324,7 @@ occurrences of the Unchecked_Access attribute. dependences on the predefined generic function Unchecked_Conversion. @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{20e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{20d} @subsection No_Unchecked_Deallocation @@ -13362,7 +13334,7 @@ dependences on the predefined generic function Unchecked_Conversion. dependences on the predefined generic procedure Unchecked_Deallocation. @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{20f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{20e} @subsection No_Use_Of_Attribute @@ -13372,7 +13344,7 @@ dependences on the predefined generic procedure Unchecked_Deallocation. earlier versions of Ada. @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{210} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{20f} @subsection No_Use_Of_Entity @@ -13392,7 +13364,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line @end example @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{211} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{210} @subsection No_Use_Of_Pragma @@ -13402,7 +13374,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line earlier versions of Ada. @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{212} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{211} @subsection Pure_Barriers @@ -13453,7 +13425,7 @@ but still ensures absence of side effects, exceptions, and recursion during the evaluation of the barriers. @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{213} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{212} @subsection Simple_Barriers @@ -13472,7 +13444,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{214} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{213} @subsection Static_Priorities @@ -13483,7 +13455,7 @@ are static, and that there are no dependences on the package @code{Ada.Dynamic_Priorities}. @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{215} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{214} @subsection Static_Storage_Size @@ -13493,7 +13465,7 @@ are static, and that there are no dependences on the package in a Storage_Size pragma or attribute definition clause is static. @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{216}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{217} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{215}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{216} @section Program Unit Level Restrictions @@ -13524,7 +13496,7 @@ other compilation units in the partition. @end menu @node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{218} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{217} @subsection No_Elaboration_Code @@ -13580,7 +13552,7 @@ associated with the unit. This counter is typically used to check for access before elaboration and to control multiple elaboration attempts. @node No_Dynamic_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{219} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{218} @subsection No_Dynamic_Accessibility_Checks @@ -13629,7 +13601,7 @@ In all other cases, the level of T is as defined by the existing rules of Ada. @end itemize @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{21a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{219} @subsection No_Dynamic_Sized_Objects @@ -13647,7 +13619,7 @@ access discriminants. It is often a good idea to combine this restriction with No_Secondary_Stack. @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{21b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{21a} @subsection No_Entry_Queue @@ -13660,7 +13632,7 @@ checked at compile time. A program execution is erroneous if an attempt is made to queue a second task on such an entry. @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{21c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{21b} @subsection No_Implementation_Aspect_Specifications @@ -13671,7 +13643,7 @@ GNAT-defined aspects are present. With this restriction, the only aspects that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{21d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{21c} @subsection No_Implementation_Attributes @@ -13683,7 +13655,7 @@ attributes that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{21e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{21d} @subsection No_Implementation_Identifiers @@ -13694,7 +13666,7 @@ implementation-defined identifiers (marked with pragma Implementation_Defined) occur within language-defined packages. @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{21f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{21e} @subsection No_Implementation_Pragmas @@ -13705,7 +13677,7 @@ GNAT-defined pragmas are present. With this restriction, the only pragmas that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{220} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{21f} @subsection No_Implementation_Restrictions @@ -13717,7 +13689,7 @@ are present. With this restriction, the only other restriction identifiers that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{221} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{220} @subsection No_Implementation_Units @@ -13728,7 +13700,7 @@ mention in the context clause of any implementation-defined descendants of packages Ada, Interfaces, or System. @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{222} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{221} @subsection No_Implicit_Aliasing @@ -13743,7 +13715,7 @@ to be aliased, and in such cases, it can always be replaced by the standard attribute Unchecked_Access which is preferable. @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{223} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{222} @subsection No_Implicit_Loops @@ -13760,7 +13732,7 @@ arrays larger than about 5000 scalar components. Note that if this restriction is set in the spec of a package, it will not apply to its body. @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{224} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{223} @subsection No_Obsolescent_Features @@ -13770,7 +13742,7 @@ is set in the spec of a package, it will not apply to its body. features are used, as defined in Annex J of the Ada Reference Manual. @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{225} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{224} @subsection No_Wide_Characters @@ -13784,7 +13756,7 @@ appear in the program (that is literals representing characters not in type @code{Character}). @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{226} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{225} @subsection Static_Dispatch_Tables @@ -13794,7 +13766,7 @@ type @code{Character}). associated with dispatch tables can be placed in read-only memory. @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{227} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{226} @subsection SPARK_05 @@ -13817,7 +13789,7 @@ gnatprove -P project.gpr --mode=check_all @end example @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top -@anchor{gnat_rm/implementation_advice doc}@anchor{228}@anchor{gnat_rm/implementation_advice id1}@anchor{229}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} +@anchor{gnat_rm/implementation_advice doc}@anchor{227}@anchor{gnat_rm/implementation_advice id1}@anchor{228}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} @chapter Implementation Advice @@ -13915,7 +13887,7 @@ case the text describes what GNAT does and why. @end menu @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{22a} +@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{229} @section RM 1.1.3(20): Error Detection @@ -13932,7 +13904,7 @@ or diagnosed at compile time. @geindex Child Units @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{22b} +@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{22a} @section RM 1.1.3(31): Child Units @@ -13948,7 +13920,7 @@ Followed. @geindex Bounded errors @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{22c} +@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{22b} @section RM 1.1.5(12): Bounded Errors @@ -13965,7 +13937,7 @@ runtime. @geindex Pragmas @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice -@anchor{gnat_rm/implementation_advice id2}@anchor{22d}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{22e} +@anchor{gnat_rm/implementation_advice id2}@anchor{22c}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{22d} @section RM 2.8(16): Pragmas @@ -14078,7 +14050,7 @@ that this advice not be followed. For details see @ref{7,,Implementation Defined Pragmas}. @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{22f} +@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{22e} @section RM 2.8(17-19): Pragmas @@ -14099,14 +14071,14 @@ replacing @code{library_items}.” @end itemize @end quotation -See @ref{22e,,RM 2.8(16); Pragmas}. +See @ref{22d,,RM 2.8(16); Pragmas}. @geindex Character Sets @geindex Alternative Character Sets @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{230} +@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{22f} @section RM 3.5.2(5): Alternative Character Sets @@ -14134,7 +14106,7 @@ there is no such restriction. @geindex Integer types @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{231} +@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{230} @section RM 3.5.4(28): Integer Types @@ -14153,7 +14125,7 @@ are supported for convenient interface to C, and so that all hardware types of the machine are easily available. @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{232} +@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{231} @section RM 3.5.4(29): Integer Types @@ -14169,7 +14141,7 @@ Followed. @geindex Enumeration values @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{233} +@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{232} @section RM 3.5.5(8): Enumeration Values @@ -14189,7 +14161,7 @@ Followed. @geindex Float types @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{234} +@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{233} @section RM 3.5.7(17): Float Types @@ -14219,7 +14191,7 @@ is a software rather than a hardware format. @geindex multidimensional @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration’Small,RM 3 5 7 17 Float Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{235} +@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{234} @section RM 3.6.2(11): Multidimensional Arrays @@ -14237,7 +14209,7 @@ Followed. @geindex Duration'Small @node RM 9 6 30-31 Duration’Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{236} +@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{235} @section RM 9.6(30-31): Duration’Small @@ -14258,7 +14230,7 @@ it need not be the same time base as used for @code{Calendar.Clock}.” Followed. @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration’Small,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{237} +@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{236} @section RM 10.2.1(12): Consistent Representation @@ -14280,7 +14252,7 @@ advice without severely impacting efficiency of execution. @geindex Exception information @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{238} +@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{237} @section RM 11.4.1(19): Exception Information @@ -14311,7 +14283,7 @@ Pragma @code{Discard_Names}. @geindex suppression of @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{239} +@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{238} @section RM 11.5(28): Suppression of Checks @@ -14326,7 +14298,7 @@ Followed. @geindex Representation clauses @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{23a} +@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{239} @section RM 13.1 (21-24): Representation Clauses @@ -14375,7 +14347,7 @@ Followed. @geindex Packed types @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{23b} +@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{23a} @section RM 13.2(6-8): Packed Types @@ -14406,7 +14378,7 @@ subcomponent of the packed type. @geindex Address clauses @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{23c} +@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{23b} @section RM 13.3(14-19): Address Clauses @@ -14459,7 +14431,7 @@ Followed. @geindex Alignment clauses @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{23d} +@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{23c} @section RM 13.3(29-35): Alignment Clauses @@ -14516,7 +14488,7 @@ Followed. @geindex Size clauses @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{23e} +@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{23d} @section RM 13.3(42-43): Size Clauses @@ -14534,7 +14506,7 @@ object’s @code{Alignment} (if the @code{Alignment} is nonzero).” Followed. @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{23f} +@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{23e} @section RM 13.3(50-56): Size Clauses @@ -14585,7 +14557,7 @@ Followed. @geindex Component_Size clauses @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{240} +@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{23f} @section RM 13.3(71-73): Component Size Clauses @@ -14619,7 +14591,7 @@ Followed. @geindex enumeration @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{241} +@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{240} @section RM 13.4(9-10): Enumeration Representation Clauses @@ -14641,7 +14613,7 @@ Followed. @geindex records @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{242} +@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{241} @section RM 13.5.1(17-22): Record Representation Clauses @@ -14701,7 +14673,7 @@ and all mentioned features are implemented. @geindex Storage place attributes @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{243} +@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{242} @section RM 13.5.2(5): Storage Place Attributes @@ -14721,7 +14693,7 @@ Followed. There are no such components in GNAT. @geindex Bit ordering @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{244} +@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{243} @section RM 13.5.3(7-8): Bit Ordering @@ -14741,7 +14713,7 @@ Thus non-default bit ordering is not supported. @geindex as private type @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{245} +@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{244} @section RM 13.7(37): Address as Private @@ -14759,7 +14731,7 @@ Followed. @geindex operations of @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{246} +@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{245} @section RM 13.7.1(16): Address Operations @@ -14777,7 +14749,7 @@ operation raises @code{Program_Error}, since all operations make sense. @geindex Unchecked conversion @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{247} +@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{246} @section RM 13.9(14-17): Unchecked Conversion @@ -14821,7 +14793,7 @@ Followed. @geindex implicit @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{248} +@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{247} @section RM 13.11(23-25): Implicit Heap Usage @@ -14872,7 +14844,7 @@ Followed. @geindex Unchecked deallocation @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{249} +@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{248} @section RM 13.11.2(17): Unchecked Deallocation @@ -14887,7 +14859,7 @@ Followed. @geindex Stream oriented attributes @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{24a} +@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{249} @section RM 13.13.2(1.6): Stream Oriented Attributes @@ -14918,7 +14890,7 @@ scalar types. This XDR alternative can be enabled via the binder switch -xdr. @geindex Stream oriented attributes @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{24b} +@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{24a} @section RM A.1(52): Names of Predefined Numeric Types @@ -14936,7 +14908,7 @@ Followed. @geindex Ada.Characters.Handling @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{24c} +@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{24b} @section RM A.3.2(49): @code{Ada.Characters.Handling} @@ -14953,7 +14925,7 @@ Followed. GNAT provides no such localized definitions. @geindex Bounded-length strings @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{24d} +@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{24c} @section RM A.4.4(106): Bounded-Length String Handling @@ -14968,7 +14940,7 @@ Followed. No implicit pointers or dynamic allocation are used. @geindex Random number generation @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{24e} +@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{24d} @section RM A.5.2(46-47): Random Number Generation @@ -14997,7 +14969,7 @@ condition here to hold true. @geindex Get_Immediate @node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{24f} +@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{24e} @section RM A.10.7(23): @code{Get_Immediate} @@ -15021,7 +14993,7 @@ this functionality. @geindex Containers @node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{250} +@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{24f} @section RM A.18: @code{Containers} @@ -15042,7 +15014,7 @@ follow the implementation advice. @geindex Export @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{251} +@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{250} @section RM B.1(39-41): Pragma @code{Export} @@ -15090,7 +15062,7 @@ Followed. @geindex Interfaces @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{252} +@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{251} @section RM B.2(12-13): Package @code{Interfaces} @@ -15120,7 +15092,7 @@ Followed. GNAT provides all the packages described in this section. @geindex interfacing with @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{253} +@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{252} @section RM B.3(63-71): Interfacing with C @@ -15208,7 +15180,7 @@ Followed. @geindex interfacing with @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{254} +@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{253} @section RM B.4(95-98): Interfacing with COBOL @@ -15249,7 +15221,7 @@ Followed. @geindex interfacing with @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{255} +@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{254} @section RM B.5(22-26): Interfacing with Fortran @@ -15300,7 +15272,7 @@ Followed. @geindex Machine operations @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{256} +@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{255} @section RM C.1(3-5): Access to Machine Operations @@ -15335,7 +15307,7 @@ object that is specified as exported.” Followed. @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{257} +@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{256} @section RM C.1(10-16): Access to Machine Operations @@ -15396,7 +15368,7 @@ Followed on any target supporting such operations. @geindex Interrupt support @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{258} +@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{257} @section RM C.3(28): Interrupt Support @@ -15414,7 +15386,7 @@ of interrupt blocking. @geindex Protected procedure handlers @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{259} +@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{258} @section RM C.3.1(20-21): Protected Procedure Handlers @@ -15440,7 +15412,7 @@ Followed. Compile time warnings are given when possible. @geindex Interrupts @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{25a} +@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{259} @section RM C.3.2(25): Package @code{Interrupts} @@ -15458,7 +15430,7 @@ Followed. @geindex Pre-elaboration requirements @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{25b} +@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{25a} @section RM C.4(14): Pre-elaboration Requirements @@ -15474,7 +15446,7 @@ Followed. Executable code is generated in some cases, e.g., loops to initialize large arrays. @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{25c} +@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{25b} @section RM C.5(8): Pragma @code{Discard_Names} @@ -15492,7 +15464,7 @@ Followed. @geindex Task_Attributes @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{25d} +@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{25c} @section RM C.7.2(30): The Package Task_Attributes @@ -15513,7 +15485,7 @@ Not followed. This implementation is not targeted to such a domain. @geindex Locking Policies @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{25e} +@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{25d} @section RM D.3(17): Locking Policies @@ -15530,7 +15502,7 @@ whose names (@code{Inheritance_Locking} and @geindex Entry queuing policies @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{25f} +@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{25e} @section RM D.4(16): Entry Queuing Policies @@ -15545,7 +15517,7 @@ Followed. No such implementation-defined queuing policies exist. @geindex Preemptive abort @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{260} +@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{25f} @section RM D.6(9-10): Preemptive Abort @@ -15571,7 +15543,7 @@ Followed. @geindex Tasking restrictions @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{261} +@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{260} @section RM D.7(21): Tasking Restrictions @@ -15590,7 +15562,7 @@ pragma @code{Profile (Restricted)} for more details. @geindex monotonic @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{262} +@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{261} @section RM D.8(47-49): Monotonic Time @@ -15625,7 +15597,7 @@ Followed. @geindex PCS @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{263} +@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{262} @section RM E.5(28-29): Partition Communication Subsystem @@ -15653,7 +15625,7 @@ GNAT. @geindex COBOL support @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{264} +@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{263} @section RM F(7): COBOL Support @@ -15673,7 +15645,7 @@ Followed. @geindex Decimal radix support @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{265} +@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{264} @section RM F.1(2): Decimal Radix Support @@ -15689,7 +15661,7 @@ representations. @geindex Numerics @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{266} +@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{265} @section RM G: Numerics @@ -15709,7 +15681,7 @@ Followed. @geindex Complex types @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{267} +@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{266} @section RM G.1.1(56-58): Complex Types @@ -15771,7 +15743,7 @@ Followed. @geindex Complex elementary functions @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{268} +@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{267} @section RM G.1.2(49): Complex Elementary Functions @@ -15793,7 +15765,7 @@ Followed. @geindex Accuracy requirements @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{269} +@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{268} @section RM G.2.4(19): Accuracy Requirements @@ -15817,7 +15789,7 @@ Followed. @geindex complex arithmetic @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{26a} +@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{269} @section RM G.2.6(15): Complex Arithmetic Accuracy @@ -15835,7 +15807,7 @@ Followed. @geindex Sequential elaboration policy @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{26b} +@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{26a} @section RM H.6(15/2): Pragma Partition_Elaboration_Policy @@ -15850,7 +15822,7 @@ immediately terminated.” Not followed. @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top -@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{26c}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{26d}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} +@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{26b}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{26c}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} @chapter Implementation Defined Characteristics @@ -17145,7 +17117,7 @@ When the @code{Pattern} parameter is not the null string, it is interpreted according to the syntax of regular expressions as defined in the @code{GNAT.Regexp} package. -See @ref{26e,,GNAT.Regexp (g-regexp.ads)}. +See @ref{26d,,GNAT.Regexp (g-regexp.ads)}. @itemize * @@ -18243,7 +18215,7 @@ Information on those subjects is not yet available. Execution is erroneous in that case. @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top -@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{26f}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{270}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} +@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{26e}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{26f}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} @chapter Intrinsic Subprograms @@ -18281,7 +18253,7 @@ Ada standard does not require Ada compilers to implement this feature. @end menu @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{271}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{272} +@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{270}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{271} @section Intrinsic Operators @@ -18312,7 +18284,7 @@ It is also possible to specify such operators for private types, if the full views are appropriate arithmetic types. @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{273}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{274} +@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{273} @section Compilation_ISO_Date @@ -18326,7 +18298,7 @@ application program should simply call the function the current compilation (in local time format YYYY-MM-DD). @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{275}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{276} +@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{274}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{275} @section Compilation_Date @@ -18336,7 +18308,7 @@ Same as Compilation_ISO_Date, except the string is in the form MMM DD YYYY. @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{277}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{278} +@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{276}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{277} @section Compilation_Time @@ -18350,7 +18322,7 @@ application program should simply call the function the current compilation (in local time format HH:MM:SS). @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{279}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{27a} +@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{278}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{279} @section Enclosing_Entity @@ -18364,7 +18336,7 @@ application program should simply call the function the current subprogram, package, task, entry, or protected subprogram. @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{27b}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{27c} +@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{27b} @section Exception_Information @@ -18378,7 +18350,7 @@ so an application program should simply call the function the exception information associated with the current exception. @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{27d}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{27e} +@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{27c}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{27d} @section Exception_Message @@ -18392,7 +18364,7 @@ so an application program should simply call the function the message associated with the current exception. @node Exception_Name,File,Exception_Message,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{27f}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{280} +@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{27e}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{27f} @section Exception_Name @@ -18406,7 +18378,7 @@ so an application program should simply call the function the name of the current exception. @node File,Line,Exception_Name,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms file}@anchor{281}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{282} +@anchor{gnat_rm/intrinsic_subprograms file}@anchor{280}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{281} @section File @@ -18420,7 +18392,7 @@ application program should simply call the function file. @node Line,Shifts and Rotates,File,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{283}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{284} +@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{282}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{283} @section Line @@ -18434,7 +18406,7 @@ application program should simply call the function source line. @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{285}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{286} +@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{284}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{285} @section Shifts and Rotates @@ -18477,7 +18449,7 @@ corresponding operator for modular type. In particular, shifting a negative number may change its sign bit to positive. @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{287}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{288} +@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{286}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{287} @section Source_Location @@ -18491,7 +18463,7 @@ application program should simply call the function source file location. @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top -@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{289}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} +@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{288}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{289}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} @chapter Representation Clauses and Pragmas @@ -18537,7 +18509,7 @@ and this section describes the additional capabilities provided. @end menu @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{28b}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{28c} +@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{28b} @section Alignment Clauses @@ -18668,7 +18640,7 @@ assumption is non-portable, and other compilers may choose different alignments for the subtype @code{RS}. @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{28d}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{28e} +@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{28d} @section Size Clauses @@ -18745,7 +18717,7 @@ if it is known that a Size value can be accommodated in an object of type Integer. @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{28f}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{290} +@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{28e}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{28f} @section Storage_Size Clauses @@ -18818,7 +18790,7 @@ Of course in practice, there will not be any explicit allocators in the case of such an access declaration. @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{291}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{292} +@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{290}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{291} @section Size of Variant Record Objects @@ -18928,7 +18900,7 @@ the maximum size, regardless of the current variant value, the variant value. @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{293}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{294} +@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{292}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{293} @section Biased Representation @@ -18966,7 +18938,7 @@ biased representation can be used for all discrete types except for enumeration types for which a representation clause is given. @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{295}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{296} +@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{295} @section Value_Size and Object_Size Clauses @@ -19282,7 +19254,7 @@ definition clause forces biased representation. This warning can be turned off using @code{-gnatw.B}. @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{297}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{298} +@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{297} @section Component_Size Clauses @@ -19330,7 +19302,7 @@ and a pragma Pack for the same array type. if such duplicate clauses are given, the pragma Pack will be ignored. @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{299}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{29a} +@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{299} @section Bit_Order Clauses @@ -19436,7 +19408,7 @@ if desired. The following section contains additional details regarding the issue of byte ordering. @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{29b}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{29c} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{29b} @section Effect of Bit_Order on Byte Ordering @@ -19693,7 +19665,7 @@ to set the boolean constant @code{Master_Byte_First} in an appropriate manner. @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{29d}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{29e} +@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{29d} @section Pragma Pack for Arrays @@ -19813,7 +19785,7 @@ Here 31-bit packing is achieved as required, and no warning is generated, since in this case the programmer intention is clear. @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{29f}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2a0} +@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{29e}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{29f} @section Pragma Pack for Records @@ -19897,7 +19869,7 @@ array that is longer than 64 bits, so it is itself non-packable on boundary, and takes an integral number of bytes, i.e., 72 bits. @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2a1}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2a2} +@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2a0}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2a1} @section Record Representation Clauses @@ -19976,7 +19948,7 @@ end record; @end example @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2a3}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2a4} +@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2a2}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2a3} @section Handling of Records with Holes @@ -20052,7 +20024,7 @@ for Hrec'Size use 64; @end example @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2a5}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2a6} +@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2a5} @section Enumeration Clauses @@ -20095,7 +20067,7 @@ the overhead of converting representation values to the corresponding positional values, (i.e., the value delivered by the @code{Pos} attribute). @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2a7}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2a8} +@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2a7} @section Address Clauses @@ -20435,7 +20407,7 @@ then the program compiles without the warning and when run will generate the output @code{X was not clobbered}. @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2a9}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2aa} +@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2a8}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2a9} @section Use of Address Clauses for Memory-Mapped I/O @@ -20493,7 +20465,7 @@ provides the pragma @code{Volatile_Full_Access} which can be used in lieu of pragma @code{Atomic} and will give the additional guarantee. @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2ab}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2ac} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2aa}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2ab} @section Effect of Convention on Representation @@ -20571,7 +20543,7 @@ when one of these values is read, any nonzero value is treated as True. @end itemize @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2ad}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2ae} +@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2ac}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2ad} @section Conventions and Anonymous Access Types @@ -20647,7 +20619,7 @@ package ConvComp is @end example @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2af}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2b0} +@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2ae}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2af} @section Determining the Representations chosen by GNAT @@ -20799,7 +20771,7 @@ generated by the compiler into the original source to fix and guarantee the actual representation to be used. @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top -@anchor{gnat_rm/standard_library_routines doc}@anchor{2b1}@anchor{gnat_rm/standard_library_routines id1}@anchor{2b2}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} +@anchor{gnat_rm/standard_library_routines doc}@anchor{2b0}@anchor{gnat_rm/standard_library_routines id1}@anchor{2b1}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} @chapter Standard Library Routines @@ -21623,7 +21595,7 @@ For packages in Interfaces and System, all the RM defined packages are available in GNAT, see the Ada 2012 RM for full details. @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top -@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2b3}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} +@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2b2}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2b3}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} @chapter The Implementation of Standard I/O @@ -21675,7 +21647,7 @@ these additional facilities are also described in this chapter. @end menu @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2b5}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2b6} +@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2b5} @section Standard I/O Packages @@ -21746,7 +21718,7 @@ flush the common I/O streams and in particular Standard_Output before elaborating the Ada code. @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2b7}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2b8} +@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2b7} @section FORM Strings @@ -21772,7 +21744,7 @@ unrecognized keyword appears in a form string, it is silently ignored and not considered invalid. @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2b9}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2ba} +@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2b9} @section Direct_IO @@ -21791,7 +21763,7 @@ There is no limit on the size of Direct_IO files, they are expanded as necessary to accommodate whatever records are written to the file. @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2bb}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2bc} +@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2bb} @section Sequential_IO @@ -21838,7 +21810,7 @@ using Stream_IO, and this is the preferred mechanism. In particular, the above program fragment rewritten to use Stream_IO will work correctly. @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2bd}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2be} +@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2bd} @section Text_IO @@ -21921,7 +21893,7 @@ the file. @end menu @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2bf}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2c0} +@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2bf} @subsection Stream Pointer Positioning @@ -21957,7 +21929,7 @@ between two Ada files, then the difference may be observable in some situations. @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2c1}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2c2} +@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2c1} @subsection Reading and Writing Non-Regular Files @@ -22008,7 +21980,7 @@ to read data past that end of file indication, until another end of file indication is entered. @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2c3}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2c4} +@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2c3} @subsection Get_Immediate @@ -22026,7 +21998,7 @@ possible), it is undefined whether the FF character will be treated as a page mark. @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2c5}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2c6} +@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2c5} @subsection Treating Text_IO Files as Streams @@ -22042,7 +22014,7 @@ skipped and the effect is similar to that described above for @code{Get_Immediate}. @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2c7}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2c8} +@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2c7} @subsection Text_IO Extensions @@ -22070,7 +22042,7 @@ the string is to be read. @end itemize @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2c9}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2ca} +@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2c9} @subsection Text_IO Facilities for Unbounded Strings @@ -22118,7 +22090,7 @@ files @code{a-szuzti.ads} and @code{a-szuzti.adb} provides similar extended @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings. @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2cb}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2cc} +@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2cb} @section Wide_Text_IO @@ -22365,12 +22337,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2cd}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2ce} +@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2cd} @subsection Stream Pointer Positioning @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2be,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2bd,,Text_IO}). There is one additional case: If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22389,7 +22361,7 @@ to a normal program using @code{Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2cf}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2d0} +@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2cf} @subsection Reading and Writing Non-Regular Files @@ -22400,7 +22372,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2d1}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2d2} +@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2d1} @section Wide_Wide_Text_IO @@ -22569,12 +22541,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2d3}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2d4} +@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2d3} @subsection Stream Pointer Positioning @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2be,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2bd,,Text_IO}). There is one additional case: If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22593,7 +22565,7 @@ to a normal program using @code{Wide_Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2d5}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2d6} +@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2d4}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2d5} @subsection Reading and Writing Non-Regular Files @@ -22604,7 +22576,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2d7}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2d8} +@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2d6}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2d7} @section Stream_IO @@ -22626,7 +22598,7 @@ manner described for stream attributes. @end itemize @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2d9}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2da} +@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2d8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2d9} @section Text Translation @@ -22660,7 +22632,7 @@ mode. (corresponds to_O_U16TEXT). @end itemize @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2db}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2dc} +@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2da}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2db} @section Shared Files @@ -22723,7 +22695,7 @@ heterogeneous input-output. Although this approach will work in GNAT if for this purpose (using the stream attributes) @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2dd}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2de} +@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2dc}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2dd} @section Filenames encoding @@ -22763,7 +22735,7 @@ platform. On the other Operating Systems the run-time is supporting UTF-8 natively. @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2df}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2e0} +@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2de}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2df} @section File content encoding @@ -22796,7 +22768,7 @@ Unicode 8-bit encoding This encoding is only supported on the Windows platform. @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2e1}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2e2} +@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2e0}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2e1} @section Open Modes @@ -22899,7 +22871,7 @@ subsequently requires switching from reading to writing or vice-versa, then the file is reopened in @code{r+} mode to permit the required operation. @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2e3}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2e4} +@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2e2}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2e3} @section Operations on C Streams @@ -23059,7 +23031,7 @@ end Interfaces.C_Streams; @end example @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2e5}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2e6} +@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2e4}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2e5} @section Interfacing to C Streams @@ -23152,7 +23124,7 @@ imported from a C program, allowing an Ada file to operate on an existing C file. @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top -@anchor{gnat_rm/the_gnat_library doc}@anchor{2e7}@anchor{gnat_rm/the_gnat_library id1}@anchor{2e8}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} +@anchor{gnat_rm/the_gnat_library doc}@anchor{2e6}@anchor{gnat_rm/the_gnat_library id1}@anchor{2e7}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} @chapter The GNAT Library @@ -23337,7 +23309,7 @@ of GNAT, and will generate a warning message. @end menu @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2e9}@anchor{gnat_rm/the_gnat_library id2}@anchor{2ea} +@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2e8}@anchor{gnat_rm/the_gnat_library id2}@anchor{2e9} @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads}) @@ -23354,7 +23326,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2eb}@anchor{gnat_rm/the_gnat_library id3}@anchor{2ec} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2ea}@anchor{gnat_rm/the_gnat_library id3}@anchor{2eb} @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads}) @@ -23371,7 +23343,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2ed}@anchor{gnat_rm/the_gnat_library id4}@anchor{2ee} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2ec}@anchor{gnat_rm/the_gnat_library id4}@anchor{2ed} @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads}) @@ -23388,7 +23360,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2ef}@anchor{gnat_rm/the_gnat_library id5}@anchor{2f0} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id5}@anchor{2ef} @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads}) @@ -23405,7 +23377,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2f1}@anchor{gnat_rm/the_gnat_library id6}@anchor{2f2} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2f0}@anchor{gnat_rm/the_gnat_library id6}@anchor{2f1} @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads}) @@ -23422,7 +23394,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f3}@anchor{gnat_rm/the_gnat_library id7}@anchor{2f4} +@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id7}@anchor{2f3} @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads}) @@ -23434,7 +23406,7 @@ This child of @code{Ada.Containers} defines a modified version of Indefinite_Holders that avoids heap allocation. @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f5}@anchor{gnat_rm/the_gnat_library id8}@anchor{2f6} +@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id8}@anchor{2f5} @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads}) @@ -23447,7 +23419,7 @@ provides a mechanism for obtaining environment values on systems where this concept makes sense. @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f7}@anchor{gnat_rm/the_gnat_library id9}@anchor{2f8} +@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id9}@anchor{2f7} @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads}) @@ -23465,7 +23437,7 @@ to further calls to the subprograms in @code{Ada.Command_Line}. These calls will not see the removed argument. @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2f9}@anchor{gnat_rm/the_gnat_library id10}@anchor{2fa} +@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id10}@anchor{2f9} @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads}) @@ -23485,7 +23457,7 @@ Using a response file allow passing a set of arguments to an executable longer than the maximum allowed by the system on the command line. @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fb}@anchor{gnat_rm/the_gnat_library id11}@anchor{2fc} +@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id11}@anchor{2fb} @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads}) @@ -23500,7 +23472,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2fd}@anchor{gnat_rm/the_gnat_library id12}@anchor{2fe} +@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id12}@anchor{2fd} @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads}) @@ -23514,7 +23486,7 @@ exception occurrence (@code{Null_Occurrence}) without raising an exception. @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{2ff}@anchor{gnat_rm/the_gnat_library id13}@anchor{300} +@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id13}@anchor{2ff} @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads}) @@ -23528,7 +23500,7 @@ exceptions (hence the name last chance), and perform clean ups before terminating the program. Note that this subprogram never returns. @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{301}@anchor{gnat_rm/the_gnat_library id14}@anchor{302} +@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id14}@anchor{301} @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads}) @@ -23541,7 +23513,7 @@ give a traceback array of addresses based on an exception occurrence. @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{303}@anchor{gnat_rm/the_gnat_library id15}@anchor{304} +@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id15}@anchor{303} @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads}) @@ -23556,7 +23528,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{305}@anchor{gnat_rm/the_gnat_library id16}@anchor{306} +@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id16}@anchor{305} @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads}) @@ -23571,7 +23543,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{307}@anchor{gnat_rm/the_gnat_library id17}@anchor{308} +@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id17}@anchor{307} @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads}) @@ -23588,7 +23560,7 @@ strings, avoiding the necessity for an intermediate operation with ordinary strings. @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{309}@anchor{gnat_rm/the_gnat_library id18}@anchor{30a} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id18}@anchor{309} @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads}) @@ -23605,7 +23577,7 @@ wide strings, avoiding the necessity for an intermediate operation with ordinary wide strings. @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30b}@anchor{gnat_rm/the_gnat_library id19}@anchor{30c} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id19}@anchor{30b} @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads}) @@ -23622,7 +23594,7 @@ wide wide strings, avoiding the necessity for an intermediate operation with ordinary wide wide strings. @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30d}@anchor{gnat_rm/the_gnat_library id20}@anchor{30e} +@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id20}@anchor{30d} @section @code{Ada.Task_Initialization} (@code{a-tasini.ads}) @@ -23634,7 +23606,7 @@ parameterless procedures. Note that such a handler is only invoked for those tasks activated after the handler is set. @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{30f}@anchor{gnat_rm/the_gnat_library id21}@anchor{310} +@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id21}@anchor{30f} @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads}) @@ -23649,7 +23621,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{311}@anchor{gnat_rm/the_gnat_library id22}@anchor{312} +@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id22}@anchor{311} @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads}) @@ -23664,7 +23636,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{313}@anchor{gnat_rm/the_gnat_library id23}@anchor{314} +@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id23}@anchor{313} @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads}) @@ -23677,7 +23649,7 @@ This package provides subprograms that allow categorization of Wide_Character values according to Unicode categories. @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{315}@anchor{gnat_rm/the_gnat_library id24}@anchor{316} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id24}@anchor{315} @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads}) @@ -23692,7 +23664,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{317}@anchor{gnat_rm/the_gnat_library id25}@anchor{318} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id25}@anchor{317} @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads}) @@ -23707,7 +23679,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{319}@anchor{gnat_rm/the_gnat_library id26}@anchor{31a} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id26}@anchor{319} @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads}) @@ -23720,7 +23692,7 @@ This package provides subprograms that allow categorization of Wide_Wide_Character values according to Unicode categories. @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31b}@anchor{gnat_rm/the_gnat_library id27}@anchor{31c} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id27}@anchor{31b} @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads}) @@ -23735,7 +23707,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31d}@anchor{gnat_rm/the_gnat_library id28}@anchor{31e} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id28}@anchor{31d} @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads}) @@ -23750,7 +23722,7 @@ change during execution (for example a standard input file may be redefined to be interactive). @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{31f}@anchor{gnat_rm/the_gnat_library id29}@anchor{320} +@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id29}@anchor{31f} @section @code{GNAT.Altivec} (@code{g-altive.ads}) @@ -23763,7 +23735,7 @@ definitions of constants and types common to all the versions of the binding. @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{321}@anchor{gnat_rm/the_gnat_library id30}@anchor{322} +@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id30}@anchor{321} @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads}) @@ -23774,7 +23746,7 @@ binding. This package provides the Vector/View conversion routines. @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{323}@anchor{gnat_rm/the_gnat_library id31}@anchor{324} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id31}@anchor{323} @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads}) @@ -23788,7 +23760,7 @@ library. The hard binding is provided as a separate package. This unit is common to both bindings. @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{325}@anchor{gnat_rm/the_gnat_library id32}@anchor{326} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id32}@anchor{325} @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads}) @@ -23800,7 +23772,7 @@ This package exposes the various vector types part of the Ada binding to AltiVec facilities. @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{327}@anchor{gnat_rm/the_gnat_library id33}@anchor{328} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id33}@anchor{327} @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads}) @@ -23815,7 +23787,7 @@ vector elements and provides a simple way to initialize vector objects. @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{329}@anchor{gnat_rm/the_gnat_library id34}@anchor{32a} +@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id34}@anchor{329} @section @code{GNAT.Array_Split} (@code{g-arrspl.ads}) @@ -23828,7 +23800,7 @@ an array wherever the separators appear, and provide direct access to the resulting slices. @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32b}@anchor{gnat_rm/the_gnat_library id35}@anchor{32c} +@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id35}@anchor{32b} @section @code{GNAT.AWK} (@code{g-awk.ads}) @@ -23843,7 +23815,7 @@ or more files containing formatted data. The file is viewed as a database where each record is a line and a field is a data element in this line. @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{32d}@anchor{gnat_rm/the_gnat_library id36}@anchor{32e} +@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id36}@anchor{32d} @section @code{GNAT.Binary_Search} (@code{g-binsea.ads}) @@ -23855,7 +23827,7 @@ Allow binary search of a sorted array (or of an array-like container; the generic does not reference the array directly). @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{32f}@anchor{gnat_rm/the_gnat_library id37}@anchor{330} +@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id37}@anchor{32f} @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads}) @@ -23868,7 +23840,7 @@ These associations can be specified using the @code{-V} binder command line switch. @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{331}@anchor{gnat_rm/the_gnat_library id38}@anchor{332} +@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id38}@anchor{331} @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads}) @@ -23879,7 +23851,7 @@ line switch. Provides routines giving hints to the branch predictor of the code generator. @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{333}@anchor{gnat_rm/the_gnat_library id39}@anchor{334} +@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id39}@anchor{333} @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads}) @@ -23894,7 +23866,7 @@ useful directly or as parts of the implementations of other abstractions, such as mailboxes. @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{335}@anchor{gnat_rm/the_gnat_library id40}@anchor{336} +@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id40}@anchor{335} @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads}) @@ -23907,7 +23879,7 @@ such as mailboxes. Provides a thread-safe asynchronous intertask mailbox communication facility. @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{337}@anchor{gnat_rm/the_gnat_library id41}@anchor{338} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id41}@anchor{337} @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads}) @@ -23922,7 +23894,7 @@ data items. Exchange and comparison procedures are provided by passing access-to-procedure values. @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{339}@anchor{gnat_rm/the_gnat_library id42}@anchor{33a} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id42}@anchor{339} @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads}) @@ -23938,7 +23910,7 @@ access-to-procedure values. This is an older version, retained for compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable. @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33b}@anchor{gnat_rm/the_gnat_library id43}@anchor{33c} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id43}@anchor{33b} @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads}) @@ -23954,7 +23926,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33d}@anchor{gnat_rm/the_gnat_library id44}@anchor{33e} +@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id44}@anchor{33d} @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads}) @@ -23970,7 +23942,7 @@ the encoding of the string. The routine includes detection of special XML sequences for various UCS input formats. @node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{33f}@anchor{gnat_rm/the_gnat_library id45}@anchor{340} +@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id45}@anchor{33f} @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads}) @@ -23984,7 +23956,7 @@ General routines for swapping the bytes in 2-, 4-, and 8-byte quantities. Machine-specific implementations are available in some cases. @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{341}@anchor{gnat_rm/the_gnat_library id46}@anchor{342} +@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id46}@anchor{341} @section @code{GNAT.Calendar} (@code{g-calend.ads}) @@ -23998,7 +23970,7 @@ Also provides conversion of @code{Ada.Calendar.Time} values to and from the C @code{timeval} format. @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{343}@anchor{gnat_rm/the_gnat_library id47}@anchor{344} +@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id47}@anchor{343} @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads}) @@ -24009,7 +23981,7 @@ C @code{timeval} format. @geindex GNAT.Calendar.Time_IO (g-catiio.ads) @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{345}@anchor{gnat_rm/the_gnat_library id48}@anchor{346} +@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id48}@anchor{345} @section @code{GNAT.CRC32} (@code{g-crc32.ads}) @@ -24026,7 +23998,7 @@ of this algorithm see Aug. 1988. Sarwate, D.V. @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{347}@anchor{gnat_rm/the_gnat_library id49}@anchor{348} +@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id49}@anchor{347} @section @code{GNAT.Case_Util} (@code{g-casuti.ads}) @@ -24041,7 +24013,7 @@ without the overhead of the full casing tables in @code{Ada.Characters.Handling}. @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{349}@anchor{gnat_rm/the_gnat_library id50}@anchor{34a} +@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id50}@anchor{349} @section @code{GNAT.CGI} (@code{g-cgi.ads}) @@ -24056,7 +24028,7 @@ builds a table whose index is the key and provides some services to deal with this table. @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34b}@anchor{gnat_rm/the_gnat_library id51}@anchor{34c} +@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id51}@anchor{34b} @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads}) @@ -24071,7 +24043,7 @@ Common Gateway Interface (CGI). It exports services to deal with Web cookies (piece of information kept in the Web client software). @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34d}@anchor{gnat_rm/the_gnat_library id52}@anchor{34e} +@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id52}@anchor{34d} @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads}) @@ -24083,7 +24055,7 @@ This is a package to help debugging CGI (Common Gateway Interface) programs written in Ada. @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{34f}@anchor{gnat_rm/the_gnat_library id53}@anchor{350} +@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id53}@anchor{34f} @section @code{GNAT.Command_Line} (@code{g-comlin.ads}) @@ -24096,7 +24068,7 @@ including the ability to scan for named switches with optional parameters and expand file names using wildcard notations. @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{351}@anchor{gnat_rm/the_gnat_library id54}@anchor{352} +@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id54}@anchor{351} @section @code{GNAT.Compiler_Version} (@code{g-comver.ads}) @@ -24114,7 +24086,7 @@ of the compiler if a consistent tool set is used to compile all units of a partition). @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{353}@anchor{gnat_rm/the_gnat_library id55}@anchor{354} +@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id55}@anchor{353} @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads}) @@ -24125,7 +24097,7 @@ of a partition). Provides a simple interface to handle Ctrl-C keyboard events. @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{355}@anchor{gnat_rm/the_gnat_library id56}@anchor{356} +@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id56}@anchor{355} @section @code{GNAT.Current_Exception} (@code{g-curexc.ads}) @@ -24142,7 +24114,7 @@ This is particularly useful in simulating typical facilities for obtaining information about exceptions provided by Ada 83 compilers. @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{357}@anchor{gnat_rm/the_gnat_library id57}@anchor{358} +@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id57}@anchor{357} @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads}) @@ -24159,7 +24131,7 @@ problems. See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}. @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{359}@anchor{gnat_rm/the_gnat_library id58}@anchor{35a} +@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id58}@anchor{359} @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads}) @@ -24172,7 +24144,7 @@ to and from string images of address values. Supports both C and Ada formats for hexadecimal literals. @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35b}@anchor{gnat_rm/the_gnat_library id59}@anchor{35c} +@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id59}@anchor{35b} @section @code{GNAT.Decode_String} (@code{g-decstr.ads}) @@ -24196,7 +24168,7 @@ Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35d}@anchor{gnat_rm/the_gnat_library id60}@anchor{35e} +@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id60}@anchor{35d} @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads}) @@ -24217,7 +24189,7 @@ preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding. @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{35f}@anchor{gnat_rm/the_gnat_library id61}@anchor{360} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id61}@anchor{35f} @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads}) @@ -24230,7 +24202,7 @@ the current directory, making new directories, and scanning the files in a directory. @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{361}@anchor{gnat_rm/the_gnat_library id62}@anchor{362} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id62}@anchor{361} @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads}) @@ -24242,7 +24214,7 @@ A child unit of GNAT.Directory_Operations providing additional operations for iterating through directories. @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{363}@anchor{gnat_rm/the_gnat_library id63}@anchor{364} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id63}@anchor{363} @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads}) @@ -24260,7 +24232,7 @@ dynamic instances of the hash table, while an instantiation of @code{GNAT.HTable} creates a single instance of the hash table. @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{365}@anchor{gnat_rm/the_gnat_library id64}@anchor{366} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id64}@anchor{365} @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads}) @@ -24280,7 +24252,7 @@ dynamic instances of the table, while an instantiation of @code{GNAT.Table} creates a single instance of the table type. @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{367}@anchor{gnat_rm/the_gnat_library id65}@anchor{368} +@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id65}@anchor{367} @section @code{GNAT.Encode_String} (@code{g-encstr.ads}) @@ -24302,7 +24274,7 @@ encoding method. Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{369}@anchor{gnat_rm/the_gnat_library id66}@anchor{36a} +@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id66}@anchor{369} @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads}) @@ -24323,7 +24295,7 @@ Note there is a preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding. @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36b}@anchor{gnat_rm/the_gnat_library id67}@anchor{36c} +@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id67}@anchor{36b} @section @code{GNAT.Exception_Actions} (@code{g-excact.ads}) @@ -24336,7 +24308,7 @@ for specific exceptions, or when any exception is raised. This can be used for instance to force a core dump to ease debugging. @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36d}@anchor{gnat_rm/the_gnat_library id68}@anchor{36e} +@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id68}@anchor{36d} @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads}) @@ -24350,7 +24322,7 @@ Provides an interface allowing to control automatic output upon exception occurrences. @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{36f}@anchor{gnat_rm/the_gnat_library id69}@anchor{370} +@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id69}@anchor{36f} @section @code{GNAT.Exceptions} (@code{g-except.ads}) @@ -24371,7 +24343,7 @@ predefined exceptions, and for example allows raising @code{Constraint_Error} with a message from a pure subprogram. @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{371}@anchor{gnat_rm/the_gnat_library id70}@anchor{372} +@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id70}@anchor{371} @section @code{GNAT.Expect} (@code{g-expect.ads}) @@ -24387,7 +24359,7 @@ It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{373}@anchor{gnat_rm/the_gnat_library id71}@anchor{374} +@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id71}@anchor{373} @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads}) @@ -24399,7 +24371,7 @@ ports. It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{375}@anchor{gnat_rm/the_gnat_library id72}@anchor{376} +@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id72}@anchor{375} @section @code{GNAT.Float_Control} (@code{g-flocon.ads}) @@ -24413,7 +24385,7 @@ library calls may cause this mode to be modified, and the Reset procedure in this package can be used to reestablish the required mode. @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{377}@anchor{gnat_rm/the_gnat_library id73}@anchor{378} +@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id73}@anchor{377} @section @code{GNAT.Formatted_String} (@code{g-forstr.ads}) @@ -24428,7 +24400,7 @@ derived from Integer, Float or enumerations as values for the formatted string. @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id74}@anchor{37a} +@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id74}@anchor{379} @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads}) @@ -24446,7 +24418,7 @@ have a vector implementation that can be automatically used by the compiler when auto-vectorization is enabled. @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id75}@anchor{37c} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id75}@anchor{37b} @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads}) @@ -24460,7 +24432,7 @@ access-to-procedure values. The algorithm used is a modified heap sort that performs approximately N*log(N) comparisons in the worst case. @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id76}@anchor{37e} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id76}@anchor{37d} @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads}) @@ -24476,7 +24448,7 @@ This differs from @code{GNAT.Heap_Sort} in having a less convenient interface, but may be slightly more efficient. @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id77}@anchor{380} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id77}@anchor{37f} @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads}) @@ -24490,7 +24462,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{381}@anchor{gnat_rm/the_gnat_library id78}@anchor{382} +@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id78}@anchor{381} @section @code{GNAT.HTable} (@code{g-htable.ads}) @@ -24503,7 +24475,7 @@ data. Provides two approaches, one a simple static approach, and the other allowing arbitrary dynamic hash tables. @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{383}@anchor{gnat_rm/the_gnat_library id79}@anchor{384} +@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id79}@anchor{383} @section @code{GNAT.IO} (@code{g-io.ads}) @@ -24519,7 +24491,7 @@ Standard_Input, and writing characters, strings and integers to either Standard_Output or Standard_Error. @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id80}@anchor{386} +@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id80}@anchor{385} @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads}) @@ -24533,7 +24505,7 @@ Provides some auxiliary functions for use with Text_IO, including a test for whether a file exists, and functions for reading a line of text. @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id81}@anchor{388} +@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id81}@anchor{387} @section @code{GNAT.Lock_Files} (@code{g-locfil.ads}) @@ -24547,7 +24519,7 @@ Provides a general interface for using files as locks. Can be used for providing program level synchronization. @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id82}@anchor{38a} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id82}@anchor{389} @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads}) @@ -24559,7 +24531,7 @@ The original implementation of @code{Ada.Numerics.Discrete_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id83}@anchor{38c} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id83}@anchor{38b} @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads}) @@ -24571,7 +24543,7 @@ The original implementation of @code{Ada.Numerics.Float_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id84}@anchor{38e} +@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id84}@anchor{38d} @section @code{GNAT.MD5} (@code{g-md5.ads}) @@ -24584,7 +24556,7 @@ the HMAC-MD5 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id85}@anchor{390} +@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id85}@anchor{38f} @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads}) @@ -24597,7 +24569,7 @@ standard output or standard error files. Uses GNAT.IO for actual output. @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{391}@anchor{gnat_rm/the_gnat_library id86}@anchor{392} +@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id86}@anchor{391} @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads}) @@ -24611,7 +24583,7 @@ various logging purposes, including duplicating functionality of some Ada 83 implementation dependent extensions. @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{393}@anchor{gnat_rm/the_gnat_library id87}@anchor{394} +@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id87}@anchor{393} @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads}) @@ -24627,7 +24599,7 @@ including a portable spawn procedure, and access to environment variables and error return codes. @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{395}@anchor{gnat_rm/the_gnat_library id88}@anchor{396} +@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id88}@anchor{395} @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads}) @@ -24645,7 +24617,7 @@ hashcode are in the same order. These hashing functions are very convenient for use with realtime applications. @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{397}@anchor{gnat_rm/the_gnat_library id89}@anchor{398} +@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id89}@anchor{397} @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads}) @@ -24657,7 +24629,7 @@ Provides random number capabilities which extend those available in the standard Ada library and are more convenient to use. @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{26e}@anchor{gnat_rm/the_gnat_library id90}@anchor{399} +@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{26d}@anchor{gnat_rm/the_gnat_library id90}@anchor{398} @section @code{GNAT.Regexp} (@code{g-regexp.ads}) @@ -24673,7 +24645,7 @@ simplest of the three pattern matching packages provided, and is particularly suitable for ‘file globbing’ applications. @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{39a}@anchor{gnat_rm/the_gnat_library id91}@anchor{39b} +@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id91}@anchor{39a} @section @code{GNAT.Registry} (@code{g-regist.ads}) @@ -24687,7 +24659,7 @@ registry API, but at a lower level of abstraction, refer to the Win32.Winreg package provided with the Win32Ada binding @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39c}@anchor{gnat_rm/the_gnat_library id92}@anchor{39d} +@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id92}@anchor{39c} @section @code{GNAT.Regpat} (@code{g-regpat.ads}) @@ -24702,7 +24674,7 @@ from the original V7 style regular expression library written in C by Henry Spencer (and binary compatible with this C library). @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39e}@anchor{gnat_rm/the_gnat_library id93}@anchor{39f} +@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id93}@anchor{39e} @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads}) @@ -24716,7 +24688,7 @@ full content to be processed is not loaded into memory all at once. This makes this interface usable for large files or socket streams. @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3a0}@anchor{gnat_rm/the_gnat_library id94}@anchor{3a1} +@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id94}@anchor{3a0} @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads}) @@ -24728,7 +24700,7 @@ Provides the capability to query the high water mark of the current task’s secondary stack. @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a2}@anchor{gnat_rm/the_gnat_library id95}@anchor{3a3} +@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id95}@anchor{3a2} @section @code{GNAT.Semaphores} (@code{g-semaph.ads}) @@ -24739,7 +24711,7 @@ secondary stack. Provides classic counting and binary semaphores using protected types. @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a4}@anchor{gnat_rm/the_gnat_library id96}@anchor{3a5} +@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id96}@anchor{3a4} @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads}) @@ -24751,7 +24723,7 @@ Provides a simple interface to send and receive data over a serial port. This is only supported on GNU/Linux and Windows. @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a6}@anchor{gnat_rm/the_gnat_library id97}@anchor{3a7} +@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id97}@anchor{3a6} @section @code{GNAT.SHA1} (@code{g-sha1.ads}) @@ -24764,7 +24736,7 @@ and RFC 3174, and the HMAC-SHA1 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3a8}@anchor{gnat_rm/the_gnat_library id98}@anchor{3a9} +@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id98}@anchor{3a8} @section @code{GNAT.SHA224} (@code{g-sha224.ads}) @@ -24777,7 +24749,7 @@ and the HMAC-SHA224 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3aa}@anchor{gnat_rm/the_gnat_library id99}@anchor{3ab} +@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id99}@anchor{3aa} @section @code{GNAT.SHA256} (@code{g-sha256.ads}) @@ -24790,7 +24762,7 @@ and the HMAC-SHA256 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3ac}@anchor{gnat_rm/the_gnat_library id100}@anchor{3ad} +@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id100}@anchor{3ac} @section @code{GNAT.SHA384} (@code{g-sha384.ads}) @@ -24803,7 +24775,7 @@ and the HMAC-SHA384 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3ae}@anchor{gnat_rm/the_gnat_library id101}@anchor{3af} +@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id101}@anchor{3ae} @section @code{GNAT.SHA512} (@code{g-sha512.ads}) @@ -24816,7 +24788,7 @@ and the HMAC-SHA512 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3b0}@anchor{gnat_rm/the_gnat_library id102}@anchor{3b1} +@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id102}@anchor{3b0} @section @code{GNAT.Signals} (@code{g-signal.ads}) @@ -24828,7 +24800,7 @@ Provides the ability to manipulate the blocked status of signals on supported targets. @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b2}@anchor{gnat_rm/the_gnat_library id103}@anchor{3b3} +@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id103}@anchor{3b2} @section @code{GNAT.Sockets} (@code{g-socket.ads}) @@ -24843,7 +24815,7 @@ on all native GNAT ports and on VxWorks cross ports. It is not implemented for the LynxOS cross port. @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b4}@anchor{gnat_rm/the_gnat_library id104}@anchor{3b5} +@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id104}@anchor{3b4} @section @code{GNAT.Source_Info} (@code{g-souinf.ads}) @@ -24857,7 +24829,7 @@ subprograms yielding the date and time of the current compilation (like the C macros @code{__DATE__} and @code{__TIME__}) @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b6}@anchor{gnat_rm/the_gnat_library id105}@anchor{3b7} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id105}@anchor{3b6} @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads}) @@ -24869,7 +24841,7 @@ Provides a function for determining whether one string is a plausible near misspelling of another string. @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3b8}@anchor{gnat_rm/the_gnat_library id106}@anchor{3b9} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id106}@anchor{3b8} @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads}) @@ -24882,7 +24854,7 @@ determining whether one string is a plausible near misspelling of another string. @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3ba}@anchor{gnat_rm/the_gnat_library id107}@anchor{3bb} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id107}@anchor{3ba} @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads}) @@ -24898,7 +24870,7 @@ the SNOBOL4 dynamic pattern construction and matching capabilities, using the efficient algorithm developed by Robert Dewar for the SPITBOL system. @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3bc}@anchor{gnat_rm/the_gnat_library id108}@anchor{3bd} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id108}@anchor{3bc} @section @code{GNAT.Spitbol} (@code{g-spitbo.ads}) @@ -24913,7 +24885,7 @@ useful for constructing arbitrary mappings from strings in the style of the SNOBOL4 TABLE function. @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3be}@anchor{gnat_rm/the_gnat_library id109}@anchor{3bf} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id109}@anchor{3be} @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads}) @@ -24928,7 +24900,7 @@ for type @code{Standard.Boolean}, giving an implementation of sets of string values. @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3c0}@anchor{gnat_rm/the_gnat_library id110}@anchor{3c1} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id110}@anchor{3c0} @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads}) @@ -24945,7 +24917,7 @@ for type @code{Standard.Integer}, giving an implementation of maps from string to integer values. @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c2}@anchor{gnat_rm/the_gnat_library id111}@anchor{3c3} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id111}@anchor{3c2} @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads}) @@ -24962,7 +24934,7 @@ a variable length string type, giving an implementation of general maps from strings to strings. @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c4}@anchor{gnat_rm/the_gnat_library id112}@anchor{3c5} +@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id112}@anchor{3c4} @section @code{GNAT.SSE} (@code{g-sse.ads}) @@ -24974,7 +24946,7 @@ targets. It exposes vector component types together with a general introduction to the binding contents and use. @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c6}@anchor{gnat_rm/the_gnat_library id113}@anchor{3c7} +@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id113}@anchor{3c6} @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads}) @@ -24983,7 +24955,7 @@ introduction to the binding contents and use. SSE vector types for use with SSE related intrinsics. @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3c8}@anchor{gnat_rm/the_gnat_library id114}@anchor{3c9} +@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id114}@anchor{3c8} @section @code{GNAT.String_Hash} (@code{g-strhas.ads}) @@ -24995,7 +24967,7 @@ Provides a generic hash function working on arrays of scalars. Both the scalar type and the hash result type are parameters. @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3ca}@anchor{gnat_rm/the_gnat_library id115}@anchor{3cb} +@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id115}@anchor{3ca} @section @code{GNAT.Strings} (@code{g-string.ads}) @@ -25005,7 +24977,7 @@ Common String access types and related subprograms. Basically it defines a string access and an array of string access types. @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3cc}@anchor{gnat_rm/the_gnat_library id116}@anchor{3cd} +@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id116}@anchor{3cc} @section @code{GNAT.String_Split} (@code{g-strspl.ads}) @@ -25019,7 +24991,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3ce}@anchor{gnat_rm/the_gnat_library id117}@anchor{3cf} +@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id117}@anchor{3ce} @section @code{GNAT.Table} (@code{g-table.ads}) @@ -25039,7 +25011,7 @@ while an instantiation of @code{GNAT.Dynamic_Tables} creates a type that can be used to define dynamic instances of the table. @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3d0}@anchor{gnat_rm/the_gnat_library id118}@anchor{3d1} +@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id118}@anchor{3d0} @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads}) @@ -25056,7 +25028,7 @@ single global task lock. Appropriate for use in situations where contention between tasks is very rarely expected. @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d2}@anchor{gnat_rm/the_gnat_library id119}@anchor{3d3} +@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id119}@anchor{3d2} @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads}) @@ -25071,7 +25043,7 @@ represents the current date and time in ISO 8601 format. This is a very simple routine with minimal code and there are no dependencies on any other unit. @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d4}@anchor{gnat_rm/the_gnat_library id120}@anchor{3d5} +@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id120}@anchor{3d4} @section @code{GNAT.Threads} (@code{g-thread.ads}) @@ -25088,7 +25060,7 @@ further details if your program has threads that are created by a non-Ada environment which then accesses Ada code. @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d6}@anchor{gnat_rm/the_gnat_library id121}@anchor{3d7} +@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id121}@anchor{3d6} @section @code{GNAT.Traceback} (@code{g-traceb.ads}) @@ -25100,7 +25072,7 @@ Provides a facility for obtaining non-symbolic traceback information, useful in various debugging situations. @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d8}@anchor{gnat_rm/the_gnat_library id122}@anchor{3d9} +@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id122}@anchor{3d8} @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads}) @@ -25109,7 +25081,7 @@ in various debugging situations. @geindex Trace back facilities @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3da}@anchor{gnat_rm/the_gnat_library id123}@anchor{3db} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id123}@anchor{3da} @section @code{GNAT.UTF_32} (@code{g-utf_32.ads}) @@ -25128,7 +25100,7 @@ lower case to upper case fold routine corresponding to the Ada 2005 rules for identifier equivalence. @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3dc}@anchor{gnat_rm/the_gnat_library id124}@anchor{3dd} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id124}@anchor{3dc} @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads}) @@ -25141,7 +25113,7 @@ near misspelling of another wide wide string, where the strings are represented using the UTF_32_String type defined in System.Wch_Cnv. @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3de}@anchor{gnat_rm/the_gnat_library id125}@anchor{3df} +@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id125}@anchor{3de} @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads}) @@ -25153,7 +25125,7 @@ Provides a function for determining whether one wide string is a plausible near misspelling of another wide string. @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3e0}@anchor{gnat_rm/the_gnat_library id126}@anchor{3e1} +@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id126}@anchor{3e0} @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads}) @@ -25167,7 +25139,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e2}@anchor{gnat_rm/the_gnat_library id127}@anchor{3e3} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id127}@anchor{3e2} @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads}) @@ -25179,7 +25151,7 @@ Provides a function for determining whether one wide wide string is a plausible near misspelling of another wide wide string. @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e4}@anchor{gnat_rm/the_gnat_library id128}@anchor{3e5} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id128}@anchor{3e4} @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads}) @@ -25193,7 +25165,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id129}@anchor{3e6}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e7} +@anchor{gnat_rm/the_gnat_library id129}@anchor{3e5}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e6} @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads}) @@ -25204,7 +25176,7 @@ for use with either manually or automatically generated bindings to C libraries. @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id130}@anchor{3e8}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3e9} +@anchor{gnat_rm/the_gnat_library id130}@anchor{3e7}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3e8} @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads}) @@ -25217,7 +25189,7 @@ This package is a binding for the most commonly used operations on C streams. @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id131}@anchor{3ea}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3eb} +@anchor{gnat_rm/the_gnat_library id131}@anchor{3e9}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3ea} @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads}) @@ -25232,7 +25204,7 @@ from a packed decimal format compatible with that used on IBM mainframes. @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id132}@anchor{3ec}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3ed} +@anchor{gnat_rm/the_gnat_library id132}@anchor{3eb}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3ec} @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads}) @@ -25246,7 +25218,7 @@ mainframes. This package provides a limited binding to the VxWorks API. @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id133}@anchor{3ee}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3ef} +@anchor{gnat_rm/the_gnat_library id133}@anchor{3ed}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3ee} @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads}) @@ -25269,7 +25241,7 @@ function codes. A particular use of this package is to enable the use of Get_Immediate under VxWorks. @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id134}@anchor{3f0}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f1} +@anchor{gnat_rm/the_gnat_library id134}@anchor{3ef}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f0} @section @code{System.Address_Image} (@code{s-addima.ads}) @@ -25285,7 +25257,7 @@ function that gives an (implementation dependent) string which identifies an address. @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id135}@anchor{3f2}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f3} +@anchor{gnat_rm/the_gnat_library id135}@anchor{3f1}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f2} @section @code{System.Assertions} (@code{s-assert.ads}) @@ -25301,7 +25273,7 @@ by an run-time assertion failure, as well as the routine that is used internally to raise this assertion. @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id136}@anchor{3f4}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f5} +@anchor{gnat_rm/the_gnat_library id136}@anchor{3f3}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f4} @section @code{System.Atomic_Counters} (@code{s-atocou.ads}) @@ -25315,7 +25287,7 @@ on most targets, including all Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9, x86, and x86_64 platforms. @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id137}@anchor{3f6}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f7} +@anchor{gnat_rm/the_gnat_library id137}@anchor{3f5}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f6} @section @code{System.Memory} (@code{s-memory.ads}) @@ -25333,7 +25305,7 @@ calls to this unit may be made for low level allocation uses (for example see the body of @code{GNAT.Tables}). @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id138}@anchor{3f8}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3f9} +@anchor{gnat_rm/the_gnat_library id138}@anchor{3f7}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3f8} @section @code{System.Multiprocessors} (@code{s-multip.ads}) @@ -25346,7 +25318,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id139}@anchor{3fa}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3fb} +@anchor{gnat_rm/the_gnat_library id139}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3fa} @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads}) @@ -25359,7 +25331,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id140}@anchor{3fc}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3fd} +@anchor{gnat_rm/the_gnat_library id140}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3fc} @section @code{System.Partition_Interface} (@code{s-parint.ads}) @@ -25372,7 +25344,7 @@ is used primarily in a distribution context when using Annex E with @code{GLADE}. @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id141}@anchor{3fe}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{3ff} +@anchor{gnat_rm/the_gnat_library id141}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{3fe} @section @code{System.Pool_Global} (@code{s-pooglo.ads}) @@ -25389,7 +25361,7 @@ declared. It uses malloc/free to allocate/free and does not attempt to do any automatic reclamation. @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id142}@anchor{400}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{401} +@anchor{gnat_rm/the_gnat_library id142}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{400} @section @code{System.Pool_Local} (@code{s-pooloc.ads}) @@ -25406,7 +25378,7 @@ a list of allocated blocks, so that all storage allocated for the pool can be freed automatically when the pool is finalized. @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id143}@anchor{402}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{403} +@anchor{gnat_rm/the_gnat_library id143}@anchor{401}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{402} @section @code{System.Restrictions} (@code{s-restri.ads}) @@ -25422,7 +25394,7 @@ compiler determined information on which restrictions are violated by one or more packages in the partition. @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id144}@anchor{404}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{405} +@anchor{gnat_rm/the_gnat_library id144}@anchor{403}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{404} @section @code{System.Rident} (@code{s-rident.ads}) @@ -25438,7 +25410,7 @@ since the necessary instantiation is included in package System.Restrictions. @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id145}@anchor{406}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{407} +@anchor{gnat_rm/the_gnat_library id145}@anchor{405}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{406} @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads}) @@ -25454,7 +25426,7 @@ stream attributes are applied to string types, but the subprograms in this package can be used directly by application programs. @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id146}@anchor{408}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{409} +@anchor{gnat_rm/the_gnat_library id146}@anchor{407}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{408} @section @code{System.Unsigned_Types} (@code{s-unstyp.ads}) @@ -25467,7 +25439,7 @@ also contains some related definitions for other specialized types used by the compiler in connection with packed array types. @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id147}@anchor{40a}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{40b} +@anchor{gnat_rm/the_gnat_library id147}@anchor{409}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{40a} @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads}) @@ -25488,7 +25460,7 @@ encoding method. It uses definitions in package @code{System.Wch_Con}. @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id148}@anchor{40c}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40d} +@anchor{gnat_rm/the_gnat_library id148}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40c} @section @code{System.Wch_Con} (@code{s-wchcon.ads}) @@ -25500,7 +25472,7 @@ in ordinary strings. These definitions are used by the package @code{System.Wch_Cnv}. @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top -@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40e}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} +@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40d}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{40e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} @chapter Interfacing to Other Languages @@ -25518,7 +25490,7 @@ provided. @end menu @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{410}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{411} +@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{410} @section Interfacing to C @@ -25658,7 +25630,7 @@ of the length corresponding to the @code{type'Size} value in Ada. @end itemize @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{412} +@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{411} @section Interfacing to C++ @@ -25715,7 +25687,7 @@ The @code{External_Name} is the name of the C++ RTTI symbol. You can then cover a specific C++ exception in an exception handler. @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{413}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{414} +@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{412}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{413} @section Interfacing to COBOL @@ -25723,7 +25695,7 @@ Interfacing to COBOL is achieved as described in section B.4 of the Ada Reference Manual. @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{415}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{416} +@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{414}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{415} @section Interfacing to Fortran @@ -25733,7 +25705,7 @@ multi-dimensional array causes the array to be stored in column-major order as required for convenient interface to Fortran. @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{417}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{418} +@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{416}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{417} @section Interfacing to non-GNAT Ada code @@ -25757,7 +25729,7 @@ values or simple record types without variants, or simple array types with fixed bounds. @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top -@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{419}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{41a}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} +@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{418}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{419}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} @chapter Specialized Needs Annexes @@ -25798,7 +25770,7 @@ in Ada 2005) is fully implemented. @end table @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top -@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41b}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41c}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} +@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41a}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41b}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} @chapter Implementation of Specific Ada Features @@ -25817,7 +25789,7 @@ facilities. @end menu @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{175} +@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41c}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{175} @section Machine Code Insertions @@ -25985,7 +25957,7 @@ according to normal visibility rules. In particular if there is no qualification is required. @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41e}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{41f} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{41e} @section GNAT Implementation of Tasking @@ -26001,7 +25973,7 @@ to compliance with the Real-Time Systems Annex. @end menu @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{420}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{421} +@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{420} @subsection Mapping Ada Tasks onto the Underlying Kernel Threads @@ -26070,7 +26042,7 @@ support this functionality when the parent contains more than one task. @geindex Forking a new process @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{422}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{423} +@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{421}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{422} @subsection Ensuring Compliance with the Real-Time Annex @@ -26121,7 +26093,7 @@ placed at the end. @c Support_for_Locking_Policies @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{424} +@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{423} @subsection Support for Locking Policies @@ -26155,7 +26127,7 @@ then ceiling locking is used. Otherwise, the @code{Ceiling_Locking} policy is ignored. @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{425}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{426} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{424}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{425} @section GNAT Implementation of Shared Passive Packages @@ -26253,7 +26225,7 @@ This is used to provide the required locking semantics for proper protected object synchronization. @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{428} +@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{427} @section Code Generation for Array Aggregates @@ -26284,7 +26256,7 @@ component values and static subtypes also lead to simpler code. @end menu @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{429}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{42a} +@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{429} @subsection Static constant aggregates with static bounds @@ -26331,7 +26303,7 @@ Zero2: constant two_dim := (others => (others => 0)); @end example @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{42b}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{42c} +@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{42b} @subsection Constant aggregates with unconstrained nominal types @@ -26346,7 +26318,7 @@ Cr_Unc : constant One_Unc := (12,24,36); @end example @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42d}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42e} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42d} @subsection Aggregates with static bounds @@ -26374,7 +26346,7 @@ end loop; @end example @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{42f}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{430} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{42f} @subsection Aggregates with nonstatic bounds @@ -26385,7 +26357,7 @@ have to be applied to sub-arrays individually, if they do not have statically compatible subtypes. @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{431}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{432} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{431} @subsection Aggregates in assignment statements @@ -26427,7 +26399,7 @@ a temporary (created either by the front-end or the code generator) and then that temporary will be copied onto the target. @node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{433}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{434} +@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{433} @section The Size of Discriminated Records with Default Discriminants @@ -26507,7 +26479,7 @@ say) must be consistent, so it is imperative that the object, once created, remain invariant. @node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{435}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{436} +@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{435} @section Image Values For Nonscalar Types @@ -26527,7 +26499,7 @@ control of image text is required for some type T, then T’Put_Image should be explicitly specified. @node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{437}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{438} +@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{437} @section Strict Conformance to the Ada Reference Manual @@ -26554,7 +26526,7 @@ behavior (although at the cost of a significant performance penalty), so infinite and NaN values are properly generated. @node Implementation of Ada 2012 Features,GNAT language extensions,Implementation of Specific Ada Features,Top -@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{439}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{43a}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14} +@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{438}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{439}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14} @chapter Implementation of Ada 2012 Features @@ -28720,7 +28692,7 @@ RM References: 4.03.01 (17) @end itemize @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2012 Features,Top -@anchor{gnat_rm/gnat_language_extensions doc}@anchor{43b}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{43c}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{43d} +@anchor{gnat_rm/gnat_language_extensions doc}@anchor{43a}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{43b}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{43c} @chapter GNAT language extensions @@ -28751,7 +28723,7 @@ prototyping phase. @end menu @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{43e} +@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{43d} @section How to activate the extended GNAT Ada superset @@ -28790,7 +28762,7 @@ for serious projects, and is only means as a playground/technology preview. @end cartouche @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{43f}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{69} +@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{43e}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{69} @section Curated Extensions @@ -28807,7 +28779,7 @@ for serious projects, and is only means as a playground/technology preview. @end menu @node Local Declarations Without Block,Conditional when constructs,,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{440} +@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{43f} @subsection Local Declarations Without Block @@ -28830,7 +28802,7 @@ end if; @end example @node Conditional when constructs,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{441} +@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{440} @subsection Conditional when constructs @@ -28902,7 +28874,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-conditional-when-constructs.rst} @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Conditional when constructs,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{442} +@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{441} @subsection Fixed lower bounds for array types and subtypes @@ -28956,7 +28928,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-fixed-lower-bound.rst} @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{443} +@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{442} @subsection Prefixed-view notation for calls to primitive subprograms of untagged types @@ -29009,7 +28981,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-prefixed-untagged.rst} @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{444} +@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{443} @subsection Expression defaults for generic formal functions @@ -29038,7 +29010,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-expression-functions-as-default-for-generic-formal-function-parameters.rst} @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{445} +@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{444} @subsection String interpolation @@ -29204,7 +29176,7 @@ Here is a link to the original RFC : @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-string-interpolation.rst} @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{446} +@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{445} @subsection Constrained attribute for generic objects @@ -29212,7 +29184,7 @@ The @code{Constrained} attribute is permitted for objects of generic types. The result indicates whether the corresponding actual is constrained. @node Static aspect on intrinsic functions,,Constrained attribute for generic objects,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{447} +@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{446} @subsection @code{Static} aspect on intrinsic functions @@ -29221,20 +29193,21 @@ and the compiler will evaluate some of these intrinsics statically, in particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6a}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{448} +@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6a}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{447} @section Experimental Language Extensions @menu * Pragma Storage_Model:: +* Attribute Super:: * Simpler accessibility model:: * Case pattern matching:: * Mutably Tagged Types with Size’Class Aspect:: @end menu -@node Pragma Storage_Model,Simpler accessibility model,,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions pragma-storage-model}@anchor{449} +@node Pragma Storage_Model,Attribute Super,,Experimental Language Extensions +@anchor{gnat_rm/gnat_language_extensions pragma-storage-model}@anchor{448} @subsection Pragma Storage_Model @@ -29248,7 +29221,37 @@ support interactions with GPU. Here is a link to the full RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-storage-model.rst} -@node Simpler accessibility model,Case pattern matching,Pragma Storage_Model,Experimental Language Extensions +@node Attribute Super,Simpler accessibility model,Pragma Storage_Model,Experimental Language Extensions +@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{449} +@subsection Attribute Super + + +@geindex Super + +The @code{Super} attribute can be applied to objects of tagged types in order +to obtain a view conversion to the most immediate specific parent type. + +It cannot be applied to objects of types without any ancestors, or types whose +immediate parent is abstract. + +@example +type T1 is tagged null record; +procedure P (V : T1); + +type T2 is new T1 with null record; +procedure P (V : T2); + +procedure Call (V : T2'Class) is +begin + V'Super.P; -- Equivalent to "P (T1 (V));", a nondispatching call + -- to T1's primitive procedure P. +end; +@end example + +Here is a link to the full RFC: +@indicateurl{https://github.com/QuentinOchem/ada-spark-rfcs/blob/oop/considered/rfc-oop-super.rst} + +@node Simpler accessibility model,Case pattern matching,Attribute Super,Experimental Language Extensions @anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{44a} @subsection Simpler accessibility model diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 73f496fcdabc5..fb3b7e1164165 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -19,7 +19,7 @@ @copying @quotation -GNAT User's Guide for Native Platforms , May 28, 2024 +GNAT User's Guide for Native Platforms , Jun 14, 2024 AdaCore @@ -29645,8 +29645,8 @@ to permit their use in free software. @printindex ge -@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } @anchor{d1}@w{ } +@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } @c %**end of body @bye From d1c07598fad36218809907312f5c3d247b0413aa Mon Sep 17 00:00:00 2001 From: Viljar Indus Date: Mon, 6 May 2024 15:17:27 +0300 Subject: [PATCH 027/114] ada: Treat Info-Warnings as Info messages There was a general concept of info messages being a subset of warnings. However that is no longer the case. Messages with an info insertion character should be treated just as info messages. gcc/ada/ * atree.ads: Remove Warning_Info_Messages. * errout.adb: Remove various places where Warning_Info_Messages was used. * erroutc.adb: Remove various places where Warning_Info_Messages was used. Create Error_Msg_Object objects with only an info attribute if the message contained both info and warning insertion characters. New method Has_Switch_Tag for detecting if a message should have an error tag. * errutil.adb: Create Error_Msg_Object objects with only an info attribute if the message contained both info and warning insertion characters. --- gcc/ada/atree.ads | 10 ++---- gcc/ada/errout.adb | 80 +++++++++++++++++++++++++-------------------- gcc/ada/erroutc.adb | 51 ++++++++++++++++++++--------- gcc/ada/errutil.adb | 31 ++++++++---------- 4 files changed, 96 insertions(+), 76 deletions(-) diff --git a/gcc/ada/atree.ads b/gcc/ada/atree.ads index 2ecb386c23be6..834cc3150f5e8 100644 --- a/gcc/ada/atree.ads +++ b/gcc/ada/atree.ads @@ -161,15 +161,11 @@ package Atree is -- Number of warnings detected. Initialized to zero at the start of -- compilation. This count includes the count of style and info messages. - Warning_Info_Messages : Nat := 0; - -- Number of info messages generated as warnings. Info messages are never - -- treated as errors (whether from use of the pragma, or the compiler - -- switch -gnatwe). - - Report_Info_Messages : Nat := 0; + Info_Messages : Nat := 0; -- Number of info messages generated as reports. Info messages are never -- treated as errors (whether from use of the pragma, or the compiler - -- switch -gnatwe). Used under Spark_Mode to report proved checks. + -- switch -gnatwe). Used by GNATprove under SPARK_Mode to report proved + -- checks. Check_Messages : Nat := 0; -- Number of check messages generated. Check messages are neither warnings diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index 76c461a2fd7c1..1e6b0fe43698b 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -283,10 +283,6 @@ package body Errout is M.Deleted := True; Warnings_Detected := Warnings_Detected - 1; - if M.Info then - Warning_Info_Messages := Warning_Info_Messages - 1; - end if; - if M.Warn_Err then Warnings_Treated_As_Errors := Warnings_Treated_As_Errors - 1; end if; @@ -428,7 +424,8 @@ package body Errout is -- that style checks are not considered warning messages for this -- purpose. - if Is_Warning_Msg and then Warnings_Suppressed (Orig_Loc) /= No_String + if Is_Warning_Msg + and then Warnings_Suppressed (Orig_Loc) /= No_String then return; @@ -1049,6 +1046,33 @@ package body Errout is return; end if; + if Is_Info_Msg then + + -- If the flag location is in the main extended source unit then for + -- sure we want the message since it definitely belongs. + + if In_Extended_Main_Source_Unit (Sptr) then + null; + + -- Keep info message if message text contains !! + + elsif Has_Double_Exclam then + null; + + -- Here is where we delete a message from a with'ed unit + + else + Cur_Msg := No_Error_Msg; + + if not Continuation then + Last_Killed := True; + end if; + + return; + end if; + + end if; + -- Special check for warning message to see if it should be output if Is_Warning_Msg then @@ -1064,7 +1088,7 @@ package body Errout is end if; -- If the flag location is in the main extended source unit then for - -- sure we want the warning since it definitely belongs + -- sure we want the warning since it definitely belongs. if In_Extended_Main_Source_Unit (Sptr) then null; @@ -1210,6 +1234,11 @@ package body Errout is return; end if; + -- Warning, Style and Info attributes are mutually exclusive + + pragma Assert (Boolean'Pos (Is_Warning_Msg) + Boolean'Pos (Is_Info_Msg) + + Boolean'Pos (Is_Style_Msg) <= 1); + -- Here we build a new error object Errors.Append @@ -1384,15 +1413,7 @@ package body Errout is -- Bump appropriate statistics counts if Errors.Table (Cur_Msg).Info then - - -- Could be (usually is) both "info" and "warning" - - if Errors.Table (Cur_Msg).Warn then - Warning_Info_Messages := Warning_Info_Messages + 1; - Warnings_Detected := Warnings_Detected + 1; - else - Report_Info_Messages := Report_Info_Messages + 1; - end if; + Info_Messages := Info_Messages + 1; elsif Errors.Table (Cur_Msg).Warn or else Errors.Table (Cur_Msg).Style @@ -1648,10 +1669,6 @@ package body Errout is if not Errors.Table (E).Deleted then Errors.Table (E).Deleted := True; Warnings_Detected := Warnings_Detected - 1; - - if Errors.Table (E).Info then - Warning_Info_Messages := Warning_Info_Messages - 1; - end if; end if; end Delete_Warning; @@ -1695,7 +1712,8 @@ package body Errout is Tag : constant String := Get_Warning_Tag (Cur); begin - if (CE.Warn and not CE.Deleted) + if CE.Warn + and then not CE.Deleted and then (Warning_Specifically_Suppressed (CE.Sptr.Ptr, CE.Text, Tag) /= No_String @@ -1968,7 +1986,6 @@ package body Errout is Warnings_Treated_As_Errors := 0; Warnings_Detected := 0; - Warning_Info_Messages := 0; Warnings_As_Errors_Count := 0; -- Initialize warnings tables @@ -2640,8 +2657,7 @@ package body Errout is -- are also errors. declare - Warnings_Count : constant Int := - Warnings_Detected - Warning_Info_Messages; + Warnings_Count : constant Int := Warnings_Detected; Compile_Time_Warnings : Int; -- Number of warnings that come from a Compile_Time_Warning @@ -2702,12 +2718,12 @@ package body Errout is end if; end; - if Warning_Info_Messages + Report_Info_Messages /= 0 then + if Info_Messages /= 0 then Write_Str (", "); - Write_Int (Warning_Info_Messages + Report_Info_Messages); + Write_Int (Info_Messages); Write_Str (" info message"); - if Warning_Info_Messages + Report_Info_Messages > 1 then + if Info_Messages > 1 then Write_Char ('s'); end if; end if; @@ -3419,23 +3435,19 @@ package body Errout is Write_Max_Errors; end if; - -- Even though Warning_Info_Messages are a subclass of warnings, they - -- must not be treated as errors when -gnatwe is in effect. - if Warning_Mode = Treat_As_Error then declare Compile_Time_Pragma_Warnings : constant Nat := Count_Compile_Time_Pragma_Warnings; Total : constant Int := Total_Errors_Detected + Warnings_Detected - - Warning_Info_Messages - Compile_Time_Pragma_Warnings; + - Compile_Time_Pragma_Warnings; -- We need to protect against a negative Total here, because -- if a pragma Compile_Time_Warning occurs in dead code, it -- gets counted in Compile_Time_Pragma_Warnings but not in -- Warnings_Detected. begin Total_Errors_Detected := Int'Max (Total, 0); - Warnings_Detected := - Warning_Info_Messages + Compile_Time_Pragma_Warnings; + Warnings_Detected := Compile_Time_Pragma_Warnings; end; end if; end Output_Messages; @@ -3630,10 +3642,6 @@ package body Errout is Warnings_Detected := Warnings_Detected - 1; end if; - if Errors.Table (E).Info then - Warning_Info_Messages := Warning_Info_Messages - 1; - end if; - -- When warning about a runtime exception has been escalated -- into error, the starting message has increased the total -- errors counter, so here we decrease this counter. diff --git a/gcc/ada/erroutc.adb b/gcc/ada/erroutc.adb index f404018c44d9b..aa9aac4774f40 100644 --- a/gcc/ada/erroutc.adb +++ b/gcc/ada/erroutc.adb @@ -59,6 +59,11 @@ package body Erroutc is -- from generic instantiations by using pragma Warnings around generic -- instances, as needed in GNATprove. + function Has_Switch_Tag (Id : Error_Msg_Id) return Boolean; + function Has_Switch_Tag (E_Msg : Error_Msg_Object) return Boolean; + -- Returns True if the E_Msg is Warning, Style or Info and has a non-empty + -- Warn_Char. + --------------- -- Add_Class -- --------------- @@ -144,12 +149,7 @@ package body Erroutc is if Errors.Table (D).Info then - if Errors.Table (D).Warn then - Warning_Info_Messages := Warning_Info_Messages - 1; - Warnings_Detected := Warnings_Detected - 1; - else - Report_Info_Messages := Report_Info_Messages - 1; - end if; + Info_Messages := Info_Messages - 1; elsif Errors.Table (D).Warn or else Errors.Table (D).Style then Warnings_Detected := Warnings_Detected - 1; @@ -246,8 +246,7 @@ package body Erroutc is ------------------------ function Compilation_Errors return Boolean is - Warnings_Count : constant Int - := Warnings_Detected - Warning_Info_Messages; + Warnings_Count : constant Int := Warnings_Detected; begin if Total_Errors_Detected /= 0 then return True; @@ -330,6 +329,7 @@ package body Erroutc is w (" Line = ", Int (E.Line)); w (" Col = ", Int (E.Col)); + w (" Info = ", E.Info); w (" Warn = ", E.Warn); w (" Warn_Err = ", E.Warn_Err); w (" Warn_Runtime_Raise = ", E.Warn_Runtime_Raise); @@ -366,13 +366,11 @@ package body Erroutc is ------------------------ function Get_Warning_Option (Id : Error_Msg_Id) return String is - Warn : constant Boolean := Errors.Table (Id).Warn; Style : constant Boolean := Errors.Table (Id).Style; Warn_Chr : constant String (1 .. 2) := Errors.Table (Id).Warn_Chr; begin - if (Warn or Style) - and then Warn_Chr /= " " + if Has_Switch_Tag (Errors.Table (Id)) and then Warn_Chr (1) /= '?' then if Warn_Chr = "$ " then @@ -394,13 +392,11 @@ package body Erroutc is --------------------- function Get_Warning_Tag (Id : Error_Msg_Id) return String is - Warn : constant Boolean := Errors.Table (Id).Warn; - Style : constant Boolean := Errors.Table (Id).Style; Warn_Chr : constant String (1 .. 2) := Errors.Table (Id).Warn_Chr; Option : constant String := Get_Warning_Option (Id); begin - if Warn or Style then + if Has_Switch_Tag (Id) then if Warn_Chr = "? " then return "[enabled by default]"; elsif Warn_Chr = "* " then @@ -413,6 +409,23 @@ package body Erroutc is return ""; end Get_Warning_Tag; + -------------------- + -- Has_Switch_Tag -- + -------------------- + + function Has_Switch_Tag (Id : Error_Msg_Id) return Boolean + is (Has_Switch_Tag (Errors.Table (Id))); + + function Has_Switch_Tag (E_Msg : Error_Msg_Object) return Boolean + is + Warn : constant Boolean := E_Msg.Warn; + Style : constant Boolean := E_Msg.Style; + Info : constant Boolean := E_Msg.Info; + Warn_Chr : constant String (1 .. 2) := E_Msg.Warn_Chr; + begin + return (Warn or Style or Info) and then Warn_Chr /= " "; + end Has_Switch_Tag; + ------------- -- Matches -- ------------- @@ -918,6 +931,7 @@ package body Erroutc is Is_Unconditional_Msg := False; Is_Warning_Msg := False; Is_Runtime_Raise := False; + Warning_Msg_Char := " "; -- Check style message @@ -962,7 +976,14 @@ package body Erroutc is elsif Msg (J) = '?' or else Msg (J) = '<' then if Msg (J) = '?' or else Error_Msg_Warn then - Is_Warning_Msg := not Is_Style_Msg; + + -- Consider Info and Style messages as unique message types. + -- Those messages can have warning insertion characters within + -- them. However they should only be switch specific insertion + -- characters and not the generic ? or ?? warning insertion + -- characters. + + Is_Warning_Msg := not (Is_Style_Msg or else Is_Info_Msg); J := J + 1; Warning_Msg_Char := Parse_Message_Class; diff --git a/gcc/ada/errutil.adb b/gcc/ada/errutil.adb index 4f5aa21646194..6747fe59d24bf 100644 --- a/gcc/ada/errutil.adb +++ b/gcc/ada/errutil.adb @@ -199,6 +199,11 @@ package body Errutil is return; end if; + -- Warning, Style and Info attributes are mutually exclusive + + pragma Assert (Boolean'Pos (Is_Warning_Msg) + Boolean'Pos (Is_Info_Msg) + + Boolean'Pos (Is_Style_Msg) <= 1); + -- Otherwise build error message object for new message Errors.Append @@ -308,15 +313,7 @@ package body Errutil is -- Bump appropriate statistics counts if Errors.Table (Cur_Msg).Info then - - -- Could be (usually is) both "info" and "warning" - - if Errors.Table (Cur_Msg).Warn then - Warning_Info_Messages := Warning_Info_Messages + 1; - Warnings_Detected := Warnings_Detected + 1; - else - Report_Info_Messages := Report_Info_Messages + 1; - end if; + Info_Messages := Info_Messages + 1; elsif Errors.Table (Cur_Msg).Warn or else Errors.Table (Cur_Msg).Style @@ -553,19 +550,19 @@ package body Errutil is Write_Str (" errors"); end if; - if Warnings_Detected - Warning_Info_Messages /= 0 then + if Warnings_Detected /= 0 then Write_Str (", "); - Write_Int (Warnings_Detected - Warning_Info_Messages); + Write_Int (Warnings_Detected); Write_Str (" warning"); - if Warnings_Detected - Warning_Info_Messages /= 1 then + if Warnings_Detected /= 1 then Write_Char ('s'); end if; if Warning_Mode = Treat_As_Error then Write_Str (" (treated as error"); - if Warnings_Detected - Warning_Info_Messages /= 1 then + if Warnings_Detected /= 1 then Write_Char ('s'); end if; @@ -595,9 +592,8 @@ package body Errutil is -- must not be treated as errors when -gnatwe is in effect. if Warning_Mode = Treat_As_Error then - Total_Errors_Detected := - Total_Errors_Detected + Warnings_Detected - Warning_Info_Messages; - Warnings_Detected := Warning_Info_Messages; + Total_Errors_Detected := Total_Errors_Detected + Warnings_Detected; + Warnings_Detected := 0; end if; -- Prevent displaying the same messages again in the future @@ -617,8 +613,7 @@ package body Errutil is Serious_Errors_Detected := 0; Total_Errors_Detected := 0; Warnings_Detected := 0; - Warning_Info_Messages := 0; - Report_Info_Messages := 0; + Info_Messages := 0; Cur_Msg := No_Error_Msg; -- Initialize warnings table, if all warnings are suppressed, supply From 82531c69462ac65d2f12decbac1576267ef13448 Mon Sep 17 00:00:00 2001 From: Viljar Indus Date: Tue, 7 May 2024 16:35:30 +0300 Subject: [PATCH 028/114] ada: Add switch for suppressing info messages Add a separate switch -gnatis to suppress info messages separately from warning messages that are controlled by -gnatws. gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add entry for -gnatis. * errout.adb (Error_Msg_Internal): Stop printing info messages if -gnatis was used. * opt.ads: Add Info_Suppressed flag to track whether info messages should be suppressed. * switch-c.adb: Add parsing for -gnatis. * gnat_ugn.texi: Regenerate. --- ...building_executable_programs_with_gnat.rst | 15 + gcc/ada/errout.adb | 7 + gcc/ada/gnat_ugn.texi | 508 +++++++++--------- gcc/ada/opt.ads | 5 + gcc/ada/switch-c.adb | 6 +- 5 files changed, 297 insertions(+), 244 deletions(-) diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst index 2f63d02daf789..8fbb1eeef4f81 100644 --- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst +++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst @@ -4372,6 +4372,21 @@ When no switch :switch:`-gnatw` is used, this is equivalent to: .. _Debugging_and_Assertion_Control: +Info message Control +-------------------- + +In addition to the warning messages, the compiler can also generate info +messages. In order to control the generation of these messages, the following +switch is provided: + +:switch:`-gnatis` + *Suppress all info messages.* + + This switch completely suppresses the output of all info messages from the + GNAT front end. + + + Debugging and Assertion Control ------------------------------- diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index 1e6b0fe43698b..c4eab2deee32c 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -1048,6 +1048,13 @@ package body Errout is if Is_Info_Msg then + -- Immediate return if info messages are suppressed + + if Info_Suppressed then + Cur_Msg := No_Error_Msg; + return; + end if; + -- If the flag location is in the main extended source unit then for -- sure we want the message since it definitely belongs. diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index fb3b7e1164165..fe83913951d95 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -261,6 +261,7 @@ Compiler Switches * Alphabetical List of All Switches:: * Output and Error Message Control:: * Warning Message Control:: +* Info message Control:: * Debugging and Assertion Control:: * Validity Checking:: * Style Checking:: @@ -8533,6 +8534,7 @@ compilation units. * Alphabetical List of All Switches:: * Output and Error Message Control:: * Warning Message Control:: +* Info message Control:: * Debugging and Assertion Control:: * Validity Checking:: * Style Checking:: @@ -10580,7 +10582,7 @@ Note that @code{-gnatQ} has no effect if @code{-gnats} is specified, since ALI files are never generated if @code{-gnats} is set. @end table -@node Warning Message Control,Debugging and Assertion Control,Output and Error Message Control,Compiler Switches +@node Warning Message Control,Info message Control,Output and Error Message Control,Compiler Switches @anchor{gnat_ugn/building_executable_programs_with_gnat id15}@anchor{f2}@anchor{gnat_ugn/building_executable_programs_with_gnat warning-message-control}@anchor{ed} @subsection Warning Message Control @@ -12985,8 +12987,28 @@ When no switch @code{-gnatw} is used, this is equivalent to: @end itemize @end quotation -@node Debugging and Assertion Control,Validity Checking,Warning Message Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control}@anchor{f3}@anchor{gnat_ugn/building_executable_programs_with_gnat id16}@anchor{f4} +@node Info message Control,Debugging and Assertion Control,Warning Message Control,Compiler Switches +@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control}@anchor{f3}@anchor{gnat_ugn/building_executable_programs_with_gnat info-message-control}@anchor{f4} +@subsection Info message Control + + +In addition to the warning messages, the compiler can also generate info +messages. In order to control the generation of these messages, the following +switch is provided: + + +@table @asis + +@item @code{-gnatis} + +`Suppress all info messages.' + +This switch completely suppresses the output of all info messages from the +GNAT front end. +@end table + +@node Debugging and Assertion Control,Validity Checking,Info message Control,Compiler Switches +@anchor{gnat_ugn/building_executable_programs_with_gnat id16}@anchor{f5} @subsection Debugging and Assertion Control @@ -13091,7 +13113,7 @@ is @code{False}, the exception @code{Assert_Failure} is raised. @end table @node Validity Checking,Style Checking,Debugging and Assertion Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id17}@anchor{f5}@anchor{gnat_ugn/building_executable_programs_with_gnat validity-checking}@anchor{e9} +@anchor{gnat_ugn/building_executable_programs_with_gnat id17}@anchor{f6}@anchor{gnat_ugn/building_executable_programs_with_gnat validity-checking}@anchor{e9} @subsection Validity Checking @@ -13389,7 +13411,7 @@ the validity checking mode at the program source level, and also allows for temporary disabling of validity checks. @node Style Checking,Run-Time Checks,Validity Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id18}@anchor{f6}@anchor{gnat_ugn/building_executable_programs_with_gnat style-checking}@anchor{ee} +@anchor{gnat_ugn/building_executable_programs_with_gnat id18}@anchor{f7}@anchor{gnat_ugn/building_executable_programs_with_gnat style-checking}@anchor{ee} @subsection Style Checking @@ -14142,7 +14164,7 @@ built-in standard style check options are enabled. The switch @code{-gnatyN} clears any previously set style checks. @node Run-Time Checks,Using gcc for Syntax Checking,Style Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id19}@anchor{f7}@anchor{gnat_ugn/building_executable_programs_with_gnat run-time-checks}@anchor{ec} +@anchor{gnat_ugn/building_executable_programs_with_gnat id19}@anchor{f8}@anchor{gnat_ugn/building_executable_programs_with_gnat run-time-checks}@anchor{ec} @subsection Run-Time Checks @@ -14363,7 +14385,7 @@ checks) or @code{Unsuppress} (to add back suppressed checks) pragmas in the program source. @node Using gcc for Syntax Checking,Using gcc for Semantic Checking,Run-Time Checks,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id20}@anchor{f8}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking}@anchor{f9} +@anchor{gnat_ugn/building_executable_programs_with_gnat id20}@anchor{f9}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking}@anchor{fa} @subsection Using @code{gcc} for Syntax Checking @@ -14420,7 +14442,7 @@ together. This is primarily used by the @code{gnatchop} utility @end table @node Using gcc for Semantic Checking,Compiling Different Versions of Ada,Using gcc for Syntax Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id21}@anchor{fa}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking}@anchor{fb} +@anchor{gnat_ugn/building_executable_programs_with_gnat id21}@anchor{fb}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking}@anchor{fc} @subsection Using @code{gcc} for Semantic Checking @@ -14467,7 +14489,7 @@ and specifications where a separate body is present). @end table @node Compiling Different Versions of Ada,Character Set Control,Using gcc for Semantic Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada}@anchor{6}@anchor{gnat_ugn/building_executable_programs_with_gnat id22}@anchor{fc} +@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada}@anchor{6}@anchor{gnat_ugn/building_executable_programs_with_gnat id22}@anchor{fd} @subsection Compiling Different Versions of Ada @@ -14632,7 +14654,7 @@ extensions enabled by this switch, see the GNAT reference manual @end table @node Character Set Control,File Naming Control,Compiling Different Versions of Ada,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat character-set-control}@anchor{31}@anchor{gnat_ugn/building_executable_programs_with_gnat id23}@anchor{fd} +@anchor{gnat_ugn/building_executable_programs_with_gnat character-set-control}@anchor{31}@anchor{gnat_ugn/building_executable_programs_with_gnat id23}@anchor{fe} @subsection Character Set Control @@ -14859,7 +14881,7 @@ comments are ended by an appropriate (CR, or CR/LF, or LF) line terminator. This is a common mode for many programs with foreign language comments. @node File Naming Control,Subprogram Inlining Control,Character Set Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat file-naming-control}@anchor{fe}@anchor{gnat_ugn/building_executable_programs_with_gnat id24}@anchor{ff} +@anchor{gnat_ugn/building_executable_programs_with_gnat file-naming-control}@anchor{ff}@anchor{gnat_ugn/building_executable_programs_with_gnat id24}@anchor{100} @subsection File Naming Control @@ -14879,7 +14901,7 @@ For the source file naming rules, @ref{3b,,File Naming Rules}. @end table @node Subprogram Inlining Control,Auxiliary Output Control,File Naming Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id25}@anchor{100}@anchor{gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control}@anchor{101} +@anchor{gnat_ugn/building_executable_programs_with_gnat id25}@anchor{101}@anchor{gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control}@anchor{102} @subsection Subprogram Inlining Control @@ -14912,7 +14934,7 @@ If you specify this switch the compiler will access these bodies, creating an extra source dependency for the resulting object file, and where possible, the call will be inlined. For further details on when inlining is possible -see @ref{102,,Inlining of Subprograms}. +see @ref{103,,Inlining of Subprograms}. @end table @geindex -gnatN (gcc) @@ -14932,7 +14954,7 @@ inlining, but that is no longer the case. @end table @node Auxiliary Output Control,Debugging Control,Subprogram Inlining Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control}@anchor{103}@anchor{gnat_ugn/building_executable_programs_with_gnat id26}@anchor{104} +@anchor{gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control}@anchor{104}@anchor{gnat_ugn/building_executable_programs_with_gnat id26}@anchor{105} @subsection Auxiliary Output Control @@ -15002,7 +15024,7 @@ An object file has been generated for every source file. @end table @node Debugging Control,Exception Handling Control,Auxiliary Output Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-control}@anchor{105}@anchor{gnat_ugn/building_executable_programs_with_gnat id27}@anchor{106} +@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-control}@anchor{106}@anchor{gnat_ugn/building_executable_programs_with_gnat id27}@anchor{107} @subsection Debugging Control @@ -15351,7 +15373,7 @@ encodings for the rest. @end table @node Exception Handling Control,Units to Sources Mapping Files,Debugging Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat exception-handling-control}@anchor{107}@anchor{gnat_ugn/building_executable_programs_with_gnat id28}@anchor{108} +@anchor{gnat_ugn/building_executable_programs_with_gnat exception-handling-control}@anchor{108}@anchor{gnat_ugn/building_executable_programs_with_gnat id28}@anchor{109} @subsection Exception Handling Control @@ -15423,7 +15445,7 @@ and @code{gnatbind}. Passing this option to @code{gnatmake} through the compilation and binding steps. @node Units to Sources Mapping Files,Code Generation Control,Exception Handling Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id29}@anchor{109}@anchor{gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files}@anchor{ea} +@anchor{gnat_ugn/building_executable_programs_with_gnat id29}@anchor{10a}@anchor{gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files}@anchor{ea} @subsection Units to Sources Mapping Files @@ -15475,7 +15497,7 @@ mapping file and communicates it to the compiler using this switch. @end table @node Code Generation Control,,Units to Sources Mapping Files,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat code-generation-control}@anchor{10a}@anchor{gnat_ugn/building_executable_programs_with_gnat id30}@anchor{10b} +@anchor{gnat_ugn/building_executable_programs_with_gnat code-generation-control}@anchor{10b}@anchor{gnat_ugn/building_executable_programs_with_gnat id30}@anchor{10c} @subsection Code Generation Control @@ -15504,7 +15526,7 @@ there is no point in using @code{-m} switches to improve performance unless you actually see a performance improvement. @node Linker Switches,Binding with gnatbind,Compiler Switches,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat id31}@anchor{10c}@anchor{gnat_ugn/building_executable_programs_with_gnat linker-switches}@anchor{10d} +@anchor{gnat_ugn/building_executable_programs_with_gnat id31}@anchor{10d}@anchor{gnat_ugn/building_executable_programs_with_gnat linker-switches}@anchor{10e} @section Linker Switches @@ -15524,7 +15546,7 @@ platforms. @end table @node Binding with gnatbind,Linking with gnatlink,Linker Switches,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind}@anchor{ca}@anchor{gnat_ugn/building_executable_programs_with_gnat id32}@anchor{10e} +@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind}@anchor{ca}@anchor{gnat_ugn/building_executable_programs_with_gnat id32}@anchor{10f} @section Binding with @code{gnatbind} @@ -15575,7 +15597,7 @@ to be read by the @code{gnatlink} utility used to link the Ada application. @end menu @node Running gnatbind,Switches for gnatbind,,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id33}@anchor{10f}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatbind}@anchor{110} +@anchor{gnat_ugn/building_executable_programs_with_gnat id33}@anchor{110}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatbind}@anchor{111} @subsection Running @code{gnatbind} @@ -15660,7 +15682,7 @@ Ada code provided the @code{-g} switch is used for @code{gnatbind} and @code{gnatlink}. @node Switches for gnatbind,Command-Line Access,Running gnatbind,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id34}@anchor{111}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind}@anchor{112} +@anchor{gnat_ugn/building_executable_programs_with_gnat id34}@anchor{112}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind}@anchor{113} @subsection Switches for @code{gnatbind} @@ -15855,7 +15877,7 @@ Currently the same as @code{-Ea}. @item @code{-f`elab-order'} -Force elaboration order. For further details see @ref{113,,Elaboration Control} +Force elaboration order. For further details see @ref{114,,Elaboration Control} and @ref{f,,Elaboration Order Handling in GNAT}. @end table @@ -15904,7 +15926,7 @@ Legacy elaboration order model enabled. For further details see @item @code{-H32} Use 32-bit allocations for @code{__gnat_malloc} (and thus for access types). -For further details see @ref{114,,Dynamic Allocation Control}. +For further details see @ref{115,,Dynamic Allocation Control}. @end table @geindex -H64 (gnatbind) @@ -15917,7 +15939,7 @@ For further details see @ref{114,,Dynamic Allocation Control}. @item @code{-H64} Use 64-bit allocations for @code{__gnat_malloc} (and thus for access types). -For further details see @ref{114,,Dynamic Allocation Control}. +For further details see @ref{115,,Dynamic Allocation Control}. @geindex -I (gnatbind) @@ -16206,7 +16228,7 @@ Enable dynamic stack usage, with @code{n} results stored and displayed at program termination. A result is generated when a task terminates. Results that can’t be stored are displayed on the fly, at task termination. This option is currently not supported on Itanium -platforms. (See @ref{115,,Dynamic Stack Usage Analysis} for details.) +platforms. (See @ref{116,,Dynamic Stack Usage Analysis} for details.) @geindex -v (gnatbind) @@ -16286,7 +16308,7 @@ no arguments. @end menu @node Consistency-Checking Modes,Binder Error Message Control,,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes}@anchor{116}@anchor{gnat_ugn/building_executable_programs_with_gnat id35}@anchor{117} +@anchor{gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes}@anchor{117}@anchor{gnat_ugn/building_executable_programs_with_gnat id35}@anchor{118} @subsubsection Consistency-Checking Modes @@ -16340,7 +16362,7 @@ case the checking against sources has already been performed by @end table @node Binder Error Message Control,Elaboration Control,Consistency-Checking Modes,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat binder-error-message-control}@anchor{118}@anchor{gnat_ugn/building_executable_programs_with_gnat id36}@anchor{119} +@anchor{gnat_ugn/building_executable_programs_with_gnat binder-error-message-control}@anchor{119}@anchor{gnat_ugn/building_executable_programs_with_gnat id36}@anchor{11a} @subsubsection Binder Error Message Control @@ -16450,7 +16472,7 @@ with extreme care. @end table @node Elaboration Control,Output Control,Binder Error Message Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat elaboration-control}@anchor{113}@anchor{gnat_ugn/building_executable_programs_with_gnat id37}@anchor{11a} +@anchor{gnat_ugn/building_executable_programs_with_gnat elaboration-control}@anchor{114}@anchor{gnat_ugn/building_executable_programs_with_gnat id37}@anchor{11b} @subsubsection Elaboration Control @@ -16535,7 +16557,7 @@ debugging/experimental use. @end table @node Output Control,Dynamic Allocation Control,Elaboration Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id38}@anchor{11b}@anchor{gnat_ugn/building_executable_programs_with_gnat output-control}@anchor{11c} +@anchor{gnat_ugn/building_executable_programs_with_gnat id38}@anchor{11c}@anchor{gnat_ugn/building_executable_programs_with_gnat output-control}@anchor{11d} @subsubsection Output Control @@ -16616,7 +16638,7 @@ be used to improve code generation in some cases. @end table @node Dynamic Allocation Control,Binding with Non-Ada Main Programs,Output Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control}@anchor{114}@anchor{gnat_ugn/building_executable_programs_with_gnat id39}@anchor{11d} +@anchor{gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control}@anchor{115}@anchor{gnat_ugn/building_executable_programs_with_gnat id39}@anchor{11e} @subsubsection Dynamic Allocation Control @@ -16642,7 +16664,7 @@ unless explicitly overridden by a @code{'Size} clause on the access type. These switches are only effective on VMS platforms. @node Binding with Non-Ada Main Programs,Binding Programs with No Main Subprogram,Dynamic Allocation Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs}@anchor{7e}@anchor{gnat_ugn/building_executable_programs_with_gnat id40}@anchor{11e} +@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs}@anchor{7e}@anchor{gnat_ugn/building_executable_programs_with_gnat id40}@anchor{11f} @subsubsection Binding with Non-Ada Main Programs @@ -16738,7 +16760,7 @@ side effect is that this could be the wrong mode for the foreign code where floating point computation could be broken after this call. @node Binding Programs with No Main Subprogram,,Binding with Non-Ada Main Programs,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram}@anchor{11f}@anchor{gnat_ugn/building_executable_programs_with_gnat id41}@anchor{120} +@anchor{gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram}@anchor{120}@anchor{gnat_ugn/building_executable_programs_with_gnat id41}@anchor{121} @subsubsection Binding Programs with No Main Subprogram @@ -16769,7 +16791,7 @@ the binder switch @end table @node Command-Line Access,Search Paths for gnatbind,Switches for gnatbind,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat command-line-access}@anchor{121}@anchor{gnat_ugn/building_executable_programs_with_gnat id42}@anchor{122} +@anchor{gnat_ugn/building_executable_programs_with_gnat command-line-access}@anchor{122}@anchor{gnat_ugn/building_executable_programs_with_gnat id42}@anchor{123} @subsection Command-Line Access @@ -16799,7 +16821,7 @@ required, your main program must set @code{gnat_argc} and it. @node Search Paths for gnatbind,Examples of gnatbind Usage,Command-Line Access,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id43}@anchor{123}@anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind}@anchor{76} +@anchor{gnat_ugn/building_executable_programs_with_gnat id43}@anchor{124}@anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind}@anchor{76} @subsection Search Paths for @code{gnatbind} @@ -16903,7 +16925,7 @@ in compiling sources from multiple directories. This can make development environments much more flexible. @node Examples of gnatbind Usage,,Search Paths for gnatbind,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage}@anchor{124}@anchor{gnat_ugn/building_executable_programs_with_gnat id44}@anchor{125} +@anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage}@anchor{125}@anchor{gnat_ugn/building_executable_programs_with_gnat id44}@anchor{126} @subsection Examples of @code{gnatbind} Usage @@ -16932,7 +16954,7 @@ since gnatlink will not be able to find the generated file. @end quotation @node Linking with gnatlink,Using the GNU make Utility,Binding with gnatbind,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat id45}@anchor{126}@anchor{gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink}@anchor{cb} +@anchor{gnat_ugn/building_executable_programs_with_gnat id45}@anchor{127}@anchor{gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink}@anchor{cb} @section Linking with @code{gnatlink} @@ -16953,7 +16975,7 @@ generated by the @code{gnatbind} to determine this list. @end menu @node Running gnatlink,Switches for gnatlink,,Linking with gnatlink -@anchor{gnat_ugn/building_executable_programs_with_gnat id46}@anchor{127}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatlink}@anchor{128} +@anchor{gnat_ugn/building_executable_programs_with_gnat id46}@anchor{128}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatlink}@anchor{129} @subsection Running @code{gnatlink} @@ -17012,8 +17034,8 @@ $ gnatlink my_prog -Wl,-Map,MAPFILE Using @code{linker options} it is possible to set the program stack and heap size. -See @ref{129,,Setting Stack Size from gnatlink} and -@ref{12a,,Setting Heap Size from gnatlink}. +See @ref{12a,,Setting Stack Size from gnatlink} and +@ref{12b,,Setting Heap Size from gnatlink}. @code{gnatlink} determines the list of objects required by the Ada program and prepends them to the list of objects passed to the linker. @@ -17022,7 +17044,7 @@ program and prepends them to the list of objects passed to the linker. presented to the linker. @node Switches for gnatlink,,Running gnatlink,Linking with gnatlink -@anchor{gnat_ugn/building_executable_programs_with_gnat id47}@anchor{12b}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink}@anchor{12c} +@anchor{gnat_ugn/building_executable_programs_with_gnat id47}@anchor{12c}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink}@anchor{12d} @subsection Switches for @code{gnatlink} @@ -17217,7 +17239,7 @@ switch. @end table @node Using the GNU make Utility,,Linking with gnatlink,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat id48}@anchor{12d}@anchor{gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility}@anchor{70} +@anchor{gnat_ugn/building_executable_programs_with_gnat id48}@anchor{12e}@anchor{gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility}@anchor{70} @section Using the GNU @code{make} Utility @@ -17242,7 +17264,7 @@ is the same, these examples use some advanced features found only in @end menu @node Using gnatmake in a Makefile,Automatically Creating a List of Directories,,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat id49}@anchor{12e}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile}@anchor{12f} +@anchor{gnat_ugn/building_executable_programs_with_gnat id49}@anchor{12f}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile}@anchor{130} @subsection Using gnatmake in a Makefile @@ -17261,7 +17283,7 @@ the appropriate directories. Note that you should also read the example on how to automatically create the list of directories -(@ref{130,,Automatically Creating a List of Directories}) +(@ref{131,,Automatically Creating a List of Directories}) which might help you in case your project has a lot of subdirectories. @example @@ -17341,7 +17363,7 @@ clean:: @end example @node Automatically Creating a List of Directories,Generating the Command Line Switches,Using gnatmake in a Makefile,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories}@anchor{130}@anchor{gnat_ugn/building_executable_programs_with_gnat id50}@anchor{131} +@anchor{gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories}@anchor{131}@anchor{gnat_ugn/building_executable_programs_with_gnat id50}@anchor{132} @subsection Automatically Creating a List of Directories @@ -17414,12 +17436,12 @@ DIRS := $@{shell find $@{ROOT_DIRECTORY@} -type d -print@} @end example @node Generating the Command Line Switches,Overcoming Command Line Length Limits,Automatically Creating a List of Directories,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches}@anchor{132}@anchor{gnat_ugn/building_executable_programs_with_gnat id51}@anchor{133} +@anchor{gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches}@anchor{133}@anchor{gnat_ugn/building_executable_programs_with_gnat id51}@anchor{134} @subsection Generating the Command Line Switches Once you have created the list of directories as explained in the -previous section (@ref{130,,Automatically Creating a List of Directories}), +previous section (@ref{131,,Automatically Creating a List of Directories}), you can easily generate the command line arguments to pass to gnatmake. For the sake of completeness, this example assumes that the source path @@ -17440,7 +17462,7 @@ all: @end example @node Overcoming Command Line Length Limits,,Generating the Command Line Switches,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat id52}@anchor{134}@anchor{gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits}@anchor{135} +@anchor{gnat_ugn/building_executable_programs_with_gnat id52}@anchor{135}@anchor{gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits}@anchor{136} @subsection Overcoming Command Line Length Limits @@ -17455,7 +17477,7 @@ even none on most systems). It assumes that you have created a list of directories in your Makefile, using one of the methods presented in -@ref{130,,Automatically Creating a List of Directories}. +@ref{131,,Automatically Creating a List of Directories}. For the sake of completeness, we assume that the object path (where the ALI files are found) is different from the sources patch. @@ -17498,7 +17520,7 @@ all: @end example @node GNAT Utility Programs,GNAT and Program Execution,Building Executable Programs with GNAT,Top -@anchor{gnat_ugn/gnat_utility_programs doc}@anchor{136}@anchor{gnat_ugn/gnat_utility_programs gnat-utility-programs}@anchor{b}@anchor{gnat_ugn/gnat_utility_programs id1}@anchor{137} +@anchor{gnat_ugn/gnat_utility_programs doc}@anchor{137}@anchor{gnat_ugn/gnat_utility_programs gnat-utility-programs}@anchor{b}@anchor{gnat_ugn/gnat_utility_programs id1}@anchor{138} @chapter GNAT Utility Programs @@ -17509,10 +17531,10 @@ This chapter describes a number of utility programs: @itemize * @item -@ref{138,,The File Cleanup Utility gnatclean} +@ref{139,,The File Cleanup Utility gnatclean} @item -@ref{139,,The GNAT Library Browser gnatls} +@ref{13a,,The GNAT Library Browser gnatls} @end itemize Other GNAT utilities are described elsewhere in this manual: @@ -17540,7 +17562,7 @@ Other GNAT utilities are described elsewhere in this manual: @end menu @node The File Cleanup Utility gnatclean,The GNAT Library Browser gnatls,,GNAT Utility Programs -@anchor{gnat_ugn/gnat_utility_programs id2}@anchor{13a}@anchor{gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean}@anchor{138} +@anchor{gnat_ugn/gnat_utility_programs id2}@anchor{13b}@anchor{gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean}@anchor{139} @section The File Cleanup Utility @code{gnatclean} @@ -17560,7 +17582,7 @@ generated files and executable files. @end menu @node Running gnatclean,Switches for gnatclean,,The File Cleanup Utility gnatclean -@anchor{gnat_ugn/gnat_utility_programs id3}@anchor{13b}@anchor{gnat_ugn/gnat_utility_programs running-gnatclean}@anchor{13c} +@anchor{gnat_ugn/gnat_utility_programs id3}@anchor{13c}@anchor{gnat_ugn/gnat_utility_programs running-gnatclean}@anchor{13d} @subsection Running @code{gnatclean} @@ -17584,7 +17606,7 @@ the linker. In informative-only mode, specified by switch normal mode is listed, but no file is actually deleted. @node Switches for gnatclean,,Running gnatclean,The File Cleanup Utility gnatclean -@anchor{gnat_ugn/gnat_utility_programs id4}@anchor{13d}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatclean}@anchor{13e} +@anchor{gnat_ugn/gnat_utility_programs id4}@anchor{13e}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatclean}@anchor{13f} @subsection Switches for @code{gnatclean} @@ -17786,7 +17808,7 @@ where @code{gnatclean} was invoked. @end table @node The GNAT Library Browser gnatls,,The File Cleanup Utility gnatclean,GNAT Utility Programs -@anchor{gnat_ugn/gnat_utility_programs id5}@anchor{13f}@anchor{gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls}@anchor{139} +@anchor{gnat_ugn/gnat_utility_programs id5}@anchor{140}@anchor{gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls}@anchor{13a} @section The GNAT Library Browser @code{gnatls} @@ -17807,7 +17829,7 @@ as well as various characteristics. @end menu @node Running gnatls,Switches for gnatls,,The GNAT Library Browser gnatls -@anchor{gnat_ugn/gnat_utility_programs id6}@anchor{140}@anchor{gnat_ugn/gnat_utility_programs running-gnatls}@anchor{141} +@anchor{gnat_ugn/gnat_utility_programs id6}@anchor{141}@anchor{gnat_ugn/gnat_utility_programs running-gnatls}@anchor{142} @subsection Running @code{gnatls} @@ -17887,7 +17909,7 @@ version of the same source that has been modified. @end table @node Switches for gnatls,Example of gnatls Usage,Running gnatls,The GNAT Library Browser gnatls -@anchor{gnat_ugn/gnat_utility_programs id7}@anchor{142}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatls}@anchor{143} +@anchor{gnat_ugn/gnat_utility_programs id7}@anchor{143}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatls}@anchor{144} @subsection Switches for @code{gnatls} @@ -18069,7 +18091,7 @@ by the user. @end table @node Example of gnatls Usage,,Switches for gnatls,The GNAT Library Browser gnatls -@anchor{gnat_ugn/gnat_utility_programs example-of-gnatls-usage}@anchor{144}@anchor{gnat_ugn/gnat_utility_programs id8}@anchor{145} +@anchor{gnat_ugn/gnat_utility_programs example-of-gnatls-usage}@anchor{145}@anchor{gnat_ugn/gnat_utility_programs id8}@anchor{146} @subsection Example of @code{gnatls} Usage @@ -18155,7 +18177,7 @@ instr.ads @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit @node GNAT and Program Execution,Platform-Specific Information,GNAT Utility Programs,Top -@anchor{gnat_ugn/gnat_and_program_execution doc}@anchor{146}@anchor{gnat_ugn/gnat_and_program_execution gnat-and-program-execution}@anchor{c}@anchor{gnat_ugn/gnat_and_program_execution id1}@anchor{147} +@anchor{gnat_ugn/gnat_and_program_execution doc}@anchor{147}@anchor{gnat_ugn/gnat_and_program_execution gnat-and-program-execution}@anchor{c}@anchor{gnat_ugn/gnat_and_program_execution id1}@anchor{148} @chapter GNAT and Program Execution @@ -18165,25 +18187,25 @@ This chapter covers several topics: @itemize * @item -@ref{148,,Running and Debugging Ada Programs} +@ref{149,,Running and Debugging Ada Programs} @item -@ref{149,,Profiling} +@ref{14a,,Profiling} @item -@ref{14a,,Improving Performance} +@ref{14b,,Improving Performance} @item -@ref{14b,,Overflow Check Handling in GNAT} +@ref{14c,,Overflow Check Handling in GNAT} @item -@ref{14c,,Performing Dimensionality Analysis in GNAT} +@ref{14d,,Performing Dimensionality Analysis in GNAT} @item -@ref{14d,,Stack Related Facilities} +@ref{14e,,Stack Related Facilities} @item -@ref{14e,,Memory Management Issues} +@ref{14f,,Memory Management Issues} @end itemize @menu @@ -18198,7 +18220,7 @@ This chapter covers several topics: @end menu @node Running and Debugging Ada Programs,Profiling,,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id2}@anchor{148}@anchor{gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs}@anchor{14f} +@anchor{gnat_ugn/gnat_and_program_execution id2}@anchor{149}@anchor{gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs}@anchor{150} @section Running and Debugging Ada Programs @@ -18252,7 +18274,7 @@ the incorrect user program. @end menu @node The GNAT Debugger GDB,Running GDB,,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{150}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{151} +@anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{151}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{152} @subsection The GNAT Debugger GDB @@ -18309,7 +18331,7 @@ the debugging information and can respond to user commands to inspect variables, and more generally to report on the state of execution. @node Running GDB,Introduction to GDB Commands,The GNAT Debugger GDB,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id4}@anchor{152}@anchor{gnat_ugn/gnat_and_program_execution running-gdb}@anchor{153} +@anchor{gnat_ugn/gnat_and_program_execution id4}@anchor{153}@anchor{gnat_ugn/gnat_and_program_execution running-gdb}@anchor{154} @subsection Running GDB @@ -18336,7 +18358,7 @@ exactly as if the debugger were not present. The following section describes some of the additional commands that can be given to @code{GDB}. @node Introduction to GDB Commands,Using Ada Expressions,Running GDB,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id5}@anchor{154}@anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{155} +@anchor{gnat_ugn/gnat_and_program_execution id5}@anchor{155}@anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{156} @subsection Introduction to GDB Commands @@ -18544,7 +18566,7 @@ Note that most commands can be abbreviated (for example, c for continue, bt for backtrace). @node Using Ada Expressions,Calling User-Defined Subprograms,Introduction to GDB Commands,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id6}@anchor{156}@anchor{gnat_ugn/gnat_and_program_execution using-ada-expressions}@anchor{157} +@anchor{gnat_ugn/gnat_and_program_execution id6}@anchor{157}@anchor{gnat_ugn/gnat_and_program_execution using-ada-expressions}@anchor{158} @subsection Using Ada Expressions @@ -18582,7 +18604,7 @@ their packages, regardless of context. Where this causes ambiguity, For details on the supported Ada syntax, see @cite{Debugging with GDB}. @node Calling User-Defined Subprograms,Using the next Command in a Function,Using Ada Expressions,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms}@anchor{158}@anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{159} +@anchor{gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms}@anchor{159}@anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{15a} @subsection Calling User-Defined Subprograms @@ -18641,7 +18663,7 @@ elements directly from GDB, you can write a callable procedure that prints the elements in the desired format. @node Using the next Command in a Function,Stopping When Ada Exceptions Are Raised,Calling User-Defined Subprograms,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id8}@anchor{15a}@anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{15b} +@anchor{gnat_ugn/gnat_and_program_execution id8}@anchor{15b}@anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{15c} @subsection Using the `next' Command in a Function @@ -18664,7 +18686,7 @@ The value returned is always that from the first return statement that was stepped through. @node Stopping When Ada Exceptions Are Raised,Ada Tasks,Using the next Command in a Function,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id9}@anchor{15c}@anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{15d} +@anchor{gnat_ugn/gnat_and_program_execution id9}@anchor{15d}@anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{15e} @subsection Stopping When Ada Exceptions Are Raised @@ -18721,7 +18743,7 @@ argument, prints out only those exceptions whose name matches `regexp'. @geindex Tasks (in gdb) @node Ada Tasks,Debugging Generic Units,Stopping When Ada Exceptions Are Raised,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution ada-tasks}@anchor{15e}@anchor{gnat_ugn/gnat_and_program_execution id10}@anchor{15f} +@anchor{gnat_ugn/gnat_and_program_execution ada-tasks}@anchor{15f}@anchor{gnat_ugn/gnat_and_program_execution id10}@anchor{160} @subsection Ada Tasks @@ -18808,7 +18830,7 @@ see @cite{Debugging with GDB}. @geindex Generics @node Debugging Generic Units,Remote Debugging with gdbserver,Ada Tasks,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution debugging-generic-units}@anchor{160}@anchor{gnat_ugn/gnat_and_program_execution id11}@anchor{161} +@anchor{gnat_ugn/gnat_and_program_execution debugging-generic-units}@anchor{161}@anchor{gnat_ugn/gnat_and_program_execution id11}@anchor{162} @subsection Debugging Generic Units @@ -18867,7 +18889,7 @@ other units. @geindex Remote Debugging with gdbserver @node Remote Debugging with gdbserver,GNAT Abnormal Termination or Failure to Terminate,Debugging Generic Units,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id12}@anchor{162}@anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{163} +@anchor{gnat_ugn/gnat_and_program_execution id12}@anchor{163}@anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{164} @subsection Remote Debugging with gdbserver @@ -18925,7 +18947,7 @@ GNAT provides support for gdbserver on x86-linux, x86-windows and x86_64-linux. @geindex Abnormal Termination or Failure to Terminate @node GNAT Abnormal Termination or Failure to Terminate,Naming Conventions for GNAT Source Files,Remote Debugging with gdbserver,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate}@anchor{164}@anchor{gnat_ugn/gnat_and_program_execution id13}@anchor{165} +@anchor{gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate}@anchor{165}@anchor{gnat_ugn/gnat_and_program_execution id13}@anchor{166} @subsection GNAT Abnormal Termination or Failure to Terminate @@ -18980,7 +19002,7 @@ Finally, you can start @code{gdb} directly on the @code{gnat1} executable. @code{gnat1} is the front-end of GNAT, and can be run independently (normally it is just called from @code{gcc}). You can use @code{gdb} on @code{gnat1} as you -would on a C program (but @ref{151,,The GNAT Debugger GDB} for caveats). The +would on a C program (but @ref{152,,The GNAT Debugger GDB} for caveats). The @code{where} command is the first line of attack; the variable @code{lineno} (seen by @code{print lineno}), used by the second phase of @code{gnat1} and by the @code{gcc} backend, indicates the source line at @@ -18989,7 +19011,7 @@ the source file. @end itemize @node Naming Conventions for GNAT Source Files,Getting Internal Debugging Information,GNAT Abnormal Termination or Failure to Terminate,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id14}@anchor{166}@anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{167} +@anchor{gnat_ugn/gnat_and_program_execution id14}@anchor{167}@anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{168} @subsection Naming Conventions for GNAT Source Files @@ -19070,7 +19092,7 @@ the other @code{.c} files are modifications of common @code{gcc} files. @end itemize @node Getting Internal Debugging Information,Stack Traceback,Naming Conventions for GNAT Source Files,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution getting-internal-debugging-information}@anchor{168}@anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{169} +@anchor{gnat_ugn/gnat_and_program_execution getting-internal-debugging-information}@anchor{169}@anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{16a} @subsection Getting Internal Debugging Information @@ -19098,7 +19120,7 @@ are replaced with run-time calls. @geindex stack unwinding @node Stack Traceback,Pretty-Printers for the GNAT runtime,Getting Internal Debugging Information,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id16}@anchor{16a}@anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{16b} +@anchor{gnat_ugn/gnat_and_program_execution id16}@anchor{16b}@anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{16c} @subsection Stack Traceback @@ -19127,7 +19149,7 @@ is enabled, and no exception is raised during program execution. @end menu @node Non-Symbolic Traceback,Symbolic Traceback,,Stack Traceback -@anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{16c}@anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{16d} +@anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{16d}@anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{16e} @subsubsection Non-Symbolic Traceback @@ -19260,7 +19282,7 @@ $ addr2line -e stb -a -f -p --demangle=gnat 0x401373 0x40138b From this traceback we can see that the exception was raised in @code{stb.adb} at line 5, which was reached from a procedure call in @code{stb.adb} at line 10, and so on. The @code{b~std.adb} is the binder file, which contains the -call to the main program. @ref{110,,Running gnatbind}. The remaining entries are +call to the main program. @ref{111,,Running gnatbind}. The remaining entries are assorted runtime routines and the output will vary from platform to platform. It is also possible to use @code{GDB} with these traceback addresses to debug @@ -19448,7 +19470,7 @@ addresses need to be specified in C format, with a leading ‘0x’). @geindex symbolic @node Symbolic Traceback,,Non-Symbolic Traceback,Stack Traceback -@anchor{gnat_ugn/gnat_and_program_execution id18}@anchor{16e}@anchor{gnat_ugn/gnat_and_program_execution symbolic-traceback}@anchor{16f} +@anchor{gnat_ugn/gnat_and_program_execution id18}@anchor{16f}@anchor{gnat_ugn/gnat_and_program_execution symbolic-traceback}@anchor{170} @subsubsection Symbolic Traceback @@ -19567,7 +19589,7 @@ which will also be printed if an unhandled exception terminates the program. @node Pretty-Printers for the GNAT runtime,,Stack Traceback,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id19}@anchor{170}@anchor{gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime}@anchor{171} +@anchor{gnat_ugn/gnat_and_program_execution id19}@anchor{171}@anchor{gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime}@anchor{172} @subsection Pretty-Printers for the GNAT runtime @@ -19674,7 +19696,7 @@ for more information. @geindex Profiling @node Profiling,Improving Performance,Running and Debugging Ada Programs,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{172}@anchor{gnat_ugn/gnat_and_program_execution profiling}@anchor{149} +@anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{173}@anchor{gnat_ugn/gnat_and_program_execution profiling}@anchor{14a} @section Profiling @@ -19690,7 +19712,7 @@ This section describes how to use the @code{gprof} profiler tool on Ada programs @end menu @node Profiling an Ada Program with gprof,,,Profiling -@anchor{gnat_ugn/gnat_and_program_execution id21}@anchor{173}@anchor{gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof}@anchor{174} +@anchor{gnat_ugn/gnat_and_program_execution id21}@anchor{174}@anchor{gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof}@anchor{175} @subsection Profiling an Ada Program with gprof @@ -19744,7 +19766,7 @@ to interpret the results. @end menu @node Compilation for profiling,Program execution,,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution compilation-for-profiling}@anchor{175}@anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{176} +@anchor{gnat_ugn/gnat_and_program_execution compilation-for-profiling}@anchor{176}@anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{177} @subsubsection Compilation for profiling @@ -19775,7 +19797,7 @@ Note that on Windows, gprof does not support PIE. The @code{-no-pie} switch should be added to the linker flags to disable this feature. @node Program execution,Running gprof,Compilation for profiling,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{177}@anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{178} +@anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{178}@anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{179} @subsubsection Program execution @@ -19790,7 +19812,7 @@ generated in the directory where the program was launched from. If this file already exists, it will be overwritten. @node Running gprof,Interpretation of profiling results,Program execution,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{179}@anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{17a} +@anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{17a}@anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{17b} @subsubsection Running gprof @@ -19903,7 +19925,7 @@ may be given; only one @code{function_name} may be indicated with each @end table @node Interpretation of profiling results,,Running gprof,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution id25}@anchor{17b}@anchor{gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results}@anchor{17c} +@anchor{gnat_ugn/gnat_and_program_execution id25}@anchor{17c}@anchor{gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results}@anchor{17d} @subsubsection Interpretation of profiling results @@ -19920,7 +19942,7 @@ and the subprograms that it calls. It also provides an estimate of the time spent in each of those callers/called subprograms. @node Improving Performance,Overflow Check Handling in GNAT,Profiling,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{14a}@anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{17d} +@anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{14b}@anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{17e} @section Improving Performance @@ -19941,7 +19963,7 @@ which can reduce the size of program executables. @end menu @node Performance Considerations,Text_IO Suggestions,,Improving Performance -@anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{17e}@anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{17f} +@anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{17f}@anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{180} @subsection Performance Considerations @@ -20002,7 +20024,7 @@ some guidelines on debugging optimized code. @end menu @node Controlling Run-Time Checks,Use of Restrictions,,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{180}@anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{181} +@anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{181}@anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{182} @subsubsection Controlling Run-Time Checks @@ -20054,7 +20076,7 @@ remove checks) or @code{pragma Unsuppress} (to add back suppressed checks) in the program source. @node Use of Restrictions,Optimization Levels,Controlling Run-Time Checks,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id29}@anchor{182}@anchor{gnat_ugn/gnat_and_program_execution use-of-restrictions}@anchor{183} +@anchor{gnat_ugn/gnat_and_program_execution id29}@anchor{183}@anchor{gnat_ugn/gnat_and_program_execution use-of-restrictions}@anchor{184} @subsubsection Use of Restrictions @@ -20089,7 +20111,7 @@ that this also means that you can write code without worrying about the possibility of an immediate abort at any point. @node Optimization Levels,Debugging Optimized Code,Use of Restrictions,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id30}@anchor{184}@anchor{gnat_ugn/gnat_and_program_execution optimization-levels}@anchor{ef} +@anchor{gnat_ugn/gnat_and_program_execution id30}@anchor{185}@anchor{gnat_ugn/gnat_and_program_execution optimization-levels}@anchor{ef} @subsubsection Optimization Levels @@ -20170,7 +20192,7 @@ the slowest compilation time. Full optimization as in @code{-O2}; also uses more aggressive automatic inlining of subprograms within a unit -(@ref{102,,Inlining of Subprograms}) and attempts to vectorize loops. +(@ref{103,,Inlining of Subprograms}) and attempts to vectorize loops. @end table @item @@ -20210,10 +20232,10 @@ levels. Note regarding the use of @code{-O3}: The use of this optimization level ought not to be automatically preferred over that of level @code{-O2}, since it often results in larger executables which may run more slowly. -See further discussion of this point in @ref{102,,Inlining of Subprograms}. +See further discussion of this point in @ref{103,,Inlining of Subprograms}. @node Debugging Optimized Code,Inlining of Subprograms,Optimization Levels,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution debugging-optimized-code}@anchor{185}@anchor{gnat_ugn/gnat_and_program_execution id31}@anchor{186} +@anchor{gnat_ugn/gnat_and_program_execution debugging-optimized-code}@anchor{186}@anchor{gnat_ugn/gnat_and_program_execution id31}@anchor{187} @subsubsection Debugging Optimized Code @@ -20341,7 +20363,7 @@ on the resulting executable, which removes both debugging information and global symbols. @node Inlining of Subprograms,Floating Point Operations,Debugging Optimized Code,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id32}@anchor{187}@anchor{gnat_ugn/gnat_and_program_execution inlining-of-subprograms}@anchor{102} +@anchor{gnat_ugn/gnat_and_program_execution id32}@anchor{188}@anchor{gnat_ugn/gnat_and_program_execution inlining-of-subprograms}@anchor{103} @subsubsection Inlining of Subprograms @@ -20480,7 +20502,7 @@ indeed you should use @code{-O3} only if tests show that it actually improves performance for your program. @node Floating Point Operations,Vectorization of loops,Inlining of Subprograms,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution floating-point-operations}@anchor{188}@anchor{gnat_ugn/gnat_and_program_execution id33}@anchor{189} +@anchor{gnat_ugn/gnat_and_program_execution floating-point-operations}@anchor{189}@anchor{gnat_ugn/gnat_and_program_execution id33}@anchor{18a} @subsubsection Floating Point Operations @@ -20528,7 +20550,7 @@ so it is permissible to mix units compiled with and without these switches. @node Vectorization of loops,Other Optimization Switches,Floating Point Operations,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id34}@anchor{18a}@anchor{gnat_ugn/gnat_and_program_execution vectorization-of-loops}@anchor{18b} +@anchor{gnat_ugn/gnat_and_program_execution id34}@anchor{18b}@anchor{gnat_ugn/gnat_and_program_execution vectorization-of-loops}@anchor{18c} @subsubsection Vectorization of loops @@ -20679,7 +20701,7 @@ placed immediately within the loop will tell the compiler that it can safely omit the non-vectorized version of the loop as well as the run-time test. @node Other Optimization Switches,Optimization and Strict Aliasing,Vectorization of loops,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{18c}@anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{18d} +@anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{18d}@anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{18e} @subsubsection Other Optimization Switches @@ -20696,7 +20718,7 @@ the `Submodel Options' section in the `Hardware Models and Configurations' chapter of @cite{Using the GNU Compiler Collection (GCC)}. @node Optimization and Strict Aliasing,Aliased Variables and Optimization,Other Optimization Switches,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id36}@anchor{18e}@anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{e6} +@anchor{gnat_ugn/gnat_and_program_execution id36}@anchor{18f}@anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{e6} @subsubsection Optimization and Strict Aliasing @@ -20988,7 +21010,7 @@ review any uses of unchecked conversion, particularly if you are getting the warnings described above. @node Aliased Variables and Optimization,Atomic Variables and Optimization,Optimization and Strict Aliasing,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization}@anchor{18f}@anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{190} +@anchor{gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization}@anchor{190}@anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{191} @subsubsection Aliased Variables and Optimization @@ -21046,7 +21068,7 @@ This means that the above example will in fact “work” reliably, that is, it will produce the expected results. @node Atomic Variables and Optimization,Passive Task Optimization,Aliased Variables and Optimization,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization}@anchor{191}@anchor{gnat_ugn/gnat_and_program_execution id38}@anchor{192} +@anchor{gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization}@anchor{192}@anchor{gnat_ugn/gnat_and_program_execution id38}@anchor{193} @subsubsection Atomic Variables and Optimization @@ -21127,7 +21149,7 @@ such synchronization code is not required, it may be useful to disable it. @node Passive Task Optimization,,Atomic Variables and Optimization,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{193}@anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{194} +@anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{194}@anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{195} @subsubsection Passive Task Optimization @@ -21172,7 +21194,7 @@ that typically clients of the tasks who call entries, will not have to be modified, only the task definition itself. @node Text_IO Suggestions,Reducing Size of Executables with Unused Subprogram/Data Elimination,Performance Considerations,Improving Performance -@anchor{gnat_ugn/gnat_and_program_execution id40}@anchor{195}@anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{196} +@anchor{gnat_ugn/gnat_and_program_execution id40}@anchor{196}@anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{197} @subsection @code{Text_IO} Suggestions @@ -21195,7 +21217,7 @@ of the standard output file, or change the standard output file to be buffered using @code{Interfaces.C_Streams.setvbuf}. @node Reducing Size of Executables with Unused Subprogram/Data Elimination,,Text_IO Suggestions,Improving Performance -@anchor{gnat_ugn/gnat_and_program_execution id41}@anchor{197}@anchor{gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination}@anchor{198} +@anchor{gnat_ugn/gnat_and_program_execution id41}@anchor{198}@anchor{gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination}@anchor{199} @subsection Reducing Size of Executables with Unused Subprogram/Data Elimination @@ -21212,7 +21234,7 @@ your executable just by setting options at compilation time. @end menu @node About unused subprogram/data elimination,Compilation options,,Reducing Size of Executables with Unused Subprogram/Data Elimination -@anchor{gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination}@anchor{199}@anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{19a} +@anchor{gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination}@anchor{19a}@anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{19b} @subsubsection About unused subprogram/data elimination @@ -21228,7 +21250,7 @@ architecture and on all cross platforms using the ELF binary file format. In both cases GNU binutils version 2.16 or later are required to enable it. @node Compilation options,Example of unused subprogram/data elimination,About unused subprogram/data elimination,Reducing Size of Executables with Unused Subprogram/Data Elimination -@anchor{gnat_ugn/gnat_and_program_execution compilation-options}@anchor{19b}@anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{19c} +@anchor{gnat_ugn/gnat_and_program_execution compilation-options}@anchor{19c}@anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{19d} @subsubsection Compilation options @@ -21267,7 +21289,7 @@ The GNAT static library is now compiled with -ffunction-sections and and data of the GNAT library from your executable. @node Example of unused subprogram/data elimination,,Compilation options,Reducing Size of Executables with Unused Subprogram/Data Elimination -@anchor{gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination}@anchor{19d}@anchor{gnat_ugn/gnat_and_program_execution id44}@anchor{19e} +@anchor{gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination}@anchor{19e}@anchor{gnat_ugn/gnat_and_program_execution id44}@anchor{19f} @subsubsection Example of unused subprogram/data elimination @@ -21337,7 +21359,7 @@ appropriate options. @geindex Checks (overflow) @node Overflow Check Handling in GNAT,Performing Dimensionality Analysis in GNAT,Improving Performance,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id45}@anchor{14b}@anchor{gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat}@anchor{19f} +@anchor{gnat_ugn/gnat_and_program_execution id45}@anchor{14c}@anchor{gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat}@anchor{1a0} @section Overflow Check Handling in GNAT @@ -21353,7 +21375,7 @@ This section explains how to control the handling of overflow checks. @end menu @node Background,Management of Overflows in GNAT,,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution background}@anchor{1a0}@anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{1a1} +@anchor{gnat_ugn/gnat_and_program_execution background}@anchor{1a1}@anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{1a2} @subsection Background @@ -21479,7 +21501,7 @@ exception raised because of the intermediate overflow (and we really would prefer this precondition to be considered True at run time). @node Management of Overflows in GNAT,Specifying the Desired Mode,Background,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution id47}@anchor{1a2}@anchor{gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat}@anchor{1a3} +@anchor{gnat_ugn/gnat_and_program_execution id47}@anchor{1a3}@anchor{gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat}@anchor{1a4} @subsection Management of Overflows in GNAT @@ -21593,7 +21615,7 @@ out in the normal manner (with infinite values always failing all range checks). @node Specifying the Desired Mode,Default Settings,Management of Overflows in GNAT,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution id48}@anchor{1a4}@anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{eb} +@anchor{gnat_ugn/gnat_and_program_execution id48}@anchor{1a5}@anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{eb} @subsection Specifying the Desired Mode @@ -21717,7 +21739,7 @@ causing all intermediate operations to be computed using the base type (@code{STRICT} mode). @node Default Settings,Implementation Notes,Specifying the Desired Mode,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution default-settings}@anchor{1a5}@anchor{gnat_ugn/gnat_and_program_execution id49}@anchor{1a6} +@anchor{gnat_ugn/gnat_and_program_execution default-settings}@anchor{1a6}@anchor{gnat_ugn/gnat_and_program_execution id49}@anchor{1a7} @subsection Default Settings @@ -21742,7 +21764,7 @@ checking, but it has no effect on the method used for computing intermediate results. @node Implementation Notes,,Default Settings,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution id50}@anchor{1a7}@anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{1a8} +@anchor{gnat_ugn/gnat_and_program_execution id50}@anchor{1a8}@anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{1a9} @subsection Implementation Notes @@ -21790,7 +21812,7 @@ platforms for which @code{Long_Long_Integer} is 64-bits (nearly all GNAT platforms). @node Performing Dimensionality Analysis in GNAT,Stack Related Facilities,Overflow Check Handling in GNAT,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id51}@anchor{14c}@anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{1a9} +@anchor{gnat_ugn/gnat_and_program_execution id51}@anchor{14d}@anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{1aa} @section Performing Dimensionality Analysis in GNAT @@ -22193,7 +22215,7 @@ package Mks_Numerics is new @end quotation @node Stack Related Facilities,Memory Management Issues,Performing Dimensionality Analysis in GNAT,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id52}@anchor{14d}@anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{1aa} +@anchor{gnat_ugn/gnat_and_program_execution id52}@anchor{14e}@anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{1ab} @section Stack Related Facilities @@ -22209,7 +22231,7 @@ particular, it deals with dynamic and static stack usage measurements. @end menu @node Stack Overflow Checking,Static Stack Usage Analysis,,Stack Related Facilities -@anchor{gnat_ugn/gnat_and_program_execution id53}@anchor{1ab}@anchor{gnat_ugn/gnat_and_program_execution stack-overflow-checking}@anchor{e7} +@anchor{gnat_ugn/gnat_and_program_execution id53}@anchor{1ac}@anchor{gnat_ugn/gnat_and_program_execution stack-overflow-checking}@anchor{e7} @subsection Stack Overflow Checking @@ -22246,7 +22268,7 @@ If the space is exceeded, then a @code{Storage_Error} exception is raised. For declared tasks, the default stack size is defined by the GNAT runtime, whose size may be modified at bind time through the @code{-d} bind switch -(@ref{112,,Switches for gnatbind}). Task specific stack sizes may be set using the +(@ref{113,,Switches for gnatbind}). Task specific stack sizes may be set using the @code{Storage_Size} pragma. For the environment task, the stack size is determined by the operating system. @@ -22254,7 +22276,7 @@ Consequently, to modify the size of the environment task please refer to your operating system documentation. @node Static Stack Usage Analysis,Dynamic Stack Usage Analysis,Stack Overflow Checking,Stack Related Facilities -@anchor{gnat_ugn/gnat_and_program_execution id54}@anchor{1ac}@anchor{gnat_ugn/gnat_and_program_execution static-stack-usage-analysis}@anchor{e8} +@anchor{gnat_ugn/gnat_and_program_execution id54}@anchor{1ad}@anchor{gnat_ugn/gnat_and_program_execution static-stack-usage-analysis}@anchor{e8} @subsection Static Stack Usage Analysis @@ -22303,7 +22325,7 @@ subprogram whose stack usage might be larger than the specified amount of bytes. The wording is in keeping with the qualifier documented above. @node Dynamic Stack Usage Analysis,,Static Stack Usage Analysis,Stack Related Facilities -@anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{115}@anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{1ad} +@anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{116}@anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{1ae} @subsection Dynamic Stack Usage Analysis @@ -22385,7 +22407,7 @@ The package @code{GNAT.Task_Stack_Usage} provides facilities to get stack-usage reports at run time. See its body for the details. @node Memory Management Issues,,Stack Related Facilities,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id56}@anchor{14e}@anchor{gnat_ugn/gnat_and_program_execution memory-management-issues}@anchor{1ae} +@anchor{gnat_ugn/gnat_and_program_execution id56}@anchor{14f}@anchor{gnat_ugn/gnat_and_program_execution memory-management-issues}@anchor{1af} @section Memory Management Issues @@ -22401,7 +22423,7 @@ incorrect uses of access values (including ‘dangling references’). @end menu @node Some Useful Memory Pools,The GNAT Debug Pool Facility,,Memory Management Issues -@anchor{gnat_ugn/gnat_and_program_execution id57}@anchor{1af}@anchor{gnat_ugn/gnat_and_program_execution some-useful-memory-pools}@anchor{1b0} +@anchor{gnat_ugn/gnat_and_program_execution id57}@anchor{1b0}@anchor{gnat_ugn/gnat_and_program_execution some-useful-memory-pools}@anchor{1b1} @subsection Some Useful Memory Pools @@ -22482,7 +22504,7 @@ for T1'Storage_Size use 10_000; @end quotation @node The GNAT Debug Pool Facility,,Some Useful Memory Pools,Memory Management Issues -@anchor{gnat_ugn/gnat_and_program_execution id58}@anchor{1b1}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility}@anchor{1b2} +@anchor{gnat_ugn/gnat_and_program_execution id58}@anchor{1b2}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility}@anchor{1b3} @subsection The GNAT Debug Pool Facility @@ -22645,7 +22667,7 @@ Debug Pool info: @c -- E.g. Ada |nbsp| 95 @node Platform-Specific Information,Example of Binder Output File,GNAT and Program Execution,Top -@anchor{gnat_ugn/platform_specific_information doc}@anchor{1b3}@anchor{gnat_ugn/platform_specific_information id1}@anchor{1b4}@anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{d} +@anchor{gnat_ugn/platform_specific_information doc}@anchor{1b4}@anchor{gnat_ugn/platform_specific_information id1}@anchor{1b5}@anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{d} @chapter Platform-Specific Information @@ -22663,7 +22685,7 @@ related to the GNAT implementation on specific Operating Systems. @end menu @node Run-Time Libraries,Specifying a Run-Time Library,,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information id2}@anchor{1b5}@anchor{gnat_ugn/platform_specific_information run-time-libraries}@anchor{1b6} +@anchor{gnat_ugn/platform_specific_information id2}@anchor{1b6}@anchor{gnat_ugn/platform_specific_information run-time-libraries}@anchor{1b7} @section Run-Time Libraries @@ -22724,7 +22746,7 @@ are supplied on various GNAT platforms. @end menu @node Summary of Run-Time Configurations,,,Run-Time Libraries -@anchor{gnat_ugn/platform_specific_information id3}@anchor{1b7}@anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{1b8} +@anchor{gnat_ugn/platform_specific_information id3}@anchor{1b8}@anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{1b9} @subsection Summary of Run-Time Configurations @@ -22824,7 +22846,7 @@ ZCX @node Specifying a Run-Time Library,GNU/Linux Topics,Run-Time Libraries,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information id4}@anchor{1b9}@anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{1ba} +@anchor{gnat_ugn/platform_specific_information id4}@anchor{1ba}@anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{1bb} @section Specifying a Run-Time Library @@ -22917,7 +22939,7 @@ achieved by using the @code{--RTS} switch, e.g., @code{--RTS=sjlj} @geindex GNU/Linux @node GNU/Linux Topics,Microsoft Windows Topics,Specifying a Run-Time Library,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information gnu-linux-topics}@anchor{1bb}@anchor{gnat_ugn/platform_specific_information id5}@anchor{1bc} +@anchor{gnat_ugn/platform_specific_information gnu-linux-topics}@anchor{1bc}@anchor{gnat_ugn/platform_specific_information id5}@anchor{1bd} @section GNU/Linux Topics @@ -22932,7 +22954,7 @@ This section describes topics that are specific to GNU/Linux platforms. @end menu @node Required Packages on GNU/Linux,Position Independent Executable PIE Enabled by Default on Linux,,GNU/Linux Topics -@anchor{gnat_ugn/platform_specific_information id6}@anchor{1bd}@anchor{gnat_ugn/platform_specific_information required-packages-on-gnu-linux}@anchor{1be} +@anchor{gnat_ugn/platform_specific_information id6}@anchor{1be}@anchor{gnat_ugn/platform_specific_information required-packages-on-gnu-linux}@anchor{1bf} @subsection Required Packages on GNU/Linux @@ -22969,7 +22991,7 @@ Other GNU/Linux distributions might be choosing a different name for those packages. @node Position Independent Executable PIE Enabled by Default on Linux,Choosing the Scheduling Policy with GNU/Linux,Required Packages on GNU/Linux,GNU/Linux Topics -@anchor{gnat_ugn/platform_specific_information pie-enabled-by-default-on-linux}@anchor{1bf}@anchor{gnat_ugn/platform_specific_information position-independent-executable-pie-enabled-by-default-on-linux}@anchor{1c0} +@anchor{gnat_ugn/platform_specific_information pie-enabled-by-default-on-linux}@anchor{1c0}@anchor{gnat_ugn/platform_specific_information position-independent-executable-pie-enabled-by-default-on-linux}@anchor{1c1} @subsection Position Independent Executable (PIE) Enabled by Default on Linux @@ -23011,7 +23033,7 @@ From there, to be able to link your binaries with PIE and therefore drop the @code{-no-pie} workaround, you’ll need to get the identified dependencies rebuilt with PIE enabled (compiled with @code{-fPIE} and linked with @code{-pie}). -@anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-gnu-linux}@anchor{1c1} +@anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-gnu-linux}@anchor{1c2} @geindex SCHED_FIFO scheduling policy @geindex SCHED_RR scheduling policy @@ -23019,7 +23041,7 @@ and linked with @code{-pie}). @geindex SCHED_OTHER scheduling policy @node Choosing the Scheduling Policy with GNU/Linux,A GNU/Linux Debug Quirk,Position Independent Executable PIE Enabled by Default on Linux,GNU/Linux Topics -@anchor{gnat_ugn/platform_specific_information id7}@anchor{1c2} +@anchor{gnat_ugn/platform_specific_information id7}@anchor{1c3} @subsection Choosing the Scheduling Policy with GNU/Linux @@ -23077,7 +23099,7 @@ but not on the host machine running the container, so check that you also have sufficient priviledge for running the container image. @node A GNU/Linux Debug Quirk,,Choosing the Scheduling Policy with GNU/Linux,GNU/Linux Topics -@anchor{gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk}@anchor{1c3}@anchor{gnat_ugn/platform_specific_information id8}@anchor{1c4} +@anchor{gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk}@anchor{1c4}@anchor{gnat_ugn/platform_specific_information id8}@anchor{1c5} @subsection A GNU/Linux Debug Quirk @@ -23097,7 +23119,7 @@ the symptoms most commonly observed. @geindex Windows @node Microsoft Windows Topics,Mac OS Topics,GNU/Linux Topics,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information id9}@anchor{1c5}@anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{1c6} +@anchor{gnat_ugn/platform_specific_information id9}@anchor{1c6}@anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{1c7} @section Microsoft Windows Topics @@ -23119,7 +23141,7 @@ platforms. @end menu @node Using GNAT on Windows,Using a network installation of GNAT,,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information id10}@anchor{1c7}@anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{1c8} +@anchor{gnat_ugn/platform_specific_information id10}@anchor{1c8}@anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{1c9} @subsection Using GNAT on Windows @@ -23196,7 +23218,7 @@ uninstall or integrate different GNAT products. @end itemize @node Using a network installation of GNAT,CONSOLE and WINDOWS subsystems,Using GNAT on Windows,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information id11}@anchor{1c9}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{1ca} +@anchor{gnat_ugn/platform_specific_information id11}@anchor{1ca}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{1cb} @subsection Using a network installation of GNAT @@ -23223,7 +23245,7 @@ transfer of large amounts of data across the network and will likely cause serious performance penalty. @node CONSOLE and WINDOWS subsystems,Temporary Files,Using a network installation of GNAT,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information console-and-windows-subsystems}@anchor{1cb}@anchor{gnat_ugn/platform_specific_information id12}@anchor{1cc} +@anchor{gnat_ugn/platform_specific_information console-and-windows-subsystems}@anchor{1cc}@anchor{gnat_ugn/platform_specific_information id12}@anchor{1cd} @subsection CONSOLE and WINDOWS subsystems @@ -23248,7 +23270,7 @@ $ gnatmake winprog -largs -mwindows @end quotation @node Temporary Files,Disabling Command Line Argument Expansion,CONSOLE and WINDOWS subsystems,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information id13}@anchor{1cd}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{1ce} +@anchor{gnat_ugn/platform_specific_information id13}@anchor{1ce}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{1cf} @subsection Temporary Files @@ -23287,7 +23309,7 @@ environments where you may not have write access to some directories. @node Disabling Command Line Argument Expansion,Choosing the Scheduling Policy with Windows,Temporary Files,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information disabling-command-line-argument-expansion}@anchor{1cf} +@anchor{gnat_ugn/platform_specific_information disabling-command-line-argument-expansion}@anchor{1d0} @subsection Disabling Command Line Argument Expansion @@ -23358,7 +23380,7 @@ Ada.Command_Line.Argument (1) -> "'*.txt'" @end example @node Choosing the Scheduling Policy with Windows,Windows Socket Timeouts,Disabling Command Line Argument Expansion,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-windows}@anchor{1d0}@anchor{gnat_ugn/platform_specific_information id14}@anchor{1d1} +@anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy-with-windows}@anchor{1d1}@anchor{gnat_ugn/platform_specific_information id14}@anchor{1d2} @subsection Choosing the Scheduling Policy with Windows @@ -23376,7 +23398,7 @@ in @code{system.ads}. For more information about Windows priorities, please refer to Microsoft’s documentation. @node Windows Socket Timeouts,Mixed-Language Programming on Windows,Choosing the Scheduling Policy with Windows,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information windows-socket-timeouts}@anchor{1d2} +@anchor{gnat_ugn/platform_specific_information windows-socket-timeouts}@anchor{1d3} @subsection Windows Socket Timeouts @@ -23422,7 +23444,7 @@ shorter than 500 ms is needed on these Windows versions, a call to Check_Selector should be added before any socket read or write operations. @node Mixed-Language Programming on Windows,Windows Specific Add-Ons,Windows Socket Timeouts,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information id15}@anchor{1d3}@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{1d4} +@anchor{gnat_ugn/platform_specific_information id15}@anchor{1d4}@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{1d5} @subsection Mixed-Language Programming on Windows @@ -23444,12 +23466,12 @@ to use the Microsoft tools for your C++ code, you have two choices: Encapsulate your C++ code in a DLL to be linked with your Ada application. In this case, use the Microsoft or whatever environment to build the DLL and use GNAT to build your executable -(@ref{1d5,,Using DLLs with GNAT}). +(@ref{1d6,,Using DLLs with GNAT}). @item Or you can encapsulate your Ada code in a DLL to be linked with the other part of your application. In this case, use GNAT to build the DLL -(@ref{1d6,,Building DLLs with GNAT Project files}) and use the Microsoft +(@ref{1d7,,Building DLLs with GNAT Project files}) and use the Microsoft or whatever environment to build your executable. @end itemize @@ -23506,7 +23528,7 @@ native SEH support is used. @end menu @node Windows Calling Conventions,Introduction to Dynamic Link Libraries DLLs,,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id16}@anchor{1d7}@anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{1d8} +@anchor{gnat_ugn/platform_specific_information id16}@anchor{1d8}@anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{1d9} @subsubsection Windows Calling Conventions @@ -23551,7 +23573,7 @@ are available for Windows: @end menu @node C Calling Convention,Stdcall Calling Convention,,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{1d9}@anchor{gnat_ugn/platform_specific_information id17}@anchor{1da} +@anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{1da}@anchor{gnat_ugn/platform_specific_information id17}@anchor{1db} @subsubsection @code{C} Calling Convention @@ -23593,10 +23615,10 @@ is missing, as in the above example, this parameter is set to be the When importing a variable defined in C, you should always use the @code{C} calling convention unless the object containing the variable is part of a DLL (in which case you should use the @code{Stdcall} calling -convention, @ref{1db,,Stdcall Calling Convention}). +convention, @ref{1dc,,Stdcall Calling Convention}). @node Stdcall Calling Convention,Win32 Calling Convention,C Calling Convention,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information id18}@anchor{1dc}@anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{1db} +@anchor{gnat_ugn/platform_specific_information id18}@anchor{1dd}@anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{1dc} @subsubsection @code{Stdcall} Calling Convention @@ -23693,7 +23715,7 @@ Note that to ease building cross-platform bindings this convention will be handled as a @code{C} calling convention on non-Windows platforms. @node Win32 Calling Convention,DLL Calling Convention,Stdcall Calling Convention,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information id19}@anchor{1dd}@anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{1de} +@anchor{gnat_ugn/platform_specific_information id19}@anchor{1de}@anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{1df} @subsubsection @code{Win32} Calling Convention @@ -23701,7 +23723,7 @@ This convention, which is GNAT-specific is fully equivalent to the @code{Stdcall} calling convention described above. @node DLL Calling Convention,,Win32 Calling Convention,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information dll-calling-convention}@anchor{1df}@anchor{gnat_ugn/platform_specific_information id20}@anchor{1e0} +@anchor{gnat_ugn/platform_specific_information dll-calling-convention}@anchor{1e0}@anchor{gnat_ugn/platform_specific_information id20}@anchor{1e1} @subsubsection @code{DLL} Calling Convention @@ -23709,7 +23731,7 @@ This convention, which is GNAT-specific is fully equivalent to the @code{Stdcall} calling convention described above. @node Introduction to Dynamic Link Libraries DLLs,Using DLLs with GNAT,Windows Calling Conventions,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id21}@anchor{1e1}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{1e2} +@anchor{gnat_ugn/platform_specific_information id21}@anchor{1e2}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{1e3} @subsubsection Introduction to Dynamic Link Libraries (DLLs) @@ -23793,10 +23815,10 @@ As a side note, an interesting difference between Microsoft DLLs and Unix shared libraries, is the fact that on most Unix systems all public routines are exported by default in a Unix shared library, while under Windows it is possible (but not required) to list exported routines in -a definition file (see @ref{1e3,,The Definition File}). +a definition file (see @ref{1e4,,The Definition File}). @node Using DLLs with GNAT,Building DLLs with GNAT Project files,Introduction to Dynamic Link Libraries DLLs,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id22}@anchor{1e4}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{1d5} +@anchor{gnat_ugn/platform_specific_information id22}@anchor{1e5}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{1d6} @subsubsection Using DLLs with GNAT @@ -23887,7 +23909,7 @@ example a fictitious DLL called @code{API.dll}. @end menu @node Creating an Ada Spec for the DLL Services,Creating an Import Library,,Using DLLs with GNAT -@anchor{gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services}@anchor{1e5}@anchor{gnat_ugn/platform_specific_information id23}@anchor{1e6} +@anchor{gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services}@anchor{1e6}@anchor{gnat_ugn/platform_specific_information id23}@anchor{1e7} @subsubsection Creating an Ada Spec for the DLL Services @@ -23927,7 +23949,7 @@ end API; @end quotation @node Creating an Import Library,,Creating an Ada Spec for the DLL Services,Using DLLs with GNAT -@anchor{gnat_ugn/platform_specific_information creating-an-import-library}@anchor{1e7}@anchor{gnat_ugn/platform_specific_information id24}@anchor{1e8} +@anchor{gnat_ugn/platform_specific_information creating-an-import-library}@anchor{1e8}@anchor{gnat_ugn/platform_specific_information id24}@anchor{1e9} @subsubsection Creating an Import Library @@ -23941,7 +23963,7 @@ as in this case it is possible to link directly against the DLL. Otherwise read on. @geindex Definition file -@anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{1e3} +@anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{1e4} @subsubheading The Definition File @@ -23989,17 +24011,17 @@ EXPORTS @end table Note that you must specify the correct suffix (@code{@@@var{nn}}) -(see @ref{1d8,,Windows Calling Conventions}) for a Stdcall +(see @ref{1d9,,Windows Calling Conventions}) for a Stdcall calling convention function in the exported symbols list. There can actually be other sections in a definition file, but these sections are not relevant to the discussion at hand. -@anchor{gnat_ugn/platform_specific_information create-def-file-automatically}@anchor{1e9} +@anchor{gnat_ugn/platform_specific_information create-def-file-automatically}@anchor{1ea} @subsubheading Creating a Definition File Automatically You can automatically create the definition file @code{API.def} -(see @ref{1e3,,The Definition File}) from a DLL. +(see @ref{1e4,,The Definition File}) from a DLL. For that use the @code{dlltool} program as follows: @quotation @@ -24009,7 +24031,7 @@ $ dlltool API.dll -z API.def --export-all-symbols @end example Note that if some routines in the DLL have the @code{Stdcall} convention -(@ref{1d8,,Windows Calling Conventions}) with stripped @code{@@@var{nn}} +(@ref{1d9,,Windows Calling Conventions}) with stripped @code{@@@var{nn}} suffix then you’ll have to edit @code{api.def} to add it, and specify @code{-k} to @code{gnatdll} when creating the import library. @@ -24033,13 +24055,13 @@ tells you what symbol is expected. You just have to go back to the definition file and add the right suffix. @end itemize @end quotation -@anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{1ea} +@anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{1eb} @subsubheading GNAT-Style Import Library To create a static import library from @code{API.dll} with the GNAT tools you should create the .def file, then use @code{gnatdll} tool -(see @ref{1eb,,Using gnatdll}) as follows: +(see @ref{1ec,,Using gnatdll}) as follows: @quotation @@ -24055,15 +24077,15 @@ definition file name is @code{xyz.def}, the import library name will be @code{libxyz.a}. Note that in the previous example option @code{-e} could have been removed because the name of the definition file (before the @code{.def} suffix) is the same as the name of the -DLL (@ref{1eb,,Using gnatdll} for more information about @code{gnatdll}). +DLL (@ref{1ec,,Using gnatdll} for more information about @code{gnatdll}). @end quotation -@anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{1ec} +@anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{1ed} @subsubheading Microsoft-Style Import Library A Microsoft import library is needed only if you plan to make an Ada DLL available to applications developed with Microsoft -tools (@ref{1d4,,Mixed-Language Programming on Windows}). +tools (@ref{1d5,,Mixed-Language Programming on Windows}). To create a Microsoft-style import library for @code{API.dll} you should create the .def file, then build the actual import library using @@ -24087,7 +24109,7 @@ See the Microsoft documentation for further details about the usage of @end quotation @node Building DLLs with GNAT Project files,Building DLLs with GNAT,Using DLLs with GNAT,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files}@anchor{1d6}@anchor{gnat_ugn/platform_specific_information id25}@anchor{1ed} +@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files}@anchor{1d7}@anchor{gnat_ugn/platform_specific_information id25}@anchor{1ee} @subsubsection Building DLLs with GNAT Project files @@ -24103,7 +24125,7 @@ when inside the @code{DllMain} routine which is used for auto-initialization of shared libraries, so it is not possible to have library level tasks in SALs. @node Building DLLs with GNAT,Building DLLs with gnatdll,Building DLLs with GNAT Project files,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat}@anchor{1ee}@anchor{gnat_ugn/platform_specific_information id26}@anchor{1ef} +@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat}@anchor{1ef}@anchor{gnat_ugn/platform_specific_information id26}@anchor{1f0} @subsubsection Building DLLs with GNAT @@ -24134,7 +24156,7 @@ $ gcc -shared -shared-libgcc -o api.dll obj1.o obj2.o ... It is important to note that in this case all symbols found in the object files are automatically exported. It is possible to restrict the set of symbols to export by passing to @code{gcc} a definition -file (see @ref{1e3,,The Definition File}). +file (see @ref{1e4,,The Definition File}). For example: @example @@ -24172,7 +24194,7 @@ $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI @end quotation @node Building DLLs with gnatdll,Ada DLLs and Finalization,Building DLLs with GNAT,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnatdll}@anchor{1f0}@anchor{gnat_ugn/platform_specific_information id27}@anchor{1f1} +@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnatdll}@anchor{1f1}@anchor{gnat_ugn/platform_specific_information id27}@anchor{1f2} @subsubsection Building DLLs with gnatdll @@ -24180,8 +24202,8 @@ $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI @geindex building Note that it is preferred to use GNAT Project files -(@ref{1d6,,Building DLLs with GNAT Project files}) or the built-in GNAT -DLL support (@ref{1ee,,Building DLLs with GNAT}) or to build DLLs. +(@ref{1d7,,Building DLLs with GNAT Project files}) or the built-in GNAT +DLL support (@ref{1ef,,Building DLLs with GNAT}) or to build DLLs. This section explains how to build DLLs containing Ada code using @code{gnatdll}. These DLLs will be referred to as Ada DLLs in the @@ -24197,20 +24219,20 @@ non-Ada applications are as follows: You need to mark each Ada entity exported by the DLL with a @code{C} or @code{Stdcall} calling convention to avoid any Ada name mangling for the entities exported by the DLL -(see @ref{1f2,,Exporting Ada Entities}). You can +(see @ref{1f3,,Exporting Ada Entities}). You can skip this step if you plan to use the Ada DLL only from Ada applications. @item Your Ada code must export an initialization routine which calls the routine @code{adainit} generated by @code{gnatbind} to perform the elaboration of -the Ada code in the DLL (@ref{1f3,,Ada DLLs and Elaboration}). The initialization +the Ada code in the DLL (@ref{1f4,,Ada DLLs and Elaboration}). The initialization routine exported by the Ada DLL must be invoked by the clients of the DLL to initialize the DLL. @item When useful, the DLL should also export a finalization routine which calls routine @code{adafinal} generated by @code{gnatbind} to perform the -finalization of the Ada code in the DLL (@ref{1f4,,Ada DLLs and Finalization}). +finalization of the Ada code in the DLL (@ref{1f5,,Ada DLLs and Finalization}). The finalization routine exported by the Ada DLL must be invoked by the clients of the DLL when the DLL services are no further needed. @@ -24220,11 +24242,11 @@ of the programming languages to which you plan to make the DLL available. @item You must provide a definition file listing the exported entities -(@ref{1e3,,The Definition File}). +(@ref{1e4,,The Definition File}). @item Finally you must use @code{gnatdll} to produce the DLL and the import -library (@ref{1eb,,Using gnatdll}). +library (@ref{1ec,,Using gnatdll}). @end itemize Note that a relocatable DLL stripped using the @code{strip} @@ -24244,7 +24266,7 @@ chapter of the `GPRbuild User’s Guide'. @end menu @node Limitations When Using Ada DLLs from Ada,Exporting Ada Entities,,Building DLLs with gnatdll -@anchor{gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada}@anchor{1f5} +@anchor{gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada}@anchor{1f6} @subsubsection Limitations When Using Ada DLLs from Ada @@ -24265,7 +24287,7 @@ It is completely safe to exchange plain elementary, array or record types, Windows object handles, etc. @node Exporting Ada Entities,Ada DLLs and Elaboration,Limitations When Using Ada DLLs from Ada,Building DLLs with gnatdll -@anchor{gnat_ugn/platform_specific_information exporting-ada-entities}@anchor{1f2}@anchor{gnat_ugn/platform_specific_information id28}@anchor{1f6} +@anchor{gnat_ugn/platform_specific_information exporting-ada-entities}@anchor{1f3}@anchor{gnat_ugn/platform_specific_information id28}@anchor{1f7} @subsubsection Exporting Ada Entities @@ -24365,10 +24387,10 @@ end API; Note that if you do not export the Ada entities with a @code{C} or @code{Stdcall} convention you will have to provide the mangled Ada names in the definition file of the Ada DLL -(@ref{1f7,,Creating the Definition File}). +(@ref{1f8,,Creating the Definition File}). @node Ada DLLs and Elaboration,,Exporting Ada Entities,Building DLLs with gnatdll -@anchor{gnat_ugn/platform_specific_information ada-dlls-and-elaboration}@anchor{1f3}@anchor{gnat_ugn/platform_specific_information id29}@anchor{1f8} +@anchor{gnat_ugn/platform_specific_information ada-dlls-and-elaboration}@anchor{1f4}@anchor{gnat_ugn/platform_specific_information id29}@anchor{1f9} @subsubsection Ada DLLs and Elaboration @@ -24386,7 +24408,7 @@ the Ada elaboration routine @code{adainit} generated by the GNAT binder (@ref{7e,,Binding with Non-Ada Main Programs}). See the body of @code{Initialize_Api} for an example. Note that the GNAT binder is automatically invoked during the DLL build process by the @code{gnatdll} -tool (@ref{1eb,,Using gnatdll}). +tool (@ref{1ec,,Using gnatdll}). When a DLL is loaded, Windows systematically invokes a routine called @code{DllMain}. It would therefore be possible to call @code{adainit} @@ -24399,7 +24421,7 @@ time), which means that the GNAT run-time will deadlock waiting for the newly created task to complete its initialization. @node Ada DLLs and Finalization,Creating a Spec for Ada DLLs,Building DLLs with gnatdll,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information ada-dlls-and-finalization}@anchor{1f4}@anchor{gnat_ugn/platform_specific_information id30}@anchor{1f9} +@anchor{gnat_ugn/platform_specific_information ada-dlls-and-finalization}@anchor{1f5}@anchor{gnat_ugn/platform_specific_information id30}@anchor{1fa} @subsubsection Ada DLLs and Finalization @@ -24414,10 +24436,10 @@ routine @code{adafinal} generated by the GNAT binder See the body of @code{Finalize_Api} for an example. As already pointed out the GNAT binder is automatically invoked during the DLL build process by the @code{gnatdll} tool -(@ref{1eb,,Using gnatdll}). +(@ref{1ec,,Using gnatdll}). @node Creating a Spec for Ada DLLs,GNAT and Windows Resources,Ada DLLs and Finalization,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls}@anchor{1fa}@anchor{gnat_ugn/platform_specific_information id31}@anchor{1fb} +@anchor{gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls}@anchor{1fb}@anchor{gnat_ugn/platform_specific_information id31}@anchor{1fc} @subsubsection Creating a Spec for Ada DLLs @@ -24475,7 +24497,7 @@ end API; @end menu @node Creating the Definition File,Using gnatdll,,Creating a Spec for Ada DLLs -@anchor{gnat_ugn/platform_specific_information creating-the-definition-file}@anchor{1f7}@anchor{gnat_ugn/platform_specific_information id32}@anchor{1fc} +@anchor{gnat_ugn/platform_specific_information creating-the-definition-file}@anchor{1f8}@anchor{gnat_ugn/platform_specific_information id32}@anchor{1fd} @subsubsection Creating the Definition File @@ -24511,7 +24533,7 @@ EXPORTS @end quotation @node Using gnatdll,,Creating the Definition File,Creating a Spec for Ada DLLs -@anchor{gnat_ugn/platform_specific_information id33}@anchor{1fd}@anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{1eb} +@anchor{gnat_ugn/platform_specific_information id33}@anchor{1fe}@anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{1ec} @subsubsection Using @code{gnatdll} @@ -24722,7 +24744,7 @@ asks @code{gnatlink} to generate the routines @code{DllMain} and is loaded into memory. @item -@code{gnatdll} uses @code{dlltool} (see @ref{1fe,,Using dlltool}) to build the +@code{gnatdll} uses @code{dlltool} (see @ref{1ff,,Using dlltool}) to build the export table (@code{api.exp}). The export table contains the relocation information in a form which can be used during the final link to ensure that the Windows loader is able to place the DLL anywhere in memory. @@ -24761,7 +24783,7 @@ $ gnatbind -n api $ gnatlink api api.exp -o api.dll -mdll @end example @end itemize -@anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{1fe} +@anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{1ff} @subsubheading Using @code{dlltool} @@ -24820,7 +24842,7 @@ DLL in the static import library generated by @code{dlltool} with switch @item @code{-k} Kill @code{@@@var{nn}} from exported names -(@ref{1d8,,Windows Calling Conventions} +(@ref{1d9,,Windows Calling Conventions} for a discussion about @code{Stdcall}-style symbols). @end table @@ -24876,7 +24898,7 @@ Use @code{assembler-name} as the assembler. The default is @code{as}. @end table @node GNAT and Windows Resources,Using GNAT DLLs from Microsoft Visual Studio Applications,Creating a Spec for Ada DLLs,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information gnat-and-windows-resources}@anchor{1ff}@anchor{gnat_ugn/platform_specific_information id34}@anchor{200} +@anchor{gnat_ugn/platform_specific_information gnat-and-windows-resources}@anchor{200}@anchor{gnat_ugn/platform_specific_information id34}@anchor{201} @subsubsection GNAT and Windows Resources @@ -24971,7 +24993,7 @@ the corresponding Microsoft documentation. @end menu @node Building Resources,Compiling Resources,,GNAT and Windows Resources -@anchor{gnat_ugn/platform_specific_information building-resources}@anchor{201}@anchor{gnat_ugn/platform_specific_information id35}@anchor{202} +@anchor{gnat_ugn/platform_specific_information building-resources}@anchor{202}@anchor{gnat_ugn/platform_specific_information id35}@anchor{203} @subsubsection Building Resources @@ -24991,7 +25013,7 @@ complete description of the resource script language can be found in the Microsoft documentation. @node Compiling Resources,Using Resources,Building Resources,GNAT and Windows Resources -@anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{203}@anchor{gnat_ugn/platform_specific_information id36}@anchor{204} +@anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{204}@anchor{gnat_ugn/platform_specific_information id36}@anchor{205} @subsubsection Compiling Resources @@ -25033,7 +25055,7 @@ $ windres -i myres.res -o myres.o @end quotation @node Using Resources,,Compiling Resources,GNAT and Windows Resources -@anchor{gnat_ugn/platform_specific_information id37}@anchor{205}@anchor{gnat_ugn/platform_specific_information using-resources}@anchor{206} +@anchor{gnat_ugn/platform_specific_information id37}@anchor{206}@anchor{gnat_ugn/platform_specific_information using-resources}@anchor{207} @subsubsection Using Resources @@ -25053,7 +25075,7 @@ $ gnatmake myprog -largs myres.o @end quotation @node Using GNAT DLLs from Microsoft Visual Studio Applications,Debugging a DLL,GNAT and Windows Resources,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information using-gnat-dll-from-msvs}@anchor{207}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{208} +@anchor{gnat_ugn/platform_specific_information using-gnat-dll-from-msvs}@anchor{208}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{209} @subsubsection Using GNAT DLLs from Microsoft Visual Studio Applications @@ -25087,7 +25109,7 @@ $ gprbuild -p mylib.gpr @item Produce a .def file for the symbols you need to interface with, either by hand or automatically with possibly some manual adjustments -(see @ref{1e9,,Creating Definition File Automatically}): +(see @ref{1ea,,Creating Definition File Automatically}): @end enumerate @quotation @@ -25104,7 +25126,7 @@ $ dlltool libmylib.dll -z libmylib.def --export-all-symbols Make sure that MSVS command-line tools are accessible on the path. @item -Create the Microsoft-style import library (see @ref{1ec,,MSVS-Style Import Library}): +Create the Microsoft-style import library (see @ref{1ed,,MSVS-Style Import Library}): @end enumerate @quotation @@ -25146,7 +25168,7 @@ or copy the DLL into into the directory containing the .exe. @end enumerate @node Debugging a DLL,Setting Stack Size from gnatlink,Using GNAT DLLs from Microsoft Visual Studio Applications,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information debugging-a-dll}@anchor{209}@anchor{gnat_ugn/platform_specific_information id38}@anchor{20a} +@anchor{gnat_ugn/platform_specific_information debugging-a-dll}@anchor{20a}@anchor{gnat_ugn/platform_specific_information id38}@anchor{20b} @subsubsection Debugging a DLL @@ -25184,7 +25206,7 @@ tools suite used to build the DLL. @end menu @node Program and DLL Both Built with GCC/GNAT,Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Debugging a DLL -@anchor{gnat_ugn/platform_specific_information id39}@anchor{20b}@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{20c} +@anchor{gnat_ugn/platform_specific_information id39}@anchor{20c}@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{20d} @subsubsection Program and DLL Both Built with GCC/GNAT @@ -25194,7 +25216,7 @@ the process. Let’s suppose here that the main procedure is named @code{ada_main} and that in the DLL there is an entry point named @code{ada_dll}. -The DLL (@ref{1e2,,Introduction to Dynamic Link Libraries (DLLs)}) and +The DLL (@ref{1e3,,Introduction to Dynamic Link Libraries (DLLs)}) and program must have been built with the debugging information (see GNAT -g switch). Here are the step-by-step instructions for debugging it: @@ -25231,10 +25253,10 @@ Set a breakpoint inside the DLL At this stage a breakpoint is set inside the DLL. From there on you can use the standard approach to debug the whole program -(@ref{14f,,Running and Debugging Ada Programs}). +(@ref{150,,Running and Debugging Ada Programs}). @node Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Program and DLL Both Built with GCC/GNAT,Debugging a DLL -@anchor{gnat_ugn/platform_specific_information id40}@anchor{20d}@anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{20e} +@anchor{gnat_ugn/platform_specific_information id40}@anchor{20e}@anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{20f} @subsubsection Program Built with Foreign Tools and DLL Built with GCC/GNAT @@ -25251,7 +25273,7 @@ example some C code built with Microsoft Visual C) and that there is a DLL named @code{test.dll} containing an Ada entry point named @code{ada_dll}. -The DLL (see @ref{1e2,,Introduction to Dynamic Link Libraries (DLLs)}) must have +The DLL (see @ref{1e3,,Introduction to Dynamic Link Libraries (DLLs)}) must have been built with debugging information (see the GNAT @code{-g} option). @subsubheading Debugging the DLL Directly @@ -25317,7 +25339,7 @@ Continue the program. This will run the program until it reaches the breakpoint that has been set. From that point you can use the standard way to debug a program -as described in (@ref{14f,,Running and Debugging Ada Programs}). +as described in (@ref{150,,Running and Debugging Ada Programs}). @end itemize It is also possible to debug the DLL by attaching to a running process. @@ -25387,10 +25409,10 @@ Continue process execution. This last step will resume the process execution, and stop at the breakpoint we have set. From there you can use the standard approach to debug a program as described in -@ref{14f,,Running and Debugging Ada Programs}. +@ref{150,,Running and Debugging Ada Programs}. @node Setting Stack Size from gnatlink,Setting Heap Size from gnatlink,Debugging a DLL,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id41}@anchor{20f}@anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{129} +@anchor{gnat_ugn/platform_specific_information id41}@anchor{210}@anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{12a} @subsubsection Setting Stack Size from @code{gnatlink} @@ -25433,7 +25455,7 @@ because the comma is a separator for this option. @end itemize @node Setting Heap Size from gnatlink,,Setting Stack Size from gnatlink,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id42}@anchor{210}@anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{12a} +@anchor{gnat_ugn/platform_specific_information id42}@anchor{211}@anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{12b} @subsubsection Setting Heap Size from @code{gnatlink} @@ -25466,7 +25488,7 @@ because the comma is a separator for this option. @end itemize @node Windows Specific Add-Ons,,Mixed-Language Programming on Windows,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information win32-specific-addons}@anchor{211}@anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{212} +@anchor{gnat_ugn/platform_specific_information win32-specific-addons}@anchor{212}@anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{213} @subsection Windows Specific Add-Ons @@ -25479,7 +25501,7 @@ This section describes the Windows specific add-ons. @end menu @node Win32Ada,wPOSIX,,Windows Specific Add-Ons -@anchor{gnat_ugn/platform_specific_information id43}@anchor{213}@anchor{gnat_ugn/platform_specific_information win32ada}@anchor{214} +@anchor{gnat_ugn/platform_specific_information id43}@anchor{214}@anchor{gnat_ugn/platform_specific_information win32ada}@anchor{215} @subsubsection Win32Ada @@ -25510,7 +25532,7 @@ gprbuild p.gpr @end quotation @node wPOSIX,,Win32Ada,Windows Specific Add-Ons -@anchor{gnat_ugn/platform_specific_information id44}@anchor{215}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{216} +@anchor{gnat_ugn/platform_specific_information id44}@anchor{216}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{217} @subsubsection wPOSIX @@ -25543,7 +25565,7 @@ gprbuild p.gpr @end quotation @node Mac OS Topics,,Microsoft Windows Topics,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information id45}@anchor{217}@anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{218} +@anchor{gnat_ugn/platform_specific_information id45}@anchor{218}@anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{219} @section Mac OS Topics @@ -25558,7 +25580,7 @@ platform. @end menu @node Codesigning the Debugger,,,Mac OS Topics -@anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{219} +@anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{21a} @subsection Codesigning the Debugger @@ -25639,7 +25661,7 @@ the location where you installed GNAT. Also, be sure that users are in the Unix group @code{_developer}. @node Example of Binder Output File,Elaboration Order Handling in GNAT,Platform-Specific Information,Top -@anchor{gnat_ugn/example_of_binder_output doc}@anchor{21a}@anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{e}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{21b} +@anchor{gnat_ugn/example_of_binder_output doc}@anchor{21b}@anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{e}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{21c} @chapter Example of Binder Output File @@ -26391,7 +26413,7 @@ elaboration code in your own application). @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit @node Elaboration Order Handling in GNAT,Inline Assembler,Example of Binder Output File,Top -@anchor{gnat_ugn/elaboration_order_handling_in_gnat doc}@anchor{21c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{21d} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat doc}@anchor{21d}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{21e} @chapter Elaboration Order Handling in GNAT @@ -26421,7 +26443,7 @@ GNAT, either automatically or with explicit programming features. @end menu @node Elaboration Code,Elaboration Order,,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{21e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{21f} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{21f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{220} @section Elaboration Code @@ -26569,7 +26591,7 @@ elaborated. @end itemize @node Elaboration Order,Checking the Elaboration Order,Elaboration Code,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order}@anchor{220}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{221} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order}@anchor{221}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{222} @section Elaboration Order @@ -26738,7 +26760,7 @@ however a compiler may not always find such an order due to complications with respect to control and data flow. @node Checking the Elaboration Order,Controlling the Elaboration Order in Ada,Elaboration Order,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order}@anchor{222}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{223} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order}@anchor{223}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{224} @section Checking the Elaboration Order @@ -26799,7 +26821,7 @@ order. @end itemize @node Controlling the Elaboration Order in Ada,Controlling the Elaboration Order in GNAT,Checking the Elaboration Order,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada}@anchor{224}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{225} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada}@anchor{225}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{226} @section Controlling the Elaboration Order in Ada @@ -27127,7 +27149,7 @@ is that the program continues to stay in the last state (one or more correct orders exist) even if maintenance changes the bodies of targets. @node Controlling the Elaboration Order in GNAT,Mixing Elaboration Models,Controlling the Elaboration Order in Ada,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat}@anchor{226}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{227} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat}@anchor{227}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{228} @section Controlling the Elaboration Order in GNAT @@ -27257,7 +27279,7 @@ The dynamic, legacy, and static models can be relaxed using compiler switch may not diagnose certain elaboration issues or install run-time checks. @node Mixing Elaboration Models,ABE Diagnostics,Controlling the Elaboration Order in GNAT,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id7}@anchor{228}@anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{229} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id7}@anchor{229}@anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{22a} @section Mixing Elaboration Models @@ -27304,7 +27326,7 @@ warning: "y.ads" which has static elaboration checks The warnings can be suppressed by binder switch @code{-ws}. @node ABE Diagnostics,SPARK Diagnostics,Mixing Elaboration Models,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics}@anchor{22a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{22b} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics}@anchor{22b}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{22c} @section ABE Diagnostics @@ -27411,7 +27433,7 @@ declaration @code{Safe} because the body of function @code{ABE} has already been elaborated at that point. @node SPARK Diagnostics,Elaboration Circularities,ABE Diagnostics,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id9}@anchor{22c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics}@anchor{22d} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id9}@anchor{22d}@anchor{gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics}@anchor{22e} @section SPARK Diagnostics @@ -27437,7 +27459,7 @@ rules. @end quotation @node Elaboration Circularities,Resolving Elaboration Circularities,SPARK Diagnostics,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities}@anchor{22e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{22f} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities}@anchor{22f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{230} @section Elaboration Circularities @@ -27537,7 +27559,7 @@ This section enumerates various tactics for eliminating the circularity. @end itemize @node Resolving Elaboration Circularities,Elaboration-related Compiler Switches,Elaboration Circularities,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id11}@anchor{230}@anchor{gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities}@anchor{231} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id11}@anchor{231}@anchor{gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities}@anchor{232} @section Resolving Elaboration Circularities @@ -27809,7 +27831,7 @@ Use the relaxed dynamic-elaboration model, with compiler switches @end itemize @node Elaboration-related Compiler Switches,Summary of Procedures for Elaboration Control,Resolving Elaboration Circularities,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches}@anchor{232}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{233} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches}@anchor{233}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{234} @section Elaboration-related Compiler Switches @@ -27990,7 +28012,7 @@ checks. The example above will still fail at run time with an ABE. @end table @node Summary of Procedures for Elaboration Control,Inspecting the Chosen Elaboration Order,Elaboration-related Compiler Switches,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id13}@anchor{234}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{235} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id13}@anchor{235}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{236} @section Summary of Procedures for Elaboration Control @@ -28048,7 +28070,7 @@ Use the relaxed dynamic elaboration model, with compiler switches @end itemize @node Inspecting the Chosen Elaboration Order,,Summary of Procedures for Elaboration Control,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id14}@anchor{236}@anchor{gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order}@anchor{237} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id14}@anchor{237}@anchor{gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order}@anchor{238} @section Inspecting the Chosen Elaboration Order @@ -28191,7 +28213,7 @@ gdbstr (body) @end quotation @node Inline Assembler,GNU Free Documentation License,Elaboration Order Handling in GNAT,Top -@anchor{gnat_ugn/inline_assembler doc}@anchor{238}@anchor{gnat_ugn/inline_assembler id1}@anchor{239}@anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{10} +@anchor{gnat_ugn/inline_assembler doc}@anchor{239}@anchor{gnat_ugn/inline_assembler id1}@anchor{23a}@anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{10} @chapter Inline Assembler @@ -28250,7 +28272,7 @@ and with assembly language programming. @end menu @node Basic Assembler Syntax,A Simple Example of Inline Assembler,,Inline Assembler -@anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{23a}@anchor{gnat_ugn/inline_assembler id2}@anchor{23b} +@anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{23b}@anchor{gnat_ugn/inline_assembler id2}@anchor{23c} @section Basic Assembler Syntax @@ -28366,7 +28388,7 @@ Intel: Destination first; for example @code{mov eax, 4}@w{ } @node A Simple Example of Inline Assembler,Output Variables in Inline Assembler,Basic Assembler Syntax,Inline Assembler -@anchor{gnat_ugn/inline_assembler a-simple-example-of-inline-assembler}@anchor{23c}@anchor{gnat_ugn/inline_assembler id3}@anchor{23d} +@anchor{gnat_ugn/inline_assembler a-simple-example-of-inline-assembler}@anchor{23d}@anchor{gnat_ugn/inline_assembler id3}@anchor{23e} @section A Simple Example of Inline Assembler @@ -28515,7 +28537,7 @@ If there are no errors, @code{as} will generate an object file @code{nothing.out}. @node Output Variables in Inline Assembler,Input Variables in Inline Assembler,A Simple Example of Inline Assembler,Inline Assembler -@anchor{gnat_ugn/inline_assembler id4}@anchor{23e}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{23f} +@anchor{gnat_ugn/inline_assembler id4}@anchor{23f}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{240} @section Output Variables in Inline Assembler @@ -28882,7 +28904,7 @@ end Get_Flags_3; @end quotation @node Input Variables in Inline Assembler,Inlining Inline Assembler Code,Output Variables in Inline Assembler,Inline Assembler -@anchor{gnat_ugn/inline_assembler id5}@anchor{240}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{241} +@anchor{gnat_ugn/inline_assembler id5}@anchor{241}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{242} @section Input Variables in Inline Assembler @@ -28971,7 +28993,7 @@ _increment__incr.1: @end quotation @node Inlining Inline Assembler Code,Other Asm Functionality,Input Variables in Inline Assembler,Inline Assembler -@anchor{gnat_ugn/inline_assembler id6}@anchor{242}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{243} +@anchor{gnat_ugn/inline_assembler id6}@anchor{243}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{244} @section Inlining Inline Assembler Code @@ -29042,7 +29064,7 @@ movl %esi,%eax thus saving the overhead of stack frame setup and an out-of-line call. @node Other Asm Functionality,,Inlining Inline Assembler Code,Inline Assembler -@anchor{gnat_ugn/inline_assembler id7}@anchor{244}@anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{245} +@anchor{gnat_ugn/inline_assembler id7}@anchor{245}@anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{246} @section Other @code{Asm} Functionality @@ -29057,7 +29079,7 @@ and @code{Volatile}, which inhibits unwanted optimizations. @end menu @node The Clobber Parameter,The Volatile Parameter,,Other Asm Functionality -@anchor{gnat_ugn/inline_assembler id8}@anchor{246}@anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{247} +@anchor{gnat_ugn/inline_assembler id8}@anchor{247}@anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{248} @subsection The @code{Clobber} Parameter @@ -29121,7 +29143,7 @@ Use ‘register’ name @code{memory} if you changed a memory location @end itemize @node The Volatile Parameter,,The Clobber Parameter,Other Asm Functionality -@anchor{gnat_ugn/inline_assembler id9}@anchor{248}@anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{249} +@anchor{gnat_ugn/inline_assembler id9}@anchor{249}@anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{24a} @subsection The @code{Volatile} Parameter @@ -29157,7 +29179,7 @@ to @code{True} only if the compiler’s optimizations have created problems. @node GNU Free Documentation License,Index,Inline Assembler,Top -@anchor{share/gnu_free_documentation_license doc}@anchor{24a}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{24b} +@anchor{share/gnu_free_documentation_license doc}@anchor{24b}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{24c} @chapter GNU Free Documentation License @@ -29645,8 +29667,8 @@ to permit their use in free software. @printindex ge -@anchor{d1}@w{ } @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } +@anchor{d1}@w{ } @c %**end of body @bye diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index d24b9b941ff3e..ce0caf48168b9 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -1667,6 +1667,11 @@ package Opt is -- which requires pragma Warnings to be stored for the formal verification -- backend. + Info_Suppressed : Boolean := False; + -- GNAT + -- Controls whether informational messages are suppressed. Set True by + -- -gnatis. If True, informational messages will not be printed. + Wide_Character_Encoding_Method : WC_Encoding_Method := WCEM_Brackets; -- GNAT, GNATBIND -- Method used for encoding wide characters in the source program. See diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb index 43b69f1dde150..25cb6f20da610 100644 --- a/gcc/ada/switch-c.adb +++ b/gcc/ada/switch-c.adb @@ -927,7 +927,8 @@ package body Switch.C is Ptr := Ptr + 1; Legacy_Elaboration_Checks := True; - -- -gnati (character set) + -- -gnati[1-5|8|9|p|f|n|w] (character set) + -- -gnatis (suppress info messages) when 'i' => if Ptr = Max then @@ -940,6 +941,9 @@ package body Switch.C is if C in '1' .. '5' | '8' | 'p' | '9' | 'f' | 'n' | 'w' then Identifier_Character_Set := C; Ptr := Ptr + 1; + elsif C = 's' then + Info_Suppressed := True; + Ptr := Ptr + 1; else Bad_Switch ("-gnati" & Switch_Chars (Ptr .. Max)); From 0f906fe2137bff551e46a07d1d6bcf84edf9eaed Mon Sep 17 00:00:00 2001 From: Viljar Indus Date: Fri, 10 May 2024 14:52:58 +0300 Subject: [PATCH 029/114] ada: Convert -gnatw.n messages to warnings Previously the messages produced by this warning switch were info messages that were suppressed with the same methods as regular warnings. Since info messages are now separated as a completely different class of messages then these messages should be converted back to warnings in order for the previous pragma based suppression methods to work. gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update documentation for -gnatw.n switch. * exp_util.adb: Convert info messages into warnings. * gnat_ugn.texi: Regenerate. --- .../building_executable_programs_with_gnat.rst | 12 +++++++----- gcc/ada/exp_util.adb | 4 ++-- gcc/ada/gnat_ugn.texi | 10 +++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst index 8fbb1eeef4f81..d30bb7e9d8e01 100644 --- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst +++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst @@ -3495,20 +3495,20 @@ of the pragma in the :title:`GNAT_Reference_manual`). .. index:: Atomic Synchronization, warnings :switch:`-gnatw.n` - *Activate info messages on atomic synchronization.* + *Activate warnings on atomic synchronization.* - This switch activates info messages when an access to an atomic variable + This switch activates warnings when an access to an atomic variable requires the generation of atomic synchronization code. These - info messages are off by default. + warnings are off by default. .. index:: -gnatw.N (gcc) :switch:`-gnatw.N` - *Suppress info messages on atomic synchronization.* + *Suppress warnings on atomic synchronization.* .. index:: Atomic Synchronization, warnings - This switch suppresses info messages when an access to an atomic variable + This switch suppresses warnings when an access to an atomic variable requires the generation of atomic synchronization code. @@ -4372,6 +4372,8 @@ When no switch :switch:`-gnatw` is used, this is equivalent to: .. _Debugging_and_Assertion_Control: + + Info message Control -------------------- diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 528001ea70a00..7a756af97ea3c 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -299,10 +299,10 @@ package body Exp_Util is if Present (Msg_Node) then Error_Msg_N - ("info: atomic synchronization set for &?.n?", Msg_Node); + ("atomic synchronization set for &?.n?", Msg_Node); else Error_Msg_N - ("info: atomic synchronization set?.n?", N); + ("atomic synchronization set?.n?", N); end if; end if; end Activate_Atomic_Synchronization; diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index fe83913951d95..95e21405f02bf 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -11757,11 +11757,11 @@ use of @code{-gnatg}. @item @code{-gnatw.n} -`Activate info messages on atomic synchronization.' +`Activate warnings on atomic synchronization.' -This switch activates info messages when an access to an atomic variable +This switch activates warnings when an access to an atomic variable requires the generation of atomic synchronization code. These -info messages are off by default. +warnings are off by default. @end table @geindex -gnatw.N (gcc) @@ -11771,12 +11771,12 @@ info messages are off by default. @item @code{-gnatw.N} -`Suppress info messages on atomic synchronization.' +`Suppress warnings on atomic synchronization.' @geindex Atomic Synchronization @geindex warnings -This switch suppresses info messages when an access to an atomic variable +This switch suppresses warnings when an access to an atomic variable requires the generation of atomic synchronization code. @end table From 23c332e2a56dc93e3c00e745e08396762a33204e Mon Sep 17 00:00:00 2001 From: Viljar Indus Date: Mon, 13 May 2024 11:53:45 +0300 Subject: [PATCH 030/114] ada: Change messages for -gnatw.v to warnings Previously this switch was emitting only info messages which was both confusing in terms of the name of the switch that was used internally and externally. gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update documentation for -gnatw.v. * sem_ch13.adb: Convert all -gnatw.v related messages to warnings. * gnat_ugn.texi: Regenerate. --- .../building_executable_programs_with_gnat.rst | 17 ++++++++--------- gcc/ada/gnat_ugn.texi | 17 ++++++++--------- gcc/ada/sem_ch13.adb | 10 +++++----- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst index d30bb7e9d8e01..ce3ed0cc65a01 100644 --- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst +++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst @@ -3997,22 +3997,21 @@ of the pragma in the :title:`GNAT_Reference_manual`). .. index:: bit order warnings :switch:`-gnatw.v` - *Activate info messages for non-default bit order.* + *Activate warnings for non-default bit order.* - This switch activates messages (labeled "info", they are not warnings, - just informational messages) about the effects of non-default bit-order - on records to which a component clause is applied. The effect of specifying - non-default bit ordering is a bit subtle (and changed with Ada 2005), so - these messages, which are given by default, are useful in understanding the - exact consequences of using this feature. + This switch activates warning messages about the effects of non-default + bit-order on records to which a component clause is applied. The effect of + specifying non-default bit ordering is a bit subtle + (and changed with Ada 2005), so these messages, which are given by default, + are useful in understanding the exact consequences of using this feature. .. index:: -gnatw.V (gcc) :switch:`-gnatw.V` - *Suppress info messages for non-default bit order.* + *Suppress warnings for non-default bit order.* - This switch suppresses information messages for the effects of specifying + This switch suppresses warnings for the effects of specifying non-default bit order on record components with component clauses. diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 95e21405f02bf..bba4f25aa13c7 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -12462,14 +12462,13 @@ may not be properly initialized. @item @code{-gnatw.v} -`Activate info messages for non-default bit order.' +`Activate warnings for non-default bit order.' -This switch activates messages (labeled “info”, they are not warnings, -just informational messages) about the effects of non-default bit-order -on records to which a component clause is applied. The effect of specifying -non-default bit ordering is a bit subtle (and changed with Ada 2005), so -these messages, which are given by default, are useful in understanding the -exact consequences of using this feature. +This switch activates warning messages about the effects of non-default +bit-order on records to which a component clause is applied. The effect of +specifying non-default bit ordering is a bit subtle +(and changed with Ada 2005), so these messages, which are given by default, +are useful in understanding the exact consequences of using this feature. @end table @geindex -gnatw.V (gcc) @@ -12479,9 +12478,9 @@ exact consequences of using this feature. @item @code{-gnatw.V} -`Suppress info messages for non-default bit order.' +`Suppress warnings for non-default bit order.' -This switch suppresses information messages for the effects of specifying +This switch suppresses warnings for the effects of specifying non-default bit order on record components with component clauses. @end table diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index cd47f734462ab..a35b67eddc82a 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -508,7 +508,7 @@ package body Sem_Ch13 is if Warn_On_Reverse_Bit_Order then Error_Msg_N - ("info: multi-byte field specified with " + ("multi-byte field specified with " & "non-standard Bit_Order?.v?", CC); if Bytes_Big_Endian then @@ -732,7 +732,7 @@ package body Sem_Ch13 is then Error_Msg_Uint_1 := MSS; Error_Msg_N - ("info: reverse bit order in machine scalar of " + ("reverse bit order in machine scalar of " & "length^?.v?", First_Bit (CC)); Error_Msg_Uint_1 := NFB; Error_Msg_Uint_2 := NLB; @@ -808,7 +808,7 @@ package body Sem_Ch13 is and then CSZ mod System_Storage_Unit = 0 then Error_Msg_N - ("info: multi-byte field specified with non-standard " + ("multi-byte field specified with non-standard " & "Bit_Order?.v?", CLC); if Bytes_Big_Endian then @@ -841,13 +841,13 @@ package body Sem_Ch13 is and then Warn_On_Reverse_Bit_Order then Error_Msg_N - ("info: Bit_Order clause does not affect byte " + ("Bit_Order clause does not affect byte " & "ordering?.v?", Pos); Error_Msg_Uint_1 := Intval (Pos) + Intval (FB) / System_Storage_Unit; Error_Msg_N - ("info: position normalized to ^ before bit order " + ("position normalized to ^ before bit order " & "interpreted?.v?", Pos); end if; From 20f5d5e09df70e7563242059a4d2bf1e3b07bcaa Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 15 May 2024 12:50:58 -0400 Subject: [PATCH 031/114] ada: Document -gnatd_w for CCG gcc/ada/ * debug.adb: Add documentation for -gnatd_w. --- gcc/ada/debug.adb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index 602a8fa0b635a..97f88b7664f3f 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -159,7 +159,7 @@ package body Debug is -- d_t In LLVM-based CCG, dump LLVM IR after transformations are done -- d_u In LLVM-based CCG, dump flows -- d_v Enable additional checks and debug printouts in Atree - -- d_w + -- d_w In LLVM-based CCG, don't send front end data to CCG -- d_x Disable inline expansion of Image attribute for enumeration types -- d_y -- d_z @@ -1011,6 +1011,8 @@ package body Debug is -- d_v Enable additional checks and debug printouts in Atree + -- d_w In LLVM-based CCG, don't send front end data to CCG + -- d_x The compiler does not expand in line the Image attribute for user- -- defined enumeration types and the standard boolean type. From cfd7b02a0ca102e12bc7233a45834683b0b247e6 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 11 May 2024 01:14:38 +0200 Subject: [PATCH 032/114] ada: Fix minor issues in comments gcc/ada/ * mutably_tagged.ads: Fix minor issues in comments throughout. --- gcc/ada/mutably_tagged.ads | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/gcc/ada/mutably_tagged.ads b/gcc/ada/mutably_tagged.ads index b1e393f98ad01..6b3b10d38ea19 100644 --- a/gcc/ada/mutably_tagged.ads +++ b/gcc/ada/mutably_tagged.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2024-2024, Free Software Foundation, Inc. -- +-- Copyright (C) 2024, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -36,8 +36,8 @@ package Mutably_Tagged is -- This package implements mutably tagged types via the Size'class aspect -- which enables the creation of class-wide types with a specific maximum -- size. This allows such types to be used directly in record components, - -- in object declarations without an initial expression, and to be - -- assigned a value from any type in a mutably tagged type's hierarchy. + -- in object declarations without an initial expression, and to be assigned + -- a value from any type in a mutably tagged type's hierarchy. -- For example, this structure allows Base_Type and its derivatives to be -- treated as components with a predictable size: @@ -49,17 +49,16 @@ package Mutably_Tagged is -- Component : Base_Type'Class; -- end record; - -- The core of thier implementation involve creating an "equivalent" type + -- The core of their implementation involves creating an "equivalent" type -- for each class-wide type that adheres to the Size'Class constraint. This - -- is achieved using the function Make_CW_Equivalent_Type, which - -- generates a type that is compatible in size and structure with any + -- is achieved by using the function Make_CW_Equivalent_Type from Exp_Util, + -- which generates a type that is compatible in size and structure with any -- derived type of the base class-wide type. - -- Once the class-wide equivalent type is generated, all references to - -- mutably tagged typed object declarations get rewritten to be - -- declarations of said equivalent type. References to these objects also - -- then get wrapped in unchecked conversions to the proper mutably tagged - -- class-wide type. + -- Once the class-wide equivalent type is generated, all declarations of + -- mutably tagged typed objects get rewritten as declarations of objects + -- with the equivalent type. References to these objects also then get + -- wrapped in unchecked conversions to the mutably tagged class-wide type. function Corresponding_Mutably_Tagged_Type (CW_Equiv_Typ : Entity_Id) return Entity_Id; From 2e28085cc3ec07dbf897c9b9f5c64a68cddd3d14 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 14 May 2024 22:06:17 +0200 Subject: [PATCH 033/114] ada: Do not compute Has_Controlled_Component twice during freezing The Has_Controlled_Component flag is computed twice during freezing when expansion is enabled: in Freeze_Array_Type and Expand_Freeze_Array_Type for array types, and in Freeze_Record_Type and Expand_Freeze_Record_Type for record types. This removes the latter computation in both cases, as well as moves the computation of concurrent flags from the latter to the former places, which happens to plug a loophole in the detection of errors when the No_Task_Parts aspect is specified on peculiar types. gcc/ada/ * exp_ch3.adb (Expand_Freeze_Array_Type): Do not propagate the concurrent flags and the Has_Controlled_Component flag here. (Expand_Freeze_Record_Type): Likewise. * freeze.adb (Freeze_Array_Type): Propagate the concurrent flags. (Freeze_Record_Type): Likewise. * sem_util.adb (Has_Some_Controlled_Component): Adjust comment. --- gcc/ada/exp_ch3.adb | 38 -------------------------------------- gcc/ada/freeze.adb | 9 ++++++--- gcc/ada/sem_util.adb | 2 +- 3 files changed, 7 insertions(+), 42 deletions(-) diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 3d8b80239887b..548fbede4f17d 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -5431,17 +5431,6 @@ package body Exp_Ch3 is begin if not Is_Bit_Packed_Array (Typ) then - - -- If the component contains tasks, so does the array type. This may - -- not be indicated in the array type because the component may have - -- been a private type at the point of definition. Same if component - -- type is controlled or contains protected objects. - - Propagate_Concurrent_Flags (Base, Comp_Typ); - Set_Has_Controlled_Component - (Base, Has_Controlled_Component (Comp_Typ) - or else Is_Controlled (Comp_Typ)); - if No (Init_Proc (Base)) then -- If this is an anonymous array created for a declaration with @@ -6123,8 +6112,6 @@ package body Exp_Ch3 is Typ : constant Node_Id := Entity (N); Typ_Decl : constant Node_Id := Parent (Typ); - Comp : Entity_Id; - Comp_Typ : Entity_Id; Predef_List : List_Id; Wrapper_Decl_List : List_Id; @@ -6156,31 +6143,6 @@ package body Exp_Ch3 is Check_Stream_Attributes (Typ); end if; - -- Update task, protected, and controlled component flags, because some - -- of the component types may have been private at the point of the - -- record declaration. Detect anonymous access-to-controlled components. - - Comp := First_Component (Typ); - while Present (Comp) loop - Comp_Typ := Etype (Comp); - - Propagate_Concurrent_Flags (Typ, Comp_Typ); - - -- Do not set Has_Controlled_Component on a class-wide equivalent - -- type. See Make_CW_Equivalent_Type. - - if not Is_Class_Wide_Equivalent_Type (Typ) - and then - (Has_Controlled_Component (Comp_Typ) - or else (Chars (Comp) /= Name_uParent - and then Is_Controlled (Comp_Typ))) - then - Set_Has_Controlled_Component (Typ); - end if; - - Next_Component (Comp); - end loop; - -- Handle constructors of untagged CPP_Class types if not Is_Tagged_Type (Typ) and then Is_CPP_Class (Typ) then diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 5dbf7198cb410..452e11fc747e4 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -3661,7 +3661,9 @@ package body Freeze is Set_SSO_From_Default (Arr); - -- Propagate flags for component type + -- Propagate flags from component type + + Propagate_Concurrent_Flags (Arr, Ctyp); if Is_Controlled (Ctyp) or else Has_Controlled_Component (Ctyp) @@ -5684,11 +5686,12 @@ package body Freeze is Freeze_And_Append (Corresponding_Remote_Type (Rec), N, Result); end if; - -- Check for controlled components, unchecked unions, and type - -- invariants. + -- Check for tasks, protected and controlled components, unchecked + -- unions, and type invariants. Comp := First_Component (Rec); while Present (Comp) loop + Propagate_Concurrent_Flags (Rec, Etype (Comp)); -- Do not set Has_Controlled_Component on a class-wide -- equivalent type. See Make_CW_Equivalent_Type. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index b1d47f2241609..8479e8c4661c0 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -22259,7 +22259,7 @@ package body Sem_Util is elsif Is_Record_Type (Input_Typ) then Comp := First_Component (Input_Typ); while Present (Comp) loop - -- Skip _Parent component like Expand_Freeze_Record_Type + -- Skip _Parent component like Record_Type_Definition if Chars (Comp) /= Name_uParent and then Needs_Finalization (Etype (Comp)) From 7abf2222bed225e8b39bc2256eebb29692a8fde9 Mon Sep 17 00:00:00 2001 From: Ronan Desplanques Date: Wed, 15 May 2024 14:35:59 +0200 Subject: [PATCH 034/114] ada: Add Dump_Buffers hooks for code coverage The purpose of this patch is to make it possible to set up code coverage for the GNAT front end in gnat1 using GNATcoverage. It is not obvious how to have GNATcoverage instrument gnat1's main function, and since the front end has a clear entry point (Gnat1drv), we add manual instrumentation annotations there. gcc/ada/ * gnat1drv.adb (Gnat1drv): Add coverage instrumentation annotations. --- gcc/ada/gnat1drv.adb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index 754dab82862d1..9743dfd4c4c90 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -1526,6 +1526,8 @@ begin Check_Rep_Info; end if; + pragma Annotate (Xcov, Dump_Buffers); + return; end if; @@ -1679,6 +1681,8 @@ begin Atree.Print_Statistics; end if; + pragma Annotate (Xcov, Dump_Buffers); + -- The outer exception handler handles an unrecoverable error exception @@ -1693,6 +1697,9 @@ exception Set_Standard_Output; Source_Dump; Tree_Dump; + + pragma Annotate (Xcov, Dump_Buffers); + Exit_Program (E_Errors); end Gnat1drv; From c207c2dfb47b26f4968094de081df964dae3a784 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 16 May 2024 10:28:13 +0200 Subject: [PATCH 035/114] ada: Couple of minor fixes in GNAT Reference Manual The Storage_Model pragma no longer exists. gcc/ada/ * doc/gnat_rm/gnat_language_extensions.rst (Pragma Storage_Model): Rename to Storage Model. * doc/gnat_rm/implementation_defined_aspects.rst: Alphabetize. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate. --- .../doc/gnat_rm/gnat_language_extensions.rst | 4 +- .../implementation_defined_aspects.rst | 13 +++--- gcc/ada/gnat_rm.texi | 42 +++++++++---------- gcc/ada/gnat_ugn.texi | 2 +- 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst index 99cab9d2816b4..f71e8f6eef893 100644 --- a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst +++ b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst @@ -355,8 +355,8 @@ particular the ``Shift_Left`` and ``Shift_Right`` intrinsics. Experimental Language Extensions ================================ -Pragma Storage_Model --------------------- +Storage Model +------------- This feature proposes to redesign the concepts of Storage Pools into a more efficient model allowing higher performances and easier integration with low diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst index 6b58dde18c0de..ec09fe7f6c2e9 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst @@ -574,6 +574,12 @@ Aspect Remote_Access_Type This aspect is equivalent to :ref:`pragma Remote_Access_Type`. +Aspect Scalar_Storage_Order +=========================== +.. index:: Scalar_Storage_Order + +This aspect is equivalent to a :ref:`attribute Scalar_Storage_Order`. + Aspect Secondary_Stack_Size =========================== @@ -581,13 +587,6 @@ Aspect Secondary_Stack_Size This aspect is equivalent to :ref:`pragma Secondary_Stack_Size`. - -Aspect Scalar_Storage_Order -=========================== -.. index:: Scalar_Storage_Order - -This aspect is equivalent to a :ref:`attribute Scalar_Storage_Order`. - Aspect Shared ============= .. index:: Shared diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 8068b4de4c641..e811ef2c02d20 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -349,8 +349,8 @@ Implementation Defined Aspects * Aspect Refined_State:: * Aspect Relaxed_Initialization:: * Aspect Remote_Access_Type:: -* Aspect Secondary_Stack_Size:: * Aspect Scalar_Storage_Order:: +* Aspect Secondary_Stack_Size:: * Aspect Shared:: * Aspect Side_Effects:: * Aspect Simple_Storage_Pool:: @@ -900,7 +900,7 @@ Curated Extensions Experimental Language Extensions -* Pragma Storage_Model:: +* Storage Model:: * Attribute Super:: * Simpler accessibility model:: * Case pattern matching:: @@ -9298,8 +9298,8 @@ or attribute definition clause. * Aspect Refined_State:: * Aspect Relaxed_Initialization:: * Aspect Remote_Access_Type:: -* Aspect Secondary_Stack_Size:: * Aspect Scalar_Storage_Order:: +* Aspect Secondary_Stack_Size:: * Aspect Shared:: * Aspect Side_Effects:: * Aspect Simple_Storage_Pool:: @@ -9989,7 +9989,7 @@ This aspect is equivalent to @ref{d9,,pragma Refined_State}. For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.10. -@node Aspect Remote_Access_Type,Aspect Secondary_Stack_Size,Aspect Relaxed_Initialization,Implementation Defined Aspects +@node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects @anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{159} @section Aspect Remote_Access_Type @@ -9998,25 +9998,25 @@ Manual, section 6.10. This aspect is equivalent to @ref{dc,,pragma Remote_Access_Type}. -@node Aspect Secondary_Stack_Size,Aspect Scalar_Storage_Order,Aspect Remote_Access_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{15a} -@section Aspect Secondary_Stack_Size +@node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{15a} +@section Aspect Scalar_Storage_Order -@geindex Secondary_Stack_Size +@geindex Scalar_Storage_Order -This aspect is equivalent to @ref{e2,,pragma Secondary_Stack_Size}. +This aspect is equivalent to a @ref{15b,,attribute Scalar_Storage_Order}. -@node Aspect Scalar_Storage_Order,Aspect Shared,Aspect Secondary_Stack_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{15b} -@section Aspect Scalar_Storage_Order +@node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{15c} +@section Aspect Secondary_Stack_Size -@geindex Scalar_Storage_Order +@geindex Secondary_Stack_Size -This aspect is equivalent to a @ref{15c,,attribute Scalar_Storage_Order}. +This aspect is equivalent to @ref{e2,,pragma Secondary_Stack_Size}. -@node Aspect Shared,Aspect Side_Effects,Aspect Scalar_Storage_Order,Implementation Defined Aspects +@node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects @anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{15d} @section Aspect Shared @@ -11389,7 +11389,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{15c}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1aa} +@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{15b}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1aa} @section Attribute Scalar_Storage_Order @@ -29198,7 +29198,7 @@ particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. @menu -* Pragma Storage_Model:: +* Storage Model:: * Attribute Super:: * Simpler accessibility model:: * Case pattern matching:: @@ -29206,9 +29206,9 @@ particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. @end menu -@node Pragma Storage_Model,Attribute Super,,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions pragma-storage-model}@anchor{448} -@subsection Pragma Storage_Model +@node Storage Model,Attribute Super,,Experimental Language Extensions +@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{448} +@subsection Storage Model This feature proposes to redesign the concepts of Storage Pools into a more @@ -29221,7 +29221,7 @@ support interactions with GPU. Here is a link to the full RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-storage-model.rst} -@node Attribute Super,Simpler accessibility model,Pragma Storage_Model,Experimental Language Extensions +@node Attribute Super,Simpler accessibility model,Storage Model,Experimental Language Extensions @anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{449} @subsection Attribute Super diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index bba4f25aa13c7..db06a771dddd6 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -29666,8 +29666,8 @@ to permit their use in free software. @printindex ge -@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } @anchor{d1}@w{ } +@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } @c %**end of body @bye From ad264cb6482808351fee154ace89dc91a8253f61 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 16 May 2024 15:24:11 +0200 Subject: [PATCH 036/114] ada: Remove Max_Entry_Queue_Depth pragma/aspect It was implemented apparently because a very early version of AI12-0164 that standardizes GNAT's Max_Queue_Length opted for the subtly different moniker, but later versions of the AI use Max_Entry_Queue_Length instead. gcc/ada/ * aspects.ads (Aspect_Id): Remove Aspect_Max_Entry_Queue_Depth. (global arrays): Remove entry for it. * exp_ch9.adb (Expand_N_Protected_Type_Declaration): Remove reference to pragma Max_Entry_Queue_Depth in comment. * par-prag.adb (Prag): Remove handling of Pragma_Max_Entry_Queue_Depth. * sem_ch13.adb (Analyze_Aspect_Specifications): Remove reference to aspect Max_Entry_Queue_Depth in comment. (Analyze_Aspect_Specifications): Remove processing of aspect Max_Entry_Queue_Depth. (Check_Aspect_At_Freeze_Point): Likewise. * sem_prag.ads (Find_Related_Declaration_Or_Body): Remove reference to pragma Max_Entry_Queue_Depth in comment. * sem_prag.adb (Analyze_Pragma): Remove processing of pragma Max_Entry_Queue_Depth. (Sig_Flags): Remove entry for Pragma_Max_Entry_Queue_Depth. * sem_util.adb (Get_Max_Queue_Length): Remove handling of pragma Max_Entry_Queue_Depth. (Has_Max_Queue_Length): Likewise. * snames.ads-tmpl (Name_Max_Entry_Queue_Depth): Move back from pragmas section to others section. (Pragma_Id): Remove Pragma_Max_Entry_Queue_Depth. --- gcc/ada/aspects.ads | 6 ------ gcc/ada/exp_ch9.adb | 3 +-- gcc/ada/par-prag.adb | 1 - gcc/ada/sem_ch13.adb | 15 --------------- gcc/ada/sem_prag.adb | 13 +------------ gcc/ada/sem_prag.ads | 1 - gcc/ada/sem_util.adb | 11 +++-------- gcc/ada/snames.ads-tmpl | 3 +-- 8 files changed, 6 insertions(+), 47 deletions(-) diff --git a/gcc/ada/aspects.ads b/gcc/ada/aspects.ads index 202d42193d138..140fb7c8fe12a 100644 --- a/gcc/ada/aspects.ads +++ b/gcc/ada/aspects.ads @@ -114,7 +114,6 @@ package Aspects is Aspect_Linker_Section, -- GNAT Aspect_Local_Restrictions, -- GNAT Aspect_Machine_Radix, - Aspect_Max_Entry_Queue_Depth, -- GNAT Aspect_Max_Entry_Queue_Length, Aspect_Max_Queue_Length, -- GNAT Aspect_Object_Size, @@ -304,7 +303,6 @@ package Aspects is Aspect_Linker_Section => True, Aspect_Local_Restrictions => True, Aspect_Lock_Free => True, - Aspect_Max_Entry_Queue_Depth => True, Aspect_Max_Queue_Length => True, Aspect_No_Caching => True, Aspect_No_Elaboration_Code_All => True, @@ -450,7 +448,6 @@ package Aspects is Aspect_Linker_Section => Expression, Aspect_Local_Restrictions => Expression, Aspect_Machine_Radix => Expression, - Aspect_Max_Entry_Queue_Depth => Expression, Aspect_Max_Entry_Queue_Length => Expression, Aspect_Max_Queue_Length => Expression, Aspect_Object_Size => Expression, @@ -549,7 +546,6 @@ package Aspects is Aspect_Linker_Section => True, Aspect_Local_Restrictions => False, Aspect_Machine_Radix => True, - Aspect_Max_Entry_Queue_Depth => False, Aspect_Max_Entry_Queue_Length => False, Aspect_Max_Queue_Length => False, Aspect_Object_Size => True, @@ -732,7 +728,6 @@ package Aspects is Aspect_Lock_Free => Name_Lock_Free, Aspect_Local_Restrictions => Name_Local_Restrictions, Aspect_Machine_Radix => Name_Machine_Radix, - Aspect_Max_Entry_Queue_Depth => Name_Max_Entry_Queue_Depth, Aspect_Max_Entry_Queue_Length => Name_Max_Entry_Queue_Length, Aspect_Max_Queue_Length => Name_Max_Queue_Length, Aspect_No_Caching => Name_No_Caching, @@ -1046,7 +1041,6 @@ package Aspects is Aspect_Initial_Condition => Never_Delay, Aspect_Local_Restrictions => Never_Delay, Aspect_Initializes => Never_Delay, - Aspect_Max_Entry_Queue_Depth => Never_Delay, Aspect_Max_Entry_Queue_Length => Never_Delay, Aspect_Max_Queue_Length => Never_Delay, Aspect_No_Caching => Never_Delay, diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 890bd038c5b95..a8c70598fa581 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -9376,8 +9376,7 @@ package body Exp_Ch9 is Need_Array : Boolean := False; begin - -- First check if there is any Max_Queue_Length, - -- Max_Entry_Queue_Length or Max_Entry_Queue_Depth pragma. + -- First check if there is any Max_[Entry_]Queue_Length pragma Item := First_Entity (Prot_Typ); while Present (Item) loop diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 4d10a6e060aac..04eed22031a1d 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -1484,7 +1484,6 @@ begin | Pragma_Machine_Attribute | Pragma_Main | Pragma_Main_Storage - | Pragma_Max_Entry_Queue_Depth | Pragma_Max_Entry_Queue_Length | Pragma_Max_Queue_Length | Pragma_Memory_Size diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index a35b67eddc82a..f2f1b0cb85389 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -1449,7 +1449,6 @@ package body Sem_Ch13 is -- Global -- Initial_Condition -- Initializes - -- Max_Entry_Queue_Depth -- Max_Entry_Queue_Length -- Max_Queue_Length -- No_Caching @@ -3759,19 +3758,6 @@ package body Sem_Ch13 is goto Continue; end Initializes; - -- Max_Entry_Queue_Depth - - when Aspect_Max_Entry_Queue_Depth => - Aitem := Make_Aitem_Pragma - (Pragma_Argument_Associations => New_List ( - Make_Pragma_Argument_Association (Loc, - Expression => Relocate_Node (Expr))), - Pragma_Name => Name_Max_Entry_Queue_Depth); - - Decorate (Aspect, Aitem); - Insert_Pragma (Aitem); - goto Continue; - -- Max_Entry_Queue_Length when Aspect_Max_Entry_Queue_Length => @@ -11551,7 +11537,6 @@ package body Sem_Ch13 is | Aspect_Implicit_Dereference | Aspect_Initial_Condition | Aspect_Initializes - | Aspect_Max_Entry_Queue_Depth | Aspect_Max_Entry_Queue_Length | Aspect_Max_Queue_Length | Aspect_Obsolescent diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index d3b29089d772f..772bf1b1abb9c 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -20464,11 +20464,7 @@ package body Sem_Prag is -- pragma Max_Entry_Queue_Length (static_integer_EXPRESSION); - -- This processing is shared by Pragma_Max_Entry_Queue_Depth and - -- Pragma_Max_Queue_Length. - when Pragma_Max_Entry_Queue_Length - | Pragma_Max_Entry_Queue_Depth | Pragma_Max_Queue_Length => Max_Entry_Queue_Length : declare @@ -20478,9 +20474,7 @@ package body Sem_Prag is Val : Uint; begin - if Prag_Id = Pragma_Max_Entry_Queue_Depth - or else Prag_Id = Pragma_Max_Queue_Length - then + if Prag_Id = Pragma_Max_Queue_Length then GNAT_Pragma; end if; @@ -20516,10 +20510,6 @@ package body Sem_Prag is and then Prag_Id /= Pragma_Max_Entry_Queue_Length) or else - (Has_Rep_Pragma (Entry_Id, Name_Max_Entry_Queue_Depth) - and then - Prag_Id /= Pragma_Max_Entry_Queue_Depth) - or else (Has_Rep_Pragma (Entry_Id, Name_Max_Queue_Length) and then Prag_Id /= Pragma_Max_Queue_Length) @@ -32766,7 +32756,6 @@ package body Sem_Prag is Pragma_Machine_Attribute => -1, Pragma_Main => -1, Pragma_Main_Storage => -1, - Pragma_Max_Entry_Queue_Depth => 0, Pragma_Max_Entry_Queue_Length => 0, Pragma_Max_Queue_Length => 0, Pragma_Memory_Size => 0, diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads index 42c38d8e1260c..59220ea890c2b 100644 --- a/gcc/ada/sem_prag.ads +++ b/gcc/ada/sem_prag.ads @@ -467,7 +467,6 @@ package Sem_Prag is -- Extensions_Visible -- Global -- Initializes - -- Max_Entry_Queue_Depth -- Max_Entry_Queue_Length -- Max_Queue_Length -- Post diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 8479e8c4661c0..7f5d70245dd9a 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -10709,8 +10709,6 @@ package body Sem_Util is function Get_Max_Queue_Length (Id : Entity_Id) return Uint is pragma Assert (Is_Entry (Id)); PMQL : constant Entity_Id := Get_Pragma (Id, Pragma_Max_Queue_Length); - PMEQD : constant Entity_Id := - Get_Pragma (Id, Pragma_Max_Entry_Queue_Depth); PMEQL : constant Entity_Id := Get_Pragma (Id, Pragma_Max_Entry_Queue_Length); Max : Uint; @@ -10725,9 +10723,6 @@ package body Sem_Util is if Present (PMQL) then Max := Expr_Value (Expression (First (Pragma_Argument_Associations (PMQL)))); - elsif Present (PMEQD) then - Max := Expr_Value - (Expression (First (Pragma_Argument_Associations (PMEQD)))); elsif Present (PMEQL) then Max := Expr_Value (Expression (First (Pragma_Argument_Associations (PMEQL)))); @@ -12224,9 +12219,9 @@ package body Sem_Util is return Ekind (Id) = E_Entry and then - (Present (Get_Pragma (Id, Pragma_Max_Queue_Length)) or else - Present (Get_Pragma (Id, Pragma_Max_Entry_Queue_Depth)) or else - Present (Get_Pragma (Id, Pragma_Max_Entry_Queue_Length))); + (Present (Get_Pragma (Id, Pragma_Max_Queue_Length)) + or else + Present (Get_Pragma (Id, Pragma_Max_Entry_Queue_Length))); end Has_Max_Queue_Length; --------------------------------- diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index d2f724f86cabd..ade933e0bbc7e 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -613,7 +613,6 @@ package Snames is Name_Machine_Attribute : constant Name_Id := N + $; -- GNAT Name_Main : constant Name_Id := N + $; -- GNAT Name_Main_Storage : constant Name_Id := N + $; -- GNAT - Name_Max_Entry_Queue_Depth : constant Name_Id := N + $; -- GNAT Name_Max_Entry_Queue_Length : constant Name_Id := N + $; -- Ada 12 Name_Max_Queue_Length : constant Name_Id := N + $; -- GNAT Name_Memory_Size : constant Name_Id := N + $; -- Ada 83 @@ -829,6 +828,7 @@ package Snames is Name_Link_Name : constant Name_Id := N + $; Name_Low_Order_First : constant Name_Id := N + $; Name_Lowercase : constant Name_Id := N + $; + Name_Max_Entry_Queue_Depth : constant Name_Id := N + $; Name_Max_Size : constant Name_Id := N + $; Name_Mechanism : constant Name_Id := N + $; Name_Message : constant Name_Id := N + $; @@ -1900,7 +1900,6 @@ package Snames is Pragma_Machine_Attribute, Pragma_Main, Pragma_Main_Storage, - Pragma_Max_Entry_Queue_Depth, Pragma_Max_Entry_Queue_Length, Pragma_Max_Queue_Length, Pragma_Memory_Size, From 42305c7a3acb29b7bedef4d90dbbe032a5f985c5 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Wed, 15 May 2024 10:58:04 +0200 Subject: [PATCH 037/114] ada: Fix style in freezing code Code cleanup; semantics is unaffected. gcc/ada/ * freeze.adb (Find_Aspect_No_Parts): Tune whitespace. * sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): Fix style. --- gcc/ada/freeze.adb | 8 +++----- gcc/ada/sem_ch13.adb | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 452e11fc747e4..2fcc2ce02e71a 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -3201,9 +3201,7 @@ package body Freeze is -- Search through aspects present on the private type while Present (Curr_Aspect_Spec) loop - if Get_Aspect_Id (Curr_Aspect_Spec) - = Aspect_No_Parts - then + if Get_Aspect_Id (Curr_Aspect_Spec) = Aspect_No_Parts then Aspect_Spec := Curr_Aspect_Spec; exit; end if; @@ -8906,8 +8904,8 @@ package body Freeze is -- Now we have the right place to do the freezing. First, a special -- adjustment, if we are in spec-expression analysis mode, these freeze -- actions must not be thrown away (normally all inserted actions are - -- thrown away in this mode. However, the freeze actions are from static - -- expressions and one of the important reasons we are doing this + -- thrown away in this mode). However, the freeze actions are from + -- static expressions and one of the important reasons we are doing this -- special analysis is to get these freeze actions. Therefore we turn -- off the In_Spec_Expression mode to propagate these freeze actions. -- This also means they get properly analyzed and expanded. diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index f2f1b0cb85389..f65217b0b9088 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -11003,10 +11003,10 @@ package body Sem_Ch13 is -- Expression to be analyzed at end of declarations Freeze_Expr : constant Node_Id := Expression (ASN); - -- Expression from call to Check_Aspect_At_Freeze_Point. + -- Expression from call to Check_Aspect_At_Freeze_Point T : constant Entity_Id := - (if Present (Freeze_Expr) and A_Id /= Aspect_Stable_Properties + (if Present (Freeze_Expr) and then A_Id /= Aspect_Stable_Properties then Etype (Original_Node (Freeze_Expr)) else Empty); -- Type required for preanalyze call. We use the original expression to @@ -11073,7 +11073,7 @@ package body Sem_Ch13 is if In_Instance then return; - -- The enclosing scope may have been rewritten during expansion (.e.g. a + -- The enclosing scope may have been rewritten during expansion (e.g. a -- task body is rewritten as a procedure) after this conformance check -- has been performed, so do not perform it again (it may not easily be -- done if full visibility of local entities is not available). From 09ed91df30102e17ac5c59bab314b8b37606c710 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Wed, 15 May 2024 10:58:33 +0200 Subject: [PATCH 038/114] ada: Remove redundant conditions from freezing code Code cleanup; behavior is unaffected. gcc/ada/ * freeze.adb (Check_Current_Instance): This routine is only called with parameter E being a type entity, so there is no need to check for types just before the equality with E. * sem_ch13.adb (Analyze_Aspect_Specifications): Regroup condition to avoid unnecessary evaluation. (Check_Aspect_At_End_Of_Declarations): If In_Instance is true, then the routine exits early. --- gcc/ada/freeze.adb | 1 - gcc/ada/sem_ch13.adb | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 2fcc2ce02e71a..2a0a59f5b0303 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -3086,7 +3086,6 @@ package body Freeze is when N_Attribute_Reference => if Attribute_Name (N) in Name_Access | Name_Unchecked_Access and then Is_Entity_Name (Prefix (N)) - and then Is_Type (Entity (Prefix (N))) and then Entity (Prefix (N)) = E then if Ada_Version < Ada_2012 then diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index f65217b0b9088..d81b741231302 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -4086,12 +4086,12 @@ package body Sem_Ch13 is Error_Msg_N ("aspect% cannot apply to subtype", Id); goto Continue; - elsif A_Id = Aspect_Default_Value - and then not Is_Scalar_Type (E) - then - Error_Msg_N - ("aspect% can only be applied to scalar type", Id); - goto Continue; + elsif A_Id = Aspect_Default_Value then + if not Is_Scalar_Type (E) then + Error_Msg_N + ("aspect% can only be applied to scalar type", Id); + goto Continue; + end if; elsif A_Id = Aspect_Default_Component_Value then if not Is_Array_Type (E) then @@ -11118,7 +11118,7 @@ package body Sem_Ch13 is -- If the end of declarations comes before any other freeze point, -- the Freeze_Expr is not analyzed: no check needed. - if Analyzed (Freeze_Expr) and then not In_Instance then + if Analyzed (Freeze_Expr) then Check_Overloaded_Name; else Err := False; From 4f6ee98c27cf0219779a2ccd6ef5d0e67b75580f Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 15 May 2024 23:56:44 +0200 Subject: [PATCH 039/114] ada: Streamline propagation of controlled flags on types The front-end maintains a set of 4 flags on (base) types that are used to parameterize the implementation of controlled operations, and these flags need to be propagated through composition and derivation. This is done on a per-flag basis in the current implementation with a few loopholes. This introduces a Propagate_Controlled_Flags routine to that effect, which is modeled on the existing Propagate_Concurrent_Flags routine, and is used in most cases to do the propagation. This also removes the handling of the Finalize_Storage_Only flag from Inherit_Aspects_At_Freeze_Point, since the associated aspect does not exist (only the pragma does). gcc/ada/ * freeze.adb (Freeze_Array_Type): Call Propagate_Controlled_Flags to propagate the controlled flags from the component to the array. (Freeze_Record_Type): Propagate the Finalize_Storage_Only flag from the components to the record. * sem_ch3.adb (Analyze_Private_Extension_Declaration): Do not call Propagate_Concurrent_Flags here but... (Array_Type_Declaration): Tidy and call Propagate_Controlled_Flags to propagate the controlled flags from the component to the array. (Build_Derived_Private_Type): Do not propagate the controlled flags manually here but... (Build_Derived_Record_Type): ...call Propagate_Controlled_Flags to propagate the controlled flags from parent to derived type. (Build_Derived_Type): Likewise. (Copy_Array_Base_Type_Attributes): Call Propagate_Controlled_Flags to copy the controlled flags. (Record_Type_Definition): Streamline the propagation of the Finalize_Storage_Only flag from the components to the record. * sem_ch7.adb (Preserve_Full_Attributes): Use Full_Base and call Propagate_Controlled_Flags to copy the controlled flags. * sem_ch9.adb (Analyze_Protected_Definition): Use canonical idiom to compute Has_Controlled_Component. (Analyze_Protected_Type_Declaration): Minor tweak. * sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): Do not deal with Finalize_Storage_Only here. * sem_util.ads (Propagate_Controlled_Flags): New declaration. * sem_util.adb (Propagate_Controlled_Flags): New procedure. --- gcc/ada/freeze.adb | 22 ++++++--- gcc/ada/sem_ch13.adb | 7 --- gcc/ada/sem_ch3.adb | 108 +++++++++++++------------------------------ gcc/ada/sem_ch7.adb | 11 ++--- gcc/ada/sem_ch9.adb | 7 +-- gcc/ada/sem_util.adb | 48 +++++++++++++++++++ gcc/ada/sem_util.ads | 11 +++++ 7 files changed, 113 insertions(+), 101 deletions(-) diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 2a0a59f5b0303..d0dd1de087d83 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -3661,12 +3661,7 @@ package body Freeze is -- Propagate flags from component type Propagate_Concurrent_Flags (Arr, Ctyp); - - if Is_Controlled (Ctyp) - or else Has_Controlled_Component (Ctyp) - then - Set_Has_Controlled_Component (Arr); - end if; + Propagate_Controlled_Flags (Arr, Ctyp, Comp => True); if Has_Unchecked_Union (Ctyp) then Set_Has_Unchecked_Union (Arr); @@ -5083,6 +5078,9 @@ package body Freeze is -- Accumulates total Esize values of all elementary components. Used -- for processing of Implicit_Packing. + Final_Storage_Only : Boolean := True; + -- Used to compute the Finalize_Storage_Only flag + Placed_Component : Boolean := False; -- Set True if we find at least one component with a component -- clause (used to warn about useless Bit_Order pragmas, and also @@ -5708,6 +5706,9 @@ package body Freeze is (Corresponding_Record_Type (Etype (Comp))))) then Set_Has_Controlled_Component (Rec); + Final_Storage_Only := + Final_Storage_Only + and then Finalize_Storage_Only (Etype (Comp)); end if; if Has_Unchecked_Union (Etype (Comp)) then @@ -5739,6 +5740,15 @@ package body Freeze is Next_Component (Comp); end loop; + + -- For a type that is not directly controlled but has controlled + -- components, Finalize_Storage_Only is set if all the controlled + -- components are Finalize_Storage_Only. + + if not Is_Controlled (Rec) and then Has_Controlled_Component (Rec) + then + Set_Finalize_Storage_Only (Rec, Final_Storage_Only); + end if; end if; -- Enforce the restriction that access attributes with a current diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index d81b741231302..4012932a6f21f 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -14097,13 +14097,6 @@ package body Sem_Ch13 is Set_Has_Volatile_Components (Imp_Bas_Typ); end if; - -- Finalize_Storage_Only - - Rep := Get_Inherited_Rep_Item (Typ, Name_Finalize_Storage_Only); - if Present (Rep) then - Set_Finalize_Storage_Only (Bas_Typ); - end if; - -- Universal_Aliasing Rep := Get_Inherited_Rep_Item (Typ, Name_Universal_Aliasing); diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 76e5cdcbf5d02..0e951c1b6b876 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -5485,10 +5485,7 @@ package body Sem_Ch3 is Reinit_Size_Align (T); Set_Default_SSO (T); Set_No_Reordering (T, No_Component_Reordering); - - Set_Etype (T, Parent_Base); - Propagate_Concurrent_Flags (T, Parent_Base); - + Set_Etype (T, Parent_Base); Set_Convention (T, Convention (Parent_Type)); Set_First_Rep_Item (T, First_Rep_Item (Parent_Type)); Set_Is_First_Subtype (T); @@ -6567,14 +6564,16 @@ package body Sem_Ch3 is end if; if Nkind (Def) = N_Constrained_Array_Definition then + Index := First (Discrete_Subtype_Definitions (Def)); + -- Establish Implicit_Base as unconstrained base type Implicit_Base := Create_Itype (E_Array_Type, P, Related_Id, 'B'); Set_Etype (Implicit_Base, Implicit_Base); Set_Scope (Implicit_Base, Current_Scope); + Set_First_Index (Implicit_Base, Index); Set_Has_Delayed_Freeze (Implicit_Base); - Set_Default_SSO (Implicit_Base); -- The constrained array type is a subtype of the unconstrained one @@ -6582,27 +6581,9 @@ package body Sem_Ch3 is Reinit_Size_Align (T); Set_Etype (T, Implicit_Base); Set_Scope (T, Current_Scope); - Set_Is_Constrained (T); - Set_First_Index (T, - First (Discrete_Subtype_Definitions (Def))); + Set_First_Index (T, Index); Set_Has_Delayed_Freeze (T); - - -- Complete setup of implicit base type - - pragma Assert (not Known_Component_Size (Implicit_Base)); - Set_Component_Type (Implicit_Base, Element_Type); - Set_Finalize_Storage_Only - (Implicit_Base, - Finalize_Storage_Only (Element_Type)); - Set_First_Index (Implicit_Base, First_Index (T)); - Set_Has_Controlled_Component - (Implicit_Base, - Has_Controlled_Component (Element_Type) - or else Is_Controlled (Element_Type)); - Set_Packed_Array_Impl_Type - (Implicit_Base, Empty); - - Propagate_Concurrent_Flags (Implicit_Base, Element_Type); + Set_Is_Constrained (T); -- Unconstrained array case @@ -6611,26 +6592,15 @@ package body Sem_Ch3 is Reinit_Size_Align (T); Set_Etype (T, T); Set_Scope (T, Current_Scope); - pragma Assert (not Known_Component_Size (T)); - Set_Is_Constrained (T, False); + Set_First_Index (T, First (Subtype_Marks (Def))); + Set_Has_Delayed_Freeze (T); Set_Is_Fixed_Lower_Bound_Array_Subtype (T, Has_FLB_Index); - Set_First_Index (T, First (Subtype_Marks (Def))); - Set_Has_Delayed_Freeze (T, True); - Propagate_Concurrent_Flags (T, Element_Type); - Set_Has_Controlled_Component (T, Has_Controlled_Component - (Element_Type) - or else - Is_Controlled (Element_Type)); - Set_Finalize_Storage_Only (T, Finalize_Storage_Only - (Element_Type)); - Set_Default_SSO (T); end if; -- Common attributes for both cases - Set_Component_Type (Base_Type (T), Element_Type); - Set_Packed_Array_Impl_Type (T, Empty); + Set_Component_Type (Etype (T), Element_Type); if Aliased_Present (Component_Definition (Def)) then Set_Has_Aliased_Components (Etype (T)); @@ -6641,6 +6611,13 @@ package body Sem_Ch3 is Set_Has_Independent_Components (Etype (T)); end if; + pragma Assert (not Known_Component_Size (Etype (T))); + + Propagate_Concurrent_Flags (Etype (T), Element_Type); + Propagate_Controlled_Flags (Etype (T), Element_Type, Comp => True); + + Set_Default_SSO (Etype (T)); + -- Ada 2005 (AI-231): Propagate the null-excluding attribute to the -- array type to ensure that objects of this type are initialized. @@ -8516,22 +8493,6 @@ package body Sem_Ch3 is Set_Stored_Constraint (Derived_Type, No_Elist); Set_Is_Constrained (Derived_Type, Is_Constrained (Parent_Type)); - Set_Is_Controlled_Active - (Derived_Type, Is_Controlled_Active (Parent_Type)); - - Set_Disable_Controlled - (Derived_Type, Disable_Controlled (Parent_Type)); - - Set_Has_Controlled_Component - (Derived_Type, Has_Controlled_Component (Parent_Type)); - - -- Direct controlled types do not inherit Finalize_Storage_Only flag - - if not Is_Controlled (Parent_Type) then - Set_Finalize_Storage_Only - (Base_Type (Derived_Type), Finalize_Storage_Only (Parent_Type)); - end if; - -- If this is not a completion, construct the implicit full view by -- deriving from the full view of the parent type. But if this is a -- completion, the derived private type being built is a full view @@ -9848,8 +9809,9 @@ package body Sem_Ch3 is -- Fields inherited from the Parent_Base - Set_Has_Controlled_Component - (Derived_Type, Has_Controlled_Component (Parent_Base)); + Propagate_Concurrent_Flags (Derived_Type, Parent_Base); + Propagate_Controlled_Flags (Derived_Type, Parent_Base, Deriv => True); + Set_Has_Non_Standard_Rep (Derived_Type, Has_Non_Standard_Rep (Parent_Base)); Set_Has_Primitive_Operations @@ -9914,9 +9876,6 @@ package body Sem_Ch3 is and then Scope (Scope (Scope (Derived_Type))) = Standard_Standard then Set_Is_Controlled_Active (Derived_Type); - else - Set_Is_Controlled_Active - (Derived_Type, Is_Controlled_Active (Parent_Base)); end if; -- Minor optimization: there is no need to generate the class-wide @@ -10194,17 +10153,15 @@ package body Sem_Ch3 is Set_Scope (Derived_Type, Current_Scope); Set_Etype (Derived_Type, Parent_Base); Mutate_Ekind (Derived_Type, Ekind (Parent_Base)); - Propagate_Concurrent_Flags (Derived_Type, Parent_Base); + + Propagate_Concurrent_Flags (Derived_Type, Parent_Base); + Propagate_Controlled_Flags (Derived_Type, Parent_Base, Deriv => True); Set_Size_Info (Derived_Type, Parent_Type); Copy_RM_Size (To => Derived_Type, From => Parent_Type); - Set_Is_Controlled_Active - (Derived_Type, Is_Controlled_Active (Parent_Type)); - - Set_Disable_Controlled (Derived_Type, Disable_Controlled (Parent_Type)); - Set_Is_Tagged_Type (Derived_Type, Is_Tagged_Type (Parent_Type)); - Set_Is_Volatile (Derived_Type, Is_Volatile (Parent_Type)); + Set_Is_Tagged_Type (Derived_Type, Is_Tagged_Type (Parent_Type)); + Set_Is_Volatile (Derived_Type, Is_Volatile (Parent_Type)); if Is_Tagged_Type (Derived_Type) then Set_No_Tagged_Streams_Pragma @@ -15272,9 +15229,9 @@ package body Sem_Ch3 is Set_Component_Alignment (T1, Component_Alignment (T2)); Set_Component_Type (T1, Component_Type (T2)); Set_Component_Size (T1, Component_Size (T2)); - Set_Has_Controlled_Component (T1, Has_Controlled_Component (T2)); Set_Has_Non_Standard_Rep (T1, Has_Non_Standard_Rep (T2)); Propagate_Concurrent_Flags (T1, T2); + Propagate_Controlled_Flags (T1, T2); Set_Is_Packed (T1, Is_Packed (T2)); Set_Has_Aliased_Components (T1, Has_Aliased_Components (T2)); Set_Has_Atomic_Components (T1, Has_Atomic_Components (T2)); @@ -22950,8 +22907,7 @@ package body Sem_Ch3 is procedure Record_Type_Definition (Def : Node_Id; Prev_T : Entity_Id) is Component : Entity_Id; - Ctrl_Components : Boolean := False; - Final_Storage_Only : Boolean; + Final_Storage_Only : Boolean := True; T : Entity_Id; begin @@ -22963,8 +22919,6 @@ package body Sem_Ch3 is Set_Is_Not_Self_Hidden (T); - Final_Storage_Only := not Is_Controlled (T); - -- Ada 2005: Check whether an explicit "limited" is present in a derived -- type declaration. @@ -23020,20 +22974,20 @@ package body Sem_Ch3 is or else (Chars (Component) /= Name_uParent and then Is_Controlled (Etype (Component)))) then - Set_Has_Controlled_Component (T, True); + Set_Has_Controlled_Component (T); Final_Storage_Only := Final_Storage_Only and then Finalize_Storage_Only (Etype (Component)); - Ctrl_Components := True; end if; Next_Entity (Component); end loop; - -- A Type is Finalize_Storage_Only only if all its controlled components - -- are also. + -- For a type that is not directly controlled but has controlled + -- components, Finalize_Storage_Only is set if all the controlled + -- components are Finalize_Storage_Only. - if Ctrl_Components then + if not Is_Controlled (T) and then Has_Controlled_Component (T) then Set_Finalize_Storage_Only (T, Final_Storage_Only); end if; diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb index 0f0fc90ad6b73..28031b5dbc27e 100644 --- a/gcc/ada/sem_ch7.adb +++ b/gcc/ada/sem_ch7.adb @@ -2919,6 +2919,7 @@ package body Sem_Ch7 is (Priv, Has_Pragma_Unreferenced_Objects (Full)); Set_Predicates_Ignored (Priv, Predicates_Ignored (Full)); + if Is_Unchecked_Union (Full) then Set_Is_Unchecked_Union (Base_Type (Priv)); end if; @@ -2928,14 +2929,8 @@ package body Sem_Ch7 is end if; if Priv_Is_Base_Type then - Set_Is_Controlled_Active - (Priv, Is_Controlled_Active (Full_Base)); - Set_Finalize_Storage_Only - (Priv, Finalize_Storage_Only (Full_Base)); - Set_Has_Controlled_Component - (Priv, Has_Controlled_Component (Full_Base)); - - Propagate_Concurrent_Flags (Priv, Base_Type (Full)); + Propagate_Concurrent_Flags (Priv, Full_Base); + Propagate_Controlled_Flags (Priv, Full_Base); end if; -- As explained in Freeze_Entity, private types are required to point diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index 5172b62f2fcff..391cbeb02a93b 100644 --- a/gcc/ada/sem_ch9.adb +++ b/gcc/ada/sem_ch9.adb @@ -2011,8 +2011,9 @@ package body Sem_Ch9 is else Propagate_Concurrent_Flags (Prot_Typ, Etype (Item_Id)); - if Chars (Item_Id) /= Name_uParent - and then Needs_Finalization (Etype (Item_Id)) + if Has_Controlled_Component (Etype (Item_Id)) + or else (Chars (Item_Id) /= Name_uParent + and then Is_Controlled (Etype (Item_Id))) then Set_Has_Controlled_Component (Prot_Typ); end if; @@ -2167,7 +2168,7 @@ package body Sem_Ch9 is or else Has_Interrupt_Handler (T) or else Has_Attach_Handler (T)) then - Set_Has_Controlled_Component (T, True); + Set_Has_Controlled_Component (T); end if; -- The Ekind of components is E_Void during analysis for historical diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 7f5d70245dd9a..8425359e052fb 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -26238,6 +26238,54 @@ package body Sem_Util is end if; end Propagate_Concurrent_Flags; + -------------------------------- + -- Propagate_Controlled_Flags -- + -------------------------------- + + procedure Propagate_Controlled_Flags + (Typ : Entity_Id; + From_Typ : Entity_Id; + Comp : Boolean := False; + Deriv : Boolean := False) + is + begin + -- It does not make sense to have both Comp and Deriv set True + + pragma Assert (not Comp or else not Deriv); + + -- This implementation only supports array types for the component case. + -- Disregard Is_Controlled_Active and Disable_Controlled in this case. + + if Comp then + pragma Assert (Is_Array_Type (Typ)); + + else + if Is_Controlled_Active (From_Typ) then + Set_Is_Controlled_Active (Typ); + end if; + + if Disable_Controlled (From_Typ) then + Set_Disable_Controlled (Typ); + end if; + end if; + + -- Direct controlled types do not inherit Finalize_Storage_Only + + if not (Deriv and then Is_Controlled (From_Typ)) then + if Finalize_Storage_Only (From_Typ) then + Set_Finalize_Storage_Only (Typ); + end if; + end if; + + -- Is_Controlled yields Has_Controlled_Component for component + + if Has_Controlled_Component (From_Typ) + or else (Comp and then Is_Controlled (From_Typ)) + then + Set_Has_Controlled_Component (Typ); + end if; + end Propagate_Controlled_Flags; + ------------------------------ -- Propagate_DIC_Attributes -- ------------------------------ diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index bda295f0a7f8d..7363ad96bd87a 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -2914,6 +2914,17 @@ package Sem_Util is -- by one of these flags. This procedure can only set flags for Typ, and -- never clear them. Comp_Typ is the type of a component or a parent. + procedure Propagate_Controlled_Flags + (Typ : Entity_Id; + From_Typ : Entity_Id; + Comp : Boolean := False; + Deriv : Boolean := False); + -- Set Disable_Controlled, Finalize_Storage_Only, Has_Controlled_Component, + -- and Is_Controlled_Active on Typ when the flags are set on From_Typ. If + -- Comp is True, From_Typ is the type of a component of Typ while, if Deriv + -- is True, From_Typ is the parent type of Typ. This procedure can only set + -- flags for Typ, and never clear them. + procedure Propagate_DIC_Attributes (Typ : Entity_Id; From_Typ : Entity_Id); From 7e057326a901155bccc0ae559191220144a4f6b9 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Thu, 16 May 2024 22:13:38 +0200 Subject: [PATCH 040/114] ada: Add documentation for Subprogram_Variant aspect and pragma For completeness, the GNAT Reference Manual should document aspects and pragmas that are specific to SPARK and described in the SPARK User's Guide. gcc/ada/ * doc/gnat_rm/implementation_defined_aspects.rst (Aspect Subprogram_Variant): Refer to SPARK User's Guide. * doc/gnat_rm/implementation_defined_pragmas.rst (Pragma Subprogram_Variant): Document syntax to satisfy the convention; refer to SPARK User's Guide for semantics. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate. --- .../implementation_defined_aspects.rst | 7 + .../implementation_defined_pragmas.rst | 30 + gcc/ada/gnat_rm.texi | 1354 +++++++++-------- gcc/ada/gnat_ugn.texi | 2 +- 4 files changed, 738 insertions(+), 655 deletions(-) diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst index ec09fe7f6c2e9..e19684c31b95c 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst @@ -620,6 +620,13 @@ This aspect is equivalent to :ref:`pragma SPARK_Mode` and may be specified for either or both of the specification and body of a subprogram or package. +Aspect Subprogram_Variant +========================= +.. index:: Subprogram_Variant + +For the syntax and semantics of this aspect, see the SPARK 2014 Reference +Manual, section 6.1.8. + Aspect Suppress_Debug_Info ========================== .. index:: Suppress_Debug_Info diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst index 0661670e04751..acfa729dd4c88 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst @@ -6347,6 +6347,36 @@ for the specified entity, as shown in the following example: pragma Style_Checks (Off, Arg); Rf2 : Integer := ARG; -- OK, no error +Pragma Subprogram_Variant +========================= +.. index:: Subprogram_Variant + +Syntax: + + +:: + + pragma Subprogram_Variant (SUBPROGRAM_VARIANT_LIST); + + SUBPROGRAM_VARIANT_LIST ::= + STRUCTURAL_SUBPROGRAM_VARIANT_ITEM + | NUMERIC_SUBPROGRAM_VARIANT_ITEMS + + NUMERIC_SUBPROGRAM_VARIANT_ITEMS ::= + NUMERIC_SUBPROGRAM_VARIANT_ITEM {, NUMERIC_SUBPROGRAM_VARIANT_ITEM} + + NUMERIC_SUBPROGRAM_VARIANT_ITEM ::= + CHANGE_DIRECTION => EXPRESSION + + STRUCTURAL_SUBPROGRAM_VARIANT_ITEM ::= + STRUCTURAL => EXPRESSION + + CHANGE_DIRECTION ::= Increases | Decreases + +The ``Subprogram_Variant`` pragma is intended to be an exact replacement for +the implementation-defined ``Subprogram_Variant`` aspect, and shares its +restrictions and semantics. + Pragma Subtitle =============== diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index e811ef2c02d20..0c15ad511fa4e 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -265,6 +265,7 @@ Implementation Defined Pragmas * Pragma Static_Elaboration_Desired:: * Pragma Stream_Convert:: * Pragma Style_Checks:: +* Pragma Subprogram_Variant:: * Pragma Subtitle:: * Pragma Suppress:: * Pragma Suppress_All:: @@ -356,6 +357,7 @@ Implementation Defined Aspects * Aspect Simple_Storage_Pool:: * Aspect Simple_Storage_Pool_Type:: * Aspect SPARK_Mode:: +* Aspect Subprogram_Variant:: * Aspect Suppress_Debug_Info:: * Aspect Suppress_Initialization:: * Aspect Test_Case:: @@ -1386,6 +1388,7 @@ consideration, the use of these pragmas should be minimized. * Pragma Static_Elaboration_Desired:: * Pragma Stream_Convert:: * Pragma Style_Checks:: +* Pragma Subprogram_Variant:: * Pragma Subtitle:: * Pragma Suppress:: * Pragma Suppress_All:: @@ -7836,7 +7839,7 @@ a derived type of a non-limited tagged type. If such a type is specified then the pragma is silently ignored, and the default implementation of the stream attributes is used instead. -@node Pragma Style_Checks,Pragma Subtitle,Pragma Stream_Convert,Implementation Defined Pragmas +@node Pragma Style_Checks,Pragma Subprogram_Variant,Pragma Stream_Convert,Implementation Defined Pragmas @anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{f6} @section Pragma Style_Checks @@ -7909,8 +7912,40 @@ pragma Style_Checks (Off, Arg); Rf2 : Integer := ARG; -- OK, no error @end example -@node Pragma Subtitle,Pragma Suppress,Pragma Style_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{f7} +@node Pragma Subprogram_Variant,Pragma Subtitle,Pragma Style_Checks,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas pragma-subprogram-variant}@anchor{f7} +@section Pragma Subprogram_Variant + + +@geindex Subprogram_Variant + +Syntax: + +@example +pragma Subprogram_Variant (SUBPROGRAM_VARIANT_LIST); + +SUBPROGRAM_VARIANT_LIST ::= + STRUCTURAL_SUBPROGRAM_VARIANT_ITEM +| NUMERIC_SUBPROGRAM_VARIANT_ITEMS + +NUMERIC_SUBPROGRAM_VARIANT_ITEMS ::= + NUMERIC_SUBPROGRAM_VARIANT_ITEM @{, NUMERIC_SUBPROGRAM_VARIANT_ITEM@} + +NUMERIC_SUBPROGRAM_VARIANT_ITEM ::= + CHANGE_DIRECTION => EXPRESSION + +STRUCTURAL_SUBPROGRAM_VARIANT_ITEM ::= + STRUCTURAL => EXPRESSION + +CHANGE_DIRECTION ::= Increases | Decreases +@end example + +The @code{Subprogram_Variant} pragma is intended to be an exact replacement for +the implementation-defined @code{Subprogram_Variant} aspect, and shares its +restrictions and semantics. + +@node Pragma Subtitle,Pragma Suppress,Pragma Subprogram_Variant,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{f8} @section Pragma Subtitle @@ -7924,7 +7959,7 @@ This pragma is recognized for compatibility with other Ada compilers but is ignored by GNAT. @node Pragma Suppress,Pragma Suppress_All,Pragma Subtitle,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{f8} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{f9} @section Pragma Suppress @@ -7997,7 +8032,7 @@ Of course, run-time checks are omitted whenever the compiler can prove that they will not fail, whether or not checks are suppressed. @node Pragma Suppress_All,Pragma Suppress_Debug_Info,Pragma Suppress,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{f9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{fa} @section Pragma Suppress_All @@ -8016,7 +8051,7 @@ The use of the standard Ada pragma @code{Suppress (All_Checks)} as a normal configuration pragma is the preferred usage in GNAT. @node Pragma Suppress_Debug_Info,Pragma Suppress_Exception_Locations,Pragma Suppress_All,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{fa}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{fb} +@anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{fb}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{fc} @section Pragma Suppress_Debug_Info @@ -8031,7 +8066,7 @@ for the specified entity. It is intended primarily for use in debugging the debugger, and navigating around debugger problems. @node Pragma Suppress_Exception_Locations,Pragma Suppress_Initialization,Pragma Suppress_Debug_Info,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{fc} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{fd} @section Pragma Suppress_Exception_Locations @@ -8054,7 +8089,7 @@ a partition, so it is fine to have some units within a partition compiled with this pragma and others compiled in normal mode without it. @node Pragma Suppress_Initialization,Pragma Task_Name,Pragma Suppress_Exception_Locations,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{fd}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{fe} +@anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{fe}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{ff} @section Pragma Suppress_Initialization @@ -8099,7 +8134,7 @@ is suppressed, just as though its subtype had been given in a pragma Suppress_Initialization, as described above. @node Pragma Task_Name,Pragma Task_Storage,Pragma Suppress_Initialization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{ff} +@anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{100} @section Pragma Task_Name @@ -8155,7 +8190,7 @@ end; @end example @node Pragma Task_Storage,Pragma Test_Case,Pragma Task_Name,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{100} +@anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{101} @section Pragma Task_Storage @@ -8175,7 +8210,7 @@ created, depending on the target. This pragma can appear anywhere a type. @node Pragma Test_Case,Pragma Thread_Local_Storage,Pragma Task_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{101}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{102} +@anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{102}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{103} @section Pragma Test_Case @@ -8231,7 +8266,7 @@ postcondition. Mode @code{Robustness} indicates that the precondition and postcondition of the subprogram should be ignored for this test case. @node Pragma Thread_Local_Storage,Pragma Time_Slice,Pragma Test_Case,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{103}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{104} +@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{104}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{105} @section Pragma Thread_Local_Storage @@ -8269,7 +8304,7 @@ If this pragma is used on a system where @code{TLS} is not supported, then an error message will be generated and the program will be rejected. @node Pragma Time_Slice,Pragma Title,Pragma Thread_Local_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{105} +@anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{106} @section Pragma Time_Slice @@ -8285,7 +8320,7 @@ It is ignored if it is used in a system that does not allow this control, or if it appears in other than the main program unit. @node Pragma Title,Pragma Type_Invariant,Pragma Time_Slice,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{106} +@anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{107} @section Pragma Title @@ -8310,7 +8345,7 @@ notation is used, and named and positional notation can be mixed following the normal rules for procedure calls in Ada. @node Pragma Type_Invariant,Pragma Type_Invariant_Class,Pragma Title,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{107} +@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{108} @section Pragma Type_Invariant @@ -8331,7 +8366,7 @@ controlled by the assertion identifier @code{Type_Invariant} rather than @code{Invariant}. @node Pragma Type_Invariant_Class,Pragma Unchecked_Union,Pragma Type_Invariant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{108}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{109} +@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{109}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{10a} @section Pragma Type_Invariant_Class @@ -8358,7 +8393,7 @@ policy that controls this pragma is @code{Type_Invariant'Class}, not @code{Type_Invariant_Class}. @node Pragma Unchecked_Union,Pragma Unevaluated_Use_Of_Old,Pragma Type_Invariant_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{10a} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{10b} @section Pragma Unchecked_Union @@ -8378,7 +8413,7 @@ version in all language modes (Ada 83, Ada 95, and Ada 2005). For full details, consult the Ada 2012 Reference Manual, section B.3.3. @node Pragma Unevaluated_Use_Of_Old,Pragma User_Aspect_Definition,Pragma Unchecked_Union,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{10b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{10c} @section Pragma Unevaluated_Use_Of_Old @@ -8433,7 +8468,7 @@ uses up to the end of the corresponding statement sequence or sequence of package declarations. @node Pragma User_Aspect_Definition,Pragma Unimplemented_Unit,Pragma Unevaluated_Use_Of_Old,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{10c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{10d} @section Pragma User_Aspect_Definition @@ -8465,7 +8500,7 @@ pragma. If multiple definitions are visible for some aspect at some point, then the definitions must agree. A predefined aspect cannot be redefined. @node Pragma Unimplemented_Unit,Pragma Universal_Aliasing,Pragma User_Aspect_Definition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{10d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{10e} @section Pragma Unimplemented_Unit @@ -8485,7 +8520,7 @@ The abort only happens if code is being generated. Thus you can use specs of unimplemented packages in syntax or semantic checking mode. @node Pragma Universal_Aliasing,Pragma Unmodified,Pragma Unimplemented_Unit,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10e}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{10f} +@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10f}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{110} @section Pragma Universal_Aliasing @@ -8503,7 +8538,7 @@ they need to be suppressed, see the section on @code{Optimization and Strict Aliasing} in the @cite{GNAT User’s Guide}. @node Pragma Unmodified,Pragma Unreferenced,Pragma Universal_Aliasing,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{110}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{111} +@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{111}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{112} @section Pragma Unmodified @@ -8537,7 +8572,7 @@ Thus it is never necessary to use @code{pragma Unmodified} for such variables, though it is harmless to do so. @node Pragma Unreferenced,Pragma Unreferenced_Objects,Pragma Unmodified,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{112}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{113} +@anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{113}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{114} @section Pragma Unreferenced @@ -8599,7 +8634,7 @@ Thus it is never necessary to use @code{pragma Unreferenced} for such variables, though it is harmless to do so. @node Pragma Unreferenced_Objects,Pragma Unreserve_All_Interrupts,Pragma Unreferenced,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{114}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{115} +@anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{115}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{116} @section Pragma Unreferenced_Objects @@ -8624,7 +8659,7 @@ compiler will automatically suppress unwanted warnings about these variables not being referenced. @node Pragma Unreserve_All_Interrupts,Pragma Unsuppress,Pragma Unreferenced_Objects,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{116} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{117} @section Pragma Unreserve_All_Interrupts @@ -8660,7 +8695,7 @@ handled, see pragma @code{Interrupt_State}, which subsumes the functionality of the @code{Unreserve_All_Interrupts} pragma. @node Pragma Unsuppress,Pragma Unused,Pragma Unreserve_All_Interrupts,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{117} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{118} @section Pragma Unsuppress @@ -8696,7 +8731,7 @@ number of implementation-defined check names. See the description of pragma @code{Suppress} for full details. @node Pragma Unused,Pragma Use_VADS_Size,Pragma Unsuppress,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{118}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{119} +@anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{119}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{11a} @section Pragma Unused @@ -8730,7 +8765,7 @@ Thus it is never necessary to use @code{pragma Unused} for such variables, though it is harmless to do so. @node Pragma Use_VADS_Size,Pragma Validity_Checks,Pragma Unused,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{11a} +@anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{11b} @section Pragma Use_VADS_Size @@ -8754,7 +8789,7 @@ as implemented in the VADS compiler. See description of the VADS_Size attribute for further details. @node Pragma Validity_Checks,Pragma Volatile,Pragma Use_VADS_Size,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{11b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{11c} @section Pragma Validity_Checks @@ -8810,7 +8845,7 @@ A := C; -- C will be validity checked @end example @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11c}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{11d} +@anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11d}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{11e} @section Pragma Volatile @@ -8828,7 +8863,7 @@ implementation of pragma Volatile is upwards compatible with the implementation in DEC Ada 83. @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{11e}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{11f} +@anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{11f}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{120} @section Pragma Volatile_Full_Access @@ -8854,7 +8889,7 @@ is not to the whole object; the compiler is allowed (and generally will) access only part of the object in this case. @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{120}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{121} +@anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{121}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{122} @section Pragma Volatile_Function @@ -8868,7 +8903,7 @@ For the semantics of this pragma, see the entry for aspect @code{Volatile_Functi in the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{122} +@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{123} @section Pragma Warning_As_Error @@ -8908,7 +8943,7 @@ you can use multiple pragma Warning_As_Error. The above use of patterns to match the message applies only to warning messages generated by the front end. This pragma can also be applied to -warnings provided by the back end and mentioned in @ref{123,,Pragma Warnings}. +warnings provided by the back end and mentioned in @ref{124,,Pragma Warnings}. By using a single full `-Wxxx' switch in the pragma, such warnings can also be treated as errors. @@ -8958,7 +8993,7 @@ the tag is changed from “warning:” to “error:” and the string “[warning-as-error]” is appended to the end of the message. @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{124}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{123} +@anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{125}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{124} @section Pragma Warnings @@ -9114,7 +9149,7 @@ selectively for each tool, and as a consequence to detect useless pragma Warnings with switch @code{-gnatw.w}. @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{125} +@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{126} @section Pragma Weak_External @@ -9165,7 +9200,7 @@ end External_Module; @end example @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{126} +@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{127} @section Pragma Wide_Character_Encoding @@ -9196,7 +9231,7 @@ encoding within that file, and does not affect withed units, specs, or subunits. @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top -@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{127}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{128}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{129} +@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{128}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{129}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{12a} @chapter Implementation Defined Aspects @@ -9305,6 +9340,7 @@ or attribute definition clause. * Aspect Simple_Storage_Pool:: * Aspect Simple_Storage_Pool_Type:: * Aspect SPARK_Mode:: +* Aspect Subprogram_Variant:: * Aspect Suppress_Debug_Info:: * Aspect Suppress_Initialization:: * Aspect Test_Case:: @@ -9322,7 +9358,7 @@ or attribute definition clause. @end menu @node Aspect Abstract_State,Aspect Always_Terminates,,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{12a} +@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{12b} @section Aspect Abstract_State @@ -9331,7 +9367,7 @@ or attribute definition clause. This aspect is equivalent to @ref{1e,,pragma Abstract_State}. @node Aspect Always_Terminates,Aspect Annotate,Aspect Abstract_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{12b} +@anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{12c} @section Aspect Always_Terminates @@ -9340,7 +9376,7 @@ This aspect is equivalent to @ref{1e,,pragma Abstract_State}. This boolean aspect is equivalent to @ref{29,,pragma Always_Terminates}. @node Aspect Annotate,Aspect Async_Readers,Aspect Always_Terminates,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{12c} +@anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{12d} @section Aspect Annotate @@ -9367,7 +9403,7 @@ Equivalent to @code{pragma Annotate (ID, ID @{, ARG@}, Entity => Name);} @end table @node Aspect Async_Readers,Aspect Async_Writers,Aspect Annotate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{12d} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{12e} @section Aspect Async_Readers @@ -9376,7 +9412,7 @@ Equivalent to @code{pragma Annotate (ID, ID @{, ARG@}, Entity => Name);} This boolean aspect is equivalent to @ref{32,,pragma Async_Readers}. @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{12e} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{12f} @section Aspect Async_Writers @@ -9385,7 +9421,7 @@ This boolean aspect is equivalent to @ref{32,,pragma Async_Readers}. This boolean aspect is equivalent to @ref{34,,pragma Async_Writers}. @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{12f} +@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{130} @section Aspect Constant_After_Elaboration @@ -9394,7 +9430,7 @@ This boolean aspect is equivalent to @ref{34,,pragma Async_Writers}. This aspect is equivalent to @ref{44,,pragma Constant_After_Elaboration}. @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{130} +@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{131} @section Aspect Contract_Cases @@ -9405,7 +9441,7 @@ of clauses being enclosed in parentheses so that syntactically it is an aggregate. @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{131} +@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{132} @section Aspect Depends @@ -9414,7 +9450,7 @@ aggregate. This aspect is equivalent to @ref{56,,pragma Depends}. @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{132} +@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{133} @section Aspect Default_Initial_Condition @@ -9423,7 +9459,7 @@ This aspect is equivalent to @ref{56,,pragma Depends}. This aspect is equivalent to @ref{52,,pragma Default_Initial_Condition}. @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{133} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{134} @section Aspect Dimension @@ -9459,7 +9495,7 @@ Note that when the dimensioned type is an integer type, then any dimension value must be an integer literal. @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{134} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{135} @section Aspect Dimension_System @@ -9519,7 +9555,7 @@ See section ‘Performing Dimensionality Analysis in GNAT’ in the GNAT Users Guide for detailed examples of use of the dimension system. @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{135} +@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{136} @section Aspect Disable_Controlled @@ -9532,7 +9568,7 @@ where for example you might want a record to be controlled or not depending on whether some run-time check is enabled or suppressed. @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{136} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{137} @section Aspect Effective_Reads @@ -9541,7 +9577,7 @@ whether some run-time check is enabled or suppressed. This aspect is equivalent to @ref{5b,,pragma Effective_Reads}. @node Aspect Effective_Writes,Aspect Exceptional_Cases,Aspect Effective_Reads,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{137} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{138} @section Aspect Effective_Writes @@ -9550,7 +9586,7 @@ This aspect is equivalent to @ref{5b,,pragma Effective_Reads}. This aspect is equivalent to @ref{5d,,pragma Effective_Writes}. @node Aspect Exceptional_Cases,Aspect Extensions_Visible,Aspect Effective_Writes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{138} +@anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{139} @section Aspect Exceptional_Cases @@ -9565,7 +9601,7 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.9. @node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Exceptional_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{139} +@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{13a} @section Aspect Extensions_Visible @@ -9574,7 +9610,7 @@ Manual, section 6.1.9. This aspect is equivalent to @ref{6c,,pragma Extensions_Visible}. @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{13a} +@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{13b} @section Aspect Favor_Top_Level @@ -9583,7 +9619,7 @@ This aspect is equivalent to @ref{6c,,pragma Extensions_Visible}. This boolean aspect is equivalent to @ref{71,,pragma Favor_Top_Level}. @node Aspect Ghost,Aspect Ghost_Predicate,Aspect Favor_Top_Level,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{13b} +@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{13c} @section Aspect Ghost @@ -9592,7 +9628,7 @@ This boolean aspect is equivalent to @ref{71,,pragma Favor_Top_Level}. This aspect is equivalent to @ref{75,,pragma Ghost}. @node Aspect Ghost_Predicate,Aspect Global,Aspect Ghost,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{13c} +@anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{13d} @section Aspect Ghost_Predicate @@ -9605,7 +9641,7 @@ For the detailed semantics of this aspect, see the entry for subtype predicates in the SPARK Reference Manual, section 3.2.4. @node Aspect Global,Aspect Initial_Condition,Aspect Ghost_Predicate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{13d} +@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{13e} @section Aspect Global @@ -9614,7 +9650,7 @@ in the SPARK Reference Manual, section 3.2.4. This aspect is equivalent to @ref{77,,pragma Global}. @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{13e} +@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{13f} @section Aspect Initial_Condition @@ -9623,7 +9659,7 @@ This aspect is equivalent to @ref{77,,pragma Global}. This aspect is equivalent to @ref{84,,pragma Initial_Condition}. @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{13f} +@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{140} @section Aspect Initializes @@ -9632,7 +9668,7 @@ This aspect is equivalent to @ref{84,,pragma Initial_Condition}. This aspect is equivalent to @ref{87,,pragma Initializes}. @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{140} +@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{141} @section Aspect Inline_Always @@ -9641,7 +9677,7 @@ This aspect is equivalent to @ref{87,,pragma Initializes}. This boolean aspect is equivalent to @ref{89,,pragma Inline_Always}. @node Aspect Invariant,Aspect Invariant’Class,Aspect Inline_Always,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{141} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{142} @section Aspect Invariant @@ -9652,18 +9688,18 @@ synonym for the language defined aspect @code{Type_Invariant} except that it is separately controllable using pragma @code{Assertion_Policy}. @node Aspect Invariant’Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{142} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{143} @section Aspect Invariant’Class @geindex Invariant'Class -This aspect is equivalent to @ref{109,,pragma Type_Invariant_Class}. It is a +This aspect is equivalent to @ref{10a,,pragma Type_Invariant_Class}. It is a synonym for the language defined aspect @code{Type_Invariant'Class} except that it is separately controllable using pragma @code{Assertion_Policy}. @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant’Class,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{143} +@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{144} @section Aspect Iterable @@ -9747,7 +9783,7 @@ function Get_Element (Cont : Container; Position : Cursor) return Element_Type; This aspect is used in the GNAT-defined formal container packages. @node Aspect Linker_Section,Aspect Local_Restrictions,Aspect Iterable,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{144} +@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{145} @section Aspect Linker_Section @@ -9756,7 +9792,7 @@ This aspect is used in the GNAT-defined formal container packages. This aspect is equivalent to @ref{98,,pragma Linker_Section}. @node Aspect Local_Restrictions,Aspect Lock_Free,Aspect Linker_Section,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{145} +@anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{146} @section Aspect Local_Restrictions @@ -9810,7 +9846,7 @@ case of a declaration that occurs within nested packages that each have a Local_Restrictions specification). @node Aspect Lock_Free,Aspect Max_Queue_Length,Aspect Local_Restrictions,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{146} +@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{147} @section Aspect Lock_Free @@ -9819,7 +9855,7 @@ a Local_Restrictions specification). This boolean aspect is equivalent to @ref{9a,,pragma Lock_Free}. @node Aspect Max_Queue_Length,Aspect No_Caching,Aspect Lock_Free,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{147} +@anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{148} @section Aspect Max_Queue_Length @@ -9828,7 +9864,7 @@ This boolean aspect is equivalent to @ref{9a,,pragma Lock_Free}. This aspect is equivalent to @ref{a2,,pragma Max_Queue_Length}. @node Aspect No_Caching,Aspect No_Elaboration_Code_All,Aspect Max_Queue_Length,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{148} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{149} @section Aspect No_Caching @@ -9837,7 +9873,7 @@ This aspect is equivalent to @ref{a2,,pragma Max_Queue_Length}. This boolean aspect is equivalent to @ref{a5,,pragma No_Caching}. @node Aspect No_Elaboration_Code_All,Aspect No_Inline,Aspect No_Caching,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{149} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{14a} @section Aspect No_Elaboration_Code_All @@ -9847,7 +9883,7 @@ This aspect is equivalent to @ref{a8,,pragma No_Elaboration_Code_All} for a program unit. @node Aspect No_Inline,Aspect No_Tagged_Streams,Aspect No_Elaboration_Code_All,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{14a} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{14b} @section Aspect No_Inline @@ -9856,7 +9892,7 @@ for a program unit. This boolean aspect is equivalent to @ref{ab,,pragma No_Inline}. @node Aspect No_Tagged_Streams,Aspect No_Task_Parts,Aspect No_Inline,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{14b} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{14c} @section Aspect No_Tagged_Streams @@ -9867,7 +9903,7 @@ argument specifying a root tagged type (thus this aspect can only be applied to such a type). @node Aspect No_Task_Parts,Aspect Object_Size,Aspect No_Tagged_Streams,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{14c} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{14d} @section Aspect No_Task_Parts @@ -9883,16 +9919,16 @@ away certain tasking-related code that would otherwise be needed for T’Class, because descendants of T might contain tasks. @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Task_Parts,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{14d} +@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{14e} @section Aspect Object_Size @geindex Object_Size -This aspect is equivalent to @ref{14e,,attribute Object_Size}. +This aspect is equivalent to @ref{14f,,attribute Object_Size}. @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{14f} +@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{150} @section Aspect Obsolescent @@ -9903,7 +9939,7 @@ evaluation of this aspect happens at the point of occurrence, it is not delayed until the freeze point. @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{150} +@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{151} @section Aspect Part_Of @@ -9912,7 +9948,7 @@ delayed until the freeze point. This aspect is equivalent to @ref{b8,,pragma Part_Of}. @node Aspect Persistent_BSS,Aspect Predicate,Aspect Part_Of,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{151} +@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{152} @section Aspect Persistent_BSS @@ -9921,7 +9957,7 @@ This aspect is equivalent to @ref{b8,,pragma Part_Of}. This boolean aspect is equivalent to @ref{bc,,pragma Persistent_BSS}. @node Aspect Predicate,Aspect Pure_Function,Aspect Persistent_BSS,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{152} +@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{153} @section Aspect Predicate @@ -9935,7 +9971,7 @@ expression. It is also separately controllable using pragma @code{Assertion_Policy}. @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Predicate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{153} +@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{154} @section Aspect Pure_Function @@ -9944,7 +9980,7 @@ expression. It is also separately controllable using pragma This boolean aspect is equivalent to @ref{cf,,pragma Pure_Function}. @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{154} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{155} @section Aspect Refined_Depends @@ -9953,7 +9989,7 @@ This boolean aspect is equivalent to @ref{cf,,pragma Pure_Function}. This aspect is equivalent to @ref{d3,,pragma Refined_Depends}. @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{155} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{156} @section Aspect Refined_Global @@ -9962,7 +9998,7 @@ This aspect is equivalent to @ref{d3,,pragma Refined_Depends}. This aspect is equivalent to @ref{d5,,pragma Refined_Global}. @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{156} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{157} @section Aspect Refined_Post @@ -9971,7 +10007,7 @@ This aspect is equivalent to @ref{d5,,pragma Refined_Global}. This aspect is equivalent to @ref{d7,,pragma Refined_Post}. @node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{157} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{158} @section Aspect Refined_State @@ -9980,7 +10016,7 @@ This aspect is equivalent to @ref{d7,,pragma Refined_Post}. This aspect is equivalent to @ref{d9,,pragma Refined_State}. @node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{158} +@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{159} @section Aspect Relaxed_Initialization @@ -9990,7 +10026,7 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.10. @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{159} +@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{15a} @section Aspect Remote_Access_Type @@ -9999,16 +10035,16 @@ Manual, section 6.10. This aspect is equivalent to @ref{dc,,pragma Remote_Access_Type}. @node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{15a} +@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{15b} @section Aspect Scalar_Storage_Order @geindex Scalar_Storage_Order -This aspect is equivalent to a @ref{15b,,attribute Scalar_Storage_Order}. +This aspect is equivalent to a @ref{15c,,attribute Scalar_Storage_Order}. @node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{15c} +@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{15d} @section Aspect Secondary_Stack_Size @@ -10017,7 +10053,7 @@ This aspect is equivalent to a @ref{15b,,attribute Scalar_Storage_Order}. This aspect is equivalent to @ref{e2,,pragma Secondary_Stack_Size}. @node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{15d} +@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{15e} @section Aspect Shared @@ -10027,7 +10063,7 @@ This boolean aspect is equivalent to @ref{e5,,pragma Shared} and is thus a synonym for aspect @code{Atomic}. @node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{15e} +@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{15f} @section Aspect Side_Effects @@ -10036,7 +10072,7 @@ and is thus a synonym for aspect @code{Atomic}. This aspect is equivalent to @ref{e9,,pragma Side_Effects}. @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{15f} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{160} @section Aspect Simple_Storage_Pool @@ -10045,7 +10081,7 @@ This aspect is equivalent to @ref{e9,,pragma Side_Effects}. This aspect is equivalent to @ref{ec,,attribute Simple_Storage_Pool}. @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{160} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{161} @section Aspect Simple_Storage_Pool_Type @@ -10053,8 +10089,8 @@ This aspect is equivalent to @ref{ec,,attribute Simple_Storage_Pool}. This boolean aspect is equivalent to @ref{eb,,pragma Simple_Storage_Pool_Type}. -@node Aspect SPARK_Mode,Aspect Suppress_Debug_Info,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{161} +@node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{162} @section Aspect SPARK_Mode @@ -10064,84 +10100,94 @@ This aspect is equivalent to @ref{f3,,pragma SPARK_Mode} and may be specified for either or both of the specification and body of a subprogram or package. -@node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect SPARK_Mode,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{162} +@node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{163} +@section Aspect Subprogram_Variant + + +@geindex Subprogram_Variant + +For the syntax and semantics of this aspect, see the SPARK 2014 Reference +Manual, section 6.1.8. + +@node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{164} @section Aspect Suppress_Debug_Info @geindex Suppress_Debug_Info -This boolean aspect is equivalent to @ref{fb,,pragma Suppress_Debug_Info}. +This boolean aspect is equivalent to @ref{fc,,pragma Suppress_Debug_Info}. @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{163} +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{165} @section Aspect Suppress_Initialization @geindex Suppress_Initialization -This boolean aspect is equivalent to @ref{fe,,pragma Suppress_Initialization}. +This boolean aspect is equivalent to @ref{ff,,pragma Suppress_Initialization}. @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{164} +@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{166} @section Aspect Test_Case @geindex Test_Case -This aspect is equivalent to @ref{102,,pragma Test_Case}. +This aspect is equivalent to @ref{103,,pragma Test_Case}. @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{165} +@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{167} @section Aspect Thread_Local_Storage @geindex Thread_Local_Storage -This boolean aspect is equivalent to @ref{104,,pragma Thread_Local_Storage}. +This boolean aspect is equivalent to @ref{105,,pragma Thread_Local_Storage}. @node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{166} +@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{168} @section Aspect Universal_Aliasing @geindex Universal_Aliasing -This boolean aspect is equivalent to @ref{10f,,pragma Universal_Aliasing}. +This boolean aspect is equivalent to @ref{110,,pragma Universal_Aliasing}. @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{167} +@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{169} @section Aspect Unmodified @geindex Unmodified -This boolean aspect is equivalent to @ref{111,,pragma Unmodified}. +This boolean aspect is equivalent to @ref{112,,pragma Unmodified}. @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{168} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{16a} @section Aspect Unreferenced @geindex Unreferenced -This boolean aspect is equivalent to @ref{113,,pragma Unreferenced}. +This boolean aspect is equivalent to @ref{114,,pragma Unreferenced}. When using the @code{-gnat2022} switch, this aspect is also supported on formal parameters, which is in particular the only form possible for expression functions. @node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{169} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{16b} @section Aspect Unreferenced_Objects @geindex Unreferenced_Objects -This boolean aspect is equivalent to @ref{115,,pragma Unreferenced_Objects}. +This boolean aspect is equivalent to @ref{116,,pragma Unreferenced_Objects}. @node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{16a} +@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{16c} @section Aspect User_Aspect @@ -10154,45 +10200,45 @@ replicating the set of aspect specifications associated with the named pragma-defined aspect. @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{16b} +@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{16d} @section Aspect Value_Size @geindex Value_Size -This aspect is equivalent to @ref{16c,,attribute Value_Size}. +This aspect is equivalent to @ref{16e,,attribute Value_Size}. @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{16d} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{16f} @section Aspect Volatile_Full_Access @geindex Volatile_Full_Access -This boolean aspect is equivalent to @ref{11f,,pragma Volatile_Full_Access}. +This boolean aspect is equivalent to @ref{120,,pragma Volatile_Full_Access}. @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{16e} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{170} @section Aspect Volatile_Function @geindex Volatile_Function -This boolean aspect is equivalent to @ref{121,,pragma Volatile_Function}. +This boolean aspect is equivalent to @ref{122,,pragma Volatile_Function}. @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{16f} +@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{171} @section Aspect Warnings @geindex Warnings -This aspect is equivalent to the two argument form of @ref{123,,pragma Warnings}, +This aspect is equivalent to the two argument form of @ref{124,,pragma Warnings}, where the first argument is @code{ON} or @code{OFF} and the second argument is the entity. @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top -@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{170}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{171}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8} +@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{172}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{173}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8} @chapter Implementation Defined Attributes @@ -10298,7 +10344,7 @@ consideration, you should minimize the use of these attributes. @end menu @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{172} +@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{174} @section Attribute Abort_Signal @@ -10312,7 +10358,7 @@ completely outside the normal semantics of Ada, for a user program to intercept the abort exception). @node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{173} +@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{175} @section Attribute Address_Size @@ -10328,7 +10374,7 @@ reference to System.Address’Size is nonstatic because Address is a private type. @node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{174} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{176} @section Attribute Asm_Input @@ -10342,10 +10388,10 @@ to be a static expression, and is the constraint for the parameter, value to be used as the input argument. The possible values for the constant are the same as those used in the RTL, and are dependent on the configuration file used to built the GCC back end. -@ref{175,,Machine Code Insertions} +@ref{177,,Machine Code Insertions} @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{176} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{178} @section Attribute Asm_Output @@ -10361,10 +10407,10 @@ result. The possible values for constraint are the same as those used in the RTL, and are dependent on the configuration file used to build the GCC back end. If there are no output operands, then this argument may either be omitted, or explicitly given as @code{No_Output_Operands}. -@ref{175,,Machine Code Insertions} +@ref{177,,Machine Code Insertions} @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{177} +@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{179} @section Attribute Atomic_Always_Lock_Free @@ -10375,7 +10421,7 @@ result indicates whether atomic operations are supported by the target for the given type. @node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{178} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{17a} @section Attribute Bit @@ -10406,7 +10452,7 @@ This attribute is designed to be compatible with the DEC Ada 83 definition and implementation of the @code{Bit} attribute. @node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{179} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{17b} @section Attribute Bit_Position @@ -10421,7 +10467,7 @@ type `universal_integer'. The value depends only on the field the containing record @code{R}. @node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{17a} +@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{17c} @section Attribute Code_Address @@ -10464,7 +10510,7 @@ the same value as is returned by the corresponding @code{'Address} attribute. @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{17b} +@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{17d} @section Attribute Compiler_Version @@ -10475,7 +10521,7 @@ prefix) yields a static string identifying the version of the compiler being used to compile the unit containing the attribute reference. @node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{17c} +@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{17e} @section Attribute Constrained @@ -10490,7 +10536,7 @@ record type without discriminants is always @code{True}. This usage is compatible with older Ada compilers, including notably DEC Ada. @node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{17d} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{17f} @section Attribute Default_Bit_Order @@ -10507,7 +10553,7 @@ as a @code{Pos} value (0 for @code{High_Order_First}, 1 for @code{Default_Bit_Order} in package @code{System}. @node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{17e} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{180} @section Attribute Default_Scalar_Storage_Order @@ -10524,7 +10570,7 @@ equal to @code{Default_Bit_Order} if unspecified) as a @code{System.Bit_Order} value. This is a static attribute. @node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{17f} +@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{181} @section Attribute Deref @@ -10537,7 +10583,7 @@ a named access-to-@cite{typ} type, except that it yields a variable, so it can b used on the left side of an assignment. @node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{180} +@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{182} @section Attribute Descriptor_Size @@ -10566,7 +10612,7 @@ since @code{Positive} has an alignment of 4, the size of the descriptor is which yields a size of 32 bits, i.e. including 16 bits of padding. @node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{181} +@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{183} @section Attribute Elaborated @@ -10581,7 +10627,7 @@ units has been completed. An exception is for units which need no elaboration, the value is always False for such units. @node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{182} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{184} @section Attribute Elab_Body @@ -10597,7 +10643,7 @@ e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{183} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{185} @section Attribute Elab_Spec @@ -10613,7 +10659,7 @@ Ada code, e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{184} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{186} @section Attribute Elab_Subp_Body @@ -10627,7 +10673,7 @@ elaboration procedure by the binder in CodePeer mode only and is unrecognized otherwise. @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{185} +@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{187} @section Attribute Emax @@ -10640,7 +10686,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{186} +@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{188} @section Attribute Enabled @@ -10664,7 +10710,7 @@ a @code{pragma Suppress} or @code{pragma Unsuppress} before instantiating the package or subprogram, controlling whether the check will be present. @node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{187} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{189} @section Attribute Enum_Rep @@ -10704,7 +10750,7 @@ integer calculation is done at run time, then the call to @code{Enum_Rep} may raise @code{Constraint_Error}. @node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{188} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{18a} @section Attribute Enum_Val @@ -10730,7 +10776,7 @@ absence of an enumeration representation clause. This is a static attribute (i.e., the result is static if the argument is static). @node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{189} +@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{18b} @section Attribute Epsilon @@ -10743,7 +10789,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{18a} +@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{18c} @section Attribute Fast_Math @@ -10754,7 +10800,7 @@ prefix) yields a static Boolean value that is True if pragma @code{Fast_Math} is active, and False otherwise. @node Attribute Finalization_Size,Attribute Fixed_Value,Attribute Fast_Math,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{18b} +@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{18d} @section Attribute Finalization_Size @@ -10772,7 +10818,7 @@ class-wide type whose tag denotes a type with no controlled parts. Note that only heap-allocated objects contain finalization data. @node Attribute Fixed_Value,Attribute From_Any,Attribute Finalization_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{18c} +@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{18e} @section Attribute Fixed_Value @@ -10799,7 +10845,7 @@ This attribute is primarily intended for use in implementation of the input-output functions for fixed-point values. @node Attribute From_Any,Attribute Has_Access_Values,Attribute Fixed_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{18d} +@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{18f} @section Attribute From_Any @@ -10809,7 +10855,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{18e} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{190} @section Attribute Has_Access_Values @@ -10827,7 +10873,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has access values. @node Attribute Has_Discriminants,Attribute Has_Tagged_Values,Attribute Has_Access_Values,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{18f} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{191} @section Attribute Has_Discriminants @@ -10843,7 +10889,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has discriminants. @node Attribute Has_Tagged_Values,Attribute Img,Attribute Has_Discriminants,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{190} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{192} @section Attribute Has_Tagged_Values @@ -10860,7 +10906,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has access values. @node Attribute Img,Attribute Initialized,Attribute Has_Tagged_Values,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{191} +@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{193} @section Attribute Img @@ -10890,7 +10936,7 @@ that returns the appropriate string when called. This means that in an instantiation as a function parameter. @node Attribute Initialized,Attribute Integer_Value,Attribute Img,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{192} +@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{194} @section Attribute Initialized @@ -10900,7 +10946,7 @@ For the syntax and semantics of this attribute, see the SPARK 2014 Reference Manual, section 6.10. @node Attribute Integer_Value,Attribute Invalid_Value,Attribute Initialized,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{193} +@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{195} @section Attribute Integer_Value @@ -10928,7 +10974,7 @@ This attribute is primarily intended for use in implementation of the standard input-output functions for fixed-point values. @node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{194} +@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{196} @section Attribute Invalid_Value @@ -10942,7 +10988,7 @@ including the ability to modify the value with the binder -Sxx flag and relevant environment variables at run time. @node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{195} +@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{197} @section Attribute Large @@ -10955,7 +11001,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{196} +@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{198} @section Attribute Library_Level @@ -10981,7 +11027,7 @@ end Gen; @end example @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{197} +@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{199} @section Attribute Loop_Entry @@ -11014,7 +11060,7 @@ entry. This copy is not performed if the loop is not entered, or if the corresponding pragmas are ignored or disabled. @node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{198} +@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{19a} @section Attribute Machine_Size @@ -11024,7 +11070,7 @@ This attribute is identical to the @code{Object_Size} attribute. It is provided for compatibility with the DEC Ada 83 attribute of this name. @node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{199} +@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{19b} @section Attribute Mantissa @@ -11037,7 +11083,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Maximum_Alignment,Attribute Max_Integer_Size,Attribute Mantissa,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{19a}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{19b} +@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{19c}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{19d} @section Attribute Maximum_Alignment @@ -11053,7 +11099,7 @@ for an object, guaranteeing that it is properly aligned in all cases. @node Attribute Max_Integer_Size,Attribute Mechanism_Code,Attribute Maximum_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{19c} +@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{19e} @section Attribute Max_Integer_Size @@ -11064,7 +11110,7 @@ prefix) provides the size of the largest supported integer type for the target. The result is a static constant. @node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Max_Integer_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{19d} +@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{19f} @section Attribute Mechanism_Code @@ -11095,7 +11141,7 @@ by reference @end table @node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{19e} +@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1a0} @section Attribute Null_Parameter @@ -11120,7 +11166,7 @@ There is no way of indicating this without the @code{Null_Parameter} attribute. @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{14e}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{19f} +@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{14f}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1a1} @section Attribute Object_Size @@ -11190,7 +11236,7 @@ Similar additional checks are performed in other contexts requiring statically matching subtypes. @node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1a0} +@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1a2} @section Attribute Old @@ -11205,7 +11251,7 @@ definition are allowed under control of implementation defined pragma @code{Unevaluated_Use_Of_Old}. @node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1a1} +@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1a3} @section Attribute Passed_By_Reference @@ -11221,7 +11267,7 @@ passed by copy in calls. For scalar types, the result is always @code{False} and is static. For non-scalar types, the result is nonstatic. @node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1a2} +@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1a4} @section Attribute Pool_Address @@ -11243,7 +11289,7 @@ For an object created by @code{new}, @code{Ptr.all'Pool_Address} is what is passed to @code{Allocate} and returned from @code{Deallocate}. @node Attribute Range_Length,Attribute Restriction_Set,Attribute Pool_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1a3} +@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1a5} @section Attribute Range_Length @@ -11256,7 +11302,7 @@ applied to the index subtype of a one dimensional array always gives the same result as @code{Length} applied to the array itself. @node Attribute Restriction_Set,Attribute Result,Attribute Range_Length,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1a4} +@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1a6} @section Attribute Restriction_Set @@ -11326,7 +11372,7 @@ Restrictions pragma, they are not analyzed semantically, so they do not have a type. @node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1a5} +@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1a7} @section Attribute Result @@ -11339,7 +11385,7 @@ For a further discussion of the use of this attribute and examples of its use, see the description of pragma Postcondition. @node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1a6} +@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1a8} @section Attribute Round @@ -11350,7 +11396,7 @@ also permits the use of the @code{'Round} attribute for ordinary fixed point types. @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1a7} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1a9} @section Attribute Safe_Emax @@ -11363,7 +11409,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1a8} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1aa} @section Attribute Safe_Large @@ -11376,7 +11422,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1a9} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1ab} @section Attribute Safe_Small @@ -11389,7 +11435,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{15b}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1aa} +@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{15c}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1ac} @section Attribute Scalar_Storage_Order @@ -11552,7 +11598,7 @@ Note that debuggers may be unable to display the correct value of scalar components of a type for which the opposite storage order is specified. @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{ec}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1ab} +@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{ec}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1ad} @section Attribute Simple_Storage_Pool @@ -11615,7 +11661,7 @@ as defined in section 13.11.2 of the Ada Reference Manual, except that the term `simple storage pool' is substituted for `storage pool'. @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1ac} +@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1ae} @section Attribute Small @@ -11631,7 +11677,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute when applied to floating-point types. @node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1ad} +@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1af} @section Attribute Small_Denominator @@ -11644,7 +11690,7 @@ denominator in the representation of @code{typ'Small} as a rational number with coprime factors (i.e. as an irreducible fraction). @node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1ae} +@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1b0} @section Attribute Small_Numerator @@ -11657,7 +11703,7 @@ numerator in the representation of @code{typ'Small} as a rational number with coprime factors (i.e. as an irreducible fraction). @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1af} +@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1b1} @section Attribute Storage_Unit @@ -11667,7 +11713,7 @@ with coprime factors (i.e. as an irreducible fraction). prefix) provides the same value as @code{System.Storage_Unit}. @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1b0} +@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1b2} @section Attribute Stub_Type @@ -11691,7 +11737,7 @@ unit @code{System.Partition_Interface}. Use of this attribute will create an implicit dependency on this unit. @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1b1} +@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1b3} @section Attribute System_Allocator_Alignment @@ -11708,7 +11754,7 @@ with alignment too large or to enable a realignment circuitry if the alignment request is larger than this value. @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1b2} +@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1b4} @section Attribute Target_Name @@ -11721,7 +11767,7 @@ standard gcc target name without the terminating slash (for example, GNAT 5.0 on windows yields “i586-pc-mingw32msv”). @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1b3} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1b5} @section Attribute To_Address @@ -11744,7 +11790,7 @@ modular manner (e.g., -1 means the same as 16#FFFF_FFFF# on a 32 bits machine). @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1b4} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1b6} @section Attribute To_Any @@ -11754,7 +11800,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1b5} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1b7} @section Attribute Type_Class @@ -11784,7 +11830,7 @@ applies to all concurrent types. This attribute is designed to be compatible with the DEC Ada 83 attribute of the same name. @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1b6} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1b8} @section Attribute Type_Key @@ -11796,7 +11842,7 @@ about the type or subtype. This provides improved compatibility with other implementations that support this attribute. @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1b7} +@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1b9} @section Attribute TypeCode @@ -11806,7 +11852,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1b8} +@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1ba} @section Attribute Unconstrained_Array @@ -11820,7 +11866,7 @@ still static, and yields the result of applying this test to the generic actual. @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1b9} +@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1bb} @section Attribute Universal_Literal_String @@ -11848,7 +11894,7 @@ end; @end example @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1ba} +@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1bc} @section Attribute Unrestricted_Access @@ -12035,7 +12081,7 @@ In general this is a risky approach. It may appear to “work” but such uses o of GNAT to another, so are best avoided if possible. @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1bb} +@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1bd} @section Attribute Update @@ -12116,7 +12162,7 @@ A := A'Update ((1, 2) => 20, (3, 4) => 30); which changes element (1,2) to 20 and (3,4) to 30. @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1bc} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1be} @section Attribute Valid_Value @@ -12128,7 +12174,7 @@ a String, and returns Boolean. @code{T'Valid_Value (S)} returns True if and only if @code{T'Value (S)} would not raise Constraint_Error. @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1bd} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1bf} @section Attribute Valid_Scalars @@ -12162,7 +12208,7 @@ write a function with a single use of the attribute, and then call that function from multiple places. @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1be} +@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1c0} @section Attribute VADS_Size @@ -12182,7 +12228,7 @@ gives the result that would be obtained by applying the attribute to the corresponding type. @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{16c}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1bf} +@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{16e}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1c1} @section Attribute Value_Size @@ -12196,7 +12242,7 @@ a value of the given subtype. It is the same as @code{type'Size}, but, unlike @code{Size}, may be set for non-first subtypes. @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1c0} +@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1c2} @section Attribute Wchar_T_Size @@ -12208,7 +12254,7 @@ primarily for constructing the definition of this type in package @code{Interfaces.C}. The result is a static constant. @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1c1} +@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1c3} @section Attribute Word_Size @@ -12219,7 +12265,7 @@ prefix) provides the value @code{System.Word_Size}. The result is a static constant. @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top -@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1c2}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1c3}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1c4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1c5}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} @chapter Standard and Implementation Defined Restrictions @@ -12248,7 +12294,7 @@ language defined or GNAT-specific, are listed in the following. @end menu @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1c4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1c5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1c6}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1c7} @section Partition-Wide Restrictions @@ -12341,7 +12387,7 @@ then all compilation units in the partition must obey the restriction). @end menu @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1c6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1c8} @subsection Immediate_Reclamation @@ -12353,7 +12399,7 @@ deallocation, any storage reserved at run time for an object is immediately reclaimed when the object no longer exists. @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1c7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1c9} @subsection Max_Asynchronous_Select_Nesting @@ -12365,7 +12411,7 @@ detected at compile time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1c8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1ca} @subsection Max_Entry_Queue_Length @@ -12386,7 +12432,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1c9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1cb} @subsection Max_Protected_Entries @@ -12397,7 +12443,7 @@ bounds of every entry family of a protected unit shall be static, or shall be defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1ca} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1cc} @subsection Max_Select_Alternatives @@ -12406,7 +12452,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. [RM D.7] Specifies the maximum number of alternatives in a selective accept. @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1cb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1cd} @subsection Max_Storage_At_Blocking @@ -12417,7 +12463,7 @@ Storage_Size that can be retained by a blocked task. A violation of this restriction causes Storage_Error to be raised. @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1cc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1ce} @subsection Max_Task_Entries @@ -12430,7 +12476,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1cd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1cf} @subsection Max_Tasks @@ -12443,7 +12489,7 @@ time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1ce} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1d0} @subsection No_Abort_Statements @@ -12453,7 +12499,7 @@ Storage_Error to be raised. no calls to Task_Identification.Abort_Task. @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1cf} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1d1} @subsection No_Access_Parameter_Allocators @@ -12464,7 +12510,7 @@ occurrences of an allocator as the actual parameter to an access parameter. @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1d0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1d2} @subsection No_Access_Subprograms @@ -12474,7 +12520,7 @@ parameter. declarations of access-to-subprogram types. @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1d1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1d3} @subsection No_Allocators @@ -12484,7 +12530,7 @@ declarations of access-to-subprogram types. occurrences of an allocator. @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1d2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1d4} @subsection No_Anonymous_Allocators @@ -12494,7 +12540,7 @@ occurrences of an allocator. occurrences of an allocator of anonymous access type. @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1d3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1d5} @subsection No_Asynchronous_Control @@ -12504,7 +12550,7 @@ occurrences of an allocator of anonymous access type. dependences on the predefined package Asynchronous_Task_Control. @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1d4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1d6} @subsection No_Calendar @@ -12514,7 +12560,7 @@ dependences on the predefined package Asynchronous_Task_Control. dependences on package Calendar. @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1d5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1d7} @subsection No_Coextensions @@ -12524,7 +12570,7 @@ dependences on package Calendar. coextensions. See 3.10.2. @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1d6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1d8} @subsection No_Default_Initialization @@ -12541,7 +12587,7 @@ is to prohibit all cases of variables declared without a specific initializer (including the case of OUT scalar parameters). @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1d7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1d9} @subsection No_Delay @@ -12551,7 +12597,7 @@ initializer (including the case of OUT scalar parameters). delay statements and no semantic dependences on package Calendar. @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1d8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1da} @subsection No_Dependence @@ -12594,7 +12640,7 @@ to support specific constructs of the language. Here are some examples: @end itemize @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1d9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1db} @subsection No_Direct_Boolean_Operators @@ -12607,7 +12653,7 @@ protocol requires the use of short-circuit (and then, or else) forms for all composite boolean operations. @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1da} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1dc} @subsection No_Dispatch @@ -12617,7 +12663,7 @@ composite boolean operations. occurrences of @code{T'Class}, for any (tagged) subtype @code{T}. @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1db} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1dd} @subsection No_Dispatching_Calls @@ -12678,7 +12724,7 @@ end Example; @end example @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1dc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1de} @subsection No_Dynamic_Attachment @@ -12697,7 +12743,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1dd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1df} @subsection No_Dynamic_Priorities @@ -12706,7 +12752,7 @@ warnings on obsolescent features are activated). [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities. @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1de} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1e0} @subsection No_Entry_Calls_In_Elaboration_Code @@ -12718,7 +12764,7 @@ restriction, the compiler can assume that no code past an accept statement in a task can be executed at elaboration time. @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1df} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1e1} @subsection No_Enumeration_Maps @@ -12729,7 +12775,7 @@ enumeration maps are used (that is Image and Value attributes applied to enumeration types). @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1e0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1e2} @subsection No_Exception_Handlers @@ -12754,7 +12800,7 @@ statement generated by the compiler). The Line parameter when nonzero represents the line number in the source program where the raise occurs. @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1e1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1e3} @subsection No_Exception_Propagation @@ -12771,7 +12817,7 @@ the package GNAT.Current_Exception is not permitted, and reraise statements (raise with no operand) are not permitted. @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1e2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1e4} @subsection No_Exception_Registration @@ -12785,7 +12831,7 @@ code is simplified by omitting the otherwise-required global registration of exceptions when they are declared. @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1e3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1e5} @subsection No_Exceptions @@ -12796,7 +12842,7 @@ raise statements and no exception handlers and also suppresses the generation of language-defined run-time checks. @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1e4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1e6} @subsection No_Finalization @@ -12837,7 +12883,7 @@ object or a nested component, either declared on the stack or on the heap. The deallocation of a controlled object no longer finalizes its contents. @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1e5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1e7} @subsection No_Fixed_Point @@ -12847,7 +12893,7 @@ deallocation of a controlled object no longer finalizes its contents. occurrences of fixed point types and operations. @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1e6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1e8} @subsection No_Floating_Point @@ -12857,7 +12903,7 @@ occurrences of fixed point types and operations. occurrences of floating point types and operations. @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1e7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1e9} @subsection No_Implicit_Conditionals @@ -12873,7 +12919,7 @@ normal manner. Constructs generating implicit conditionals include comparisons of composite objects and the Max/Min attributes. @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1e8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1ea} @subsection No_Implicit_Dynamic_Code @@ -12903,7 +12949,7 @@ foreign-language convention; primitive operations of nested tagged types. @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1e9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1eb} @subsection No_Implicit_Heap_Allocations @@ -12912,7 +12958,7 @@ types. [RM D.7] No constructs are allowed to cause implicit heap allocation. @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1ea} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1ec} @subsection No_Implicit_Protected_Object_Allocations @@ -12922,7 +12968,7 @@ types. protected object. @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1eb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1ed} @subsection No_Implicit_Task_Allocations @@ -12931,7 +12977,7 @@ protected object. [GNAT] No constructs are allowed to cause implicit heap allocation of a task. @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1ec} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1ee} @subsection No_Initialize_Scalars @@ -12943,7 +12989,7 @@ code, and in particular eliminates dummy null initialization routines that are otherwise generated for some record and array types. @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1ed} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1ef} @subsection No_IO @@ -12954,7 +13000,7 @@ dependences on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO. @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1ee} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1f0} @subsection No_Local_Allocators @@ -12965,7 +13011,7 @@ occurrences of an allocator in subprograms, generic subprograms, tasks, and entry bodies. @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1ef} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1f1} @subsection No_Local_Protected_Objects @@ -12975,7 +13021,7 @@ and entry bodies. only declared at the library level. @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1f0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1f2} @subsection No_Local_Tagged_Types @@ -12985,7 +13031,7 @@ only declared at the library level. declared at the library level. @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1f1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1f3} @subsection No_Local_Timing_Events @@ -12995,7 +13041,7 @@ declared at the library level. declared at the library level. @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1f2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1f4} @subsection No_Long_Long_Integers @@ -13007,7 +13053,7 @@ implicit base type is Long_Long_Integer, and modular types whose size exceeds Long_Integer’Size. @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1f3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1f5} @subsection No_Multiple_Elaboration @@ -13023,7 +13069,7 @@ possible, including non-Ada main programs and Stand Alone libraries, are not permitted and will be diagnosed by the binder. @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1f4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1f6} @subsection No_Nested_Finalization @@ -13032,7 +13078,7 @@ permitted and will be diagnosed by the binder. [RM D.7] All objects requiring finalization are declared at the library level. @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1f5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1f7} @subsection No_Protected_Type_Allocators @@ -13042,7 +13088,7 @@ permitted and will be diagnosed by the binder. expressions that attempt to allocate protected objects. @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1f6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1f8} @subsection No_Protected_Types @@ -13052,7 +13098,7 @@ expressions that attempt to allocate protected objects. declarations of protected types or protected objects. @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1f7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1f9} @subsection No_Recursion @@ -13062,7 +13108,7 @@ declarations of protected types or protected objects. part of its execution. @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1f8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1fa} @subsection No_Reentrancy @@ -13072,7 +13118,7 @@ part of its execution. two tasks at the same time. @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1f9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1fb} @subsection No_Relative_Delay @@ -13083,7 +13129,7 @@ relative statements and prevents expressions such as @code{delay 1.23;} from appearing in source code. @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1fa} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1fc} @subsection No_Requeue_Statements @@ -13101,7 +13147,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on oNobsolescent features are activated). @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1fb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1fd} @subsection No_Secondary_Stack @@ -13114,7 +13160,7 @@ stack is used to implement functions returning unconstrained objects secondary stacks for tasks (excluding the environment task) at run time. @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1fc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1fe} @subsection No_Select_Statements @@ -13124,7 +13170,7 @@ secondary stacks for tasks (excluding the environment task) at run time. kind are permitted, that is the keyword @code{select} may not appear. @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1fd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1ff} @subsection No_Specific_Termination_Handlers @@ -13134,7 +13180,7 @@ kind are permitted, that is the keyword @code{select} may not appear. or to Ada.Task_Termination.Specific_Handler. @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{1fe} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{200} @subsection No_Specification_of_Aspect @@ -13145,7 +13191,7 @@ specification, attribute definition clause, or pragma is given for a given aspect. @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{1ff} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{201} @subsection No_Standard_Allocators_After_Elaboration @@ -13157,7 +13203,7 @@ library items of the partition has completed. Otherwise, Storage_Error is raised. @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{200} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{202} @subsection No_Standard_Storage_Pools @@ -13169,7 +13215,7 @@ have an explicit Storage_Pool attribute defined specifying a user-defined storage pool. @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{201} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{203} @subsection No_Stream_Optimizations @@ -13182,7 +13228,7 @@ due to their superior performance. When this restriction is in effect, the compiler performs all IO operations on a per-character basis. @node No_Streams,No_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{202} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{204} @subsection No_Streams @@ -13209,7 +13255,7 @@ configuration pragmas to avoid exposing entity names at binary level for the entire partition. @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{203} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{205} @subsection No_Tagged_Type_Registration @@ -13224,7 +13270,7 @@ are declared. This restriction may be necessary in order to also apply the No_Elaboration_Code restriction. @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{204} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{206} @subsection No_Task_Allocators @@ -13234,7 +13280,7 @@ the No_Elaboration_Code restriction. or types containing task subcomponents. @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{205} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{207} @subsection No_Task_At_Interrupt_Priority @@ -13246,7 +13292,7 @@ a consequence, the tasks are always created with a priority below that an interrupt priority. @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{206} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{208} @subsection No_Task_Attributes_Package @@ -13263,7 +13309,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{207} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{209} @subsection No_Task_Hierarchy @@ -13273,7 +13319,7 @@ warnings on obsolescent features are activated). directly on the environment task of the partition. @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{208} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{20a} @subsection No_Task_Termination @@ -13282,7 +13328,7 @@ directly on the environment task of the partition. [RM D.7] Tasks that terminate are erroneous. @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{209} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{20b} @subsection No_Tasking @@ -13295,7 +13341,7 @@ and cause an error message to be output either by the compiler or binder. @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{20a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{20c} @subsection No_Terminate_Alternatives @@ -13304,7 +13350,7 @@ binder. [RM D.7] There are no selective accepts with terminate alternatives. @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{20b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{20d} @subsection No_Unchecked_Access @@ -13314,7 +13360,7 @@ binder. occurrences of the Unchecked_Access attribute. @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{20c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{20e} @subsection No_Unchecked_Conversion @@ -13324,7 +13370,7 @@ occurrences of the Unchecked_Access attribute. dependences on the predefined generic function Unchecked_Conversion. @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{20d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{20f} @subsection No_Unchecked_Deallocation @@ -13334,7 +13380,7 @@ dependences on the predefined generic function Unchecked_Conversion. dependences on the predefined generic procedure Unchecked_Deallocation. @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{20e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{210} @subsection No_Use_Of_Attribute @@ -13344,7 +13390,7 @@ dependences on the predefined generic procedure Unchecked_Deallocation. earlier versions of Ada. @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{20f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{211} @subsection No_Use_Of_Entity @@ -13364,7 +13410,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line @end example @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{210} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{212} @subsection No_Use_Of_Pragma @@ -13374,7 +13420,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line earlier versions of Ada. @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{211} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{213} @subsection Pure_Barriers @@ -13425,7 +13471,7 @@ but still ensures absence of side effects, exceptions, and recursion during the evaluation of the barriers. @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{212} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{214} @subsection Simple_Barriers @@ -13444,7 +13490,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{213} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{215} @subsection Static_Priorities @@ -13455,7 +13501,7 @@ are static, and that there are no dependences on the package @code{Ada.Dynamic_Priorities}. @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{214} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{216} @subsection Static_Storage_Size @@ -13465,7 +13511,7 @@ are static, and that there are no dependences on the package in a Storage_Size pragma or attribute definition clause is static. @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{215}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{216} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{217}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{218} @section Program Unit Level Restrictions @@ -13496,7 +13542,7 @@ other compilation units in the partition. @end menu @node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{217} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{219} @subsection No_Elaboration_Code @@ -13552,7 +13598,7 @@ associated with the unit. This counter is typically used to check for access before elaboration and to control multiple elaboration attempts. @node No_Dynamic_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{218} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{21a} @subsection No_Dynamic_Accessibility_Checks @@ -13601,7 +13647,7 @@ In all other cases, the level of T is as defined by the existing rules of Ada. @end itemize @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{219} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{21b} @subsection No_Dynamic_Sized_Objects @@ -13619,7 +13665,7 @@ access discriminants. It is often a good idea to combine this restriction with No_Secondary_Stack. @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{21a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{21c} @subsection No_Entry_Queue @@ -13632,7 +13678,7 @@ checked at compile time. A program execution is erroneous if an attempt is made to queue a second task on such an entry. @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{21b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{21d} @subsection No_Implementation_Aspect_Specifications @@ -13643,7 +13689,7 @@ GNAT-defined aspects are present. With this restriction, the only aspects that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{21c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{21e} @subsection No_Implementation_Attributes @@ -13655,7 +13701,7 @@ attributes that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{21d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{21f} @subsection No_Implementation_Identifiers @@ -13666,7 +13712,7 @@ implementation-defined identifiers (marked with pragma Implementation_Defined) occur within language-defined packages. @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{21e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{220} @subsection No_Implementation_Pragmas @@ -13677,7 +13723,7 @@ GNAT-defined pragmas are present. With this restriction, the only pragmas that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{21f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{221} @subsection No_Implementation_Restrictions @@ -13689,7 +13735,7 @@ are present. With this restriction, the only other restriction identifiers that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{220} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{222} @subsection No_Implementation_Units @@ -13700,7 +13746,7 @@ mention in the context clause of any implementation-defined descendants of packages Ada, Interfaces, or System. @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{221} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{223} @subsection No_Implicit_Aliasing @@ -13715,7 +13761,7 @@ to be aliased, and in such cases, it can always be replaced by the standard attribute Unchecked_Access which is preferable. @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{222} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{224} @subsection No_Implicit_Loops @@ -13732,7 +13778,7 @@ arrays larger than about 5000 scalar components. Note that if this restriction is set in the spec of a package, it will not apply to its body. @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{223} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{225} @subsection No_Obsolescent_Features @@ -13742,7 +13788,7 @@ is set in the spec of a package, it will not apply to its body. features are used, as defined in Annex J of the Ada Reference Manual. @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{224} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{226} @subsection No_Wide_Characters @@ -13756,7 +13802,7 @@ appear in the program (that is literals representing characters not in type @code{Character}). @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{225} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{227} @subsection Static_Dispatch_Tables @@ -13766,7 +13812,7 @@ type @code{Character}). associated with dispatch tables can be placed in read-only memory. @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{226} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{228} @subsection SPARK_05 @@ -13789,7 +13835,7 @@ gnatprove -P project.gpr --mode=check_all @end example @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top -@anchor{gnat_rm/implementation_advice doc}@anchor{227}@anchor{gnat_rm/implementation_advice id1}@anchor{228}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} +@anchor{gnat_rm/implementation_advice doc}@anchor{229}@anchor{gnat_rm/implementation_advice id1}@anchor{22a}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} @chapter Implementation Advice @@ -13887,7 +13933,7 @@ case the text describes what GNAT does and why. @end menu @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{229} +@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{22b} @section RM 1.1.3(20): Error Detection @@ -13904,7 +13950,7 @@ or diagnosed at compile time. @geindex Child Units @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{22a} +@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{22c} @section RM 1.1.3(31): Child Units @@ -13920,7 +13966,7 @@ Followed. @geindex Bounded errors @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{22b} +@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{22d} @section RM 1.1.5(12): Bounded Errors @@ -13937,7 +13983,7 @@ runtime. @geindex Pragmas @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice -@anchor{gnat_rm/implementation_advice id2}@anchor{22c}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{22d} +@anchor{gnat_rm/implementation_advice id2}@anchor{22e}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{22f} @section RM 2.8(16): Pragmas @@ -14050,7 +14096,7 @@ that this advice not be followed. For details see @ref{7,,Implementation Defined Pragmas}. @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{22e} +@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{230} @section RM 2.8(17-19): Pragmas @@ -14071,14 +14117,14 @@ replacing @code{library_items}.” @end itemize @end quotation -See @ref{22d,,RM 2.8(16); Pragmas}. +See @ref{22f,,RM 2.8(16); Pragmas}. @geindex Character Sets @geindex Alternative Character Sets @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{22f} +@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{231} @section RM 3.5.2(5): Alternative Character Sets @@ -14106,7 +14152,7 @@ there is no such restriction. @geindex Integer types @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{230} +@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{232} @section RM 3.5.4(28): Integer Types @@ -14125,7 +14171,7 @@ are supported for convenient interface to C, and so that all hardware types of the machine are easily available. @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{231} +@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{233} @section RM 3.5.4(29): Integer Types @@ -14141,7 +14187,7 @@ Followed. @geindex Enumeration values @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{232} +@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{234} @section RM 3.5.5(8): Enumeration Values @@ -14161,7 +14207,7 @@ Followed. @geindex Float types @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{233} +@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{235} @section RM 3.5.7(17): Float Types @@ -14191,7 +14237,7 @@ is a software rather than a hardware format. @geindex multidimensional @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration’Small,RM 3 5 7 17 Float Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{234} +@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{236} @section RM 3.6.2(11): Multidimensional Arrays @@ -14209,7 +14255,7 @@ Followed. @geindex Duration'Small @node RM 9 6 30-31 Duration’Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{235} +@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{237} @section RM 9.6(30-31): Duration’Small @@ -14230,7 +14276,7 @@ it need not be the same time base as used for @code{Calendar.Clock}.” Followed. @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration’Small,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{236} +@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{238} @section RM 10.2.1(12): Consistent Representation @@ -14252,7 +14298,7 @@ advice without severely impacting efficiency of execution. @geindex Exception information @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{237} +@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{239} @section RM 11.4.1(19): Exception Information @@ -14283,7 +14329,7 @@ Pragma @code{Discard_Names}. @geindex suppression of @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{238} +@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{23a} @section RM 11.5(28): Suppression of Checks @@ -14298,7 +14344,7 @@ Followed. @geindex Representation clauses @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{239} +@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{23b} @section RM 13.1 (21-24): Representation Clauses @@ -14347,7 +14393,7 @@ Followed. @geindex Packed types @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{23a} +@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{23c} @section RM 13.2(6-8): Packed Types @@ -14378,7 +14424,7 @@ subcomponent of the packed type. @geindex Address clauses @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{23b} +@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{23d} @section RM 13.3(14-19): Address Clauses @@ -14431,7 +14477,7 @@ Followed. @geindex Alignment clauses @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{23c} +@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{23e} @section RM 13.3(29-35): Alignment Clauses @@ -14488,7 +14534,7 @@ Followed. @geindex Size clauses @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{23d} +@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{23f} @section RM 13.3(42-43): Size Clauses @@ -14506,7 +14552,7 @@ object’s @code{Alignment} (if the @code{Alignment} is nonzero).” Followed. @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{23e} +@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{240} @section RM 13.3(50-56): Size Clauses @@ -14557,7 +14603,7 @@ Followed. @geindex Component_Size clauses @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{23f} +@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{241} @section RM 13.3(71-73): Component Size Clauses @@ -14591,7 +14637,7 @@ Followed. @geindex enumeration @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{240} +@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{242} @section RM 13.4(9-10): Enumeration Representation Clauses @@ -14613,7 +14659,7 @@ Followed. @geindex records @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{241} +@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{243} @section RM 13.5.1(17-22): Record Representation Clauses @@ -14673,7 +14719,7 @@ and all mentioned features are implemented. @geindex Storage place attributes @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{242} +@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{244} @section RM 13.5.2(5): Storage Place Attributes @@ -14693,7 +14739,7 @@ Followed. There are no such components in GNAT. @geindex Bit ordering @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{243} +@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{245} @section RM 13.5.3(7-8): Bit Ordering @@ -14713,7 +14759,7 @@ Thus non-default bit ordering is not supported. @geindex as private type @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{244} +@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{246} @section RM 13.7(37): Address as Private @@ -14731,7 +14777,7 @@ Followed. @geindex operations of @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{245} +@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{247} @section RM 13.7.1(16): Address Operations @@ -14749,7 +14795,7 @@ operation raises @code{Program_Error}, since all operations make sense. @geindex Unchecked conversion @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{246} +@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{248} @section RM 13.9(14-17): Unchecked Conversion @@ -14793,7 +14839,7 @@ Followed. @geindex implicit @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{247} +@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{249} @section RM 13.11(23-25): Implicit Heap Usage @@ -14844,7 +14890,7 @@ Followed. @geindex Unchecked deallocation @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{248} +@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{24a} @section RM 13.11.2(17): Unchecked Deallocation @@ -14859,7 +14905,7 @@ Followed. @geindex Stream oriented attributes @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{249} +@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{24b} @section RM 13.13.2(1.6): Stream Oriented Attributes @@ -14890,7 +14936,7 @@ scalar types. This XDR alternative can be enabled via the binder switch -xdr. @geindex Stream oriented attributes @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{24a} +@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{24c} @section RM A.1(52): Names of Predefined Numeric Types @@ -14908,7 +14954,7 @@ Followed. @geindex Ada.Characters.Handling @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{24b} +@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{24d} @section RM A.3.2(49): @code{Ada.Characters.Handling} @@ -14925,7 +14971,7 @@ Followed. GNAT provides no such localized definitions. @geindex Bounded-length strings @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{24c} +@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{24e} @section RM A.4.4(106): Bounded-Length String Handling @@ -14940,7 +14986,7 @@ Followed. No implicit pointers or dynamic allocation are used. @geindex Random number generation @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{24d} +@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{24f} @section RM A.5.2(46-47): Random Number Generation @@ -14969,7 +15015,7 @@ condition here to hold true. @geindex Get_Immediate @node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{24e} +@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{250} @section RM A.10.7(23): @code{Get_Immediate} @@ -14993,7 +15039,7 @@ this functionality. @geindex Containers @node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{24f} +@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{251} @section RM A.18: @code{Containers} @@ -15014,7 +15060,7 @@ follow the implementation advice. @geindex Export @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{250} +@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{252} @section RM B.1(39-41): Pragma @code{Export} @@ -15062,7 +15108,7 @@ Followed. @geindex Interfaces @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{251} +@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{253} @section RM B.2(12-13): Package @code{Interfaces} @@ -15092,7 +15138,7 @@ Followed. GNAT provides all the packages described in this section. @geindex interfacing with @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{252} +@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{254} @section RM B.3(63-71): Interfacing with C @@ -15180,7 +15226,7 @@ Followed. @geindex interfacing with @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{253} +@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{255} @section RM B.4(95-98): Interfacing with COBOL @@ -15221,7 +15267,7 @@ Followed. @geindex interfacing with @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{254} +@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{256} @section RM B.5(22-26): Interfacing with Fortran @@ -15272,7 +15318,7 @@ Followed. @geindex Machine operations @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{255} +@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{257} @section RM C.1(3-5): Access to Machine Operations @@ -15307,7 +15353,7 @@ object that is specified as exported.” Followed. @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{256} +@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{258} @section RM C.1(10-16): Access to Machine Operations @@ -15368,7 +15414,7 @@ Followed on any target supporting such operations. @geindex Interrupt support @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{257} +@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{259} @section RM C.3(28): Interrupt Support @@ -15386,7 +15432,7 @@ of interrupt blocking. @geindex Protected procedure handlers @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{258} +@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{25a} @section RM C.3.1(20-21): Protected Procedure Handlers @@ -15412,7 +15458,7 @@ Followed. Compile time warnings are given when possible. @geindex Interrupts @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{259} +@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{25b} @section RM C.3.2(25): Package @code{Interrupts} @@ -15430,7 +15476,7 @@ Followed. @geindex Pre-elaboration requirements @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{25a} +@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{25c} @section RM C.4(14): Pre-elaboration Requirements @@ -15446,7 +15492,7 @@ Followed. Executable code is generated in some cases, e.g., loops to initialize large arrays. @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{25b} +@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{25d} @section RM C.5(8): Pragma @code{Discard_Names} @@ -15464,7 +15510,7 @@ Followed. @geindex Task_Attributes @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{25c} +@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{25e} @section RM C.7.2(30): The Package Task_Attributes @@ -15485,7 +15531,7 @@ Not followed. This implementation is not targeted to such a domain. @geindex Locking Policies @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{25d} +@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{25f} @section RM D.3(17): Locking Policies @@ -15502,7 +15548,7 @@ whose names (@code{Inheritance_Locking} and @geindex Entry queuing policies @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{25e} +@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{260} @section RM D.4(16): Entry Queuing Policies @@ -15517,7 +15563,7 @@ Followed. No such implementation-defined queuing policies exist. @geindex Preemptive abort @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{25f} +@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{261} @section RM D.6(9-10): Preemptive Abort @@ -15543,7 +15589,7 @@ Followed. @geindex Tasking restrictions @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{260} +@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{262} @section RM D.7(21): Tasking Restrictions @@ -15562,7 +15608,7 @@ pragma @code{Profile (Restricted)} for more details. @geindex monotonic @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{261} +@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{263} @section RM D.8(47-49): Monotonic Time @@ -15597,7 +15643,7 @@ Followed. @geindex PCS @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{262} +@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{264} @section RM E.5(28-29): Partition Communication Subsystem @@ -15625,7 +15671,7 @@ GNAT. @geindex COBOL support @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{263} +@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{265} @section RM F(7): COBOL Support @@ -15645,7 +15691,7 @@ Followed. @geindex Decimal radix support @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{264} +@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{266} @section RM F.1(2): Decimal Radix Support @@ -15661,7 +15707,7 @@ representations. @geindex Numerics @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{265} +@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{267} @section RM G: Numerics @@ -15681,7 +15727,7 @@ Followed. @geindex Complex types @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{266} +@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{268} @section RM G.1.1(56-58): Complex Types @@ -15743,7 +15789,7 @@ Followed. @geindex Complex elementary functions @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{267} +@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{269} @section RM G.1.2(49): Complex Elementary Functions @@ -15765,7 +15811,7 @@ Followed. @geindex Accuracy requirements @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{268} +@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{26a} @section RM G.2.4(19): Accuracy Requirements @@ -15789,7 +15835,7 @@ Followed. @geindex complex arithmetic @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{269} +@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{26b} @section RM G.2.6(15): Complex Arithmetic Accuracy @@ -15807,7 +15853,7 @@ Followed. @geindex Sequential elaboration policy @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{26a} +@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{26c} @section RM H.6(15/2): Pragma Partition_Elaboration_Policy @@ -15822,7 +15868,7 @@ immediately terminated.” Not followed. @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top -@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{26b}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{26c}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} +@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{26d}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{26e}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} @chapter Implementation Defined Characteristics @@ -16671,7 +16717,7 @@ See separate section on data representations. such aspects and the legality rules for such aspects. See 13.1.1(38).” @end itemize -See @ref{129,,Implementation Defined Aspects}. +See @ref{12a,,Implementation Defined Aspects}. @itemize * @@ -17117,7 +17163,7 @@ When the @code{Pattern} parameter is not the null string, it is interpreted according to the syntax of regular expressions as defined in the @code{GNAT.Regexp} package. -See @ref{26d,,GNAT.Regexp (g-regexp.ads)}. +See @ref{26f,,GNAT.Regexp (g-regexp.ads)}. @itemize * @@ -18215,7 +18261,7 @@ Information on those subjects is not yet available. Execution is erroneous in that case. @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top -@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{26e}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{26f}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} +@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{270}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{271}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} @chapter Intrinsic Subprograms @@ -18253,7 +18299,7 @@ Ada standard does not require Ada compilers to implement this feature. @end menu @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{270}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{271} +@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{273} @section Intrinsic Operators @@ -18284,7 +18330,7 @@ It is also possible to specify such operators for private types, if the full views are appropriate arithmetic types. @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{273} +@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{274}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{275} @section Compilation_ISO_Date @@ -18298,7 +18344,7 @@ application program should simply call the function the current compilation (in local time format YYYY-MM-DD). @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{274}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{275} +@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{276}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{277} @section Compilation_Date @@ -18308,7 +18354,7 @@ Same as Compilation_ISO_Date, except the string is in the form MMM DD YYYY. @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{276}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{277} +@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{278}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{279} @section Compilation_Time @@ -18322,7 +18368,7 @@ application program should simply call the function the current compilation (in local time format HH:MM:SS). @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{278}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{279} +@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{27b} @section Enclosing_Entity @@ -18336,7 +18382,7 @@ application program should simply call the function the current subprogram, package, task, entry, or protected subprogram. @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{27b} +@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{27c}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{27d} @section Exception_Information @@ -18350,7 +18396,7 @@ so an application program should simply call the function the exception information associated with the current exception. @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{27c}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{27d} +@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{27e}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{27f} @section Exception_Message @@ -18364,7 +18410,7 @@ so an application program should simply call the function the message associated with the current exception. @node Exception_Name,File,Exception_Message,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{27e}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{27f} +@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{280}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{281} @section Exception_Name @@ -18378,7 +18424,7 @@ so an application program should simply call the function the name of the current exception. @node File,Line,Exception_Name,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms file}@anchor{280}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{281} +@anchor{gnat_rm/intrinsic_subprograms file}@anchor{282}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{283} @section File @@ -18392,7 +18438,7 @@ application program should simply call the function file. @node Line,Shifts and Rotates,File,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{282}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{283} +@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{284}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{285} @section Line @@ -18406,7 +18452,7 @@ application program should simply call the function source line. @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{284}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{285} +@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{286}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{287} @section Shifts and Rotates @@ -18449,7 +18495,7 @@ corresponding operator for modular type. In particular, shifting a negative number may change its sign bit to positive. @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{286}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{287} +@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{288}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{289} @section Source_Location @@ -18463,7 +18509,7 @@ application program should simply call the function source file location. @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top -@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{288}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{289}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} +@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{28b}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} @chapter Representation Clauses and Pragmas @@ -18509,7 +18555,7 @@ and this section describes the additional capabilities provided. @end menu @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{28b} +@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{28d} @section Alignment Clauses @@ -18531,7 +18577,7 @@ For elementary types, the alignment is the minimum of the actual size of objects of the type divided by @code{Storage_Unit}, and the maximum alignment supported by the target. (This maximum alignment is given by the GNAT-specific attribute -@code{Standard'Maximum_Alignment}; see @ref{19a,,Attribute Maximum_Alignment}.) +@code{Standard'Maximum_Alignment}; see @ref{19c,,Attribute Maximum_Alignment}.) @geindex Maximum_Alignment attribute @@ -18640,7 +18686,7 @@ assumption is non-portable, and other compilers may choose different alignments for the subtype @code{RS}. @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{28d} +@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{28e}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{28f} @section Size Clauses @@ -18717,7 +18763,7 @@ if it is known that a Size value can be accommodated in an object of type Integer. @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{28e}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{28f} +@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{290}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{291} @section Storage_Size Clauses @@ -18790,7 +18836,7 @@ Of course in practice, there will not be any explicit allocators in the case of such an access declaration. @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{290}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{291} +@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{292}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{293} @section Size of Variant Record Objects @@ -18900,7 +18946,7 @@ the maximum size, regardless of the current variant value, the variant value. @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{292}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{293} +@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{295} @section Biased Representation @@ -18938,7 +18984,7 @@ biased representation can be used for all discrete types except for enumeration types for which a representation clause is given. @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{295} +@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{297} @section Value_Size and Object_Size Clauses @@ -19254,7 +19300,7 @@ definition clause forces biased representation. This warning can be turned off using @code{-gnatw.B}. @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{297} +@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{299} @section Component_Size Clauses @@ -19302,7 +19348,7 @@ and a pragma Pack for the same array type. if such duplicate clauses are given, the pragma Pack will be ignored. @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{299} +@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{29b} @section Bit_Order Clauses @@ -19408,7 +19454,7 @@ if desired. The following section contains additional details regarding the issue of byte ordering. @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{29b} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{29d} @section Effect of Bit_Order on Byte Ordering @@ -19665,7 +19711,7 @@ to set the boolean constant @code{Master_Byte_First} in an appropriate manner. @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{29d} +@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{29e}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{29f} @section Pragma Pack for Arrays @@ -19785,7 +19831,7 @@ Here 31-bit packing is achieved as required, and no warning is generated, since in this case the programmer intention is clear. @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{29e}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{29f} +@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2a0}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2a1} @section Pragma Pack for Records @@ -19869,7 +19915,7 @@ array that is longer than 64 bits, so it is itself non-packable on boundary, and takes an integral number of bytes, i.e., 72 bits. @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2a0}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2a1} +@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2a2}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2a3} @section Record Representation Clauses @@ -19948,7 +19994,7 @@ end record; @end example @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2a2}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2a3} +@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2a5} @section Handling of Records with Holes @@ -20024,7 +20070,7 @@ for Hrec'Size use 64; @end example @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2a5} +@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2a7} @section Enumeration Clauses @@ -20067,7 +20113,7 @@ the overhead of converting representation values to the corresponding positional values, (i.e., the value delivered by the @code{Pos} attribute). @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2a7} +@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2a8}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2a9} @section Address Clauses @@ -20407,7 +20453,7 @@ then the program compiles without the warning and when run will generate the output @code{X was not clobbered}. @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2a8}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2a9} +@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2aa}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2ab} @section Use of Address Clauses for Memory-Mapped I/O @@ -20465,7 +20511,7 @@ provides the pragma @code{Volatile_Full_Access} which can be used in lieu of pragma @code{Atomic} and will give the additional guarantee. @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2aa}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2ab} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2ac}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2ad} @section Effect of Convention on Representation @@ -20543,7 +20589,7 @@ when one of these values is read, any nonzero value is treated as True. @end itemize @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2ac}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2ad} +@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2ae}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2af} @section Conventions and Anonymous Access Types @@ -20619,7 +20665,7 @@ package ConvComp is @end example @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2ae}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2af} +@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2b0}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2b1} @section Determining the Representations chosen by GNAT @@ -20771,7 +20817,7 @@ generated by the compiler into the original source to fix and guarantee the actual representation to be used. @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top -@anchor{gnat_rm/standard_library_routines doc}@anchor{2b0}@anchor{gnat_rm/standard_library_routines id1}@anchor{2b1}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} +@anchor{gnat_rm/standard_library_routines doc}@anchor{2b2}@anchor{gnat_rm/standard_library_routines id1}@anchor{2b3}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} @chapter Standard Library Routines @@ -21595,7 +21641,7 @@ For packages in Interfaces and System, all the RM defined packages are available in GNAT, see the Ada 2012 RM for full details. @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top -@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2b2}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2b3}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} +@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2b5}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} @chapter The Implementation of Standard I/O @@ -21647,7 +21693,7 @@ these additional facilities are also described in this chapter. @end menu @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2b5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2b7} @section Standard I/O Packages @@ -21718,7 +21764,7 @@ flush the common I/O streams and in particular Standard_Output before elaborating the Ada code. @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2b7} +@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2b9} @section FORM Strings @@ -21744,7 +21790,7 @@ unrecognized keyword appears in a form string, it is silently ignored and not considered invalid. @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2b9} +@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2bb} @section Direct_IO @@ -21763,7 +21809,7 @@ There is no limit on the size of Direct_IO files, they are expanded as necessary to accommodate whatever records are written to the file. @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2bb} +@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2bd} @section Sequential_IO @@ -21810,7 +21856,7 @@ using Stream_IO, and this is the preferred mechanism. In particular, the above program fragment rewritten to use Stream_IO will work correctly. @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2bd} +@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2bf} @section Text_IO @@ -21893,7 +21939,7 @@ the file. @end menu @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2bf} +@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2c1} @subsection Stream Pointer Positioning @@ -21929,7 +21975,7 @@ between two Ada files, then the difference may be observable in some situations. @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2c1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2c3} @subsection Reading and Writing Non-Regular Files @@ -21980,7 +22026,7 @@ to read data past that end of file indication, until another end of file indication is entered. @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2c3} +@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2c5} @subsection Get_Immediate @@ -21998,7 +22044,7 @@ possible), it is undefined whether the FF character will be treated as a page mark. @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2c5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2c7} @subsection Treating Text_IO Files as Streams @@ -22014,7 +22060,7 @@ skipped and the effect is similar to that described above for @code{Get_Immediate}. @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2c7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2c9} @subsection Text_IO Extensions @@ -22042,7 +22088,7 @@ the string is to be read. @end itemize @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2c9} +@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2cb} @subsection Text_IO Facilities for Unbounded Strings @@ -22090,7 +22136,7 @@ files @code{a-szuzti.ads} and @code{a-szuzti.adb} provides similar extended @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings. @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2cb} +@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2cd} @section Wide_Text_IO @@ -22337,12 +22383,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2cd} +@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2cf} @subsection Stream Pointer Positioning @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2bd,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2bf,,Text_IO}). There is one additional case: If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22361,7 +22407,7 @@ to a normal program using @code{Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2cf} +@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2d1} @subsection Reading and Writing Non-Regular Files @@ -22372,7 +22418,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2d1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2d3} @section Wide_Wide_Text_IO @@ -22541,12 +22587,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2d3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2d4}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2d5} @subsection Stream Pointer Positioning @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2bd,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2bf,,Text_IO}). There is one additional case: If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22565,7 +22611,7 @@ to a normal program using @code{Wide_Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2d4}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2d5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2d6}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2d7} @subsection Reading and Writing Non-Regular Files @@ -22576,7 +22622,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2d6}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2d7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2d8}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2d9} @section Stream_IO @@ -22598,7 +22644,7 @@ manner described for stream attributes. @end itemize @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2d8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2d9} +@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2da}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2db} @section Text Translation @@ -22632,7 +22678,7 @@ mode. (corresponds to_O_U16TEXT). @end itemize @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2da}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2db} +@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2dc}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2dd} @section Shared Files @@ -22695,7 +22741,7 @@ heterogeneous input-output. Although this approach will work in GNAT if for this purpose (using the stream attributes) @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2dc}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2dd} +@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2de}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2df} @section Filenames encoding @@ -22735,7 +22781,7 @@ platform. On the other Operating Systems the run-time is supporting UTF-8 natively. @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2de}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2df} +@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2e0}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2e1} @section File content encoding @@ -22768,7 +22814,7 @@ Unicode 8-bit encoding This encoding is only supported on the Windows platform. @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2e0}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2e1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2e2}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2e3} @section Open Modes @@ -22871,7 +22917,7 @@ subsequently requires switching from reading to writing or vice-versa, then the file is reopened in @code{r+} mode to permit the required operation. @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2e2}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2e3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2e4}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2e5} @section Operations on C Streams @@ -23031,7 +23077,7 @@ end Interfaces.C_Streams; @end example @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2e4}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2e5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2e6}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2e7} @section Interfacing to C Streams @@ -23124,7 +23170,7 @@ imported from a C program, allowing an Ada file to operate on an existing C file. @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top -@anchor{gnat_rm/the_gnat_library doc}@anchor{2e6}@anchor{gnat_rm/the_gnat_library id1}@anchor{2e7}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} +@anchor{gnat_rm/the_gnat_library doc}@anchor{2e8}@anchor{gnat_rm/the_gnat_library id1}@anchor{2e9}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} @chapter The GNAT Library @@ -23309,7 +23355,7 @@ of GNAT, and will generate a warning message. @end menu @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2e8}@anchor{gnat_rm/the_gnat_library id2}@anchor{2e9} +@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2ea}@anchor{gnat_rm/the_gnat_library id2}@anchor{2eb} @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads}) @@ -23326,7 +23372,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2ea}@anchor{gnat_rm/the_gnat_library id3}@anchor{2eb} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2ec}@anchor{gnat_rm/the_gnat_library id3}@anchor{2ed} @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads}) @@ -23343,7 +23389,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2ec}@anchor{gnat_rm/the_gnat_library id4}@anchor{2ed} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id4}@anchor{2ef} @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads}) @@ -23360,7 +23406,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id5}@anchor{2ef} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2f0}@anchor{gnat_rm/the_gnat_library id5}@anchor{2f1} @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads}) @@ -23377,7 +23423,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2f0}@anchor{gnat_rm/the_gnat_library id6}@anchor{2f1} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id6}@anchor{2f3} @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads}) @@ -23394,7 +23440,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id7}@anchor{2f3} +@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id7}@anchor{2f5} @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads}) @@ -23406,7 +23452,7 @@ This child of @code{Ada.Containers} defines a modified version of Indefinite_Holders that avoids heap allocation. @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id8}@anchor{2f5} +@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id8}@anchor{2f7} @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads}) @@ -23419,7 +23465,7 @@ provides a mechanism for obtaining environment values on systems where this concept makes sense. @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id9}@anchor{2f7} +@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id9}@anchor{2f9} @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads}) @@ -23437,7 +23483,7 @@ to further calls to the subprograms in @code{Ada.Command_Line}. These calls will not see the removed argument. @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id10}@anchor{2f9} +@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id10}@anchor{2fb} @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads}) @@ -23457,7 +23503,7 @@ Using a response file allow passing a set of arguments to an executable longer than the maximum allowed by the system on the command line. @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id11}@anchor{2fb} +@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id11}@anchor{2fd} @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads}) @@ -23472,7 +23518,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id12}@anchor{2fd} +@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id12}@anchor{2ff} @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads}) @@ -23486,7 +23532,7 @@ exception occurrence (@code{Null_Occurrence}) without raising an exception. @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id13}@anchor{2ff} +@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id13}@anchor{301} @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads}) @@ -23500,7 +23546,7 @@ exceptions (hence the name last chance), and perform clean ups before terminating the program. Note that this subprogram never returns. @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id14}@anchor{301} +@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id14}@anchor{303} @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads}) @@ -23513,7 +23559,7 @@ give a traceback array of addresses based on an exception occurrence. @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id15}@anchor{303} +@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id15}@anchor{305} @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads}) @@ -23528,7 +23574,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id16}@anchor{305} +@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id16}@anchor{307} @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads}) @@ -23543,7 +23589,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id17}@anchor{307} +@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id17}@anchor{309} @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads}) @@ -23560,7 +23606,7 @@ strings, avoiding the necessity for an intermediate operation with ordinary strings. @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id18}@anchor{309} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id18}@anchor{30b} @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads}) @@ -23577,7 +23623,7 @@ wide strings, avoiding the necessity for an intermediate operation with ordinary wide strings. @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id19}@anchor{30b} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id19}@anchor{30d} @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads}) @@ -23594,7 +23640,7 @@ wide wide strings, avoiding the necessity for an intermediate operation with ordinary wide wide strings. @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id20}@anchor{30d} +@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id20}@anchor{30f} @section @code{Ada.Task_Initialization} (@code{a-tasini.ads}) @@ -23606,7 +23652,7 @@ parameterless procedures. Note that such a handler is only invoked for those tasks activated after the handler is set. @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id21}@anchor{30f} +@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id21}@anchor{311} @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads}) @@ -23621,7 +23667,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id22}@anchor{311} +@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id22}@anchor{313} @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads}) @@ -23636,7 +23682,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id23}@anchor{313} +@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id23}@anchor{315} @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads}) @@ -23649,7 +23695,7 @@ This package provides subprograms that allow categorization of Wide_Character values according to Unicode categories. @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id24}@anchor{315} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id24}@anchor{317} @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads}) @@ -23664,7 +23710,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id25}@anchor{317} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id25}@anchor{319} @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads}) @@ -23679,7 +23725,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id26}@anchor{319} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id26}@anchor{31b} @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads}) @@ -23692,7 +23738,7 @@ This package provides subprograms that allow categorization of Wide_Wide_Character values according to Unicode categories. @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id27}@anchor{31b} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id27}@anchor{31d} @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads}) @@ -23707,7 +23753,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id28}@anchor{31d} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id28}@anchor{31f} @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads}) @@ -23722,7 +23768,7 @@ change during execution (for example a standard input file may be redefined to be interactive). @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id29}@anchor{31f} +@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id29}@anchor{321} @section @code{GNAT.Altivec} (@code{g-altive.ads}) @@ -23735,7 +23781,7 @@ definitions of constants and types common to all the versions of the binding. @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id30}@anchor{321} +@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id30}@anchor{323} @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads}) @@ -23746,7 +23792,7 @@ binding. This package provides the Vector/View conversion routines. @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id31}@anchor{323} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id31}@anchor{325} @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads}) @@ -23760,7 +23806,7 @@ library. The hard binding is provided as a separate package. This unit is common to both bindings. @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id32}@anchor{325} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id32}@anchor{327} @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads}) @@ -23772,7 +23818,7 @@ This package exposes the various vector types part of the Ada binding to AltiVec facilities. @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id33}@anchor{327} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id33}@anchor{329} @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads}) @@ -23787,7 +23833,7 @@ vector elements and provides a simple way to initialize vector objects. @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id34}@anchor{329} +@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id34}@anchor{32b} @section @code{GNAT.Array_Split} (@code{g-arrspl.ads}) @@ -23800,7 +23846,7 @@ an array wherever the separators appear, and provide direct access to the resulting slices. @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id35}@anchor{32b} +@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id35}@anchor{32d} @section @code{GNAT.AWK} (@code{g-awk.ads}) @@ -23815,7 +23861,7 @@ or more files containing formatted data. The file is viewed as a database where each record is a line and a field is a data element in this line. @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id36}@anchor{32d} +@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id36}@anchor{32f} @section @code{GNAT.Binary_Search} (@code{g-binsea.ads}) @@ -23827,7 +23873,7 @@ Allow binary search of a sorted array (or of an array-like container; the generic does not reference the array directly). @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id37}@anchor{32f} +@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id37}@anchor{331} @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads}) @@ -23840,7 +23886,7 @@ These associations can be specified using the @code{-V} binder command line switch. @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id38}@anchor{331} +@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id38}@anchor{333} @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads}) @@ -23851,7 +23897,7 @@ line switch. Provides routines giving hints to the branch predictor of the code generator. @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id39}@anchor{333} +@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id39}@anchor{335} @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads}) @@ -23866,7 +23912,7 @@ useful directly or as parts of the implementations of other abstractions, such as mailboxes. @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id40}@anchor{335} +@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id40}@anchor{337} @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads}) @@ -23879,7 +23925,7 @@ such as mailboxes. Provides a thread-safe asynchronous intertask mailbox communication facility. @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id41}@anchor{337} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id41}@anchor{339} @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads}) @@ -23894,7 +23940,7 @@ data items. Exchange and comparison procedures are provided by passing access-to-procedure values. @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id42}@anchor{339} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id42}@anchor{33b} @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads}) @@ -23910,7 +23956,7 @@ access-to-procedure values. This is an older version, retained for compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable. @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id43}@anchor{33b} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id43}@anchor{33d} @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads}) @@ -23926,7 +23972,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id44}@anchor{33d} +@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id44}@anchor{33f} @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads}) @@ -23942,7 +23988,7 @@ the encoding of the string. The routine includes detection of special XML sequences for various UCS input formats. @node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id45}@anchor{33f} +@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id45}@anchor{341} @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads}) @@ -23956,7 +24002,7 @@ General routines for swapping the bytes in 2-, 4-, and 8-byte quantities. Machine-specific implementations are available in some cases. @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id46}@anchor{341} +@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id46}@anchor{343} @section @code{GNAT.Calendar} (@code{g-calend.ads}) @@ -23970,7 +24016,7 @@ Also provides conversion of @code{Ada.Calendar.Time} values to and from the C @code{timeval} format. @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id47}@anchor{343} +@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id47}@anchor{345} @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads}) @@ -23981,7 +24027,7 @@ C @code{timeval} format. @geindex GNAT.Calendar.Time_IO (g-catiio.ads) @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id48}@anchor{345} +@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id48}@anchor{347} @section @code{GNAT.CRC32} (@code{g-crc32.ads}) @@ -23998,7 +24044,7 @@ of this algorithm see Aug. 1988. Sarwate, D.V. @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id49}@anchor{347} +@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id49}@anchor{349} @section @code{GNAT.Case_Util} (@code{g-casuti.ads}) @@ -24013,7 +24059,7 @@ without the overhead of the full casing tables in @code{Ada.Characters.Handling}. @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id50}@anchor{349} +@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id50}@anchor{34b} @section @code{GNAT.CGI} (@code{g-cgi.ads}) @@ -24028,7 +24074,7 @@ builds a table whose index is the key and provides some services to deal with this table. @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id51}@anchor{34b} +@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id51}@anchor{34d} @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads}) @@ -24043,7 +24089,7 @@ Common Gateway Interface (CGI). It exports services to deal with Web cookies (piece of information kept in the Web client software). @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id52}@anchor{34d} +@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id52}@anchor{34f} @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads}) @@ -24055,7 +24101,7 @@ This is a package to help debugging CGI (Common Gateway Interface) programs written in Ada. @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id53}@anchor{34f} +@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id53}@anchor{351} @section @code{GNAT.Command_Line} (@code{g-comlin.ads}) @@ -24068,7 +24114,7 @@ including the ability to scan for named switches with optional parameters and expand file names using wildcard notations. @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id54}@anchor{351} +@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id54}@anchor{353} @section @code{GNAT.Compiler_Version} (@code{g-comver.ads}) @@ -24086,7 +24132,7 @@ of the compiler if a consistent tool set is used to compile all units of a partition). @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id55}@anchor{353} +@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id55}@anchor{355} @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads}) @@ -24097,7 +24143,7 @@ of a partition). Provides a simple interface to handle Ctrl-C keyboard events. @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id56}@anchor{355} +@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id56}@anchor{357} @section @code{GNAT.Current_Exception} (@code{g-curexc.ads}) @@ -24114,7 +24160,7 @@ This is particularly useful in simulating typical facilities for obtaining information about exceptions provided by Ada 83 compilers. @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id57}@anchor{357} +@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id57}@anchor{359} @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads}) @@ -24131,7 +24177,7 @@ problems. See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}. @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id58}@anchor{359} +@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id58}@anchor{35b} @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads}) @@ -24144,7 +24190,7 @@ to and from string images of address values. Supports both C and Ada formats for hexadecimal literals. @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id59}@anchor{35b} +@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id59}@anchor{35d} @section @code{GNAT.Decode_String} (@code{g-decstr.ads}) @@ -24168,7 +24214,7 @@ Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id60}@anchor{35d} +@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id60}@anchor{35f} @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads}) @@ -24189,7 +24235,7 @@ preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding. @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id61}@anchor{35f} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id61}@anchor{361} @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads}) @@ -24202,7 +24248,7 @@ the current directory, making new directories, and scanning the files in a directory. @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id62}@anchor{361} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id62}@anchor{363} @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads}) @@ -24214,7 +24260,7 @@ A child unit of GNAT.Directory_Operations providing additional operations for iterating through directories. @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id63}@anchor{363} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id63}@anchor{365} @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads}) @@ -24232,7 +24278,7 @@ dynamic instances of the hash table, while an instantiation of @code{GNAT.HTable} creates a single instance of the hash table. @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id64}@anchor{365} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id64}@anchor{367} @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads}) @@ -24252,7 +24298,7 @@ dynamic instances of the table, while an instantiation of @code{GNAT.Table} creates a single instance of the table type. @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id65}@anchor{367} +@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id65}@anchor{369} @section @code{GNAT.Encode_String} (@code{g-encstr.ads}) @@ -24274,7 +24320,7 @@ encoding method. Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id66}@anchor{369} +@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id66}@anchor{36b} @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads}) @@ -24295,7 +24341,7 @@ Note there is a preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding. @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id67}@anchor{36b} +@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id67}@anchor{36d} @section @code{GNAT.Exception_Actions} (@code{g-excact.ads}) @@ -24308,7 +24354,7 @@ for specific exceptions, or when any exception is raised. This can be used for instance to force a core dump to ease debugging. @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id68}@anchor{36d} +@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id68}@anchor{36f} @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads}) @@ -24322,7 +24368,7 @@ Provides an interface allowing to control automatic output upon exception occurrences. @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id69}@anchor{36f} +@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id69}@anchor{371} @section @code{GNAT.Exceptions} (@code{g-except.ads}) @@ -24343,7 +24389,7 @@ predefined exceptions, and for example allows raising @code{Constraint_Error} with a message from a pure subprogram. @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id70}@anchor{371} +@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id70}@anchor{373} @section @code{GNAT.Expect} (@code{g-expect.ads}) @@ -24359,7 +24405,7 @@ It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id71}@anchor{373} +@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id71}@anchor{375} @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads}) @@ -24371,7 +24417,7 @@ ports. It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id72}@anchor{375} +@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id72}@anchor{377} @section @code{GNAT.Float_Control} (@code{g-flocon.ads}) @@ -24385,7 +24431,7 @@ library calls may cause this mode to be modified, and the Reset procedure in this package can be used to reestablish the required mode. @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id73}@anchor{377} +@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id73}@anchor{379} @section @code{GNAT.Formatted_String} (@code{g-forstr.ads}) @@ -24400,7 +24446,7 @@ derived from Integer, Float or enumerations as values for the formatted string. @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id74}@anchor{379} +@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id74}@anchor{37b} @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads}) @@ -24418,7 +24464,7 @@ have a vector implementation that can be automatically used by the compiler when auto-vectorization is enabled. @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id75}@anchor{37b} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id75}@anchor{37d} @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads}) @@ -24432,7 +24478,7 @@ access-to-procedure values. The algorithm used is a modified heap sort that performs approximately N*log(N) comparisons in the worst case. @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id76}@anchor{37d} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id76}@anchor{37f} @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads}) @@ -24448,7 +24494,7 @@ This differs from @code{GNAT.Heap_Sort} in having a less convenient interface, but may be slightly more efficient. @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id77}@anchor{37f} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id77}@anchor{381} @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads}) @@ -24462,7 +24508,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id78}@anchor{381} +@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id78}@anchor{383} @section @code{GNAT.HTable} (@code{g-htable.ads}) @@ -24475,7 +24521,7 @@ data. Provides two approaches, one a simple static approach, and the other allowing arbitrary dynamic hash tables. @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id79}@anchor{383} +@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id79}@anchor{385} @section @code{GNAT.IO} (@code{g-io.ads}) @@ -24491,7 +24537,7 @@ Standard_Input, and writing characters, strings and integers to either Standard_Output or Standard_Error. @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id80}@anchor{385} +@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id80}@anchor{387} @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads}) @@ -24505,7 +24551,7 @@ Provides some auxiliary functions for use with Text_IO, including a test for whether a file exists, and functions for reading a line of text. @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id81}@anchor{387} +@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id81}@anchor{389} @section @code{GNAT.Lock_Files} (@code{g-locfil.ads}) @@ -24519,7 +24565,7 @@ Provides a general interface for using files as locks. Can be used for providing program level synchronization. @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id82}@anchor{389} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id82}@anchor{38b} @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads}) @@ -24531,7 +24577,7 @@ The original implementation of @code{Ada.Numerics.Discrete_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id83}@anchor{38b} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id83}@anchor{38d} @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads}) @@ -24543,7 +24589,7 @@ The original implementation of @code{Ada.Numerics.Float_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id84}@anchor{38d} +@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id84}@anchor{38f} @section @code{GNAT.MD5} (@code{g-md5.ads}) @@ -24556,7 +24602,7 @@ the HMAC-MD5 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id85}@anchor{38f} +@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id85}@anchor{391} @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads}) @@ -24569,7 +24615,7 @@ standard output or standard error files. Uses GNAT.IO for actual output. @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id86}@anchor{391} +@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id86}@anchor{393} @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads}) @@ -24583,7 +24629,7 @@ various logging purposes, including duplicating functionality of some Ada 83 implementation dependent extensions. @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id87}@anchor{393} +@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id87}@anchor{395} @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads}) @@ -24599,7 +24645,7 @@ including a portable spawn procedure, and access to environment variables and error return codes. @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id88}@anchor{395} +@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id88}@anchor{397} @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads}) @@ -24617,7 +24663,7 @@ hashcode are in the same order. These hashing functions are very convenient for use with realtime applications. @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id89}@anchor{397} +@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{398}@anchor{gnat_rm/the_gnat_library id89}@anchor{399} @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads}) @@ -24629,7 +24675,7 @@ Provides random number capabilities which extend those available in the standard Ada library and are more convenient to use. @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{26d}@anchor{gnat_rm/the_gnat_library id90}@anchor{398} +@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{26f}@anchor{gnat_rm/the_gnat_library id90}@anchor{39a} @section @code{GNAT.Regexp} (@code{g-regexp.ads}) @@ -24645,7 +24691,7 @@ simplest of the three pattern matching packages provided, and is particularly suitable for ‘file globbing’ applications. @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id91}@anchor{39a} +@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id91}@anchor{39c} @section @code{GNAT.Registry} (@code{g-regist.ads}) @@ -24659,7 +24705,7 @@ registry API, but at a lower level of abstraction, refer to the Win32.Winreg package provided with the Win32Ada binding @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id92}@anchor{39c} +@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id92}@anchor{39e} @section @code{GNAT.Regpat} (@code{g-regpat.ads}) @@ -24674,7 +24720,7 @@ from the original V7 style regular expression library written in C by Henry Spencer (and binary compatible with this C library). @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id93}@anchor{39e} +@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id93}@anchor{3a0} @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads}) @@ -24688,7 +24734,7 @@ full content to be processed is not loaded into memory all at once. This makes this interface usable for large files or socket streams. @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id94}@anchor{3a0} +@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id94}@anchor{3a2} @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads}) @@ -24700,7 +24746,7 @@ Provides the capability to query the high water mark of the current task’s secondary stack. @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id95}@anchor{3a2} +@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id95}@anchor{3a4} @section @code{GNAT.Semaphores} (@code{g-semaph.ads}) @@ -24711,7 +24757,7 @@ secondary stack. Provides classic counting and binary semaphores using protected types. @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id96}@anchor{3a4} +@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id96}@anchor{3a6} @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads}) @@ -24723,7 +24769,7 @@ Provides a simple interface to send and receive data over a serial port. This is only supported on GNU/Linux and Windows. @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id97}@anchor{3a6} +@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id97}@anchor{3a8} @section @code{GNAT.SHA1} (@code{g-sha1.ads}) @@ -24736,7 +24782,7 @@ and RFC 3174, and the HMAC-SHA1 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id98}@anchor{3a8} +@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id98}@anchor{3aa} @section @code{GNAT.SHA224} (@code{g-sha224.ads}) @@ -24749,7 +24795,7 @@ and the HMAC-SHA224 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id99}@anchor{3aa} +@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id99}@anchor{3ac} @section @code{GNAT.SHA256} (@code{g-sha256.ads}) @@ -24762,7 +24808,7 @@ and the HMAC-SHA256 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id100}@anchor{3ac} +@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id100}@anchor{3ae} @section @code{GNAT.SHA384} (@code{g-sha384.ads}) @@ -24775,7 +24821,7 @@ and the HMAC-SHA384 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id101}@anchor{3ae} +@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id101}@anchor{3b0} @section @code{GNAT.SHA512} (@code{g-sha512.ads}) @@ -24788,7 +24834,7 @@ and the HMAC-SHA512 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id102}@anchor{3b0} +@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id102}@anchor{3b2} @section @code{GNAT.Signals} (@code{g-signal.ads}) @@ -24800,7 +24846,7 @@ Provides the ability to manipulate the blocked status of signals on supported targets. @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id103}@anchor{3b2} +@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id103}@anchor{3b4} @section @code{GNAT.Sockets} (@code{g-socket.ads}) @@ -24815,7 +24861,7 @@ on all native GNAT ports and on VxWorks cross ports. It is not implemented for the LynxOS cross port. @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id104}@anchor{3b4} +@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id104}@anchor{3b6} @section @code{GNAT.Source_Info} (@code{g-souinf.ads}) @@ -24829,7 +24875,7 @@ subprograms yielding the date and time of the current compilation (like the C macros @code{__DATE__} and @code{__TIME__}) @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id105}@anchor{3b6} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id105}@anchor{3b8} @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads}) @@ -24841,7 +24887,7 @@ Provides a function for determining whether one string is a plausible near misspelling of another string. @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id106}@anchor{3b8} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id106}@anchor{3ba} @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads}) @@ -24854,7 +24900,7 @@ determining whether one string is a plausible near misspelling of another string. @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id107}@anchor{3ba} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id107}@anchor{3bc} @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads}) @@ -24870,7 +24916,7 @@ the SNOBOL4 dynamic pattern construction and matching capabilities, using the efficient algorithm developed by Robert Dewar for the SPITBOL system. @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id108}@anchor{3bc} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id108}@anchor{3be} @section @code{GNAT.Spitbol} (@code{g-spitbo.ads}) @@ -24885,7 +24931,7 @@ useful for constructing arbitrary mappings from strings in the style of the SNOBOL4 TABLE function. @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id109}@anchor{3be} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id109}@anchor{3c0} @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads}) @@ -24900,7 +24946,7 @@ for type @code{Standard.Boolean}, giving an implementation of sets of string values. @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id110}@anchor{3c0} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id110}@anchor{3c2} @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads}) @@ -24917,7 +24963,7 @@ for type @code{Standard.Integer}, giving an implementation of maps from string to integer values. @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id111}@anchor{3c2} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id111}@anchor{3c4} @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads}) @@ -24934,7 +24980,7 @@ a variable length string type, giving an implementation of general maps from strings to strings. @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id112}@anchor{3c4} +@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id112}@anchor{3c6} @section @code{GNAT.SSE} (@code{g-sse.ads}) @@ -24946,7 +24992,7 @@ targets. It exposes vector component types together with a general introduction to the binding contents and use. @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id113}@anchor{3c6} +@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id113}@anchor{3c8} @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads}) @@ -24955,7 +25001,7 @@ introduction to the binding contents and use. SSE vector types for use with SSE related intrinsics. @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id114}@anchor{3c8} +@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id114}@anchor{3ca} @section @code{GNAT.String_Hash} (@code{g-strhas.ads}) @@ -24967,7 +25013,7 @@ Provides a generic hash function working on arrays of scalars. Both the scalar type and the hash result type are parameters. @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id115}@anchor{3ca} +@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id115}@anchor{3cc} @section @code{GNAT.Strings} (@code{g-string.ads}) @@ -24977,7 +25023,7 @@ Common String access types and related subprograms. Basically it defines a string access and an array of string access types. @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id116}@anchor{3cc} +@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id116}@anchor{3ce} @section @code{GNAT.String_Split} (@code{g-strspl.ads}) @@ -24991,7 +25037,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id117}@anchor{3ce} +@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id117}@anchor{3d0} @section @code{GNAT.Table} (@code{g-table.ads}) @@ -25011,7 +25057,7 @@ while an instantiation of @code{GNAT.Dynamic_Tables} creates a type that can be used to define dynamic instances of the table. @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id118}@anchor{3d0} +@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id118}@anchor{3d2} @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads}) @@ -25028,7 +25074,7 @@ single global task lock. Appropriate for use in situations where contention between tasks is very rarely expected. @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id119}@anchor{3d2} +@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id119}@anchor{3d4} @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads}) @@ -25043,7 +25089,7 @@ represents the current date and time in ISO 8601 format. This is a very simple routine with minimal code and there are no dependencies on any other unit. @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id120}@anchor{3d4} +@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id120}@anchor{3d6} @section @code{GNAT.Threads} (@code{g-thread.ads}) @@ -25060,7 +25106,7 @@ further details if your program has threads that are created by a non-Ada environment which then accesses Ada code. @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id121}@anchor{3d6} +@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id121}@anchor{3d8} @section @code{GNAT.Traceback} (@code{g-traceb.ads}) @@ -25072,7 +25118,7 @@ Provides a facility for obtaining non-symbolic traceback information, useful in various debugging situations. @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id122}@anchor{3d8} +@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id122}@anchor{3da} @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads}) @@ -25081,7 +25127,7 @@ in various debugging situations. @geindex Trace back facilities @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id123}@anchor{3da} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id123}@anchor{3dc} @section @code{GNAT.UTF_32} (@code{g-utf_32.ads}) @@ -25100,7 +25146,7 @@ lower case to upper case fold routine corresponding to the Ada 2005 rules for identifier equivalence. @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id124}@anchor{3dc} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id124}@anchor{3de} @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads}) @@ -25113,7 +25159,7 @@ near misspelling of another wide wide string, where the strings are represented using the UTF_32_String type defined in System.Wch_Cnv. @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id125}@anchor{3de} +@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id125}@anchor{3e0} @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads}) @@ -25125,7 +25171,7 @@ Provides a function for determining whether one wide string is a plausible near misspelling of another wide string. @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id126}@anchor{3e0} +@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id126}@anchor{3e2} @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads}) @@ -25139,7 +25185,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id127}@anchor{3e2} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id127}@anchor{3e4} @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads}) @@ -25151,7 +25197,7 @@ Provides a function for determining whether one wide wide string is a plausible near misspelling of another wide wide string. @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id128}@anchor{3e4} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id128}@anchor{3e6} @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads}) @@ -25165,7 +25211,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id129}@anchor{3e5}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e6} +@anchor{gnat_rm/the_gnat_library id129}@anchor{3e7}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e8} @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads}) @@ -25176,7 +25222,7 @@ for use with either manually or automatically generated bindings to C libraries. @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id130}@anchor{3e7}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3e8} +@anchor{gnat_rm/the_gnat_library id130}@anchor{3e9}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3ea} @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads}) @@ -25189,7 +25235,7 @@ This package is a binding for the most commonly used operations on C streams. @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id131}@anchor{3e9}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3ea} +@anchor{gnat_rm/the_gnat_library id131}@anchor{3eb}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3ec} @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads}) @@ -25204,7 +25250,7 @@ from a packed decimal format compatible with that used on IBM mainframes. @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id132}@anchor{3eb}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3ec} +@anchor{gnat_rm/the_gnat_library id132}@anchor{3ed}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3ee} @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads}) @@ -25218,7 +25264,7 @@ mainframes. This package provides a limited binding to the VxWorks API. @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id133}@anchor{3ed}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3ee} +@anchor{gnat_rm/the_gnat_library id133}@anchor{3ef}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3f0} @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads}) @@ -25241,7 +25287,7 @@ function codes. A particular use of this package is to enable the use of Get_Immediate under VxWorks. @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id134}@anchor{3ef}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f0} +@anchor{gnat_rm/the_gnat_library id134}@anchor{3f1}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f2} @section @code{System.Address_Image} (@code{s-addima.ads}) @@ -25257,7 +25303,7 @@ function that gives an (implementation dependent) string which identifies an address. @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id135}@anchor{3f1}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f2} +@anchor{gnat_rm/the_gnat_library id135}@anchor{3f3}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f4} @section @code{System.Assertions} (@code{s-assert.ads}) @@ -25273,7 +25319,7 @@ by an run-time assertion failure, as well as the routine that is used internally to raise this assertion. @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id136}@anchor{3f3}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f4} +@anchor{gnat_rm/the_gnat_library id136}@anchor{3f5}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f6} @section @code{System.Atomic_Counters} (@code{s-atocou.ads}) @@ -25287,7 +25333,7 @@ on most targets, including all Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9, x86, and x86_64 platforms. @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id137}@anchor{3f5}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f6} +@anchor{gnat_rm/the_gnat_library id137}@anchor{3f7}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f8} @section @code{System.Memory} (@code{s-memory.ads}) @@ -25305,7 +25351,7 @@ calls to this unit may be made for low level allocation uses (for example see the body of @code{GNAT.Tables}). @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id138}@anchor{3f7}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3f8} +@anchor{gnat_rm/the_gnat_library id138}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3fa} @section @code{System.Multiprocessors} (@code{s-multip.ads}) @@ -25318,7 +25364,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id139}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3fa} +@anchor{gnat_rm/the_gnat_library id139}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3fc} @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads}) @@ -25331,7 +25377,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id140}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3fc} +@anchor{gnat_rm/the_gnat_library id140}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3fe} @section @code{System.Partition_Interface} (@code{s-parint.ads}) @@ -25344,7 +25390,7 @@ is used primarily in a distribution context when using Annex E with @code{GLADE}. @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id141}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{3fe} +@anchor{gnat_rm/the_gnat_library id141}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{400} @section @code{System.Pool_Global} (@code{s-pooglo.ads}) @@ -25361,7 +25407,7 @@ declared. It uses malloc/free to allocate/free and does not attempt to do any automatic reclamation. @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id142}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{400} +@anchor{gnat_rm/the_gnat_library id142}@anchor{401}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{402} @section @code{System.Pool_Local} (@code{s-pooloc.ads}) @@ -25378,7 +25424,7 @@ a list of allocated blocks, so that all storage allocated for the pool can be freed automatically when the pool is finalized. @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id143}@anchor{401}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{402} +@anchor{gnat_rm/the_gnat_library id143}@anchor{403}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{404} @section @code{System.Restrictions} (@code{s-restri.ads}) @@ -25394,7 +25440,7 @@ compiler determined information on which restrictions are violated by one or more packages in the partition. @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id144}@anchor{403}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{404} +@anchor{gnat_rm/the_gnat_library id144}@anchor{405}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{406} @section @code{System.Rident} (@code{s-rident.ads}) @@ -25410,7 +25456,7 @@ since the necessary instantiation is included in package System.Restrictions. @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id145}@anchor{405}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{406} +@anchor{gnat_rm/the_gnat_library id145}@anchor{407}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{408} @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads}) @@ -25426,7 +25472,7 @@ stream attributes are applied to string types, but the subprograms in this package can be used directly by application programs. @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id146}@anchor{407}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{408} +@anchor{gnat_rm/the_gnat_library id146}@anchor{409}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{40a} @section @code{System.Unsigned_Types} (@code{s-unstyp.ads}) @@ -25439,7 +25485,7 @@ also contains some related definitions for other specialized types used by the compiler in connection with packed array types. @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id147}@anchor{409}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{40a} +@anchor{gnat_rm/the_gnat_library id147}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{40c} @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads}) @@ -25460,7 +25506,7 @@ encoding method. It uses definitions in package @code{System.Wch_Con}. @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id148}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40c} +@anchor{gnat_rm/the_gnat_library id148}@anchor{40d}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40e} @section @code{System.Wch_Con} (@code{s-wchcon.ads}) @@ -25472,7 +25518,7 @@ in ordinary strings. These definitions are used by the package @code{System.Wch_Cnv}. @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top -@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40d}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{40e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} +@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{410}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} @chapter Interfacing to Other Languages @@ -25490,7 +25536,7 @@ provided. @end menu @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{410} +@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{411}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{412} @section Interfacing to C @@ -25630,7 +25676,7 @@ of the length corresponding to the @code{type'Size} value in Ada. @end itemize @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{411} +@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{413} @section Interfacing to C++ @@ -25687,7 +25733,7 @@ The @code{External_Name} is the name of the C++ RTTI symbol. You can then cover a specific C++ exception in an exception handler. @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{412}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{413} +@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{414}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{415} @section Interfacing to COBOL @@ -25695,7 +25741,7 @@ Interfacing to COBOL is achieved as described in section B.4 of the Ada Reference Manual. @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{414}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{415} +@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{416}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{417} @section Interfacing to Fortran @@ -25705,7 +25751,7 @@ multi-dimensional array causes the array to be stored in column-major order as required for convenient interface to Fortran. @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{416}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{417} +@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{418}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{419} @section Interfacing to non-GNAT Ada code @@ -25729,7 +25775,7 @@ values or simple record types without variants, or simple array types with fixed bounds. @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top -@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{418}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{419}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} +@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{41a}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{41b}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} @chapter Specialized Needs Annexes @@ -25770,7 +25816,7 @@ in Ada 2005) is fully implemented. @end table @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top -@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41a}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41b}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} +@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41c}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} @chapter Implementation of Specific Ada Features @@ -25789,7 +25835,7 @@ facilities. @end menu @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41c}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{175} +@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41e}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{177} @section Machine Code Insertions @@ -25957,7 +26003,7 @@ according to normal visibility rules. In particular if there is no qualification is required. @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{41e} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{420} @section GNAT Implementation of Tasking @@ -25973,7 +26019,7 @@ to compliance with the Real-Time Systems Annex. @end menu @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{420} +@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{421}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{422} @subsection Mapping Ada Tasks onto the Underlying Kernel Threads @@ -26042,7 +26088,7 @@ support this functionality when the parent contains more than one task. @geindex Forking a new process @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{421}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{422} +@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{423}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{424} @subsection Ensuring Compliance with the Real-Time Annex @@ -26093,7 +26139,7 @@ placed at the end. @c Support_for_Locking_Policies @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{423} +@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{425} @subsection Support for Locking Policies @@ -26127,7 +26173,7 @@ then ceiling locking is used. Otherwise, the @code{Ceiling_Locking} policy is ignored. @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{424}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{425} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{427} @section GNAT Implementation of Shared Passive Packages @@ -26225,7 +26271,7 @@ This is used to provide the required locking semantics for proper protected object synchronization. @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{427} +@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{429} @section Code Generation for Array Aggregates @@ -26256,7 +26302,7 @@ component values and static subtypes also lead to simpler code. @end menu @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{429} +@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{42b} @subsection Static constant aggregates with static bounds @@ -26303,7 +26349,7 @@ Zero2: constant two_dim := (others => (others => 0)); @end example @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{42b} +@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{42d} @subsection Constant aggregates with unconstrained nominal types @@ -26318,7 +26364,7 @@ Cr_Unc : constant One_Unc := (12,24,36); @end example @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42d} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42f} @subsection Aggregates with static bounds @@ -26346,7 +26392,7 @@ end loop; @end example @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{42f} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{431} @subsection Aggregates with nonstatic bounds @@ -26357,7 +26403,7 @@ have to be applied to sub-arrays individually, if they do not have statically compatible subtypes. @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{431} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{433} @subsection Aggregates in assignment statements @@ -26399,7 +26445,7 @@ a temporary (created either by the front-end or the code generator) and then that temporary will be copied onto the target. @node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{433} +@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{435} @section The Size of Discriminated Records with Default Discriminants @@ -26479,7 +26525,7 @@ say) must be consistent, so it is imperative that the object, once created, remain invariant. @node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{435} +@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{437} @section Image Values For Nonscalar Types @@ -26499,7 +26545,7 @@ control of image text is required for some type T, then T’Put_Image should be explicitly specified. @node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{437} +@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{438}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{439} @section Strict Conformance to the Ada Reference Manual @@ -26526,7 +26572,7 @@ behavior (although at the cost of a significant performance penalty), so infinite and NaN values are properly generated. @node Implementation of Ada 2012 Features,GNAT language extensions,Implementation of Specific Ada Features,Top -@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{438}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{439}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14} +@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{43a}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{43b}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14} @chapter Implementation of Ada 2012 Features @@ -28692,7 +28738,7 @@ RM References: 4.03.01 (17) @end itemize @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2012 Features,Top -@anchor{gnat_rm/gnat_language_extensions doc}@anchor{43a}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{43b}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{43c} +@anchor{gnat_rm/gnat_language_extensions doc}@anchor{43c}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{43d}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{43e} @chapter GNAT language extensions @@ -28723,7 +28769,7 @@ prototyping phase. @end menu @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{43d} +@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{43f} @section How to activate the extended GNAT Ada superset @@ -28762,7 +28808,7 @@ for serious projects, and is only means as a playground/technology preview. @end cartouche @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{43e}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{69} +@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{440}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{69} @section Curated Extensions @@ -28779,7 +28825,7 @@ for serious projects, and is only means as a playground/technology preview. @end menu @node Local Declarations Without Block,Conditional when constructs,,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{43f} +@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{441} @subsection Local Declarations Without Block @@ -28802,7 +28848,7 @@ end if; @end example @node Conditional when constructs,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{440} +@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{442} @subsection Conditional when constructs @@ -28874,7 +28920,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-conditional-when-constructs.rst} @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Conditional when constructs,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{441} +@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{443} @subsection Fixed lower bounds for array types and subtypes @@ -28928,7 +28974,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-fixed-lower-bound.rst} @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{442} +@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{444} @subsection Prefixed-view notation for calls to primitive subprograms of untagged types @@ -28981,7 +29027,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-prefixed-untagged.rst} @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{443} +@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{445} @subsection Expression defaults for generic formal functions @@ -29010,7 +29056,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-expression-functions-as-default-for-generic-formal-function-parameters.rst} @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{444} +@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{446} @subsection String interpolation @@ -29176,7 +29222,7 @@ Here is a link to the original RFC : @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-string-interpolation.rst} @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{445} +@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{447} @subsection Constrained attribute for generic objects @@ -29184,7 +29230,7 @@ The @code{Constrained} attribute is permitted for objects of generic types. The result indicates whether the corresponding actual is constrained. @node Static aspect on intrinsic functions,,Constrained attribute for generic objects,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{446} +@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{448} @subsection @code{Static} aspect on intrinsic functions @@ -29193,7 +29239,7 @@ and the compiler will evaluate some of these intrinsics statically, in particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6a}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{447} +@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6a}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{449} @section Experimental Language Extensions @@ -29207,7 +29253,7 @@ particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. @end menu @node Storage Model,Attribute Super,,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{448} +@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{44a} @subsection Storage Model @@ -29222,7 +29268,7 @@ Here is a link to the full RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-storage-model.rst} @node Attribute Super,Simpler accessibility model,Storage Model,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{449} +@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{44b} @subsection Attribute Super @@ -29252,7 +29298,7 @@ Here is a link to the full RFC: @indicateurl{https://github.com/QuentinOchem/ada-spark-rfcs/blob/oop/considered/rfc-oop-super.rst} @node Simpler accessibility model,Case pattern matching,Attribute Super,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{44a} +@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{44c} @subsection Simpler accessibility model @@ -29265,7 +29311,7 @@ Here is a link to the full RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-simpler-accessibility.md} @node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler accessibility model,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{44b} +@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{44d} @subsection Case pattern matching @@ -29397,7 +29443,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-pattern-matching.rst} @node Mutably Tagged Types with Size’Class Aspect,,Case pattern matching,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{44c} +@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{44e} @subsection Mutably Tagged Types with Size’Class Aspect @@ -29437,7 +29483,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/topic/rfc-finally/considered/rfc-class-size.md} @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top -@anchor{gnat_rm/security_hardening_features doc}@anchor{44d}@anchor{gnat_rm/security_hardening_features id1}@anchor{44e}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15} +@anchor{gnat_rm/security_hardening_features doc}@anchor{44f}@anchor{gnat_rm/security_hardening_features id1}@anchor{450}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15} @chapter Security Hardening Features @@ -29459,7 +29505,7 @@ change. @end menu @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features -@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{44f} +@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{451} @section Register Scrubbing @@ -29495,7 +29541,7 @@ programming languages, see @cite{Using the GNU Compiler Collection (GCC)}. @c Stack Scrubbing: @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features -@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{450} +@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{452} @section Stack Scrubbing @@ -29639,7 +29685,7 @@ Bar_Callable_Ptr. @c Hardened Conditionals: @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features -@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{451} +@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{453} @section Hardened Conditionals @@ -29729,7 +29775,7 @@ be used with other programming languages supported by GCC. @c Hardened Booleans: @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features -@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{452} +@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{454} @section Hardened Booleans @@ -29790,7 +29836,7 @@ and more details on that attribute, see @cite{Using the GNU Compiler Collection @c Control Flow Redundancy: @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features -@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{453} +@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{455} @section Control Flow Redundancy @@ -29958,7 +30004,7 @@ see @cite{Using the GNU Compiler Collection (GCC)}. These options can be used with other programming languages supported by GCC. @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top -@anchor{gnat_rm/obsolescent_features doc}@anchor{454}@anchor{gnat_rm/obsolescent_features id1}@anchor{455}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16} +@anchor{gnat_rm/obsolescent_features doc}@anchor{456}@anchor{gnat_rm/obsolescent_features id1}@anchor{457}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16} @chapter Obsolescent Features @@ -29977,7 +30023,7 @@ compatibility purposes. @end menu @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id2}@anchor{456}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{457} +@anchor{gnat_rm/obsolescent_features id2}@anchor{458}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{459} @section pragma No_Run_Time @@ -29990,7 +30036,7 @@ preferred usage is to use an appropriately configured run-time that includes just those features that are to be made accessible. @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id3}@anchor{458}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{459} +@anchor{gnat_rm/obsolescent_features id3}@anchor{45a}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{45b} @section pragma Ravenscar @@ -29999,7 +30045,7 @@ The pragma @code{Ravenscar} has exactly the same effect as pragma is part of the new Ada 2005 standard. @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id4}@anchor{45a}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{45b} +@anchor{gnat_rm/obsolescent_features id4}@anchor{45c}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{45d} @section pragma Restricted_Run_Time @@ -30009,7 +30055,7 @@ preferred since the Ada 2005 pragma @code{Profile} is intended for this kind of implementation dependent addition. @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id5}@anchor{45c}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{45d} +@anchor{gnat_rm/obsolescent_features id5}@anchor{45e}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{45f} @section pragma Task_Info @@ -30035,7 +30081,7 @@ in the spec of package System.Task_Info in the runtime library. @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features -@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{45e}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{45f} +@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{460}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{461} @section package System.Task_Info (@code{s-tasinf.ads}) @@ -30045,7 +30091,7 @@ to support the @code{Task_Info} pragma. The predefined Ada package standard replacement for GNAT’s @code{Task_Info} functionality. @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top -@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{460}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{461} +@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{462}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{463} @chapter Compatibility and Porting Guide @@ -30067,7 +30113,7 @@ applications developed in other Ada environments. @end menu @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{462}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{463} +@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{464}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{465} @section Writing Portable Fixed-Point Declarations @@ -30189,7 +30235,7 @@ If you follow this scheme you will be guaranteed that your fixed-point types will be portable. @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{464}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{465} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{466}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{467} @section Compatibility with Ada 83 @@ -30217,7 +30263,7 @@ following subsections treat the most likely issues to be encountered. @end menu @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{466}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{467} +@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{468}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{469} @subsection Legal Ada 83 programs that are illegal in Ada 95 @@ -30317,7 +30363,7 @@ the fix is usually simply to add the @code{(<>)} to the generic declaration. @end itemize @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{468}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{469} +@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{46a}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{46b} @subsection More deterministic semantics @@ -30345,7 +30391,7 @@ which open select branches are executed. @end itemize @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{46a}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{46b} +@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{46c}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{46d} @subsection Changed semantics @@ -30387,7 +30433,7 @@ covers only the restricted range. @end itemize @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{46c}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{46d} +@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{46e}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{46f} @subsection Other language compatibility issues @@ -30420,7 +30466,7 @@ include @code{pragma Interface} and the floating point type attributes @end itemize @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{46e}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{46f} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{470}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{471} @section Compatibility between Ada 95 and Ada 2005 @@ -30492,7 +30538,7 @@ can declare a function returning a value from an anonymous access type. @end itemize @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{470}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{471} +@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{472}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{473} @section Implementation-dependent characteristics @@ -30515,7 +30561,7 @@ transition from certain Ada 83 compilers. @end menu @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{472}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{473} +@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{474}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{475} @subsection Implementation-defined pragmas @@ -30537,7 +30583,7 @@ avoiding compiler rejection of units that contain such pragmas; they are not relevant in a GNAT context and hence are not otherwise implemented. @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{474}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{475} +@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{476}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{477} @subsection Implementation-defined attributes @@ -30551,7 +30597,7 @@ Ada 83, GNAT supplies the attributes @code{Bit}, @code{Machine_Size} and @code{Type_Class}. @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{476}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{477} +@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{478}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{479} @subsection Libraries @@ -30580,7 +30626,7 @@ be preferable to retrofit the application using modular types. @end itemize @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{478}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{479} +@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{47a}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{47b} @subsection Elaboration order @@ -30616,7 +30662,7 @@ pragmas either globally (as an effect of the `-gnatE' switch) or locally @end itemize @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{47a}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{47b} +@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{47c}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{47d} @subsection Target-specific aspects @@ -30629,10 +30675,10 @@ on the robustness of the original design. Moreover, Ada 95 (and thus Ada 2005 and Ada 2012) are sometimes incompatible with typical Ada 83 compiler practices regarding implicit packing, the meaning of the Size attribute, and the size of access values. -GNAT’s approach to these issues is described in @ref{47c,,Representation Clauses}. +GNAT’s approach to these issues is described in @ref{47e,,Representation Clauses}. @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{47d}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{47e} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{47f}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{480} @section Compatibility with Other Ada Systems @@ -30675,7 +30721,7 @@ far beyond this minimal set, as described in the next section. @end itemize @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{47f}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{47c} +@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{481}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{47e} @section Representation Clauses @@ -30768,7 +30814,7 @@ with thin pointers. @end itemize @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{480}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{481} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{482}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{483} @section Compatibility with HP Ada 83 @@ -30798,7 +30844,7 @@ extension of package System. @end itemize @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top -@anchor{share/gnu_free_documentation_license doc}@anchor{482}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{483} +@anchor{share/gnu_free_documentation_license doc}@anchor{484}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{485} @chapter GNU Free Documentation License diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index db06a771dddd6..bba4f25aa13c7 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -29666,8 +29666,8 @@ to permit their use in free software. @printindex ge -@anchor{d1}@w{ } @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } +@anchor{d1}@w{ } @c %**end of body @bye From 664e47e64cdb8b12dbf7051b9bda9fbac54fb27a Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 17 May 2024 10:13:05 +0200 Subject: [PATCH 041/114] ada: Update Bit Ordering references in GNAT Reference Manual They are still tailored to Ada 95 while the level of recommended support for Bit Ordering was changed in Ada 2005. gcc/ada/ * doc/gnat_rm/implementation_advice.rst (Representation Clauses): Remove >> marker and add end of sentence after code-block directive. (RM 13.5.3(7-8)): Update to Ada 2005 wording. * doc/gnat_rm/implementation_defined_characteristics.rst (RM 13.5.3(5)): Likewise. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate. --- gcc/ada/doc/gnat_rm/implementation_advice.rst | 15 +++++---- ...implementation_defined_characteristics.rst | 4 +-- gcc/ada/gnat_rm.texi | 31 +++++++++---------- gcc/ada/gnat_ugn.texi | 2 +- 4 files changed, 24 insertions(+), 28 deletions(-) diff --git a/gcc/ada/doc/gnat_rm/implementation_advice.rst b/gcc/ada/doc/gnat_rm/implementation_advice.rst index f2f34db6835ca..435cfa412ce9f 100644 --- a/gcc/ada/doc/gnat_rm/implementation_advice.rst +++ b/gcc/ada/doc/gnat_rm/implementation_advice.rst @@ -302,14 +302,15 @@ RM 13.1 (21-24): Representation Clauses Followed. In fact, GNAT goes beyond the recommended level of support by allowing nonstatic expressions in some representation clauses even without the need to declare constants initialized with the values of -such expressions. -For example: +such expressions. For example: .. code-block:: ada X : Integer; Y : Float; - for Y'Address use X'Address;>> + for Y'Address use X'Address; + +is accepted directly by GNAT. "An implementation need not support a specification for the ``Size`` @@ -585,12 +586,10 @@ RM 13.5.3(7-8): Bit Ordering "The recommended level of support for the non-default bit ordering is: - If ``Word_Size`` = ``Storage_Unit``, then the implementation - should support the non-default bit ordering in addition to the default - bit ordering." + The implementation should support the nondefault bit ordering in addition + to the default bit ordering." -Followed. Word size does not equal storage size in this implementation. -Thus non-default bit ordering is not supported. +Followed. .. index:: Address, as private type diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst b/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst index 0d3f340f1c7db..54bcd0c173249 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst @@ -554,9 +554,7 @@ which contains a pointer to the dispatching table. "If ``Word_Size`` = ``Storage_Unit``, the default bit ordering. See 13.5.3(5)." -``Word_Size`` (32) is not the same as ``Storage_Unit`` (8) for this -implementation, so no non-default bit ordering is supported. The default -bit ordering corresponds to the natural endianness of the target architecture. +``Word_Size`` does not equal ``Storage_Unit`` in this implementation. * "The contents of the visible part of package ``System``. See 13.7(2)." diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 0c15ad511fa4e..553e4174d4708 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -14363,21 +14363,24 @@ declared before the entity.” Followed. In fact, GNAT goes beyond the recommended level of support by allowing nonstatic expressions in some representation clauses even without the need to declare constants initialized with the values of -such expressions. -For example: +such expressions. For example: @example - X : Integer; - Y : Float; - for Y'Address use X'Address;>> +X : Integer; +Y : Float; +for Y'Address use X'Address; +@end example + +is accepted directly by GNAT. +@quotation -"An implementation need not support a specification for the `@w{`}Size`@w{`} +“An implementation need not support a specification for the @code{Size} for a given composite subtype, nor the size or storage place for an object (including a component) of a given composite subtype, unless the constraints on the subtype and its composite subcomponents (if any) are -all static constraints." -@end example +all static constraints.” +@end quotation Followed. Size Clauses are not permitted on nonstatic components, as described above. @@ -14747,13 +14750,11 @@ Followed. There are no such components in GNAT. “The recommended level of support for the non-default bit ordering is: -If @code{Word_Size} = @code{Storage_Unit}, then the implementation -should support the non-default bit ordering in addition to the default -bit ordering.” +The implementation should support the nondefault bit ordering in addition +to the default bit ordering.” @end quotation -Followed. Word size does not equal storage size in this implementation. -Thus non-default bit ordering is not supported. +Followed. @geindex Address @geindex as private type @@ -16787,9 +16788,7 @@ which contains a pointer to the dispatching table. ordering. See 13.5.3(5).” @end itemize -@code{Word_Size} (32) is not the same as @code{Storage_Unit} (8) for this -implementation, so no non-default bit ordering is supported. The default -bit ordering corresponds to the natural endianness of the target architecture. +@code{Word_Size} does not equal @code{Storage_Unit} in this implementation. @itemize * diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index bba4f25aa13c7..db06a771dddd6 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -29666,8 +29666,8 @@ to permit their use in free software. @printindex ge -@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } @anchor{d1}@w{ } +@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } @c %**end of body @bye From ce59982c28e19b2c478e12e4afc7b03e8793498b Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 19 May 2024 15:45:34 +0200 Subject: [PATCH 042/114] ada: Enforce strict alignment for array types with aliased component This was initially implemented as part of AI12-001 but immediately disabled because it breaks Florist on 32-bit platforms. However, it is possible to reenable it in almost all cases without affecting Florist, and the -gnatd_l switch can now be used to disable it again. gcc/ada/ * debug.adb (d_l): Document new usage for the compiler. * freeze.adb (Check_Strict_Alignment): Set the Strict_Alignment flag on array types with aliased component, except if the component size is equal to the storage unit or the -gnatd_l switch is specified. --- gcc/ada/debug.adb | 5 ++++- gcc/ada/freeze.adb | 30 ++++++++++++++++++------------ 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index 97f88b7664f3f..f7fcd399769a8 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -148,7 +148,7 @@ package body Debug is -- d_i Ignore activations and calls to instances for elaboration -- d_j Read JSON files and populate Repinfo tables (opposite of -gnatRjs) -- d_k In CodePeer mode disable expansion of assertion checks - -- d_l + -- d_l Disable strict alignment of array types with aliased component -- d_m -- d_n -- d_o @@ -989,6 +989,9 @@ package body Debug is -- enabled, expansion of assertion expressions is controlled by -- pragma Assertion_Policy. + -- d_l The compiler does not enforce the strict alignment of array types + -- that are declared with an aliased component. + -- d_p The compiler ignores calls to subprograms which verify the run-time -- semantics of invariants and postconditions in both the static and -- dynamic elaboration models. diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index d0dd1de087d83..3c3d038c3925a 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -2374,18 +2374,24 @@ package body Freeze is elsif Is_Array_Type (E) then Set_Strict_Alignment (E, Strict_Alignment (Component_Type (E))); - -- ??? AI12-001: Any component of a packed type that contains an - -- aliased part must be aligned according to the alignment of its - -- subtype (RM 13.2(7)). This means that the following test: - - -- if Has_Aliased_Components (E) then - -- Set_Strict_Alignment (E); - -- end if; - - -- should be implemented here. Unfortunately it would break Florist, - -- which has the bad habit of overaligning all the types it declares - -- on 32-bit platforms. Other legacy codebases could also be affected - -- because this check has historically been missing in GNAT. + -- RM 13.2(7.1/4): Any component of a packed type that contains an + -- aliased part shall be aligned according to the alignment of its + -- subtype. + + -- Unfortunately this breaks Florist, which has had the bad habit + -- of overaligning all the types it declares on 32-bit platforms, + -- so make an exception if the component size is the storage unit. + + -- Other legacy codebases could also be affected because this was + -- historically not enforced, so -gnatd_l can be used to disable it. + + if Has_Aliased_Components (E) + and then not (Known_Component_Size (E) + and then Component_Size (E) = System_Storage_Unit) + and then not Debug_Flag_Underscore_L + then + Set_Strict_Alignment (E); + end if; elsif Is_Record_Type (E) then Comp := First_Component (E); From 9cf95147c04c64344466f6e41ce5be32fbde96e0 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 20 May 2024 14:33:14 +0200 Subject: [PATCH 043/114] ada: Fix crash on real literal in declare expression of expression function The problem is that the freeze node of the type to which the real literal is resolved is placed inside the expression function instead of outside. gcc/ada/ * freeze.adb (Freeze_Expression): Also attach pending freeze nodes to the parent in the case of an internal block in a spec expression. --- gcc/ada/freeze.adb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 3c3d038c3925a..1867880b314b4 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -8872,7 +8872,8 @@ package body Freeze is end if; -- The current scope may be that of a constrained component of - -- an enclosing record declaration, or of a loop of an enclosing + -- an enclosing record declaration, or a block of an enclosing + -- declare expression in Ada 2022, or of a loop of an enclosing -- quantified expression or aggregate with an iterated component -- in Ada 2022, which is above the current scope in the scope -- stack. Indeed in the context of a quantified expression or @@ -8884,7 +8885,7 @@ package body Freeze is if not Is_Compilation_Unit (Current_Scope) and then (Is_Record_Type (Scope (Current_Scope)) - or else (Ekind (Current_Scope) = E_Loop + or else (Ekind (Current_Scope) in E_Block | E_Loop and then Is_Internal (Current_Scope))) then Pos := Pos - 1; From 3a16f19777f882f98b6d901a81157779e898f636 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 20 May 2024 18:08:07 +0200 Subject: [PATCH 044/114] ada: Fix bogus error with "=" operator on array of private unchecked union The code is legal and, therefore, must be accepted by the compiler, but it must raise Program_Error at run time due to operands not having inferable discriminants and a warning be given at compile time (RM B.3.3(22-23)). gcc/ada/ * exp_ch4.adb (Expand_Array_Equality.Component_Equality): Copy the Comes_From_Source flag from the original test to the new one, and remove obsolete code dealing with unchecked unions. * sem_util.adb (Has_Inferable_Discriminants): Return False for an incomplete or private nominal subtype. --- gcc/ada/exp_ch4.adb | 27 +++++++++------------------ gcc/ada/sem_util.adb | 7 +++++-- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 7349dfc306fca..983f66231a2c1 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -1570,26 +1570,17 @@ package body Exp_Ch4 is (Outer_Type => Typ, Nod => Nod, Comp_Type => Component_Type (Typ), Lhs => L, Rhs => R); - -- If some (sub)component is an unchecked_union, the whole operation - -- will raise program error. + -- This is necessary to give the warning about Program_Error being + -- raised when some (sub)component is an unchecked_union. - if Nkind (Test) = N_Raise_Program_Error then + Preserve_Comes_From_Source (Test, Nod); - -- This node is going to be inserted at a location where a - -- statement is expected: clear its Etype so analysis will set - -- it to the expected Standard_Void_Type. - - Set_Etype (Test, Empty); - return Test; - - else - return - Make_Implicit_If_Statement (Nod, - Condition => Make_Op_Not (Loc, Right_Opnd => Test), - Then_Statements => New_List ( - Make_Simple_Return_Statement (Loc, - Expression => New_Occurrence_Of (Standard_False, Loc)))); - end if; + return + Make_Implicit_If_Statement (Nod, + Condition => Make_Op_Not (Loc, Right_Opnd => Test), + Then_Statements => New_List ( + Make_Simple_Return_Statement (Loc, + Expression => New_Occurrence_Of (Standard_False, Loc)))); end Component_Equality; ------------------ diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 8425359e052fb..4cdac9443e6db 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -12119,11 +12119,14 @@ package body Sem_Util is and then Is_Constrained (Etype (Subtype_Mark (N))); -- For all other names, it is sufficient to have a constrained - -- Unchecked_Union nominal subtype. + -- Unchecked_Union nominal subtype, unless it is incomplete or + -- private because it cannot have a known discriminant part in + -- this case (RM B.3.3 (11/2)). else return Is_Unchecked_Union (Etype (N)) - and then Is_Constrained (Etype (N)); + and then Is_Constrained (Etype (N)) + and then not Is_Incomplete_Or_Private_Type (Etype (N)); end if; end Has_Inferable_Discriminants; From 980fddd8d90c97d44074021c6121a8d134e6c88c Mon Sep 17 00:00:00 2001 From: Doug Rupp Date: Sat, 3 Feb 2024 04:18:51 -0800 Subject: [PATCH 045/114] ada: New pragma to default all interrupts to system. New pragma Interrupts_System_By_Default defaults all interrupts/signals to system (which will inhibit the installation of default signal handlers). Note this changes the ALI format: it optionally adds an identifier to the 'P' line (similar to pragma Unreserve_All_Interrupts). As per comment in lib-writ spec regarding new modifiers, adding modifiers to the P line is always safe. Also note this does not introduce a bootstrap problem because the compiler and binder do not set the underlying _gl global nor do they use this pragma. gcc/ada/ * ali.ads (Interrupts_Default_To_System): New boolean. (Interrupts_Default_To_System_Specified): New boolean. * ali.adb (Interrupts_Default_To_System_Specified): Initialize. (Interrupts_Default_To_System): Initialize. (Scan_ALI): Processing for "ID". * bindgen.adb: Coallesce comments on interrupt settings to ... (Gen_Adainit): Import Interrupts_Default_To_System flag and set if pragma specified. (Gen_Output_File_Ada): Generate Local_Interrupt_States according to pragma. * init.c: ... here. [vxworks] (__gnat_install_handler): Test for interrupt_state. (__gl_interrupts_default_to_system): New global flag. (__gnat_get_interrupt_State): return interrupt state according to new global flag. * lib-writ.ads: Document "ID". * lib-writ.adb: Write out "ID". * opt.ads (Interrupts_System_By_Default): New boolean, defaulted to False. * par-prag.adb (Pragma_Interrupts_System_By_Default): New. * sem_prag.adb (Pragma_Interrupts_System_By_Default): Handle it. (Pragma_Interrupts_System_By_Default): Default it. * snames.ads-tmpl (Name_Interrupts_System_By_Default): New name. (Pragma_Interrupts_System_By_Default): New * libgnarl/s-intman__posix.adb (Initialize): Ensure the Keep_Unmasked signal is sigset-able. * doc/gnat_rm/implementation_defined_pragmas.rst: Document pragma Interrupts_System_By_Default. * doc/gnat_ugn/the_gnat_compilation_model.rst (Configuration pragmas): Add Interrupts_System_By_Default. (Partition-Wide Settings): Mention pragma Interrupts_System_By_Default. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate. --- gcc/ada/ali.adb | 9 + gcc/ada/ali.ads | 6 + gcc/ada/bindgen.adb | 20 +- .../implementation_defined_pragmas.rst | 13 + .../gnat_ugn/the_gnat_compilation_model.rst | 4 + gcc/ada/gnat_rm.texi | 1538 +++++++++-------- gcc/ada/gnat_ugn.texi | 6 +- gcc/ada/init.c | 34 +- gcc/ada/lib-writ.adb | 4 + gcc/ada/lib-writ.ads | 5 + gcc/ada/libgnarl/s-intman__posix.adb | 24 +- gcc/ada/opt.ads | 4 + gcc/ada/par-prag.adb | 1 + gcc/ada/sem_prag.adb | 13 + gcc/ada/snames.ads-tmpl | 2 + 15 files changed, 904 insertions(+), 779 deletions(-) diff --git a/gcc/ada/ali.adb b/gcc/ada/ali.adb index 7c7f790325b95..bde73b9810b22 100644 --- a/gcc/ada/ali.adb +++ b/gcc/ada/ali.adb @@ -665,6 +665,7 @@ package body ALI is No_Object_Specified := False; No_Component_Reordering_Specified := False; GNATprove_Mode_Specified := False; + Interrupts_Default_To_System_Specified := False; Normalize_Scalars_Specified := False; Partition_Elaboration_Policy_Specified := ' '; Queuing_Policy_Specified := ' '; @@ -1750,6 +1751,7 @@ package body ALI is First_Specific_Dispatching => Specific_Dispatching.Last + 1, First_Unit => No_Unit_Id, GNATprove_Mode => False, + Interrupts_Default_To_System => False, Invocation_Graph_Encoding => No_Encoding, Last_CUDA_Kernel => CUDA_Kernels.Last, Last_Interrupt_State => Interrupt_States.Last, @@ -2005,6 +2007,13 @@ package body ALI is GNATprove_Mode_Specified := True; ALIs.Table (Id).GNATprove_Mode := True; + -- Processing for ID (Interrupts Default to System) + + elsif C = 'I' then + Checkc ('D'); + Interrupts_Default_To_System_Specified := True; + ALIs.Table (Id).Interrupts_Default_To_System := True; + -- Processing for Lx elsif C = 'L' then diff --git a/gcc/ada/ali.ads b/gcc/ada/ali.ads index 1f45226868188..1dbe24b22a79a 100644 --- a/gcc/ada/ali.ads +++ b/gcc/ada/ali.ads @@ -227,6 +227,9 @@ package ALI is -- signalled by GP appearing on the P line. Not set if 'P' appears in -- Ignore_Lines. + Interrupts_Default_To_System : Boolean; + -- Set to True if pragma Interrupts_System_By_Default is seen; + No_Component_Reordering : Boolean; -- Set to True if file was compiled with a configuration pragma file -- containing pragma No_Component_Reordering. Not set if 'P' appears @@ -591,6 +594,9 @@ package ALI is Initialize_Scalars_Used : Boolean := False; -- Set True if an ali file contains the Initialize_Scalars flag + Interrupts_Default_To_System_Specified : Boolean := False; + -- Set to True if an pragma Interrupts_System_By_Default is seen. + Locking_Policy_Specified : Character := ' '; -- Set to blank by Initialize_ALI. Set to the appropriate locking policy -- character if an ali file contains a P line setting the locking policy. diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index f15f96495df26..89b2b88395bcd 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -273,9 +273,8 @@ package body Bindgen is -- such a pragma is given (the string will be a null string if no pragmas -- were used). If pragma were present the entries apply to the interrupts -- in sequence from the first interrupt, and are set to one of four - -- possible settings: 'n' for not specified, 'u' for user, 'r' for run - -- time, 's' for system, see description of Interrupt_State pragma for - -- further details. + -- possible settings: 'n', 'u', 'r', 's', see description in init.c + -- (__gnat_get_interrupt_state) for further details. -- Num_Interrupt_States is the length of the Interrupt_States string. It -- will be set to zero if no Interrupt_State pragmas are present. @@ -819,6 +818,10 @@ package body Bindgen is WBI (" pragma Import (C, XDR_Stream, ""__gl_xdr_stream"");"); end if; + WBI (" Interrupts_Default_To_System : Integer;"); + WBI (" pragma Import (C, Interrupts_Default_To_System, " & + """__gl_interrupts_default_to_system"");"); + -- Import entry point for initialization of the runtime WBI (""); @@ -1040,6 +1043,11 @@ package body Bindgen is Set_String (";"); Write_Statement_Buffer; + if Interrupts_Default_To_System_Specified then + Set_String (" Interrupts_Default_To_System := 1;"); + Write_Statement_Buffer; + end if; + if Leap_Seconds_Support then WBI (" Leap_Seconds_Support := 1;"); end if; @@ -3505,7 +3513,11 @@ package body Bindgen is begin while IS_Pragma_Settings.Last < Inum loop - IS_Pragma_Settings.Append ('n'); + if Interrupts_Default_To_System_Specified then + IS_Pragma_Settings.Append ('s'); + else + IS_Pragma_Settings.Append ('n'); + end if; end loop; IS_Pragma_Settings.Table (Inum) := Stat; diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst index acfa729dd4c88..6c08eaee81656 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst @@ -3185,6 +3185,19 @@ Overriding the default state of signals used by the Ada runtime may interfere with an application's runtime behavior in the cases of the synchronous signals, and in the case of the signal used to implement the ``abort`` statement. +Pragma Interrupts_System_By_Default +=================================== + +Syntax: + + +:: + + pragma Interrupts_System_By_Default; + +Default all interrupts to the System state as defined above in pragma +``Interrupt_State``. This is a configuration pragma. + .. _Pragma-Invariant: Pragma Invariant diff --git a/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst b/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst index fd15459203a5c..74c547229213e 100644 --- a/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst +++ b/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst @@ -1430,6 +1430,7 @@ recognized by GNAT:: Implicit_Packing Initialize_Scalars Interrupt_State + Interrupts_System_By_Default License Locking_Policy No_Component_Reordering @@ -4517,6 +4518,9 @@ then you need to instruct the Ada part not to install its own signal handler. This is done using ``pragma Interrupt_State`` that provides a general mechanism for overriding such uses of interrupts. +Additionally, ``pragma Interrupts_System_By_Default`` can be used to default +all interrupts to System. + The set of interrupts for which the Ada run-time library sets a specific signal handler is the following: diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 553e4174d4708..c578502983c1c 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -187,6 +187,7 @@ Implementation Defined Pragmas * Pragma Interface_Name:: * Pragma Interrupt_Handler:: * Pragma Interrupt_State:: +* Pragma Interrupts_System_By_Default:: * Pragma Invariant:: * Pragma Keep_Names:: * Pragma License:: @@ -1310,6 +1311,7 @@ consideration, the use of these pragmas should be minimized. * Pragma Interface_Name:: * Pragma Interrupt_Handler:: * Pragma Interrupt_State:: +* Pragma Interrupts_System_By_Default:: * Pragma Invariant:: * Pragma Keep_Names:: * Pragma License:: @@ -4605,7 +4607,7 @@ pragma Interrupt_Handler (procedure_LOCAL_NAME); This program unit pragma is supported for parameterless protected procedures as described in Annex C of the Ada Reference Manual. -@node Pragma Interrupt_State,Pragma Invariant,Pragma Interrupt_Handler,Implementation Defined Pragmas +@node Pragma Interrupt_State,Pragma Interrupts_System_By_Default,Pragma Interrupt_Handler,Implementation Defined Pragmas @anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-state}@anchor{8e} @section Pragma Interrupt_State @@ -4691,8 +4693,22 @@ Overriding the default state of signals used by the Ada runtime may interfere with an application’s runtime behavior in the cases of the synchronous signals, and in the case of the signal used to implement the @code{abort} statement. -@node Pragma Invariant,Pragma Keep_Names,Pragma Interrupt_State,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id21}@anchor{8f}@anchor{gnat_rm/implementation_defined_pragmas pragma-invariant}@anchor{90} +@node Pragma Interrupts_System_By_Default,Pragma Invariant,Pragma Interrupt_State,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas pragma-interrupts-system-by-default}@anchor{8f} +@section Pragma Interrupts_System_By_Default + + +Syntax: + +@example +pragma Interrupts_System_By_Default; +@end example + +Default all interrupts to the System state as defined above in pragma +@code{Interrupt_State}. This is a configuration pragma. + +@node Pragma Invariant,Pragma Keep_Names,Pragma Interrupts_System_By_Default,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas id21}@anchor{90}@anchor{gnat_rm/implementation_defined_pragmas pragma-invariant}@anchor{91} @section Pragma Invariant @@ -4731,7 +4747,7 @@ For further details on the use of this pragma, see the Ada 2012 documentation of the Type_Invariant aspect. @node Pragma Keep_Names,Pragma License,Pragma Invariant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-keep-names}@anchor{91} +@anchor{gnat_rm/implementation_defined_pragmas pragma-keep-names}@anchor{92} @section Pragma Keep_Names @@ -4751,7 +4767,7 @@ use a @code{Discard_Names} pragma in the @code{gnat.adc} file, but you want to retain the names for specific enumeration types. @node Pragma License,Pragma Link_With,Pragma Keep_Names,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-license}@anchor{92} +@anchor{gnat_rm/implementation_defined_pragmas pragma-license}@anchor{93} @section Pragma License @@ -4846,7 +4862,7 @@ GPL, but no warning for @code{GNAT.Sockets} which is part of the GNAT run time, and is therefore licensed under the modified GPL. @node Pragma Link_With,Pragma Linker_Alias,Pragma License,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-link-with}@anchor{93} +@anchor{gnat_rm/implementation_defined_pragmas pragma-link-with}@anchor{94} @section Pragma Link_With @@ -4870,7 +4886,7 @@ separate arguments to the linker. In addition pragma Link_With allows multiple arguments, with the same effect as successive pragmas. @node Pragma Linker_Alias,Pragma Linker_Constructor,Pragma Link_With,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-alias}@anchor{94} +@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-alias}@anchor{95} @section Pragma Linker_Alias @@ -4911,7 +4927,7 @@ end p; @end example @node Pragma Linker_Constructor,Pragma Linker_Destructor,Pragma Linker_Alias,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-constructor}@anchor{95} +@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-constructor}@anchor{96} @section Pragma Linker_Constructor @@ -4941,7 +4957,7 @@ listed above. Where possible, the use of Stand Alone Libraries is preferable to the use of this pragma. @node Pragma Linker_Destructor,Pragma Linker_Section,Pragma Linker_Constructor,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-destructor}@anchor{96} +@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-destructor}@anchor{97} @section Pragma Linker_Destructor @@ -4964,7 +4980,7 @@ See @code{pragma Linker_Constructor} for the set of restrictions that apply because of these specific contexts. @node Pragma Linker_Section,Pragma Lock_Free,Pragma Linker_Destructor,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id22}@anchor{97}@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-section}@anchor{98} +@anchor{gnat_rm/implementation_defined_pragmas id22}@anchor{98}@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-section}@anchor{99} @section Pragma Linker_Section @@ -5038,7 +5054,7 @@ end IO_Card; @end example @node Pragma Lock_Free,Pragma Loop_Invariant,Pragma Linker_Section,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id23}@anchor{99}@anchor{gnat_rm/implementation_defined_pragmas pragma-lock-free}@anchor{9a} +@anchor{gnat_rm/implementation_defined_pragmas id23}@anchor{9a}@anchor{gnat_rm/implementation_defined_pragmas pragma-lock-free}@anchor{9b} @section Pragma Lock_Free @@ -5101,7 +5117,7 @@ Ada RM D.3) are not performed when a protected operation of the protected unit is executed. @node Pragma Loop_Invariant,Pragma Loop_Optimize,Pragma Lock_Free,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-invariant}@anchor{9b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-invariant}@anchor{9c} @section Pragma Loop_Invariant @@ -5134,7 +5150,7 @@ attribute can only be used within the expression of a @code{Loop_Invariant} pragma. For full details, see documentation of attribute @code{Loop_Entry}. @node Pragma Loop_Optimize,Pragma Loop_Variant,Pragma Loop_Invariant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-optimize}@anchor{9c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-optimize}@anchor{9d} @section Pragma Loop_Optimize @@ -5196,7 +5212,7 @@ compiler in order to enable the relevant optimizations, that is to say vectorization. @node Pragma Loop_Variant,Pragma Machine_Attribute,Pragma Loop_Optimize,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-variant}@anchor{9d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-variant}@anchor{9e} @section Pragma Loop_Variant @@ -5243,7 +5259,7 @@ The @code{Loop_Entry} attribute may be used within the expressions of the @code{Loop_Variant} pragma to refer to values on entry to the loop. @node Pragma Machine_Attribute,Pragma Main,Pragma Loop_Variant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-machine-attribute}@anchor{9e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-machine-attribute}@anchor{9f} @section Pragma Machine_Attribute @@ -5269,7 +5285,7 @@ which may make this pragma unusable for some attributes. For further information see @cite{GNU Compiler Collection (GCC) Internals}. @node Pragma Main,Pragma Main_Storage,Pragma Machine_Attribute,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-main}@anchor{9f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-main}@anchor{a0} @section Pragma Main @@ -5289,7 +5305,7 @@ This pragma is provided for compatibility with OpenVMS VAX Systems. It has no effect in GNAT, other than being syntax checked. @node Pragma Main_Storage,Pragma Max_Queue_Length,Pragma Main,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-main-storage}@anchor{a0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-main-storage}@anchor{a1} @section Pragma Main_Storage @@ -5308,7 +5324,7 @@ This pragma is provided for compatibility with OpenVMS VAX Systems. It has no effect in GNAT, other than being syntax checked. @node Pragma Max_Queue_Length,Pragma No_Body,Pragma Main_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a1}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{a2} +@anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a2}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{a3} @section Pragma Max_Queue_Length @@ -5326,7 +5342,7 @@ entry. A value of -1 represents no additional restriction on queue length. @node Pragma No_Body,Pragma No_Caching,Pragma Max_Queue_Length,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{a3} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{a4} @section Pragma No_Body @@ -5349,7 +5365,7 @@ dummy body with a No_Body pragma ensures that there is no interference from earlier versions of the package body. @node Pragma No_Caching,Pragma No_Component_Reordering,Pragma No_Body,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a4}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{a5} +@anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a5}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{a6} @section Pragma No_Caching @@ -5363,7 +5379,7 @@ For the semantics of this pragma, see the entry for aspect @code{No_Caching} in the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma No_Component_Reordering,Pragma No_Elaboration_Code_All,Pragma No_Caching,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{a6} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{a7} @section Pragma No_Component_Reordering @@ -5382,7 +5398,7 @@ declared in units to which the pragma applies and there is a requirement that this pragma be used consistently within a partition. @node Pragma No_Elaboration_Code_All,Pragma No_Heap_Finalization,Pragma No_Component_Reordering,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{a7}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{a8} +@anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{a8}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{a9} @section Pragma No_Elaboration_Code_All @@ -5401,7 +5417,7 @@ current unit, it must also have the @cite{No_Elaboration_Code_All} aspect set. It may be applied to package or subprogram specs or their generic versions. @node Pragma No_Heap_Finalization,Pragma No_Inline,Pragma No_Elaboration_Code_All,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{a9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{aa} @section Pragma No_Heap_Finalization @@ -5433,7 +5449,7 @@ lose its @code{No_Heap_Finalization} pragma when the corresponding instance does appear at the library level. @node Pragma No_Inline,Pragma No_Return,Pragma No_Heap_Finalization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{aa}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{ab} +@anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{ab}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{ac} @section Pragma No_Inline @@ -5451,7 +5467,7 @@ in particular it is not subject to the use of option `-gnatn' or pragma @code{Inline_Always} for the same @code{NAME}. @node Pragma No_Return,Pragma No_Strict_Aliasing,Pragma No_Inline,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{ac} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{ad} @section Pragma No_Return @@ -5478,7 +5494,7 @@ available in all earlier versions of Ada as an implementation-defined pragma. @node Pragma No_Strict_Aliasing,Pragma No_Tagged_Streams,Pragma No_Return,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{ad} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{ae} @section Pragma No_Strict_Aliasing @@ -5500,7 +5516,7 @@ in the @cite{GNAT User’s Guide}. This pragma currently has no effects on access to unconstrained array types. @node Pragma No_Tagged_Streams,Pragma Normalize_Scalars,Pragma No_Strict_Aliasing,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{ae}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{af} +@anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{af}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{b0} @section Pragma No_Tagged_Streams @@ -5539,7 +5555,7 @@ with empty strings. This is useful to avoid exposing entity names at binary level but has a negative impact on the debuggability of tagged types. @node Pragma Normalize_Scalars,Pragma Obsolescent,Pragma No_Tagged_Streams,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{b0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{b1} @section Pragma Normalize_Scalars @@ -5621,7 +5637,7 @@ will always generate an invalid value if one exists. @end table @node Pragma Obsolescent,Pragma Optimize_Alignment,Pragma Normalize_Scalars,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b1}@anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{b2} +@anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b2}@anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{b3} @section Pragma Obsolescent @@ -5717,7 +5733,7 @@ So if you specify @code{Entity =>} for the @code{Entity} argument, and a @code{M argument is present, it must be preceded by @code{Message =>}. @node Pragma Optimize_Alignment,Pragma Ordered,Pragma Obsolescent,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{b3} +@anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{b4} @section Pragma Optimize_Alignment @@ -5803,7 +5819,7 @@ latter are compiled by default in pragma Optimize_Alignment (Off) mode if no pragma appears at the start of the file. @node Pragma Ordered,Pragma Overflow_Mode,Pragma Optimize_Alignment,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{b4} +@anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{b5} @section Pragma Ordered @@ -5895,7 +5911,7 @@ For additional information please refer to the description of the `-gnatw.u' switch in the GNAT User’s Guide. @node Pragma Overflow_Mode,Pragma Overriding_Renamings,Pragma Ordered,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{b5} +@anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{b6} @section Pragma Overflow_Mode @@ -5934,7 +5950,7 @@ The pragma @code{Unsuppress (Overflow_Check)} unsuppresses (enables) overflow checking, but does not affect the overflow mode. @node Pragma Overriding_Renamings,Pragma Part_Of,Pragma Overflow_Mode,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{b6} +@anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{b7} @section Pragma Overriding_Renamings @@ -5969,7 +5985,7 @@ RM 8.3 (15) stipulates that an overridden operation is not visible within the declaration of the overriding operation. @node Pragma Part_Of,Pragma Partition_Elaboration_Policy,Pragma Overriding_Renamings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{b7}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{b8} +@anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{b8}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{b9} @section Pragma Part_Of @@ -5985,7 +6001,7 @@ For the semantics of this pragma, see the entry for aspect @code{Part_Of} in the SPARK 2014 Reference Manual, section 7.2.6. @node Pragma Partition_Elaboration_Policy,Pragma Passive,Pragma Part_Of,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{b9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{ba} @section Pragma Partition_Elaboration_Policy @@ -6002,7 +6018,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Passive,Pragma Persistent_BSS,Pragma Partition_Elaboration_Policy,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{ba} +@anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{bb} @section Pragma Passive @@ -6026,7 +6042,7 @@ For more information on the subject of passive tasks, see the section ‘Passive Task Optimization’ in the GNAT Users Guide. @node Pragma Persistent_BSS,Pragma Post,Pragma Passive,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{bb}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{bc} +@anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{bc}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{bd} @section Pragma Persistent_BSS @@ -6057,7 +6073,7 @@ If this pragma is used on a target where this feature is not supported, then the pragma will be ignored. See also @code{pragma Linker_Section}. @node Pragma Post,Pragma Postcondition,Pragma Persistent_BSS,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{bd} +@anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{be} @section Pragma Post @@ -6082,7 +6098,7 @@ appear at the start of the declarations in a subprogram body (preceded only by other pragmas). @node Pragma Postcondition,Pragma Post_Class,Pragma Post,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{be} +@anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{bf} @section Pragma Postcondition @@ -6247,7 +6263,7 @@ Ada 2012, and has been retained in its original form for compatibility purposes. @node Pragma Post_Class,Pragma Pre,Pragma Postcondition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{bf} +@anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{c0} @section Pragma Post_Class @@ -6282,7 +6298,7 @@ policy that controls this pragma is @code{Post'Class}, not @code{Post_Class}. @node Pragma Pre,Pragma Precondition,Pragma Post_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{c0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{c1} @section Pragma Pre @@ -6307,7 +6323,7 @@ appear at the start of the declarations in a subprogram body (preceded only by other pragmas). @node Pragma Precondition,Pragma Predicate,Pragma Pre,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{c1} +@anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{c2} @section Pragma Precondition @@ -6366,7 +6382,7 @@ Ada 2012, and has been retained in its original form for compatibility purposes. @node Pragma Predicate,Pragma Predicate_Failure,Pragma Precondition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{c2}@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{c3} +@anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{c3}@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{c4} @section Pragma Predicate @@ -6420,7 +6436,7 @@ defined for subtype B). When following this approach, the use of predicates should be avoided. @node Pragma Predicate_Failure,Pragma Preelaborable_Initialization,Pragma Predicate,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{c4} +@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{c5} @section Pragma Predicate_Failure @@ -6437,7 +6453,7 @@ the language-defined @code{Predicate_Failure} aspect, and shares its restrictions and semantics. @node Pragma Preelaborable_Initialization,Pragma Prefix_Exception_Messages,Pragma Predicate_Failure,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{c5} +@anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{c6} @section Pragma Preelaborable_Initialization @@ -6452,7 +6468,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Prefix_Exception_Messages,Pragma Pre_Class,Pragma Preelaborable_Initialization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{c6} +@anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{c7} @section Pragma Prefix_Exception_Messages @@ -6483,7 +6499,7 @@ prefixing in this case, you can always call @code{GNAT.Source_Info.Enclosing_Entity} and prepend the string manually. @node Pragma Pre_Class,Pragma Priority_Specific_Dispatching,Pragma Prefix_Exception_Messages,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{c7} +@anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{c8} @section Pragma Pre_Class @@ -6518,7 +6534,7 @@ policy that controls this pragma is @code{Pre'Class}, not @code{Pre_Class}. @node Pragma Priority_Specific_Dispatching,Pragma Profile,Pragma Pre_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{c8} +@anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{c9} @section Pragma Priority_Specific_Dispatching @@ -6542,7 +6558,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Profile,Pragma Profile_Warnings,Pragma Priority_Specific_Dispatching,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{c9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{ca} @section Pragma Profile @@ -6821,7 +6837,7 @@ conforming Ada constructs. The profile enables the following three pragmas: @end itemize @node Pragma Profile_Warnings,Pragma Propagate_Exceptions,Pragma Profile,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{ca} +@anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{cb} @section Pragma Profile_Warnings @@ -6839,7 +6855,7 @@ violations of the profile generate warning messages instead of error messages. @node Pragma Propagate_Exceptions,Pragma Provide_Shift_Operators,Pragma Profile_Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{cb} +@anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{cc} @section Pragma Propagate_Exceptions @@ -6858,7 +6874,7 @@ purposes. It used to be used in connection with optimization of a now-obsolete mechanism for implementation of exceptions. @node Pragma Provide_Shift_Operators,Pragma Psect_Object,Pragma Propagate_Exceptions,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{cc} +@anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{cd} @section Pragma Provide_Shift_Operators @@ -6878,7 +6894,7 @@ including the function declarations for these five operators, together with the pragma Import (Intrinsic, …) statements. @node Pragma Psect_Object,Pragma Pure_Function,Pragma Provide_Shift_Operators,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{cd} +@anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{ce} @section Pragma Psect_Object @@ -6898,7 +6914,7 @@ EXTERNAL_SYMBOL ::= This pragma is identical in effect to pragma @code{Common_Object}. @node Pragma Pure_Function,Pragma Rational,Pragma Psect_Object,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{ce}@anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{cf} +@anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{cf}@anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{d0} @section Pragma Pure_Function @@ -6960,7 +6976,7 @@ unit is not a Pure unit in the categorization sense. So for example, a function thus marked is free to @code{with} non-pure units. @node Pragma Rational,Pragma Ravenscar,Pragma Pure_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{d0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{d1} @section Pragma Rational @@ -6978,7 +6994,7 @@ pragma Profile (Rational); @end example @node Pragma Ravenscar,Pragma Refined_Depends,Pragma Rational,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{d1} +@anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{d2} @section Pragma Ravenscar @@ -6998,7 +7014,7 @@ pragma Profile (Ravenscar); which is the preferred method of setting the @code{Ravenscar} profile. @node Pragma Refined_Depends,Pragma Refined_Global,Pragma Ravenscar,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{d2}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{d3} +@anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{d3}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{d4} @section Pragma Refined_Depends @@ -7031,7 +7047,7 @@ For the semantics of this pragma, see the entry for aspect @code{Refined_Depends the SPARK 2014 Reference Manual, section 6.1.5. @node Pragma Refined_Global,Pragma Refined_Post,Pragma Refined_Depends,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d4}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{d5} +@anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d5}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{d6} @section Pragma Refined_Global @@ -7056,7 +7072,7 @@ For the semantics of this pragma, see the entry for aspect @code{Refined_Global} the SPARK 2014 Reference Manual, section 6.1.4. @node Pragma Refined_Post,Pragma Refined_State,Pragma Refined_Global,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{d6}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{d7} +@anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{d7}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{d8} @section Pragma Refined_Post @@ -7070,7 +7086,7 @@ For the semantics of this pragma, see the entry for aspect @code{Refined_Post} i the SPARK 2014 Reference Manual, section 7.2.7. @node Pragma Refined_State,Pragma Relative_Deadline,Pragma Refined_Post,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{d8}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{d9} +@anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{d9}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{da} @section Pragma Refined_State @@ -7096,7 +7112,7 @@ For the semantics of this pragma, see the entry for aspect @code{Refined_State} the SPARK 2014 Reference Manual, section 7.2.2. @node Pragma Relative_Deadline,Pragma Remote_Access_Type,Pragma Refined_State,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{da} +@anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{db} @section Pragma Relative_Deadline @@ -7111,7 +7127,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Remote_Access_Type,Pragma Rename_Pragma,Pragma Relative_Deadline,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{db}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{dc} +@anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{dc}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{dd} @section Pragma Remote_Access_Type @@ -7137,7 +7153,7 @@ pertaining to remote access to class-wide types. At instantiation, the actual type must be a remote access to class-wide type. @node Pragma Rename_Pragma,Pragma Restricted_Run_Time,Pragma Remote_Access_Type,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{dd} +@anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{de} @section Pragma Rename_Pragma @@ -7176,7 +7192,7 @@ Pragma Inline_Only will not necessarily mean the same thing as the other Ada compiler; it’s up to you to make sure the semantics are close enough. @node Pragma Restricted_Run_Time,Pragma Restriction_Warnings,Pragma Rename_Pragma,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{de} +@anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{df} @section Pragma Restricted_Run_Time @@ -7197,7 +7213,7 @@ which is the preferred method of setting the restricted run time profile. @node Pragma Restriction_Warnings,Pragma Reviewable,Pragma Restricted_Run_Time,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{df} +@anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{e0} @section Pragma Restriction_Warnings @@ -7235,7 +7251,7 @@ generating a warning, but any other use of implementation defined pragmas will cause a warning to be generated. @node Pragma Reviewable,Pragma Secondary_Stack_Size,Pragma Restriction_Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{e0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{e1} @section Pragma Reviewable @@ -7339,7 +7355,7 @@ comprehensive messages identifying possible problems based on this information. @node Pragma Secondary_Stack_Size,Pragma Share_Generic,Pragma Reviewable,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{e1}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{e2} +@anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{e2}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{e3} @section Pragma Secondary_Stack_Size @@ -7375,7 +7391,7 @@ Note the pragma cannot appear when the restriction @code{No_Secondary_Stack} is in effect. @node Pragma Share_Generic,Pragma Shared,Pragma Secondary_Stack_Size,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{e3} +@anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{e4} @section Pragma Share_Generic @@ -7393,7 +7409,7 @@ than to check that the given names are all names of generic units or generic instances. @node Pragma Shared,Pragma Short_Circuit_And_Or,Pragma Share_Generic,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e4}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{e5} +@anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e5}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{e6} @section Pragma Shared @@ -7401,7 +7417,7 @@ This pragma is provided for compatibility with Ada 83. The syntax and semantics are identical to pragma Atomic. @node Pragma Short_Circuit_And_Or,Pragma Short_Descriptors,Pragma Shared,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{e6} +@anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{e7} @section Pragma Short_Circuit_And_Or @@ -7420,7 +7436,7 @@ within the file being compiled, it applies only to the file being compiled. There is no requirement that all units in a partition use this option. @node Pragma Short_Descriptors,Pragma Side_Effects,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{e7} +@anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{e8} @section Pragma Short_Descriptors @@ -7434,7 +7450,7 @@ This pragma is provided for compatibility with other Ada implementations. It is recognized but ignored by all current versions of GNAT. @node Pragma Side_Effects,Pragma Simple_Storage_Pool_Type,Pragma Short_Descriptors,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{e8}@anchor{gnat_rm/implementation_defined_pragmas pragma-side-effects}@anchor{e9} +@anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{e9}@anchor{gnat_rm/implementation_defined_pragmas pragma-side-effects}@anchor{ea} @section Pragma Side_Effects @@ -7448,7 +7464,7 @@ For the semantics of this pragma, see the entry for aspect @code{Side_Effects} in the SPARK Reference Manual, section 6.1.11. @node Pragma Simple_Storage_Pool_Type,Pragma Source_File_Name,Pragma Side_Effects,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{ea}@anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{eb} +@anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{eb}@anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{ec} @section Pragma Simple_Storage_Pool_Type @@ -7502,7 +7518,7 @@ storage-management discipline). An object of a simple storage pool type can be associated with an access type by specifying the attribute -@ref{ec,,Simple_Storage_Pool}. For example: +@ref{ed,,Simple_Storage_Pool}. For example: @example My_Pool : My_Simple_Storage_Pool_Type; @@ -7512,11 +7528,11 @@ type Acc is access My_Data_Type; for Acc'Simple_Storage_Pool use My_Pool; @end example -See attribute @ref{ec,,Simple_Storage_Pool} +See attribute @ref{ed,,Simple_Storage_Pool} for further details. @node Pragma Source_File_Name,Pragma Source_File_Name_Project,Pragma Simple_Storage_Pool_Type,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{ed}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{ee} +@anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{ee}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{ef} @section Pragma Source_File_Name @@ -7608,20 +7624,20 @@ aware of these pragmas, and so other tools that use the project file would not be aware of the intended naming conventions. If you are using project files, file naming is controlled by Source_File_Name_Project pragmas, which are usually supplied automatically by the project manager. A pragma -Source_File_Name cannot appear after a @ref{ef,,Pragma Source_File_Name_Project}. +Source_File_Name cannot appear after a @ref{f0,,Pragma Source_File_Name_Project}. For more details on the use of the @code{Source_File_Name} pragma, see the sections on @cite{Using Other File Names} and @cite{Alternative File Naming Schemes} in the @cite{GNAT User’s Guide}. @node Pragma Source_File_Name_Project,Pragma Source_Reference,Pragma Source_File_Name,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f0}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{ef} +@anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f1}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{f0} @section Pragma Source_File_Name_Project This pragma has the same syntax and semantics as pragma Source_File_Name. It is only allowed as a stand-alone configuration pragma. -It cannot appear after a @ref{ee,,Pragma Source_File_Name}, and +It cannot appear after a @ref{ef,,Pragma Source_File_Name}, and most importantly, once pragma Source_File_Name_Project appears, no further Source_File_Name pragmas are allowed. @@ -7633,7 +7649,7 @@ Source_File_Name or Source_File_Name_Project pragmas (which would not be known to the project manager). @node Pragma Source_Reference,Pragma SPARK_Mode,Pragma Source_File_Name_Project,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{f1} +@anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{f2} @section Pragma Source_Reference @@ -7657,7 +7673,7 @@ string expression other than a string literal. This is because its value is needed for error messages issued by all phases of the compiler. @node Pragma SPARK_Mode,Pragma Static_Elaboration_Desired,Pragma Source_Reference,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{f2}@anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{f3} +@anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{f3}@anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{f4} @section Pragma SPARK_Mode @@ -7739,7 +7755,7 @@ SPARK_Mode (@code{Off}), then that pragma will need to be repeated in the package body. @node Pragma Static_Elaboration_Desired,Pragma Stream_Convert,Pragma SPARK_Mode,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{f4} +@anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{f5} @section Pragma Static_Elaboration_Desired @@ -7763,7 +7779,7 @@ construction of larger aggregates with static components that include an others choice.) @node Pragma Stream_Convert,Pragma Style_Checks,Pragma Static_Elaboration_Desired,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{f5} +@anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{f6} @section Pragma Stream_Convert @@ -7840,7 +7856,7 @@ the pragma is silently ignored, and the default implementation of the stream attributes is used instead. @node Pragma Style_Checks,Pragma Subprogram_Variant,Pragma Stream_Convert,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{f6} +@anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{f7} @section Pragma Style_Checks @@ -7913,7 +7929,7 @@ Rf2 : Integer := ARG; -- OK, no error @end example @node Pragma Subprogram_Variant,Pragma Subtitle,Pragma Style_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-subprogram-variant}@anchor{f7} +@anchor{gnat_rm/implementation_defined_pragmas pragma-subprogram-variant}@anchor{f8} @section Pragma Subprogram_Variant @@ -7945,7 +7961,7 @@ the implementation-defined @code{Subprogram_Variant} aspect, and shares its restrictions and semantics. @node Pragma Subtitle,Pragma Suppress,Pragma Subprogram_Variant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{f8} +@anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{f9} @section Pragma Subtitle @@ -7959,7 +7975,7 @@ This pragma is recognized for compatibility with other Ada compilers but is ignored by GNAT. @node Pragma Suppress,Pragma Suppress_All,Pragma Subtitle,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{f9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{fa} @section Pragma Suppress @@ -8032,7 +8048,7 @@ Of course, run-time checks are omitted whenever the compiler can prove that they will not fail, whether or not checks are suppressed. @node Pragma Suppress_All,Pragma Suppress_Debug_Info,Pragma Suppress,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{fa} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{fb} @section Pragma Suppress_All @@ -8051,7 +8067,7 @@ The use of the standard Ada pragma @code{Suppress (All_Checks)} as a normal configuration pragma is the preferred usage in GNAT. @node Pragma Suppress_Debug_Info,Pragma Suppress_Exception_Locations,Pragma Suppress_All,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{fb}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{fc} +@anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{fc}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{fd} @section Pragma Suppress_Debug_Info @@ -8066,7 +8082,7 @@ for the specified entity. It is intended primarily for use in debugging the debugger, and navigating around debugger problems. @node Pragma Suppress_Exception_Locations,Pragma Suppress_Initialization,Pragma Suppress_Debug_Info,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{fd} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{fe} @section Pragma Suppress_Exception_Locations @@ -8089,7 +8105,7 @@ a partition, so it is fine to have some units within a partition compiled with this pragma and others compiled in normal mode without it. @node Pragma Suppress_Initialization,Pragma Task_Name,Pragma Suppress_Exception_Locations,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{fe}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{ff} +@anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{ff}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{100} @section Pragma Suppress_Initialization @@ -8134,7 +8150,7 @@ is suppressed, just as though its subtype had been given in a pragma Suppress_Initialization, as described above. @node Pragma Task_Name,Pragma Task_Storage,Pragma Suppress_Initialization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{100} +@anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{101} @section Pragma Task_Name @@ -8190,7 +8206,7 @@ end; @end example @node Pragma Task_Storage,Pragma Test_Case,Pragma Task_Name,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{101} +@anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{102} @section Pragma Task_Storage @@ -8210,7 +8226,7 @@ created, depending on the target. This pragma can appear anywhere a type. @node Pragma Test_Case,Pragma Thread_Local_Storage,Pragma Task_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{102}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{103} +@anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{103}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{104} @section Pragma Test_Case @@ -8266,7 +8282,7 @@ postcondition. Mode @code{Robustness} indicates that the precondition and postcondition of the subprogram should be ignored for this test case. @node Pragma Thread_Local_Storage,Pragma Time_Slice,Pragma Test_Case,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{104}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{105} +@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{105}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{106} @section Pragma Thread_Local_Storage @@ -8304,7 +8320,7 @@ If this pragma is used on a system where @code{TLS} is not supported, then an error message will be generated and the program will be rejected. @node Pragma Time_Slice,Pragma Title,Pragma Thread_Local_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{106} +@anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{107} @section Pragma Time_Slice @@ -8320,7 +8336,7 @@ It is ignored if it is used in a system that does not allow this control, or if it appears in other than the main program unit. @node Pragma Title,Pragma Type_Invariant,Pragma Time_Slice,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{107} +@anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{108} @section Pragma Title @@ -8345,7 +8361,7 @@ notation is used, and named and positional notation can be mixed following the normal rules for procedure calls in Ada. @node Pragma Type_Invariant,Pragma Type_Invariant_Class,Pragma Title,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{108} +@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{109} @section Pragma Type_Invariant @@ -8366,7 +8382,7 @@ controlled by the assertion identifier @code{Type_Invariant} rather than @code{Invariant}. @node Pragma Type_Invariant_Class,Pragma Unchecked_Union,Pragma Type_Invariant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{109}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{10a} +@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{10a}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{10b} @section Pragma Type_Invariant_Class @@ -8393,7 +8409,7 @@ policy that controls this pragma is @code{Type_Invariant'Class}, not @code{Type_Invariant_Class}. @node Pragma Unchecked_Union,Pragma Unevaluated_Use_Of_Old,Pragma Type_Invariant_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{10b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{10c} @section Pragma Unchecked_Union @@ -8413,7 +8429,7 @@ version in all language modes (Ada 83, Ada 95, and Ada 2005). For full details, consult the Ada 2012 Reference Manual, section B.3.3. @node Pragma Unevaluated_Use_Of_Old,Pragma User_Aspect_Definition,Pragma Unchecked_Union,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{10c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{10d} @section Pragma Unevaluated_Use_Of_Old @@ -8468,7 +8484,7 @@ uses up to the end of the corresponding statement sequence or sequence of package declarations. @node Pragma User_Aspect_Definition,Pragma Unimplemented_Unit,Pragma Unevaluated_Use_Of_Old,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{10d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{10e} @section Pragma User_Aspect_Definition @@ -8500,7 +8516,7 @@ pragma. If multiple definitions are visible for some aspect at some point, then the definitions must agree. A predefined aspect cannot be redefined. @node Pragma Unimplemented_Unit,Pragma Universal_Aliasing,Pragma User_Aspect_Definition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{10e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{10f} @section Pragma Unimplemented_Unit @@ -8520,7 +8536,7 @@ The abort only happens if code is being generated. Thus you can use specs of unimplemented packages in syntax or semantic checking mode. @node Pragma Universal_Aliasing,Pragma Unmodified,Pragma Unimplemented_Unit,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10f}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{110} +@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{110}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{111} @section Pragma Universal_Aliasing @@ -8538,7 +8554,7 @@ they need to be suppressed, see the section on @code{Optimization and Strict Aliasing} in the @cite{GNAT User’s Guide}. @node Pragma Unmodified,Pragma Unreferenced,Pragma Universal_Aliasing,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{111}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{112} +@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{112}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{113} @section Pragma Unmodified @@ -8572,7 +8588,7 @@ Thus it is never necessary to use @code{pragma Unmodified} for such variables, though it is harmless to do so. @node Pragma Unreferenced,Pragma Unreferenced_Objects,Pragma Unmodified,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{113}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{114} +@anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{114}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{115} @section Pragma Unreferenced @@ -8618,7 +8634,7 @@ Note that if a warning is desired for all calls to a given subprogram, regardless of whether they occur in the same unit as the subprogram declaration, then this pragma should not be used (calls from another unit would not be flagged); pragma Obsolescent can be used instead -for this purpose, see @ref{b2,,Pragma Obsolescent}. +for this purpose, see @ref{b3,,Pragma Obsolescent}. The second form of pragma @code{Unreferenced} is used within a context clause. In this case the arguments must be unit names of units previously @@ -8634,7 +8650,7 @@ Thus it is never necessary to use @code{pragma Unreferenced} for such variables, though it is harmless to do so. @node Pragma Unreferenced_Objects,Pragma Unreserve_All_Interrupts,Pragma Unreferenced,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{115}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{116} +@anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{116}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{117} @section Pragma Unreferenced_Objects @@ -8659,7 +8675,7 @@ compiler will automatically suppress unwanted warnings about these variables not being referenced. @node Pragma Unreserve_All_Interrupts,Pragma Unsuppress,Pragma Unreferenced_Objects,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{117} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{118} @section Pragma Unreserve_All_Interrupts @@ -8695,7 +8711,7 @@ handled, see pragma @code{Interrupt_State}, which subsumes the functionality of the @code{Unreserve_All_Interrupts} pragma. @node Pragma Unsuppress,Pragma Unused,Pragma Unreserve_All_Interrupts,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{118} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{119} @section Pragma Unsuppress @@ -8731,7 +8747,7 @@ number of implementation-defined check names. See the description of pragma @code{Suppress} for full details. @node Pragma Unused,Pragma Use_VADS_Size,Pragma Unsuppress,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{119}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{11a} +@anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{11a}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{11b} @section Pragma Unused @@ -8765,7 +8781,7 @@ Thus it is never necessary to use @code{pragma Unused} for such variables, though it is harmless to do so. @node Pragma Use_VADS_Size,Pragma Validity_Checks,Pragma Unused,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{11b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{11c} @section Pragma Use_VADS_Size @@ -8789,7 +8805,7 @@ as implemented in the VADS compiler. See description of the VADS_Size attribute for further details. @node Pragma Validity_Checks,Pragma Volatile,Pragma Use_VADS_Size,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{11c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{11d} @section Pragma Validity_Checks @@ -8845,7 +8861,7 @@ A := C; -- C will be validity checked @end example @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11d}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{11e} +@anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11e}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{11f} @section Pragma Volatile @@ -8863,7 +8879,7 @@ implementation of pragma Volatile is upwards compatible with the implementation in DEC Ada 83. @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{11f}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{120} +@anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{120}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{121} @section Pragma Volatile_Full_Access @@ -8889,7 +8905,7 @@ is not to the whole object; the compiler is allowed (and generally will) access only part of the object in this case. @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{121}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{122} +@anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{122}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{123} @section Pragma Volatile_Function @@ -8903,7 +8919,7 @@ For the semantics of this pragma, see the entry for aspect @code{Volatile_Functi in the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{123} +@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{124} @section Pragma Warning_As_Error @@ -8943,7 +8959,7 @@ you can use multiple pragma Warning_As_Error. The above use of patterns to match the message applies only to warning messages generated by the front end. This pragma can also be applied to -warnings provided by the back end and mentioned in @ref{124,,Pragma Warnings}. +warnings provided by the back end and mentioned in @ref{125,,Pragma Warnings}. By using a single full `-Wxxx' switch in the pragma, such warnings can also be treated as errors. @@ -8993,7 +9009,7 @@ the tag is changed from “warning:” to “error:” and the string “[warning-as-error]” is appended to the end of the message. @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{125}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{124} +@anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{126}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{125} @section Pragma Warnings @@ -9149,7 +9165,7 @@ selectively for each tool, and as a consequence to detect useless pragma Warnings with switch @code{-gnatw.w}. @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{126} +@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{127} @section Pragma Weak_External @@ -9200,7 +9216,7 @@ end External_Module; @end example @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{127} +@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{128} @section Pragma Wide_Character_Encoding @@ -9231,7 +9247,7 @@ encoding within that file, and does not affect withed units, specs, or subunits. @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top -@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{128}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{129}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{12a} +@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{129}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{12a}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{12b} @chapter Implementation Defined Aspects @@ -9358,7 +9374,7 @@ or attribute definition clause. @end menu @node Aspect Abstract_State,Aspect Always_Terminates,,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{12b} +@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{12c} @section Aspect Abstract_State @@ -9367,7 +9383,7 @@ or attribute definition clause. This aspect is equivalent to @ref{1e,,pragma Abstract_State}. @node Aspect Always_Terminates,Aspect Annotate,Aspect Abstract_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{12c} +@anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{12d} @section Aspect Always_Terminates @@ -9376,7 +9392,7 @@ This aspect is equivalent to @ref{1e,,pragma Abstract_State}. This boolean aspect is equivalent to @ref{29,,pragma Always_Terminates}. @node Aspect Annotate,Aspect Async_Readers,Aspect Always_Terminates,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{12d} +@anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{12e} @section Aspect Annotate @@ -9403,7 +9419,7 @@ Equivalent to @code{pragma Annotate (ID, ID @{, ARG@}, Entity => Name);} @end table @node Aspect Async_Readers,Aspect Async_Writers,Aspect Annotate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{12e} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{12f} @section Aspect Async_Readers @@ -9412,7 +9428,7 @@ Equivalent to @code{pragma Annotate (ID, ID @{, ARG@}, Entity => Name);} This boolean aspect is equivalent to @ref{32,,pragma Async_Readers}. @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{12f} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{130} @section Aspect Async_Writers @@ -9421,7 +9437,7 @@ This boolean aspect is equivalent to @ref{32,,pragma Async_Readers}. This boolean aspect is equivalent to @ref{34,,pragma Async_Writers}. @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{130} +@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{131} @section Aspect Constant_After_Elaboration @@ -9430,7 +9446,7 @@ This boolean aspect is equivalent to @ref{34,,pragma Async_Writers}. This aspect is equivalent to @ref{44,,pragma Constant_After_Elaboration}. @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{131} +@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{132} @section Aspect Contract_Cases @@ -9441,7 +9457,7 @@ of clauses being enclosed in parentheses so that syntactically it is an aggregate. @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{132} +@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{133} @section Aspect Depends @@ -9450,7 +9466,7 @@ aggregate. This aspect is equivalent to @ref{56,,pragma Depends}. @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{133} +@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{134} @section Aspect Default_Initial_Condition @@ -9459,7 +9475,7 @@ This aspect is equivalent to @ref{56,,pragma Depends}. This aspect is equivalent to @ref{52,,pragma Default_Initial_Condition}. @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{134} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{135} @section Aspect Dimension @@ -9495,7 +9511,7 @@ Note that when the dimensioned type is an integer type, then any dimension value must be an integer literal. @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{135} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{136} @section Aspect Dimension_System @@ -9555,7 +9571,7 @@ See section ‘Performing Dimensionality Analysis in GNAT’ in the GNAT Users Guide for detailed examples of use of the dimension system. @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{136} +@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{137} @section Aspect Disable_Controlled @@ -9568,7 +9584,7 @@ where for example you might want a record to be controlled or not depending on whether some run-time check is enabled or suppressed. @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{137} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{138} @section Aspect Effective_Reads @@ -9577,7 +9593,7 @@ whether some run-time check is enabled or suppressed. This aspect is equivalent to @ref{5b,,pragma Effective_Reads}. @node Aspect Effective_Writes,Aspect Exceptional_Cases,Aspect Effective_Reads,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{138} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{139} @section Aspect Effective_Writes @@ -9586,7 +9602,7 @@ This aspect is equivalent to @ref{5b,,pragma Effective_Reads}. This aspect is equivalent to @ref{5d,,pragma Effective_Writes}. @node Aspect Exceptional_Cases,Aspect Extensions_Visible,Aspect Effective_Writes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{139} +@anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{13a} @section Aspect Exceptional_Cases @@ -9601,7 +9617,7 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.9. @node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Exceptional_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{13a} +@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{13b} @section Aspect Extensions_Visible @@ -9610,7 +9626,7 @@ Manual, section 6.1.9. This aspect is equivalent to @ref{6c,,pragma Extensions_Visible}. @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{13b} +@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{13c} @section Aspect Favor_Top_Level @@ -9619,7 +9635,7 @@ This aspect is equivalent to @ref{6c,,pragma Extensions_Visible}. This boolean aspect is equivalent to @ref{71,,pragma Favor_Top_Level}. @node Aspect Ghost,Aspect Ghost_Predicate,Aspect Favor_Top_Level,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{13c} +@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{13d} @section Aspect Ghost @@ -9628,7 +9644,7 @@ This boolean aspect is equivalent to @ref{71,,pragma Favor_Top_Level}. This aspect is equivalent to @ref{75,,pragma Ghost}. @node Aspect Ghost_Predicate,Aspect Global,Aspect Ghost,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{13d} +@anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{13e} @section Aspect Ghost_Predicate @@ -9641,7 +9657,7 @@ For the detailed semantics of this aspect, see the entry for subtype predicates in the SPARK Reference Manual, section 3.2.4. @node Aspect Global,Aspect Initial_Condition,Aspect Ghost_Predicate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{13e} +@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{13f} @section Aspect Global @@ -9650,7 +9666,7 @@ in the SPARK Reference Manual, section 3.2.4. This aspect is equivalent to @ref{77,,pragma Global}. @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{13f} +@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{140} @section Aspect Initial_Condition @@ -9659,7 +9675,7 @@ This aspect is equivalent to @ref{77,,pragma Global}. This aspect is equivalent to @ref{84,,pragma Initial_Condition}. @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{140} +@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{141} @section Aspect Initializes @@ -9668,7 +9684,7 @@ This aspect is equivalent to @ref{84,,pragma Initial_Condition}. This aspect is equivalent to @ref{87,,pragma Initializes}. @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{141} +@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{142} @section Aspect Inline_Always @@ -9677,29 +9693,29 @@ This aspect is equivalent to @ref{87,,pragma Initializes}. This boolean aspect is equivalent to @ref{89,,pragma Inline_Always}. @node Aspect Invariant,Aspect Invariant’Class,Aspect Inline_Always,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{142} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{143} @section Aspect Invariant @geindex Invariant -This aspect is equivalent to @ref{90,,pragma Invariant}. It is a +This aspect is equivalent to @ref{91,,pragma Invariant}. It is a synonym for the language defined aspect @code{Type_Invariant} except that it is separately controllable using pragma @code{Assertion_Policy}. @node Aspect Invariant’Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{143} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{144} @section Aspect Invariant’Class @geindex Invariant'Class -This aspect is equivalent to @ref{10a,,pragma Type_Invariant_Class}. It is a +This aspect is equivalent to @ref{10b,,pragma Type_Invariant_Class}. It is a synonym for the language defined aspect @code{Type_Invariant'Class} except that it is separately controllable using pragma @code{Assertion_Policy}. @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant’Class,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{144} +@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{145} @section Aspect Iterable @@ -9783,16 +9799,16 @@ function Get_Element (Cont : Container; Position : Cursor) return Element_Type; This aspect is used in the GNAT-defined formal container packages. @node Aspect Linker_Section,Aspect Local_Restrictions,Aspect Iterable,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{145} +@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{146} @section Aspect Linker_Section @geindex Linker_Section -This aspect is equivalent to @ref{98,,pragma Linker_Section}. +This aspect is equivalent to @ref{99,,pragma Linker_Section}. @node Aspect Local_Restrictions,Aspect Lock_Free,Aspect Linker_Section,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{146} +@anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{147} @section Aspect Local_Restrictions @@ -9846,64 +9862,64 @@ case of a declaration that occurs within nested packages that each have a Local_Restrictions specification). @node Aspect Lock_Free,Aspect Max_Queue_Length,Aspect Local_Restrictions,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{147} +@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{148} @section Aspect Lock_Free @geindex Lock_Free -This boolean aspect is equivalent to @ref{9a,,pragma Lock_Free}. +This boolean aspect is equivalent to @ref{9b,,pragma Lock_Free}. @node Aspect Max_Queue_Length,Aspect No_Caching,Aspect Lock_Free,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{148} +@anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{149} @section Aspect Max_Queue_Length @geindex Max_Queue_Length -This aspect is equivalent to @ref{a2,,pragma Max_Queue_Length}. +This aspect is equivalent to @ref{a3,,pragma Max_Queue_Length}. @node Aspect No_Caching,Aspect No_Elaboration_Code_All,Aspect Max_Queue_Length,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{149} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{14a} @section Aspect No_Caching @geindex No_Caching -This boolean aspect is equivalent to @ref{a5,,pragma No_Caching}. +This boolean aspect is equivalent to @ref{a6,,pragma No_Caching}. @node Aspect No_Elaboration_Code_All,Aspect No_Inline,Aspect No_Caching,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{14a} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{14b} @section Aspect No_Elaboration_Code_All @geindex No_Elaboration_Code_All -This aspect is equivalent to @ref{a8,,pragma No_Elaboration_Code_All} +This aspect is equivalent to @ref{a9,,pragma No_Elaboration_Code_All} for a program unit. @node Aspect No_Inline,Aspect No_Tagged_Streams,Aspect No_Elaboration_Code_All,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{14b} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{14c} @section Aspect No_Inline @geindex No_Inline -This boolean aspect is equivalent to @ref{ab,,pragma No_Inline}. +This boolean aspect is equivalent to @ref{ac,,pragma No_Inline}. @node Aspect No_Tagged_Streams,Aspect No_Task_Parts,Aspect No_Inline,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{14c} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{14d} @section Aspect No_Tagged_Streams @geindex No_Tagged_Streams -This aspect is equivalent to @ref{af,,pragma No_Tagged_Streams} with an +This aspect is equivalent to @ref{b0,,pragma No_Tagged_Streams} with an argument specifying a root tagged type (thus this aspect can only be applied to such a type). @node Aspect No_Task_Parts,Aspect Object_Size,Aspect No_Tagged_Streams,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{14d} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{14e} @section Aspect No_Task_Parts @@ -9919,51 +9935,51 @@ away certain tasking-related code that would otherwise be needed for T’Class, because descendants of T might contain tasks. @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Task_Parts,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{14e} +@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{14f} @section Aspect Object_Size @geindex Object_Size -This aspect is equivalent to @ref{14f,,attribute Object_Size}. +This aspect is equivalent to @ref{150,,attribute Object_Size}. @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{150} +@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{151} @section Aspect Obsolescent @geindex Obsolescent -This aspect is equivalent to @ref{b2,,pragma Obsolescent}. Note that the +This aspect is equivalent to @ref{b3,,pragma Obsolescent}. Note that the evaluation of this aspect happens at the point of occurrence, it is not delayed until the freeze point. @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{151} +@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{152} @section Aspect Part_Of @geindex Part_Of -This aspect is equivalent to @ref{b8,,pragma Part_Of}. +This aspect is equivalent to @ref{b9,,pragma Part_Of}. @node Aspect Persistent_BSS,Aspect Predicate,Aspect Part_Of,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{152} +@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{153} @section Aspect Persistent_BSS @geindex Persistent_BSS -This boolean aspect is equivalent to @ref{bc,,pragma Persistent_BSS}. +This boolean aspect is equivalent to @ref{bd,,pragma Persistent_BSS}. @node Aspect Predicate,Aspect Pure_Function,Aspect Persistent_BSS,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{153} +@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{154} @section Aspect Predicate @geindex Predicate -This aspect is equivalent to @ref{c3,,pragma Predicate}. It is thus +This aspect is equivalent to @ref{c4,,pragma Predicate}. It is thus similar to the language defined aspects @code{Dynamic_Predicate} and @code{Static_Predicate} except that whether the resulting predicate is static or dynamic is controlled by the form of the @@ -9971,52 +9987,52 @@ expression. It is also separately controllable using pragma @code{Assertion_Policy}. @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Predicate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{154} +@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{155} @section Aspect Pure_Function @geindex Pure_Function -This boolean aspect is equivalent to @ref{cf,,pragma Pure_Function}. +This boolean aspect is equivalent to @ref{d0,,pragma Pure_Function}. @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{155} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{156} @section Aspect Refined_Depends @geindex Refined_Depends -This aspect is equivalent to @ref{d3,,pragma Refined_Depends}. +This aspect is equivalent to @ref{d4,,pragma Refined_Depends}. @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{156} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{157} @section Aspect Refined_Global @geindex Refined_Global -This aspect is equivalent to @ref{d5,,pragma Refined_Global}. +This aspect is equivalent to @ref{d6,,pragma Refined_Global}. @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{157} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{158} @section Aspect Refined_Post @geindex Refined_Post -This aspect is equivalent to @ref{d7,,pragma Refined_Post}. +This aspect is equivalent to @ref{d8,,pragma Refined_Post}. @node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{158} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{159} @section Aspect Refined_State @geindex Refined_State -This aspect is equivalent to @ref{d9,,pragma Refined_State}. +This aspect is equivalent to @ref{da,,pragma Refined_State}. @node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{159} +@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{15a} @section Aspect Relaxed_Initialization @@ -10026,82 +10042,82 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.10. @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{15a} +@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{15b} @section Aspect Remote_Access_Type @geindex Remote_Access_Type -This aspect is equivalent to @ref{dc,,pragma Remote_Access_Type}. +This aspect is equivalent to @ref{dd,,pragma Remote_Access_Type}. @node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{15b} +@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{15c} @section Aspect Scalar_Storage_Order @geindex Scalar_Storage_Order -This aspect is equivalent to a @ref{15c,,attribute Scalar_Storage_Order}. +This aspect is equivalent to a @ref{15d,,attribute Scalar_Storage_Order}. @node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{15d} +@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{15e} @section Aspect Secondary_Stack_Size @geindex Secondary_Stack_Size -This aspect is equivalent to @ref{e2,,pragma Secondary_Stack_Size}. +This aspect is equivalent to @ref{e3,,pragma Secondary_Stack_Size}. @node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{15e} +@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{15f} @section Aspect Shared @geindex Shared -This boolean aspect is equivalent to @ref{e5,,pragma Shared} +This boolean aspect is equivalent to @ref{e6,,pragma Shared} and is thus a synonym for aspect @code{Atomic}. @node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{15f} +@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{160} @section Aspect Side_Effects @geindex Side_Effects -This aspect is equivalent to @ref{e9,,pragma Side_Effects}. +This aspect is equivalent to @ref{ea,,pragma Side_Effects}. @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{160} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{161} @section Aspect Simple_Storage_Pool @geindex Simple_Storage_Pool -This aspect is equivalent to @ref{ec,,attribute Simple_Storage_Pool}. +This aspect is equivalent to @ref{ed,,attribute Simple_Storage_Pool}. @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{161} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{162} @section Aspect Simple_Storage_Pool_Type @geindex Simple_Storage_Pool_Type -This boolean aspect is equivalent to @ref{eb,,pragma Simple_Storage_Pool_Type}. +This boolean aspect is equivalent to @ref{ec,,pragma Simple_Storage_Pool_Type}. @node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{162} +@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{163} @section Aspect SPARK_Mode @geindex SPARK_Mode -This aspect is equivalent to @ref{f3,,pragma SPARK_Mode} and +This aspect is equivalent to @ref{f4,,pragma SPARK_Mode} and may be specified for either or both of the specification and body of a subprogram or package. @node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{163} +@anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{164} @section Aspect Subprogram_Variant @@ -10111,83 +10127,83 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.8. @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{164} +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{165} @section Aspect Suppress_Debug_Info @geindex Suppress_Debug_Info -This boolean aspect is equivalent to @ref{fc,,pragma Suppress_Debug_Info}. +This boolean aspect is equivalent to @ref{fd,,pragma Suppress_Debug_Info}. @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{165} +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{166} @section Aspect Suppress_Initialization @geindex Suppress_Initialization -This boolean aspect is equivalent to @ref{ff,,pragma Suppress_Initialization}. +This boolean aspect is equivalent to @ref{100,,pragma Suppress_Initialization}. @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{166} +@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{167} @section Aspect Test_Case @geindex Test_Case -This aspect is equivalent to @ref{103,,pragma Test_Case}. +This aspect is equivalent to @ref{104,,pragma Test_Case}. @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{167} +@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{168} @section Aspect Thread_Local_Storage @geindex Thread_Local_Storage -This boolean aspect is equivalent to @ref{105,,pragma Thread_Local_Storage}. +This boolean aspect is equivalent to @ref{106,,pragma Thread_Local_Storage}. @node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{168} +@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{169} @section Aspect Universal_Aliasing @geindex Universal_Aliasing -This boolean aspect is equivalent to @ref{110,,pragma Universal_Aliasing}. +This boolean aspect is equivalent to @ref{111,,pragma Universal_Aliasing}. @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{169} +@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{16a} @section Aspect Unmodified @geindex Unmodified -This boolean aspect is equivalent to @ref{112,,pragma Unmodified}. +This boolean aspect is equivalent to @ref{113,,pragma Unmodified}. @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{16a} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{16b} @section Aspect Unreferenced @geindex Unreferenced -This boolean aspect is equivalent to @ref{114,,pragma Unreferenced}. +This boolean aspect is equivalent to @ref{115,,pragma Unreferenced}. When using the @code{-gnat2022} switch, this aspect is also supported on formal parameters, which is in particular the only form possible for expression functions. @node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{16b} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{16c} @section Aspect Unreferenced_Objects @geindex Unreferenced_Objects -This boolean aspect is equivalent to @ref{116,,pragma Unreferenced_Objects}. +This boolean aspect is equivalent to @ref{117,,pragma Unreferenced_Objects}. @node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{16c} +@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{16d} @section Aspect User_Aspect @@ -10200,45 +10216,45 @@ replicating the set of aspect specifications associated with the named pragma-defined aspect. @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{16d} +@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{16e} @section Aspect Value_Size @geindex Value_Size -This aspect is equivalent to @ref{16e,,attribute Value_Size}. +This aspect is equivalent to @ref{16f,,attribute Value_Size}. @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{16f} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{170} @section Aspect Volatile_Full_Access @geindex Volatile_Full_Access -This boolean aspect is equivalent to @ref{120,,pragma Volatile_Full_Access}. +This boolean aspect is equivalent to @ref{121,,pragma Volatile_Full_Access}. @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{170} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{171} @section Aspect Volatile_Function @geindex Volatile_Function -This boolean aspect is equivalent to @ref{122,,pragma Volatile_Function}. +This boolean aspect is equivalent to @ref{123,,pragma Volatile_Function}. @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{171} +@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{172} @section Aspect Warnings @geindex Warnings -This aspect is equivalent to the two argument form of @ref{124,,pragma Warnings}, +This aspect is equivalent to the two argument form of @ref{125,,pragma Warnings}, where the first argument is @code{ON} or @code{OFF} and the second argument is the entity. @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top -@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{172}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{173}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8} +@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{173}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{174}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8} @chapter Implementation Defined Attributes @@ -10344,7 +10360,7 @@ consideration, you should minimize the use of these attributes. @end menu @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{174} +@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{175} @section Attribute Abort_Signal @@ -10358,7 +10374,7 @@ completely outside the normal semantics of Ada, for a user program to intercept the abort exception). @node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{175} +@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{176} @section Attribute Address_Size @@ -10374,7 +10390,7 @@ reference to System.Address’Size is nonstatic because Address is a private type. @node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{176} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{177} @section Attribute Asm_Input @@ -10388,10 +10404,10 @@ to be a static expression, and is the constraint for the parameter, value to be used as the input argument. The possible values for the constant are the same as those used in the RTL, and are dependent on the configuration file used to built the GCC back end. -@ref{177,,Machine Code Insertions} +@ref{178,,Machine Code Insertions} @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{178} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{179} @section Attribute Asm_Output @@ -10407,10 +10423,10 @@ result. The possible values for constraint are the same as those used in the RTL, and are dependent on the configuration file used to build the GCC back end. If there are no output operands, then this argument may either be omitted, or explicitly given as @code{No_Output_Operands}. -@ref{177,,Machine Code Insertions} +@ref{178,,Machine Code Insertions} @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{179} +@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{17a} @section Attribute Atomic_Always_Lock_Free @@ -10421,7 +10437,7 @@ result indicates whether atomic operations are supported by the target for the given type. @node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{17a} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{17b} @section Attribute Bit @@ -10452,7 +10468,7 @@ This attribute is designed to be compatible with the DEC Ada 83 definition and implementation of the @code{Bit} attribute. @node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{17b} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{17c} @section Attribute Bit_Position @@ -10467,7 +10483,7 @@ type `universal_integer'. The value depends only on the field the containing record @code{R}. @node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{17c} +@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{17d} @section Attribute Code_Address @@ -10510,7 +10526,7 @@ the same value as is returned by the corresponding @code{'Address} attribute. @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{17d} +@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{17e} @section Attribute Compiler_Version @@ -10521,7 +10537,7 @@ prefix) yields a static string identifying the version of the compiler being used to compile the unit containing the attribute reference. @node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{17e} +@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{17f} @section Attribute Constrained @@ -10536,7 +10552,7 @@ record type without discriminants is always @code{True}. This usage is compatible with older Ada compilers, including notably DEC Ada. @node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{17f} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{180} @section Attribute Default_Bit_Order @@ -10553,7 +10569,7 @@ as a @code{Pos} value (0 for @code{High_Order_First}, 1 for @code{Default_Bit_Order} in package @code{System}. @node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{180} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{181} @section Attribute Default_Scalar_Storage_Order @@ -10570,7 +10586,7 @@ equal to @code{Default_Bit_Order} if unspecified) as a @code{System.Bit_Order} value. This is a static attribute. @node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{181} +@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{182} @section Attribute Deref @@ -10583,7 +10599,7 @@ a named access-to-@cite{typ} type, except that it yields a variable, so it can b used on the left side of an assignment. @node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{182} +@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{183} @section Attribute Descriptor_Size @@ -10612,7 +10628,7 @@ since @code{Positive} has an alignment of 4, the size of the descriptor is which yields a size of 32 bits, i.e. including 16 bits of padding. @node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{183} +@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{184} @section Attribute Elaborated @@ -10627,7 +10643,7 @@ units has been completed. An exception is for units which need no elaboration, the value is always False for such units. @node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{184} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{185} @section Attribute Elab_Body @@ -10643,7 +10659,7 @@ e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{185} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{186} @section Attribute Elab_Spec @@ -10659,7 +10675,7 @@ Ada code, e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{186} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{187} @section Attribute Elab_Subp_Body @@ -10673,7 +10689,7 @@ elaboration procedure by the binder in CodePeer mode only and is unrecognized otherwise. @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{187} +@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{188} @section Attribute Emax @@ -10686,7 +10702,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{188} +@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{189} @section Attribute Enabled @@ -10710,7 +10726,7 @@ a @code{pragma Suppress} or @code{pragma Unsuppress} before instantiating the package or subprogram, controlling whether the check will be present. @node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{189} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{18a} @section Attribute Enum_Rep @@ -10750,7 +10766,7 @@ integer calculation is done at run time, then the call to @code{Enum_Rep} may raise @code{Constraint_Error}. @node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{18a} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{18b} @section Attribute Enum_Val @@ -10776,7 +10792,7 @@ absence of an enumeration representation clause. This is a static attribute (i.e., the result is static if the argument is static). @node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{18b} +@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{18c} @section Attribute Epsilon @@ -10789,7 +10805,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{18c} +@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{18d} @section Attribute Fast_Math @@ -10800,7 +10816,7 @@ prefix) yields a static Boolean value that is True if pragma @code{Fast_Math} is active, and False otherwise. @node Attribute Finalization_Size,Attribute Fixed_Value,Attribute Fast_Math,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{18d} +@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{18e} @section Attribute Finalization_Size @@ -10818,7 +10834,7 @@ class-wide type whose tag denotes a type with no controlled parts. Note that only heap-allocated objects contain finalization data. @node Attribute Fixed_Value,Attribute From_Any,Attribute Finalization_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{18e} +@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{18f} @section Attribute Fixed_Value @@ -10845,7 +10861,7 @@ This attribute is primarily intended for use in implementation of the input-output functions for fixed-point values. @node Attribute From_Any,Attribute Has_Access_Values,Attribute Fixed_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{18f} +@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{190} @section Attribute From_Any @@ -10855,7 +10871,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{190} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{191} @section Attribute Has_Access_Values @@ -10873,7 +10889,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has access values. @node Attribute Has_Discriminants,Attribute Has_Tagged_Values,Attribute Has_Access_Values,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{191} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{192} @section Attribute Has_Discriminants @@ -10889,7 +10905,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has discriminants. @node Attribute Has_Tagged_Values,Attribute Img,Attribute Has_Discriminants,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{192} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{193} @section Attribute Has_Tagged_Values @@ -10906,7 +10922,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has access values. @node Attribute Img,Attribute Initialized,Attribute Has_Tagged_Values,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{193} +@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{194} @section Attribute Img @@ -10936,7 +10952,7 @@ that returns the appropriate string when called. This means that in an instantiation as a function parameter. @node Attribute Initialized,Attribute Integer_Value,Attribute Img,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{194} +@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{195} @section Attribute Initialized @@ -10946,7 +10962,7 @@ For the syntax and semantics of this attribute, see the SPARK 2014 Reference Manual, section 6.10. @node Attribute Integer_Value,Attribute Invalid_Value,Attribute Initialized,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{195} +@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{196} @section Attribute Integer_Value @@ -10974,7 +10990,7 @@ This attribute is primarily intended for use in implementation of the standard input-output functions for fixed-point values. @node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{196} +@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{197} @section Attribute Invalid_Value @@ -10988,7 +11004,7 @@ including the ability to modify the value with the binder -Sxx flag and relevant environment variables at run time. @node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{197} +@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{198} @section Attribute Large @@ -11001,7 +11017,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{198} +@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{199} @section Attribute Library_Level @@ -11027,7 +11043,7 @@ end Gen; @end example @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{199} +@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{19a} @section Attribute Loop_Entry @@ -11060,7 +11076,7 @@ entry. This copy is not performed if the loop is not entered, or if the corresponding pragmas are ignored or disabled. @node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{19a} +@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{19b} @section Attribute Machine_Size @@ -11070,7 +11086,7 @@ This attribute is identical to the @code{Object_Size} attribute. It is provided for compatibility with the DEC Ada 83 attribute of this name. @node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{19b} +@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{19c} @section Attribute Mantissa @@ -11083,7 +11099,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Maximum_Alignment,Attribute Max_Integer_Size,Attribute Mantissa,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{19c}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{19d} +@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{19d}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{19e} @section Attribute Maximum_Alignment @@ -11099,7 +11115,7 @@ for an object, guaranteeing that it is properly aligned in all cases. @node Attribute Max_Integer_Size,Attribute Mechanism_Code,Attribute Maximum_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{19e} +@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{19f} @section Attribute Max_Integer_Size @@ -11110,7 +11126,7 @@ prefix) provides the size of the largest supported integer type for the target. The result is a static constant. @node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Max_Integer_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{19f} +@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1a0} @section Attribute Mechanism_Code @@ -11141,7 +11157,7 @@ by reference @end table @node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1a0} +@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1a1} @section Attribute Null_Parameter @@ -11166,7 +11182,7 @@ There is no way of indicating this without the @code{Null_Parameter} attribute. @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{14f}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1a1} +@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{150}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1a2} @section Attribute Object_Size @@ -11236,7 +11252,7 @@ Similar additional checks are performed in other contexts requiring statically matching subtypes. @node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1a2} +@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1a3} @section Attribute Old @@ -11251,7 +11267,7 @@ definition are allowed under control of implementation defined pragma @code{Unevaluated_Use_Of_Old}. @node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1a3} +@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1a4} @section Attribute Passed_By_Reference @@ -11267,7 +11283,7 @@ passed by copy in calls. For scalar types, the result is always @code{False} and is static. For non-scalar types, the result is nonstatic. @node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1a4} +@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1a5} @section Attribute Pool_Address @@ -11289,7 +11305,7 @@ For an object created by @code{new}, @code{Ptr.all'Pool_Address} is what is passed to @code{Allocate} and returned from @code{Deallocate}. @node Attribute Range_Length,Attribute Restriction_Set,Attribute Pool_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1a5} +@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1a6} @section Attribute Range_Length @@ -11302,7 +11318,7 @@ applied to the index subtype of a one dimensional array always gives the same result as @code{Length} applied to the array itself. @node Attribute Restriction_Set,Attribute Result,Attribute Range_Length,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1a6} +@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1a7} @section Attribute Restriction_Set @@ -11372,7 +11388,7 @@ Restrictions pragma, they are not analyzed semantically, so they do not have a type. @node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1a7} +@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1a8} @section Attribute Result @@ -11385,7 +11401,7 @@ For a further discussion of the use of this attribute and examples of its use, see the description of pragma Postcondition. @node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1a8} +@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1a9} @section Attribute Round @@ -11396,7 +11412,7 @@ also permits the use of the @code{'Round} attribute for ordinary fixed point types. @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1a9} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1aa} @section Attribute Safe_Emax @@ -11409,7 +11425,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1aa} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1ab} @section Attribute Safe_Large @@ -11422,7 +11438,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1ab} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1ac} @section Attribute Safe_Small @@ -11435,7 +11451,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{15c}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1ac} +@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{15d}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1ad} @section Attribute Scalar_Storage_Order @@ -11598,7 +11614,7 @@ Note that debuggers may be unable to display the correct value of scalar components of a type for which the opposite storage order is specified. @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{ec}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1ad} +@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{ed}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1ae} @section Attribute Simple_Storage_Pool @@ -11661,7 +11677,7 @@ as defined in section 13.11.2 of the Ada Reference Manual, except that the term `simple storage pool' is substituted for `storage pool'. @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1ae} +@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1af} @section Attribute Small @@ -11677,7 +11693,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute when applied to floating-point types. @node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1af} +@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1b0} @section Attribute Small_Denominator @@ -11690,7 +11706,7 @@ denominator in the representation of @code{typ'Small} as a rational number with coprime factors (i.e. as an irreducible fraction). @node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1b0} +@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1b1} @section Attribute Small_Numerator @@ -11703,7 +11719,7 @@ numerator in the representation of @code{typ'Small} as a rational number with coprime factors (i.e. as an irreducible fraction). @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1b1} +@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1b2} @section Attribute Storage_Unit @@ -11713,7 +11729,7 @@ with coprime factors (i.e. as an irreducible fraction). prefix) provides the same value as @code{System.Storage_Unit}. @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1b2} +@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1b3} @section Attribute Stub_Type @@ -11737,7 +11753,7 @@ unit @code{System.Partition_Interface}. Use of this attribute will create an implicit dependency on this unit. @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1b3} +@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1b4} @section Attribute System_Allocator_Alignment @@ -11754,7 +11770,7 @@ with alignment too large or to enable a realignment circuitry if the alignment request is larger than this value. @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1b4} +@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1b5} @section Attribute Target_Name @@ -11767,7 +11783,7 @@ standard gcc target name without the terminating slash (for example, GNAT 5.0 on windows yields “i586-pc-mingw32msv”). @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1b5} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1b6} @section Attribute To_Address @@ -11790,7 +11806,7 @@ modular manner (e.g., -1 means the same as 16#FFFF_FFFF# on a 32 bits machine). @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1b6} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1b7} @section Attribute To_Any @@ -11800,7 +11816,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1b7} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1b8} @section Attribute Type_Class @@ -11830,7 +11846,7 @@ applies to all concurrent types. This attribute is designed to be compatible with the DEC Ada 83 attribute of the same name. @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1b8} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1b9} @section Attribute Type_Key @@ -11842,7 +11858,7 @@ about the type or subtype. This provides improved compatibility with other implementations that support this attribute. @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1b9} +@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1ba} @section Attribute TypeCode @@ -11852,7 +11868,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1ba} +@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1bb} @section Attribute Unconstrained_Array @@ -11866,7 +11882,7 @@ still static, and yields the result of applying this test to the generic actual. @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1bb} +@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1bc} @section Attribute Universal_Literal_String @@ -11894,7 +11910,7 @@ end; @end example @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1bc} +@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1bd} @section Attribute Unrestricted_Access @@ -12081,7 +12097,7 @@ In general this is a risky approach. It may appear to “work” but such uses o of GNAT to another, so are best avoided if possible. @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1bd} +@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1be} @section Attribute Update @@ -12162,7 +12178,7 @@ A := A'Update ((1, 2) => 20, (3, 4) => 30); which changes element (1,2) to 20 and (3,4) to 30. @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1be} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1bf} @section Attribute Valid_Value @@ -12174,7 +12190,7 @@ a String, and returns Boolean. @code{T'Valid_Value (S)} returns True if and only if @code{T'Value (S)} would not raise Constraint_Error. @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1bf} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1c0} @section Attribute Valid_Scalars @@ -12208,7 +12224,7 @@ write a function with a single use of the attribute, and then call that function from multiple places. @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1c0} +@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1c1} @section Attribute VADS_Size @@ -12228,7 +12244,7 @@ gives the result that would be obtained by applying the attribute to the corresponding type. @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{16e}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1c1} +@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{16f}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1c2} @section Attribute Value_Size @@ -12242,7 +12258,7 @@ a value of the given subtype. It is the same as @code{type'Size}, but, unlike @code{Size}, may be set for non-first subtypes. @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1c2} +@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1c3} @section Attribute Wchar_T_Size @@ -12254,7 +12270,7 @@ primarily for constructing the definition of this type in package @code{Interfaces.C}. The result is a static constant. @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1c3} +@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1c4} @section Attribute Word_Size @@ -12265,7 +12281,7 @@ prefix) provides the value @code{System.Word_Size}. The result is a static constant. @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top -@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1c4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1c5}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1c5}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1c6}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} @chapter Standard and Implementation Defined Restrictions @@ -12294,7 +12310,7 @@ language defined or GNAT-specific, are listed in the following. @end menu @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1c6}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1c7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1c7}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1c8} @section Partition-Wide Restrictions @@ -12387,7 +12403,7 @@ then all compilation units in the partition must obey the restriction). @end menu @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1c8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1c9} @subsection Immediate_Reclamation @@ -12399,7 +12415,7 @@ deallocation, any storage reserved at run time for an object is immediately reclaimed when the object no longer exists. @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1c9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1ca} @subsection Max_Asynchronous_Select_Nesting @@ -12411,7 +12427,7 @@ detected at compile time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1ca} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1cb} @subsection Max_Entry_Queue_Length @@ -12432,7 +12448,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1cb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1cc} @subsection Max_Protected_Entries @@ -12443,7 +12459,7 @@ bounds of every entry family of a protected unit shall be static, or shall be defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1cc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1cd} @subsection Max_Select_Alternatives @@ -12452,7 +12468,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. [RM D.7] Specifies the maximum number of alternatives in a selective accept. @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1cd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1ce} @subsection Max_Storage_At_Blocking @@ -12463,7 +12479,7 @@ Storage_Size that can be retained by a blocked task. A violation of this restriction causes Storage_Error to be raised. @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1ce} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1cf} @subsection Max_Task_Entries @@ -12476,7 +12492,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1cf} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1d0} @subsection Max_Tasks @@ -12489,7 +12505,7 @@ time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1d0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1d1} @subsection No_Abort_Statements @@ -12499,7 +12515,7 @@ Storage_Error to be raised. no calls to Task_Identification.Abort_Task. @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1d1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1d2} @subsection No_Access_Parameter_Allocators @@ -12510,7 +12526,7 @@ occurrences of an allocator as the actual parameter to an access parameter. @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1d2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1d3} @subsection No_Access_Subprograms @@ -12520,7 +12536,7 @@ parameter. declarations of access-to-subprogram types. @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1d3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1d4} @subsection No_Allocators @@ -12530,7 +12546,7 @@ declarations of access-to-subprogram types. occurrences of an allocator. @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1d4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1d5} @subsection No_Anonymous_Allocators @@ -12540,7 +12556,7 @@ occurrences of an allocator. occurrences of an allocator of anonymous access type. @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1d5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1d6} @subsection No_Asynchronous_Control @@ -12550,7 +12566,7 @@ occurrences of an allocator of anonymous access type. dependences on the predefined package Asynchronous_Task_Control. @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1d6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1d7} @subsection No_Calendar @@ -12560,7 +12576,7 @@ dependences on the predefined package Asynchronous_Task_Control. dependences on package Calendar. @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1d7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1d8} @subsection No_Coextensions @@ -12570,7 +12586,7 @@ dependences on package Calendar. coextensions. See 3.10.2. @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1d8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1d9} @subsection No_Default_Initialization @@ -12587,7 +12603,7 @@ is to prohibit all cases of variables declared without a specific initializer (including the case of OUT scalar parameters). @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1d9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1da} @subsection No_Delay @@ -12597,7 +12613,7 @@ initializer (including the case of OUT scalar parameters). delay statements and no semantic dependences on package Calendar. @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1da} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1db} @subsection No_Dependence @@ -12640,7 +12656,7 @@ to support specific constructs of the language. Here are some examples: @end itemize @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1db} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1dc} @subsection No_Direct_Boolean_Operators @@ -12653,7 +12669,7 @@ protocol requires the use of short-circuit (and then, or else) forms for all composite boolean operations. @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1dc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1dd} @subsection No_Dispatch @@ -12663,7 +12679,7 @@ composite boolean operations. occurrences of @code{T'Class}, for any (tagged) subtype @code{T}. @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1dd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1de} @subsection No_Dispatching_Calls @@ -12724,7 +12740,7 @@ end Example; @end example @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1de} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1df} @subsection No_Dynamic_Attachment @@ -12743,7 +12759,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1df} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1e0} @subsection No_Dynamic_Priorities @@ -12752,7 +12768,7 @@ warnings on obsolescent features are activated). [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities. @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1e0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1e1} @subsection No_Entry_Calls_In_Elaboration_Code @@ -12764,7 +12780,7 @@ restriction, the compiler can assume that no code past an accept statement in a task can be executed at elaboration time. @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1e1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1e2} @subsection No_Enumeration_Maps @@ -12775,7 +12791,7 @@ enumeration maps are used (that is Image and Value attributes applied to enumeration types). @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1e2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1e3} @subsection No_Exception_Handlers @@ -12800,7 +12816,7 @@ statement generated by the compiler). The Line parameter when nonzero represents the line number in the source program where the raise occurs. @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1e3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1e4} @subsection No_Exception_Propagation @@ -12817,7 +12833,7 @@ the package GNAT.Current_Exception is not permitted, and reraise statements (raise with no operand) are not permitted. @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1e4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1e5} @subsection No_Exception_Registration @@ -12831,7 +12847,7 @@ code is simplified by omitting the otherwise-required global registration of exceptions when they are declared. @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1e5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1e6} @subsection No_Exceptions @@ -12842,7 +12858,7 @@ raise statements and no exception handlers and also suppresses the generation of language-defined run-time checks. @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1e6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1e7} @subsection No_Finalization @@ -12883,7 +12899,7 @@ object or a nested component, either declared on the stack or on the heap. The deallocation of a controlled object no longer finalizes its contents. @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1e7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1e8} @subsection No_Fixed_Point @@ -12893,7 +12909,7 @@ deallocation of a controlled object no longer finalizes its contents. occurrences of fixed point types and operations. @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1e8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1e9} @subsection No_Floating_Point @@ -12903,7 +12919,7 @@ occurrences of fixed point types and operations. occurrences of floating point types and operations. @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1e9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1ea} @subsection No_Implicit_Conditionals @@ -12919,7 +12935,7 @@ normal manner. Constructs generating implicit conditionals include comparisons of composite objects and the Max/Min attributes. @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1ea} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1eb} @subsection No_Implicit_Dynamic_Code @@ -12949,7 +12965,7 @@ foreign-language convention; primitive operations of nested tagged types. @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1eb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1ec} @subsection No_Implicit_Heap_Allocations @@ -12958,7 +12974,7 @@ types. [RM D.7] No constructs are allowed to cause implicit heap allocation. @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1ec} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1ed} @subsection No_Implicit_Protected_Object_Allocations @@ -12968,7 +12984,7 @@ types. protected object. @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1ed} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1ee} @subsection No_Implicit_Task_Allocations @@ -12977,7 +12993,7 @@ protected object. [GNAT] No constructs are allowed to cause implicit heap allocation of a task. @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1ee} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1ef} @subsection No_Initialize_Scalars @@ -12989,7 +13005,7 @@ code, and in particular eliminates dummy null initialization routines that are otherwise generated for some record and array types. @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1ef} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1f0} @subsection No_IO @@ -13000,7 +13016,7 @@ dependences on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO. @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1f0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1f1} @subsection No_Local_Allocators @@ -13011,7 +13027,7 @@ occurrences of an allocator in subprograms, generic subprograms, tasks, and entry bodies. @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1f1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1f2} @subsection No_Local_Protected_Objects @@ -13021,7 +13037,7 @@ and entry bodies. only declared at the library level. @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1f2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1f3} @subsection No_Local_Tagged_Types @@ -13031,7 +13047,7 @@ only declared at the library level. declared at the library level. @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1f3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1f4} @subsection No_Local_Timing_Events @@ -13041,7 +13057,7 @@ declared at the library level. declared at the library level. @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1f4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1f5} @subsection No_Long_Long_Integers @@ -13053,7 +13069,7 @@ implicit base type is Long_Long_Integer, and modular types whose size exceeds Long_Integer’Size. @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1f5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1f6} @subsection No_Multiple_Elaboration @@ -13069,7 +13085,7 @@ possible, including non-Ada main programs and Stand Alone libraries, are not permitted and will be diagnosed by the binder. @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1f6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1f7} @subsection No_Nested_Finalization @@ -13078,7 +13094,7 @@ permitted and will be diagnosed by the binder. [RM D.7] All objects requiring finalization are declared at the library level. @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1f7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1f8} @subsection No_Protected_Type_Allocators @@ -13088,7 +13104,7 @@ permitted and will be diagnosed by the binder. expressions that attempt to allocate protected objects. @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1f8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1f9} @subsection No_Protected_Types @@ -13098,7 +13114,7 @@ expressions that attempt to allocate protected objects. declarations of protected types or protected objects. @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1f9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1fa} @subsection No_Recursion @@ -13108,7 +13124,7 @@ declarations of protected types or protected objects. part of its execution. @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1fa} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1fb} @subsection No_Reentrancy @@ -13118,7 +13134,7 @@ part of its execution. two tasks at the same time. @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1fb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1fc} @subsection No_Relative_Delay @@ -13129,7 +13145,7 @@ relative statements and prevents expressions such as @code{delay 1.23;} from appearing in source code. @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1fc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1fd} @subsection No_Requeue_Statements @@ -13147,7 +13163,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on oNobsolescent features are activated). @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1fd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1fe} @subsection No_Secondary_Stack @@ -13160,7 +13176,7 @@ stack is used to implement functions returning unconstrained objects secondary stacks for tasks (excluding the environment task) at run time. @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1fe} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1ff} @subsection No_Select_Statements @@ -13170,7 +13186,7 @@ secondary stacks for tasks (excluding the environment task) at run time. kind are permitted, that is the keyword @code{select} may not appear. @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1ff} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{200} @subsection No_Specific_Termination_Handlers @@ -13180,7 +13196,7 @@ kind are permitted, that is the keyword @code{select} may not appear. or to Ada.Task_Termination.Specific_Handler. @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{200} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{201} @subsection No_Specification_of_Aspect @@ -13191,7 +13207,7 @@ specification, attribute definition clause, or pragma is given for a given aspect. @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{201} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{202} @subsection No_Standard_Allocators_After_Elaboration @@ -13203,7 +13219,7 @@ library items of the partition has completed. Otherwise, Storage_Error is raised. @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{202} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{203} @subsection No_Standard_Storage_Pools @@ -13215,7 +13231,7 @@ have an explicit Storage_Pool attribute defined specifying a user-defined storage pool. @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{203} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{204} @subsection No_Stream_Optimizations @@ -13228,7 +13244,7 @@ due to their superior performance. When this restriction is in effect, the compiler performs all IO operations on a per-character basis. @node No_Streams,No_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{204} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{205} @subsection No_Streams @@ -13255,7 +13271,7 @@ configuration pragmas to avoid exposing entity names at binary level for the entire partition. @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{205} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{206} @subsection No_Tagged_Type_Registration @@ -13270,7 +13286,7 @@ are declared. This restriction may be necessary in order to also apply the No_Elaboration_Code restriction. @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{206} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{207} @subsection No_Task_Allocators @@ -13280,7 +13296,7 @@ the No_Elaboration_Code restriction. or types containing task subcomponents. @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{207} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{208} @subsection No_Task_At_Interrupt_Priority @@ -13292,7 +13308,7 @@ a consequence, the tasks are always created with a priority below that an interrupt priority. @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{208} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{209} @subsection No_Task_Attributes_Package @@ -13309,7 +13325,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{209} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{20a} @subsection No_Task_Hierarchy @@ -13319,7 +13335,7 @@ warnings on obsolescent features are activated). directly on the environment task of the partition. @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{20a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{20b} @subsection No_Task_Termination @@ -13328,7 +13344,7 @@ directly on the environment task of the partition. [RM D.7] Tasks that terminate are erroneous. @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{20b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{20c} @subsection No_Tasking @@ -13341,7 +13357,7 @@ and cause an error message to be output either by the compiler or binder. @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{20c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{20d} @subsection No_Terminate_Alternatives @@ -13350,7 +13366,7 @@ binder. [RM D.7] There are no selective accepts with terminate alternatives. @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{20d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{20e} @subsection No_Unchecked_Access @@ -13360,7 +13376,7 @@ binder. occurrences of the Unchecked_Access attribute. @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{20e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{20f} @subsection No_Unchecked_Conversion @@ -13370,7 +13386,7 @@ occurrences of the Unchecked_Access attribute. dependences on the predefined generic function Unchecked_Conversion. @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{20f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{210} @subsection No_Unchecked_Deallocation @@ -13380,7 +13396,7 @@ dependences on the predefined generic function Unchecked_Conversion. dependences on the predefined generic procedure Unchecked_Deallocation. @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{210} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{211} @subsection No_Use_Of_Attribute @@ -13390,7 +13406,7 @@ dependences on the predefined generic procedure Unchecked_Deallocation. earlier versions of Ada. @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{211} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{212} @subsection No_Use_Of_Entity @@ -13410,7 +13426,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line @end example @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{212} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{213} @subsection No_Use_Of_Pragma @@ -13420,7 +13436,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line earlier versions of Ada. @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{213} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{214} @subsection Pure_Barriers @@ -13471,7 +13487,7 @@ but still ensures absence of side effects, exceptions, and recursion during the evaluation of the barriers. @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{214} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{215} @subsection Simple_Barriers @@ -13490,7 +13506,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{215} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{216} @subsection Static_Priorities @@ -13501,7 +13517,7 @@ are static, and that there are no dependences on the package @code{Ada.Dynamic_Priorities}. @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{216} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{217} @subsection Static_Storage_Size @@ -13511,7 +13527,7 @@ are static, and that there are no dependences on the package in a Storage_Size pragma or attribute definition clause is static. @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{217}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{218} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{218}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{219} @section Program Unit Level Restrictions @@ -13542,7 +13558,7 @@ other compilation units in the partition. @end menu @node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{219} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{21a} @subsection No_Elaboration_Code @@ -13598,7 +13614,7 @@ associated with the unit. This counter is typically used to check for access before elaboration and to control multiple elaboration attempts. @node No_Dynamic_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{21a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{21b} @subsection No_Dynamic_Accessibility_Checks @@ -13647,7 +13663,7 @@ In all other cases, the level of T is as defined by the existing rules of Ada. @end itemize @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{21b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{21c} @subsection No_Dynamic_Sized_Objects @@ -13665,7 +13681,7 @@ access discriminants. It is often a good idea to combine this restriction with No_Secondary_Stack. @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{21c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{21d} @subsection No_Entry_Queue @@ -13678,7 +13694,7 @@ checked at compile time. A program execution is erroneous if an attempt is made to queue a second task on such an entry. @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{21d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{21e} @subsection No_Implementation_Aspect_Specifications @@ -13689,7 +13705,7 @@ GNAT-defined aspects are present. With this restriction, the only aspects that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{21e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{21f} @subsection No_Implementation_Attributes @@ -13701,7 +13717,7 @@ attributes that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{21f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{220} @subsection No_Implementation_Identifiers @@ -13712,7 +13728,7 @@ implementation-defined identifiers (marked with pragma Implementation_Defined) occur within language-defined packages. @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{220} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{221} @subsection No_Implementation_Pragmas @@ -13723,7 +13739,7 @@ GNAT-defined pragmas are present. With this restriction, the only pragmas that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{221} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{222} @subsection No_Implementation_Restrictions @@ -13735,7 +13751,7 @@ are present. With this restriction, the only other restriction identifiers that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{222} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{223} @subsection No_Implementation_Units @@ -13746,7 +13762,7 @@ mention in the context clause of any implementation-defined descendants of packages Ada, Interfaces, or System. @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{223} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{224} @subsection No_Implicit_Aliasing @@ -13761,7 +13777,7 @@ to be aliased, and in such cases, it can always be replaced by the standard attribute Unchecked_Access which is preferable. @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{224} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{225} @subsection No_Implicit_Loops @@ -13778,7 +13794,7 @@ arrays larger than about 5000 scalar components. Note that if this restriction is set in the spec of a package, it will not apply to its body. @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{225} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{226} @subsection No_Obsolescent_Features @@ -13788,7 +13804,7 @@ is set in the spec of a package, it will not apply to its body. features are used, as defined in Annex J of the Ada Reference Manual. @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{226} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{227} @subsection No_Wide_Characters @@ -13802,7 +13818,7 @@ appear in the program (that is literals representing characters not in type @code{Character}). @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{227} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{228} @subsection Static_Dispatch_Tables @@ -13812,7 +13828,7 @@ type @code{Character}). associated with dispatch tables can be placed in read-only memory. @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{228} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{229} @subsection SPARK_05 @@ -13835,7 +13851,7 @@ gnatprove -P project.gpr --mode=check_all @end example @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top -@anchor{gnat_rm/implementation_advice doc}@anchor{229}@anchor{gnat_rm/implementation_advice id1}@anchor{22a}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} +@anchor{gnat_rm/implementation_advice doc}@anchor{22a}@anchor{gnat_rm/implementation_advice id1}@anchor{22b}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} @chapter Implementation Advice @@ -13933,7 +13949,7 @@ case the text describes what GNAT does and why. @end menu @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{22b} +@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{22c} @section RM 1.1.3(20): Error Detection @@ -13950,7 +13966,7 @@ or diagnosed at compile time. @geindex Child Units @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{22c} +@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{22d} @section RM 1.1.3(31): Child Units @@ -13966,7 +13982,7 @@ Followed. @geindex Bounded errors @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{22d} +@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{22e} @section RM 1.1.5(12): Bounded Errors @@ -13983,7 +13999,7 @@ runtime. @geindex Pragmas @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice -@anchor{gnat_rm/implementation_advice id2}@anchor{22e}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{22f} +@anchor{gnat_rm/implementation_advice id2}@anchor{22f}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{230} @section RM 2.8(16): Pragmas @@ -14096,7 +14112,7 @@ that this advice not be followed. For details see @ref{7,,Implementation Defined Pragmas}. @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{230} +@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{231} @section RM 2.8(17-19): Pragmas @@ -14117,14 +14133,14 @@ replacing @code{library_items}.” @end itemize @end quotation -See @ref{22f,,RM 2.8(16); Pragmas}. +See @ref{230,,RM 2.8(16); Pragmas}. @geindex Character Sets @geindex Alternative Character Sets @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{231} +@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{232} @section RM 3.5.2(5): Alternative Character Sets @@ -14152,7 +14168,7 @@ there is no such restriction. @geindex Integer types @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{232} +@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{233} @section RM 3.5.4(28): Integer Types @@ -14171,7 +14187,7 @@ are supported for convenient interface to C, and so that all hardware types of the machine are easily available. @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{233} +@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{234} @section RM 3.5.4(29): Integer Types @@ -14187,7 +14203,7 @@ Followed. @geindex Enumeration values @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{234} +@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{235} @section RM 3.5.5(8): Enumeration Values @@ -14207,7 +14223,7 @@ Followed. @geindex Float types @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{235} +@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{236} @section RM 3.5.7(17): Float Types @@ -14237,7 +14253,7 @@ is a software rather than a hardware format. @geindex multidimensional @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration’Small,RM 3 5 7 17 Float Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{236} +@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{237} @section RM 3.6.2(11): Multidimensional Arrays @@ -14255,7 +14271,7 @@ Followed. @geindex Duration'Small @node RM 9 6 30-31 Duration’Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{237} +@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{238} @section RM 9.6(30-31): Duration’Small @@ -14276,7 +14292,7 @@ it need not be the same time base as used for @code{Calendar.Clock}.” Followed. @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration’Small,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{238} +@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{239} @section RM 10.2.1(12): Consistent Representation @@ -14298,7 +14314,7 @@ advice without severely impacting efficiency of execution. @geindex Exception information @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{239} +@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{23a} @section RM 11.4.1(19): Exception Information @@ -14329,7 +14345,7 @@ Pragma @code{Discard_Names}. @geindex suppression of @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{23a} +@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{23b} @section RM 11.5(28): Suppression of Checks @@ -14344,7 +14360,7 @@ Followed. @geindex Representation clauses @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{23b} +@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{23c} @section RM 13.1 (21-24): Representation Clauses @@ -14396,7 +14412,7 @@ Followed. @geindex Packed types @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{23c} +@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{23d} @section RM 13.2(6-8): Packed Types @@ -14427,7 +14443,7 @@ subcomponent of the packed type. @geindex Address clauses @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{23d} +@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{23e} @section RM 13.3(14-19): Address Clauses @@ -14480,7 +14496,7 @@ Followed. @geindex Alignment clauses @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{23e} +@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{23f} @section RM 13.3(29-35): Alignment Clauses @@ -14537,7 +14553,7 @@ Followed. @geindex Size clauses @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{23f} +@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{240} @section RM 13.3(42-43): Size Clauses @@ -14555,7 +14571,7 @@ object’s @code{Alignment} (if the @code{Alignment} is nonzero).” Followed. @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{240} +@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{241} @section RM 13.3(50-56): Size Clauses @@ -14606,7 +14622,7 @@ Followed. @geindex Component_Size clauses @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{241} +@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{242} @section RM 13.3(71-73): Component Size Clauses @@ -14640,7 +14656,7 @@ Followed. @geindex enumeration @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{242} +@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{243} @section RM 13.4(9-10): Enumeration Representation Clauses @@ -14662,7 +14678,7 @@ Followed. @geindex records @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{243} +@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{244} @section RM 13.5.1(17-22): Record Representation Clauses @@ -14722,7 +14738,7 @@ and all mentioned features are implemented. @geindex Storage place attributes @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{244} +@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{245} @section RM 13.5.2(5): Storage Place Attributes @@ -14742,7 +14758,7 @@ Followed. There are no such components in GNAT. @geindex Bit ordering @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{245} +@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{246} @section RM 13.5.3(7-8): Bit Ordering @@ -14760,7 +14776,7 @@ Followed. @geindex as private type @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{246} +@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{247} @section RM 13.7(37): Address as Private @@ -14778,7 +14794,7 @@ Followed. @geindex operations of @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{247} +@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{248} @section RM 13.7.1(16): Address Operations @@ -14796,7 +14812,7 @@ operation raises @code{Program_Error}, since all operations make sense. @geindex Unchecked conversion @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{248} +@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{249} @section RM 13.9(14-17): Unchecked Conversion @@ -14840,7 +14856,7 @@ Followed. @geindex implicit @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{249} +@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{24a} @section RM 13.11(23-25): Implicit Heap Usage @@ -14891,7 +14907,7 @@ Followed. @geindex Unchecked deallocation @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{24a} +@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{24b} @section RM 13.11.2(17): Unchecked Deallocation @@ -14906,7 +14922,7 @@ Followed. @geindex Stream oriented attributes @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{24b} +@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{24c} @section RM 13.13.2(1.6): Stream Oriented Attributes @@ -14937,7 +14953,7 @@ scalar types. This XDR alternative can be enabled via the binder switch -xdr. @geindex Stream oriented attributes @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{24c} +@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{24d} @section RM A.1(52): Names of Predefined Numeric Types @@ -14955,7 +14971,7 @@ Followed. @geindex Ada.Characters.Handling @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{24d} +@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{24e} @section RM A.3.2(49): @code{Ada.Characters.Handling} @@ -14972,7 +14988,7 @@ Followed. GNAT provides no such localized definitions. @geindex Bounded-length strings @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{24e} +@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{24f} @section RM A.4.4(106): Bounded-Length String Handling @@ -14987,7 +15003,7 @@ Followed. No implicit pointers or dynamic allocation are used. @geindex Random number generation @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{24f} +@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{250} @section RM A.5.2(46-47): Random Number Generation @@ -15016,7 +15032,7 @@ condition here to hold true. @geindex Get_Immediate @node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{250} +@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{251} @section RM A.10.7(23): @code{Get_Immediate} @@ -15040,7 +15056,7 @@ this functionality. @geindex Containers @node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{251} +@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{252} @section RM A.18: @code{Containers} @@ -15061,7 +15077,7 @@ follow the implementation advice. @geindex Export @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{252} +@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{253} @section RM B.1(39-41): Pragma @code{Export} @@ -15109,7 +15125,7 @@ Followed. @geindex Interfaces @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{253} +@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{254} @section RM B.2(12-13): Package @code{Interfaces} @@ -15139,7 +15155,7 @@ Followed. GNAT provides all the packages described in this section. @geindex interfacing with @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{254} +@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{255} @section RM B.3(63-71): Interfacing with C @@ -15227,7 +15243,7 @@ Followed. @geindex interfacing with @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{255} +@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{256} @section RM B.4(95-98): Interfacing with COBOL @@ -15268,7 +15284,7 @@ Followed. @geindex interfacing with @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{256} +@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{257} @section RM B.5(22-26): Interfacing with Fortran @@ -15319,7 +15335,7 @@ Followed. @geindex Machine operations @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{257} +@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{258} @section RM C.1(3-5): Access to Machine Operations @@ -15354,7 +15370,7 @@ object that is specified as exported.” Followed. @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{258} +@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{259} @section RM C.1(10-16): Access to Machine Operations @@ -15415,7 +15431,7 @@ Followed on any target supporting such operations. @geindex Interrupt support @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{259} +@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{25a} @section RM C.3(28): Interrupt Support @@ -15433,7 +15449,7 @@ of interrupt blocking. @geindex Protected procedure handlers @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{25a} +@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{25b} @section RM C.3.1(20-21): Protected Procedure Handlers @@ -15459,7 +15475,7 @@ Followed. Compile time warnings are given when possible. @geindex Interrupts @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{25b} +@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{25c} @section RM C.3.2(25): Package @code{Interrupts} @@ -15477,7 +15493,7 @@ Followed. @geindex Pre-elaboration requirements @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{25c} +@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{25d} @section RM C.4(14): Pre-elaboration Requirements @@ -15493,7 +15509,7 @@ Followed. Executable code is generated in some cases, e.g., loops to initialize large arrays. @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{25d} +@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{25e} @section RM C.5(8): Pragma @code{Discard_Names} @@ -15511,7 +15527,7 @@ Followed. @geindex Task_Attributes @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{25e} +@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{25f} @section RM C.7.2(30): The Package Task_Attributes @@ -15532,7 +15548,7 @@ Not followed. This implementation is not targeted to such a domain. @geindex Locking Policies @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{25f} +@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{260} @section RM D.3(17): Locking Policies @@ -15549,7 +15565,7 @@ whose names (@code{Inheritance_Locking} and @geindex Entry queuing policies @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{260} +@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{261} @section RM D.4(16): Entry Queuing Policies @@ -15564,7 +15580,7 @@ Followed. No such implementation-defined queuing policies exist. @geindex Preemptive abort @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{261} +@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{262} @section RM D.6(9-10): Preemptive Abort @@ -15590,7 +15606,7 @@ Followed. @geindex Tasking restrictions @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{262} +@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{263} @section RM D.7(21): Tasking Restrictions @@ -15609,7 +15625,7 @@ pragma @code{Profile (Restricted)} for more details. @geindex monotonic @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{263} +@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{264} @section RM D.8(47-49): Monotonic Time @@ -15644,7 +15660,7 @@ Followed. @geindex PCS @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{264} +@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{265} @section RM E.5(28-29): Partition Communication Subsystem @@ -15672,7 +15688,7 @@ GNAT. @geindex COBOL support @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{265} +@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{266} @section RM F(7): COBOL Support @@ -15692,7 +15708,7 @@ Followed. @geindex Decimal radix support @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{266} +@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{267} @section RM F.1(2): Decimal Radix Support @@ -15708,7 +15724,7 @@ representations. @geindex Numerics @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{267} +@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{268} @section RM G: Numerics @@ -15728,7 +15744,7 @@ Followed. @geindex Complex types @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{268} +@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{269} @section RM G.1.1(56-58): Complex Types @@ -15790,7 +15806,7 @@ Followed. @geindex Complex elementary functions @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{269} +@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{26a} @section RM G.1.2(49): Complex Elementary Functions @@ -15812,7 +15828,7 @@ Followed. @geindex Accuracy requirements @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{26a} +@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{26b} @section RM G.2.4(19): Accuracy Requirements @@ -15836,7 +15852,7 @@ Followed. @geindex complex arithmetic @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{26b} +@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{26c} @section RM G.2.6(15): Complex Arithmetic Accuracy @@ -15854,7 +15870,7 @@ Followed. @geindex Sequential elaboration policy @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{26c} +@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{26d} @section RM H.6(15/2): Pragma Partition_Elaboration_Policy @@ -15869,7 +15885,7 @@ immediately terminated.” Not followed. @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top -@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{26d}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{26e}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} +@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{26e}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{26f}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} @chapter Implementation Defined Characteristics @@ -16718,7 +16734,7 @@ See separate section on data representations. such aspects and the legality rules for such aspects. See 13.1.1(38).” @end itemize -See @ref{12a,,Implementation Defined Aspects}. +See @ref{12b,,Implementation Defined Aspects}. @itemize * @@ -17162,7 +17178,7 @@ When the @code{Pattern} parameter is not the null string, it is interpreted according to the syntax of regular expressions as defined in the @code{GNAT.Regexp} package. -See @ref{26f,,GNAT.Regexp (g-regexp.ads)}. +See @ref{270,,GNAT.Regexp (g-regexp.ads)}. @itemize * @@ -18260,7 +18276,7 @@ Information on those subjects is not yet available. Execution is erroneous in that case. @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top -@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{270}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{271}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} +@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{271}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} @chapter Intrinsic Subprograms @@ -18298,7 +18314,7 @@ Ada standard does not require Ada compilers to implement this feature. @end menu @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{273} +@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{273}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{274} @section Intrinsic Operators @@ -18329,7 +18345,7 @@ It is also possible to specify such operators for private types, if the full views are appropriate arithmetic types. @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{274}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{275} +@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{275}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{276} @section Compilation_ISO_Date @@ -18343,7 +18359,7 @@ application program should simply call the function the current compilation (in local time format YYYY-MM-DD). @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{276}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{277} +@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{277}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{278} @section Compilation_Date @@ -18353,7 +18369,7 @@ Same as Compilation_ISO_Date, except the string is in the form MMM DD YYYY. @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{278}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{279} +@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{279}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{27a} @section Compilation_Time @@ -18367,7 +18383,7 @@ application program should simply call the function the current compilation (in local time format HH:MM:SS). @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{27b} +@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{27b}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{27c} @section Enclosing_Entity @@ -18381,7 +18397,7 @@ application program should simply call the function the current subprogram, package, task, entry, or protected subprogram. @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{27c}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{27d} +@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{27d}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{27e} @section Exception_Information @@ -18395,7 +18411,7 @@ so an application program should simply call the function the exception information associated with the current exception. @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{27e}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{27f} +@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{27f}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{280} @section Exception_Message @@ -18409,7 +18425,7 @@ so an application program should simply call the function the message associated with the current exception. @node Exception_Name,File,Exception_Message,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{280}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{281} +@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{281}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{282} @section Exception_Name @@ -18423,7 +18439,7 @@ so an application program should simply call the function the name of the current exception. @node File,Line,Exception_Name,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms file}@anchor{282}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{283} +@anchor{gnat_rm/intrinsic_subprograms file}@anchor{283}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{284} @section File @@ -18437,7 +18453,7 @@ application program should simply call the function file. @node Line,Shifts and Rotates,File,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{284}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{285} +@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{285}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{286} @section Line @@ -18451,7 +18467,7 @@ application program should simply call the function source line. @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{286}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{287} +@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{287}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{288} @section Shifts and Rotates @@ -18494,7 +18510,7 @@ corresponding operator for modular type. In particular, shifting a negative number may change its sign bit to positive. @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{288}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{289} +@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{289}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{28a} @section Source_Location @@ -18508,7 +18524,7 @@ application program should simply call the function source file location. @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top -@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{28b}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} +@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{28b}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} @chapter Representation Clauses and Pragmas @@ -18554,7 +18570,7 @@ and this section describes the additional capabilities provided. @end menu @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{28d} +@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{28d}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{28e} @section Alignment Clauses @@ -18576,7 +18592,7 @@ For elementary types, the alignment is the minimum of the actual size of objects of the type divided by @code{Storage_Unit}, and the maximum alignment supported by the target. (This maximum alignment is given by the GNAT-specific attribute -@code{Standard'Maximum_Alignment}; see @ref{19c,,Attribute Maximum_Alignment}.) +@code{Standard'Maximum_Alignment}; see @ref{19d,,Attribute Maximum_Alignment}.) @geindex Maximum_Alignment attribute @@ -18685,7 +18701,7 @@ assumption is non-portable, and other compilers may choose different alignments for the subtype @code{RS}. @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{28e}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{28f} +@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{28f}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{290} @section Size Clauses @@ -18762,7 +18778,7 @@ if it is known that a Size value can be accommodated in an object of type Integer. @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{290}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{291} +@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{291}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{292} @section Storage_Size Clauses @@ -18835,7 +18851,7 @@ Of course in practice, there will not be any explicit allocators in the case of such an access declaration. @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{292}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{293} +@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{293}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{294} @section Size of Variant Record Objects @@ -18945,7 +18961,7 @@ the maximum size, regardless of the current variant value, the variant value. @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{295} +@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{295}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{296} @section Biased Representation @@ -18983,7 +18999,7 @@ biased representation can be used for all discrete types except for enumeration types for which a representation clause is given. @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{297} +@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{297}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{298} @section Value_Size and Object_Size Clauses @@ -19299,7 +19315,7 @@ definition clause forces biased representation. This warning can be turned off using @code{-gnatw.B}. @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{299} +@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{299}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{29a} @section Component_Size Clauses @@ -19347,7 +19363,7 @@ and a pragma Pack for the same array type. if such duplicate clauses are given, the pragma Pack will be ignored. @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{29b} +@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{29b}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{29c} @section Bit_Order Clauses @@ -19453,7 +19469,7 @@ if desired. The following section contains additional details regarding the issue of byte ordering. @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{29d} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{29d}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{29e} @section Effect of Bit_Order on Byte Ordering @@ -19710,7 +19726,7 @@ to set the boolean constant @code{Master_Byte_First} in an appropriate manner. @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{29e}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{29f} +@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{29f}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2a0} @section Pragma Pack for Arrays @@ -19830,7 +19846,7 @@ Here 31-bit packing is achieved as required, and no warning is generated, since in this case the programmer intention is clear. @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2a0}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2a1} +@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2a1}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2a2} @section Pragma Pack for Records @@ -19914,7 +19930,7 @@ array that is longer than 64 bits, so it is itself non-packable on boundary, and takes an integral number of bytes, i.e., 72 bits. @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2a2}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2a3} +@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2a3}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2a4} @section Record Representation Clauses @@ -19993,7 +20009,7 @@ end record; @end example @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2a5} +@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2a5}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2a6} @section Handling of Records with Holes @@ -20069,7 +20085,7 @@ for Hrec'Size use 64; @end example @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2a7} +@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2a7}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2a8} @section Enumeration Clauses @@ -20112,7 +20128,7 @@ the overhead of converting representation values to the corresponding positional values, (i.e., the value delivered by the @code{Pos} attribute). @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2a8}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2a9} +@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2a9}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2aa} @section Address Clauses @@ -20452,7 +20468,7 @@ then the program compiles without the warning and when run will generate the output @code{X was not clobbered}. @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2aa}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2ab} +@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2ab}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2ac} @section Use of Address Clauses for Memory-Mapped I/O @@ -20510,7 +20526,7 @@ provides the pragma @code{Volatile_Full_Access} which can be used in lieu of pragma @code{Atomic} and will give the additional guarantee. @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2ac}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2ad} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2ad}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2ae} @section Effect of Convention on Representation @@ -20588,7 +20604,7 @@ when one of these values is read, any nonzero value is treated as True. @end itemize @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2ae}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2af} +@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2af}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2b0} @section Conventions and Anonymous Access Types @@ -20664,7 +20680,7 @@ package ConvComp is @end example @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2b0}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2b1} +@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2b1}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2b2} @section Determining the Representations chosen by GNAT @@ -20816,7 +20832,7 @@ generated by the compiler into the original source to fix and guarantee the actual representation to be used. @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top -@anchor{gnat_rm/standard_library_routines doc}@anchor{2b2}@anchor{gnat_rm/standard_library_routines id1}@anchor{2b3}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} +@anchor{gnat_rm/standard_library_routines doc}@anchor{2b3}@anchor{gnat_rm/standard_library_routines id1}@anchor{2b4}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} @chapter Standard Library Routines @@ -21640,7 +21656,7 @@ For packages in Interfaces and System, all the RM defined packages are available in GNAT, see the Ada 2012 RM for full details. @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top -@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2b5}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} +@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2b5}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} @chapter The Implementation of Standard I/O @@ -21692,7 +21708,7 @@ these additional facilities are also described in this chapter. @end menu @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2b7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2b7}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2b8} @section Standard I/O Packages @@ -21763,7 +21779,7 @@ flush the common I/O streams and in particular Standard_Output before elaborating the Ada code. @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2b9} +@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2b9}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2ba} @section FORM Strings @@ -21789,7 +21805,7 @@ unrecognized keyword appears in a form string, it is silently ignored and not considered invalid. @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2bb} +@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2bb}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2bc} @section Direct_IO @@ -21808,7 +21824,7 @@ There is no limit on the size of Direct_IO files, they are expanded as necessary to accommodate whatever records are written to the file. @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2bd} +@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2bd}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2be} @section Sequential_IO @@ -21855,7 +21871,7 @@ using Stream_IO, and this is the preferred mechanism. In particular, the above program fragment rewritten to use Stream_IO will work correctly. @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2bf} +@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2bf}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2c0} @section Text_IO @@ -21938,7 +21954,7 @@ the file. @end menu @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2c1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2c1}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2c2} @subsection Stream Pointer Positioning @@ -21974,7 +21990,7 @@ between two Ada files, then the difference may be observable in some situations. @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2c3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2c3}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2c4} @subsection Reading and Writing Non-Regular Files @@ -22025,7 +22041,7 @@ to read data past that end of file indication, until another end of file indication is entered. @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2c5} +@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2c5}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2c6} @subsection Get_Immediate @@ -22043,7 +22059,7 @@ possible), it is undefined whether the FF character will be treated as a page mark. @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2c7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2c7}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2c8} @subsection Treating Text_IO Files as Streams @@ -22059,7 +22075,7 @@ skipped and the effect is similar to that described above for @code{Get_Immediate}. @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2c9} +@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2c9}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2ca} @subsection Text_IO Extensions @@ -22087,7 +22103,7 @@ the string is to be read. @end itemize @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2cb} +@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2cb}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2cc} @subsection Text_IO Facilities for Unbounded Strings @@ -22135,7 +22151,7 @@ files @code{a-szuzti.ads} and @code{a-szuzti.adb} provides similar extended @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings. @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2cd} +@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2cd}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2ce} @section Wide_Text_IO @@ -22382,12 +22398,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2cf} +@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2cf}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2d0} @subsection Stream Pointer Positioning @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2bf,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2c0,,Text_IO}). There is one additional case: If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22406,7 +22422,7 @@ to a normal program using @code{Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2d1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2d1}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2d2} @subsection Reading and Writing Non-Regular Files @@ -22417,7 +22433,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2d3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2d3}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2d4} @section Wide_Wide_Text_IO @@ -22586,12 +22602,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2d4}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2d5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2d5}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2d6} @subsection Stream Pointer Positioning @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2bf,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2c0,,Text_IO}). There is one additional case: If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22610,7 +22626,7 @@ to a normal program using @code{Wide_Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2d6}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2d7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2d7}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2d8} @subsection Reading and Writing Non-Regular Files @@ -22621,7 +22637,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2d8}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2d9} +@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2d9}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2da} @section Stream_IO @@ -22643,7 +22659,7 @@ manner described for stream attributes. @end itemize @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2da}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2db} +@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2db}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2dc} @section Text Translation @@ -22677,7 +22693,7 @@ mode. (corresponds to_O_U16TEXT). @end itemize @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2dc}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2dd} +@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2dd}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2de} @section Shared Files @@ -22740,7 +22756,7 @@ heterogeneous input-output. Although this approach will work in GNAT if for this purpose (using the stream attributes) @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2de}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2df} +@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2df}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2e0} @section Filenames encoding @@ -22780,7 +22796,7 @@ platform. On the other Operating Systems the run-time is supporting UTF-8 natively. @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2e0}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2e1} +@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2e1}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2e2} @section File content encoding @@ -22813,7 +22829,7 @@ Unicode 8-bit encoding This encoding is only supported on the Windows platform. @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2e2}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2e3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2e3}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2e4} @section Open Modes @@ -22916,7 +22932,7 @@ subsequently requires switching from reading to writing or vice-versa, then the file is reopened in @code{r+} mode to permit the required operation. @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2e4}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2e5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2e5}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2e6} @section Operations on C Streams @@ -23076,7 +23092,7 @@ end Interfaces.C_Streams; @end example @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2e6}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2e7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2e7}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2e8} @section Interfacing to C Streams @@ -23169,7 +23185,7 @@ imported from a C program, allowing an Ada file to operate on an existing C file. @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top -@anchor{gnat_rm/the_gnat_library doc}@anchor{2e8}@anchor{gnat_rm/the_gnat_library id1}@anchor{2e9}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} +@anchor{gnat_rm/the_gnat_library doc}@anchor{2e9}@anchor{gnat_rm/the_gnat_library id1}@anchor{2ea}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} @chapter The GNAT Library @@ -23354,7 +23370,7 @@ of GNAT, and will generate a warning message. @end menu @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2ea}@anchor{gnat_rm/the_gnat_library id2}@anchor{2eb} +@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2eb}@anchor{gnat_rm/the_gnat_library id2}@anchor{2ec} @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads}) @@ -23371,7 +23387,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2ec}@anchor{gnat_rm/the_gnat_library id3}@anchor{2ed} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2ed}@anchor{gnat_rm/the_gnat_library id3}@anchor{2ee} @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads}) @@ -23388,7 +23404,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id4}@anchor{2ef} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2ef}@anchor{gnat_rm/the_gnat_library id4}@anchor{2f0} @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads}) @@ -23405,7 +23421,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2f0}@anchor{gnat_rm/the_gnat_library id5}@anchor{2f1} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2f1}@anchor{gnat_rm/the_gnat_library id5}@anchor{2f2} @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads}) @@ -23422,7 +23438,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id6}@anchor{2f3} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2f3}@anchor{gnat_rm/the_gnat_library id6}@anchor{2f4} @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads}) @@ -23439,7 +23455,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id7}@anchor{2f5} +@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f5}@anchor{gnat_rm/the_gnat_library id7}@anchor{2f6} @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads}) @@ -23451,7 +23467,7 @@ This child of @code{Ada.Containers} defines a modified version of Indefinite_Holders that avoids heap allocation. @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id8}@anchor{2f7} +@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f7}@anchor{gnat_rm/the_gnat_library id8}@anchor{2f8} @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads}) @@ -23464,7 +23480,7 @@ provides a mechanism for obtaining environment values on systems where this concept makes sense. @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id9}@anchor{2f9} +@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f9}@anchor{gnat_rm/the_gnat_library id9}@anchor{2fa} @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads}) @@ -23482,7 +23498,7 @@ to further calls to the subprograms in @code{Ada.Command_Line}. These calls will not see the removed argument. @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id10}@anchor{2fb} +@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2fb}@anchor{gnat_rm/the_gnat_library id10}@anchor{2fc} @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads}) @@ -23502,7 +23518,7 @@ Using a response file allow passing a set of arguments to an executable longer than the maximum allowed by the system on the command line. @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id11}@anchor{2fd} +@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fd}@anchor{gnat_rm/the_gnat_library id11}@anchor{2fe} @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads}) @@ -23517,7 +23533,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id12}@anchor{2ff} +@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2ff}@anchor{gnat_rm/the_gnat_library id12}@anchor{300} @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads}) @@ -23531,7 +23547,7 @@ exception occurrence (@code{Null_Occurrence}) without raising an exception. @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id13}@anchor{301} +@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{301}@anchor{gnat_rm/the_gnat_library id13}@anchor{302} @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads}) @@ -23545,7 +23561,7 @@ exceptions (hence the name last chance), and perform clean ups before terminating the program. Note that this subprogram never returns. @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id14}@anchor{303} +@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{303}@anchor{gnat_rm/the_gnat_library id14}@anchor{304} @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads}) @@ -23558,7 +23574,7 @@ give a traceback array of addresses based on an exception occurrence. @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id15}@anchor{305} +@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{305}@anchor{gnat_rm/the_gnat_library id15}@anchor{306} @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads}) @@ -23573,7 +23589,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id16}@anchor{307} +@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{307}@anchor{gnat_rm/the_gnat_library id16}@anchor{308} @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads}) @@ -23588,7 +23604,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id17}@anchor{309} +@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{309}@anchor{gnat_rm/the_gnat_library id17}@anchor{30a} @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads}) @@ -23605,7 +23621,7 @@ strings, avoiding the necessity for an intermediate operation with ordinary strings. @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id18}@anchor{30b} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{30b}@anchor{gnat_rm/the_gnat_library id18}@anchor{30c} @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads}) @@ -23622,7 +23638,7 @@ wide strings, avoiding the necessity for an intermediate operation with ordinary wide strings. @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id19}@anchor{30d} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30d}@anchor{gnat_rm/the_gnat_library id19}@anchor{30e} @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads}) @@ -23639,7 +23655,7 @@ wide wide strings, avoiding the necessity for an intermediate operation with ordinary wide wide strings. @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id20}@anchor{30f} +@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30f}@anchor{gnat_rm/the_gnat_library id20}@anchor{310} @section @code{Ada.Task_Initialization} (@code{a-tasini.ads}) @@ -23651,7 +23667,7 @@ parameterless procedures. Note that such a handler is only invoked for those tasks activated after the handler is set. @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id21}@anchor{311} +@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{311}@anchor{gnat_rm/the_gnat_library id21}@anchor{312} @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads}) @@ -23666,7 +23682,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id22}@anchor{313} +@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{313}@anchor{gnat_rm/the_gnat_library id22}@anchor{314} @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads}) @@ -23681,7 +23697,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id23}@anchor{315} +@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{315}@anchor{gnat_rm/the_gnat_library id23}@anchor{316} @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads}) @@ -23694,7 +23710,7 @@ This package provides subprograms that allow categorization of Wide_Character values according to Unicode categories. @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id24}@anchor{317} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{317}@anchor{gnat_rm/the_gnat_library id24}@anchor{318} @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads}) @@ -23709,7 +23725,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id25}@anchor{319} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{319}@anchor{gnat_rm/the_gnat_library id25}@anchor{31a} @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads}) @@ -23724,7 +23740,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id26}@anchor{31b} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{31b}@anchor{gnat_rm/the_gnat_library id26}@anchor{31c} @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads}) @@ -23737,7 +23753,7 @@ This package provides subprograms that allow categorization of Wide_Wide_Character values according to Unicode categories. @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id27}@anchor{31d} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31d}@anchor{gnat_rm/the_gnat_library id27}@anchor{31e} @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads}) @@ -23752,7 +23768,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id28}@anchor{31f} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31f}@anchor{gnat_rm/the_gnat_library id28}@anchor{320} @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads}) @@ -23767,7 +23783,7 @@ change during execution (for example a standard input file may be redefined to be interactive). @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id29}@anchor{321} +@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{321}@anchor{gnat_rm/the_gnat_library id29}@anchor{322} @section @code{GNAT.Altivec} (@code{g-altive.ads}) @@ -23780,7 +23796,7 @@ definitions of constants and types common to all the versions of the binding. @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id30}@anchor{323} +@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{323}@anchor{gnat_rm/the_gnat_library id30}@anchor{324} @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads}) @@ -23791,7 +23807,7 @@ binding. This package provides the Vector/View conversion routines. @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id31}@anchor{325} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{325}@anchor{gnat_rm/the_gnat_library id31}@anchor{326} @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads}) @@ -23805,7 +23821,7 @@ library. The hard binding is provided as a separate package. This unit is common to both bindings. @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id32}@anchor{327} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{327}@anchor{gnat_rm/the_gnat_library id32}@anchor{328} @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads}) @@ -23817,7 +23833,7 @@ This package exposes the various vector types part of the Ada binding to AltiVec facilities. @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id33}@anchor{329} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{329}@anchor{gnat_rm/the_gnat_library id33}@anchor{32a} @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads}) @@ -23832,7 +23848,7 @@ vector elements and provides a simple way to initialize vector objects. @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id34}@anchor{32b} +@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{32b}@anchor{gnat_rm/the_gnat_library id34}@anchor{32c} @section @code{GNAT.Array_Split} (@code{g-arrspl.ads}) @@ -23845,7 +23861,7 @@ an array wherever the separators appear, and provide direct access to the resulting slices. @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id35}@anchor{32d} +@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32d}@anchor{gnat_rm/the_gnat_library id35}@anchor{32e} @section @code{GNAT.AWK} (@code{g-awk.ads}) @@ -23860,7 +23876,7 @@ or more files containing formatted data. The file is viewed as a database where each record is a line and a field is a data element in this line. @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id36}@anchor{32f} +@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{32f}@anchor{gnat_rm/the_gnat_library id36}@anchor{330} @section @code{GNAT.Binary_Search} (@code{g-binsea.ads}) @@ -23872,7 +23888,7 @@ Allow binary search of a sorted array (or of an array-like container; the generic does not reference the array directly). @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id37}@anchor{331} +@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{331}@anchor{gnat_rm/the_gnat_library id37}@anchor{332} @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads}) @@ -23885,7 +23901,7 @@ These associations can be specified using the @code{-V} binder command line switch. @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id38}@anchor{333} +@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{333}@anchor{gnat_rm/the_gnat_library id38}@anchor{334} @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads}) @@ -23896,7 +23912,7 @@ line switch. Provides routines giving hints to the branch predictor of the code generator. @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id39}@anchor{335} +@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{335}@anchor{gnat_rm/the_gnat_library id39}@anchor{336} @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads}) @@ -23911,7 +23927,7 @@ useful directly or as parts of the implementations of other abstractions, such as mailboxes. @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id40}@anchor{337} +@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{337}@anchor{gnat_rm/the_gnat_library id40}@anchor{338} @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads}) @@ -23924,7 +23940,7 @@ such as mailboxes. Provides a thread-safe asynchronous intertask mailbox communication facility. @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id41}@anchor{339} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{339}@anchor{gnat_rm/the_gnat_library id41}@anchor{33a} @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads}) @@ -23939,7 +23955,7 @@ data items. Exchange and comparison procedures are provided by passing access-to-procedure values. @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id42}@anchor{33b} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{33b}@anchor{gnat_rm/the_gnat_library id42}@anchor{33c} @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads}) @@ -23955,7 +23971,7 @@ access-to-procedure values. This is an older version, retained for compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable. @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id43}@anchor{33d} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33d}@anchor{gnat_rm/the_gnat_library id43}@anchor{33e} @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads}) @@ -23971,7 +23987,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id44}@anchor{33f} +@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33f}@anchor{gnat_rm/the_gnat_library id44}@anchor{340} @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads}) @@ -23987,7 +24003,7 @@ the encoding of the string. The routine includes detection of special XML sequences for various UCS input formats. @node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id45}@anchor{341} +@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{341}@anchor{gnat_rm/the_gnat_library id45}@anchor{342} @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads}) @@ -24001,7 +24017,7 @@ General routines for swapping the bytes in 2-, 4-, and 8-byte quantities. Machine-specific implementations are available in some cases. @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id46}@anchor{343} +@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{343}@anchor{gnat_rm/the_gnat_library id46}@anchor{344} @section @code{GNAT.Calendar} (@code{g-calend.ads}) @@ -24015,7 +24031,7 @@ Also provides conversion of @code{Ada.Calendar.Time} values to and from the C @code{timeval} format. @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id47}@anchor{345} +@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{345}@anchor{gnat_rm/the_gnat_library id47}@anchor{346} @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads}) @@ -24026,7 +24042,7 @@ C @code{timeval} format. @geindex GNAT.Calendar.Time_IO (g-catiio.ads) @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id48}@anchor{347} +@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{347}@anchor{gnat_rm/the_gnat_library id48}@anchor{348} @section @code{GNAT.CRC32} (@code{g-crc32.ads}) @@ -24043,7 +24059,7 @@ of this algorithm see Aug. 1988. Sarwate, D.V. @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id49}@anchor{349} +@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{349}@anchor{gnat_rm/the_gnat_library id49}@anchor{34a} @section @code{GNAT.Case_Util} (@code{g-casuti.ads}) @@ -24058,7 +24074,7 @@ without the overhead of the full casing tables in @code{Ada.Characters.Handling}. @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id50}@anchor{34b} +@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{34b}@anchor{gnat_rm/the_gnat_library id50}@anchor{34c} @section @code{GNAT.CGI} (@code{g-cgi.ads}) @@ -24073,7 +24089,7 @@ builds a table whose index is the key and provides some services to deal with this table. @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id51}@anchor{34d} +@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34d}@anchor{gnat_rm/the_gnat_library id51}@anchor{34e} @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads}) @@ -24088,7 +24104,7 @@ Common Gateway Interface (CGI). It exports services to deal with Web cookies (piece of information kept in the Web client software). @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id52}@anchor{34f} +@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34f}@anchor{gnat_rm/the_gnat_library id52}@anchor{350} @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads}) @@ -24100,7 +24116,7 @@ This is a package to help debugging CGI (Common Gateway Interface) programs written in Ada. @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id53}@anchor{351} +@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{351}@anchor{gnat_rm/the_gnat_library id53}@anchor{352} @section @code{GNAT.Command_Line} (@code{g-comlin.ads}) @@ -24113,7 +24129,7 @@ including the ability to scan for named switches with optional parameters and expand file names using wildcard notations. @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id54}@anchor{353} +@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{353}@anchor{gnat_rm/the_gnat_library id54}@anchor{354} @section @code{GNAT.Compiler_Version} (@code{g-comver.ads}) @@ -24131,7 +24147,7 @@ of the compiler if a consistent tool set is used to compile all units of a partition). @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id55}@anchor{355} +@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{355}@anchor{gnat_rm/the_gnat_library id55}@anchor{356} @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads}) @@ -24142,7 +24158,7 @@ of a partition). Provides a simple interface to handle Ctrl-C keyboard events. @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id56}@anchor{357} +@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{357}@anchor{gnat_rm/the_gnat_library id56}@anchor{358} @section @code{GNAT.Current_Exception} (@code{g-curexc.ads}) @@ -24159,7 +24175,7 @@ This is particularly useful in simulating typical facilities for obtaining information about exceptions provided by Ada 83 compilers. @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id57}@anchor{359} +@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{359}@anchor{gnat_rm/the_gnat_library id57}@anchor{35a} @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads}) @@ -24176,7 +24192,7 @@ problems. See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}. @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id58}@anchor{35b} +@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{35b}@anchor{gnat_rm/the_gnat_library id58}@anchor{35c} @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads}) @@ -24189,7 +24205,7 @@ to and from string images of address values. Supports both C and Ada formats for hexadecimal literals. @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id59}@anchor{35d} +@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35d}@anchor{gnat_rm/the_gnat_library id59}@anchor{35e} @section @code{GNAT.Decode_String} (@code{g-decstr.ads}) @@ -24213,7 +24229,7 @@ Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id60}@anchor{35f} +@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35f}@anchor{gnat_rm/the_gnat_library id60}@anchor{360} @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads}) @@ -24234,7 +24250,7 @@ preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding. @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id61}@anchor{361} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{361}@anchor{gnat_rm/the_gnat_library id61}@anchor{362} @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads}) @@ -24247,7 +24263,7 @@ the current directory, making new directories, and scanning the files in a directory. @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id62}@anchor{363} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{363}@anchor{gnat_rm/the_gnat_library id62}@anchor{364} @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads}) @@ -24259,7 +24275,7 @@ A child unit of GNAT.Directory_Operations providing additional operations for iterating through directories. @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id63}@anchor{365} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{365}@anchor{gnat_rm/the_gnat_library id63}@anchor{366} @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads}) @@ -24277,7 +24293,7 @@ dynamic instances of the hash table, while an instantiation of @code{GNAT.HTable} creates a single instance of the hash table. @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id64}@anchor{367} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{367}@anchor{gnat_rm/the_gnat_library id64}@anchor{368} @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads}) @@ -24297,7 +24313,7 @@ dynamic instances of the table, while an instantiation of @code{GNAT.Table} creates a single instance of the table type. @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id65}@anchor{369} +@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{369}@anchor{gnat_rm/the_gnat_library id65}@anchor{36a} @section @code{GNAT.Encode_String} (@code{g-encstr.ads}) @@ -24319,7 +24335,7 @@ encoding method. Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id66}@anchor{36b} +@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{36b}@anchor{gnat_rm/the_gnat_library id66}@anchor{36c} @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads}) @@ -24340,7 +24356,7 @@ Note there is a preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding. @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id67}@anchor{36d} +@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36d}@anchor{gnat_rm/the_gnat_library id67}@anchor{36e} @section @code{GNAT.Exception_Actions} (@code{g-excact.ads}) @@ -24353,7 +24369,7 @@ for specific exceptions, or when any exception is raised. This can be used for instance to force a core dump to ease debugging. @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id68}@anchor{36f} +@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36f}@anchor{gnat_rm/the_gnat_library id68}@anchor{370} @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads}) @@ -24367,7 +24383,7 @@ Provides an interface allowing to control automatic output upon exception occurrences. @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id69}@anchor{371} +@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{371}@anchor{gnat_rm/the_gnat_library id69}@anchor{372} @section @code{GNAT.Exceptions} (@code{g-except.ads}) @@ -24388,7 +24404,7 @@ predefined exceptions, and for example allows raising @code{Constraint_Error} with a message from a pure subprogram. @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id70}@anchor{373} +@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{373}@anchor{gnat_rm/the_gnat_library id70}@anchor{374} @section @code{GNAT.Expect} (@code{g-expect.ads}) @@ -24404,7 +24420,7 @@ It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id71}@anchor{375} +@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{375}@anchor{gnat_rm/the_gnat_library id71}@anchor{376} @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads}) @@ -24416,7 +24432,7 @@ ports. It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id72}@anchor{377} +@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{377}@anchor{gnat_rm/the_gnat_library id72}@anchor{378} @section @code{GNAT.Float_Control} (@code{g-flocon.ads}) @@ -24430,7 +24446,7 @@ library calls may cause this mode to be modified, and the Reset procedure in this package can be used to reestablish the required mode. @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id73}@anchor{379} +@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id73}@anchor{37a} @section @code{GNAT.Formatted_String} (@code{g-forstr.ads}) @@ -24445,7 +24461,7 @@ derived from Integer, Float or enumerations as values for the formatted string. @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id74}@anchor{37b} +@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id74}@anchor{37c} @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads}) @@ -24463,7 +24479,7 @@ have a vector implementation that can be automatically used by the compiler when auto-vectorization is enabled. @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id75}@anchor{37d} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id75}@anchor{37e} @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads}) @@ -24477,7 +24493,7 @@ access-to-procedure values. The algorithm used is a modified heap sort that performs approximately N*log(N) comparisons in the worst case. @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id76}@anchor{37f} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id76}@anchor{380} @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads}) @@ -24493,7 +24509,7 @@ This differs from @code{GNAT.Heap_Sort} in having a less convenient interface, but may be slightly more efficient. @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id77}@anchor{381} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{381}@anchor{gnat_rm/the_gnat_library id77}@anchor{382} @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads}) @@ -24507,7 +24523,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id78}@anchor{383} +@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{383}@anchor{gnat_rm/the_gnat_library id78}@anchor{384} @section @code{GNAT.HTable} (@code{g-htable.ads}) @@ -24520,7 +24536,7 @@ data. Provides two approaches, one a simple static approach, and the other allowing arbitrary dynamic hash tables. @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id79}@anchor{385} +@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id79}@anchor{386} @section @code{GNAT.IO} (@code{g-io.ads}) @@ -24536,7 +24552,7 @@ Standard_Input, and writing characters, strings and integers to either Standard_Output or Standard_Error. @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id80}@anchor{387} +@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id80}@anchor{388} @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads}) @@ -24550,7 +24566,7 @@ Provides some auxiliary functions for use with Text_IO, including a test for whether a file exists, and functions for reading a line of text. @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id81}@anchor{389} +@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id81}@anchor{38a} @section @code{GNAT.Lock_Files} (@code{g-locfil.ads}) @@ -24564,7 +24580,7 @@ Provides a general interface for using files as locks. Can be used for providing program level synchronization. @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id82}@anchor{38b} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id82}@anchor{38c} @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads}) @@ -24576,7 +24592,7 @@ The original implementation of @code{Ada.Numerics.Discrete_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id83}@anchor{38d} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id83}@anchor{38e} @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads}) @@ -24588,7 +24604,7 @@ The original implementation of @code{Ada.Numerics.Float_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id84}@anchor{38f} +@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id84}@anchor{390} @section @code{GNAT.MD5} (@code{g-md5.ads}) @@ -24601,7 +24617,7 @@ the HMAC-MD5 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id85}@anchor{391} +@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{391}@anchor{gnat_rm/the_gnat_library id85}@anchor{392} @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads}) @@ -24614,7 +24630,7 @@ standard output or standard error files. Uses GNAT.IO for actual output. @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id86}@anchor{393} +@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{393}@anchor{gnat_rm/the_gnat_library id86}@anchor{394} @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads}) @@ -24628,7 +24644,7 @@ various logging purposes, including duplicating functionality of some Ada 83 implementation dependent extensions. @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id87}@anchor{395} +@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{395}@anchor{gnat_rm/the_gnat_library id87}@anchor{396} @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads}) @@ -24644,7 +24660,7 @@ including a portable spawn procedure, and access to environment variables and error return codes. @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id88}@anchor{397} +@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{397}@anchor{gnat_rm/the_gnat_library id88}@anchor{398} @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads}) @@ -24662,7 +24678,7 @@ hashcode are in the same order. These hashing functions are very convenient for use with realtime applications. @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{398}@anchor{gnat_rm/the_gnat_library id89}@anchor{399} +@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id89}@anchor{39a} @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads}) @@ -24674,7 +24690,7 @@ Provides random number capabilities which extend those available in the standard Ada library and are more convenient to use. @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{26f}@anchor{gnat_rm/the_gnat_library id90}@anchor{39a} +@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{270}@anchor{gnat_rm/the_gnat_library id90}@anchor{39b} @section @code{GNAT.Regexp} (@code{g-regexp.ads}) @@ -24690,7 +24706,7 @@ simplest of the three pattern matching packages provided, and is particularly suitable for ‘file globbing’ applications. @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id91}@anchor{39c} +@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{39c}@anchor{gnat_rm/the_gnat_library id91}@anchor{39d} @section @code{GNAT.Registry} (@code{g-regist.ads}) @@ -24704,7 +24720,7 @@ registry API, but at a lower level of abstraction, refer to the Win32.Winreg package provided with the Win32Ada binding @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id92}@anchor{39e} +@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39e}@anchor{gnat_rm/the_gnat_library id92}@anchor{39f} @section @code{GNAT.Regpat} (@code{g-regpat.ads}) @@ -24719,7 +24735,7 @@ from the original V7 style regular expression library written in C by Henry Spencer (and binary compatible with this C library). @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id93}@anchor{3a0} +@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3a0}@anchor{gnat_rm/the_gnat_library id93}@anchor{3a1} @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads}) @@ -24733,7 +24749,7 @@ full content to be processed is not loaded into memory all at once. This makes this interface usable for large files or socket streams. @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id94}@anchor{3a2} +@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3a2}@anchor{gnat_rm/the_gnat_library id94}@anchor{3a3} @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads}) @@ -24745,7 +24761,7 @@ Provides the capability to query the high water mark of the current task’s secondary stack. @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id95}@anchor{3a4} +@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a4}@anchor{gnat_rm/the_gnat_library id95}@anchor{3a5} @section @code{GNAT.Semaphores} (@code{g-semaph.ads}) @@ -24756,7 +24772,7 @@ secondary stack. Provides classic counting and binary semaphores using protected types. @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id96}@anchor{3a6} +@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a6}@anchor{gnat_rm/the_gnat_library id96}@anchor{3a7} @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads}) @@ -24768,7 +24784,7 @@ Provides a simple interface to send and receive data over a serial port. This is only supported on GNU/Linux and Windows. @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id97}@anchor{3a8} +@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a8}@anchor{gnat_rm/the_gnat_library id97}@anchor{3a9} @section @code{GNAT.SHA1} (@code{g-sha1.ads}) @@ -24781,7 +24797,7 @@ and RFC 3174, and the HMAC-SHA1 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id98}@anchor{3aa} +@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3aa}@anchor{gnat_rm/the_gnat_library id98}@anchor{3ab} @section @code{GNAT.SHA224} (@code{g-sha224.ads}) @@ -24794,7 +24810,7 @@ and the HMAC-SHA224 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id99}@anchor{3ac} +@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3ac}@anchor{gnat_rm/the_gnat_library id99}@anchor{3ad} @section @code{GNAT.SHA256} (@code{g-sha256.ads}) @@ -24807,7 +24823,7 @@ and the HMAC-SHA256 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id100}@anchor{3ae} +@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3ae}@anchor{gnat_rm/the_gnat_library id100}@anchor{3af} @section @code{GNAT.SHA384} (@code{g-sha384.ads}) @@ -24820,7 +24836,7 @@ and the HMAC-SHA384 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id101}@anchor{3b0} +@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3b0}@anchor{gnat_rm/the_gnat_library id101}@anchor{3b1} @section @code{GNAT.SHA512} (@code{g-sha512.ads}) @@ -24833,7 +24849,7 @@ and the HMAC-SHA512 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id102}@anchor{3b2} +@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3b2}@anchor{gnat_rm/the_gnat_library id102}@anchor{3b3} @section @code{GNAT.Signals} (@code{g-signal.ads}) @@ -24845,7 +24861,7 @@ Provides the ability to manipulate the blocked status of signals on supported targets. @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id103}@anchor{3b4} +@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b4}@anchor{gnat_rm/the_gnat_library id103}@anchor{3b5} @section @code{GNAT.Sockets} (@code{g-socket.ads}) @@ -24860,7 +24876,7 @@ on all native GNAT ports and on VxWorks cross ports. It is not implemented for the LynxOS cross port. @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id104}@anchor{3b6} +@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b6}@anchor{gnat_rm/the_gnat_library id104}@anchor{3b7} @section @code{GNAT.Source_Info} (@code{g-souinf.ads}) @@ -24874,7 +24890,7 @@ subprograms yielding the date and time of the current compilation (like the C macros @code{__DATE__} and @code{__TIME__}) @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id105}@anchor{3b8} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b8}@anchor{gnat_rm/the_gnat_library id105}@anchor{3b9} @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads}) @@ -24886,7 +24902,7 @@ Provides a function for determining whether one string is a plausible near misspelling of another string. @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id106}@anchor{3ba} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3ba}@anchor{gnat_rm/the_gnat_library id106}@anchor{3bb} @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads}) @@ -24899,7 +24915,7 @@ determining whether one string is a plausible near misspelling of another string. @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id107}@anchor{3bc} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3bc}@anchor{gnat_rm/the_gnat_library id107}@anchor{3bd} @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads}) @@ -24915,7 +24931,7 @@ the SNOBOL4 dynamic pattern construction and matching capabilities, using the efficient algorithm developed by Robert Dewar for the SPITBOL system. @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id108}@anchor{3be} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3be}@anchor{gnat_rm/the_gnat_library id108}@anchor{3bf} @section @code{GNAT.Spitbol} (@code{g-spitbo.ads}) @@ -24930,7 +24946,7 @@ useful for constructing arbitrary mappings from strings in the style of the SNOBOL4 TABLE function. @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id109}@anchor{3c0} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3c0}@anchor{gnat_rm/the_gnat_library id109}@anchor{3c1} @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads}) @@ -24945,7 +24961,7 @@ for type @code{Standard.Boolean}, giving an implementation of sets of string values. @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id110}@anchor{3c2} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3c2}@anchor{gnat_rm/the_gnat_library id110}@anchor{3c3} @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads}) @@ -24962,7 +24978,7 @@ for type @code{Standard.Integer}, giving an implementation of maps from string to integer values. @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id111}@anchor{3c4} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c4}@anchor{gnat_rm/the_gnat_library id111}@anchor{3c5} @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads}) @@ -24979,7 +24995,7 @@ a variable length string type, giving an implementation of general maps from strings to strings. @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id112}@anchor{3c6} +@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c6}@anchor{gnat_rm/the_gnat_library id112}@anchor{3c7} @section @code{GNAT.SSE} (@code{g-sse.ads}) @@ -24991,7 +25007,7 @@ targets. It exposes vector component types together with a general introduction to the binding contents and use. @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id113}@anchor{3c8} +@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c8}@anchor{gnat_rm/the_gnat_library id113}@anchor{3c9} @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads}) @@ -25000,7 +25016,7 @@ introduction to the binding contents and use. SSE vector types for use with SSE related intrinsics. @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id114}@anchor{3ca} +@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3ca}@anchor{gnat_rm/the_gnat_library id114}@anchor{3cb} @section @code{GNAT.String_Hash} (@code{g-strhas.ads}) @@ -25012,7 +25028,7 @@ Provides a generic hash function working on arrays of scalars. Both the scalar type and the hash result type are parameters. @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id115}@anchor{3cc} +@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3cc}@anchor{gnat_rm/the_gnat_library id115}@anchor{3cd} @section @code{GNAT.Strings} (@code{g-string.ads}) @@ -25022,7 +25038,7 @@ Common String access types and related subprograms. Basically it defines a string access and an array of string access types. @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id116}@anchor{3ce} +@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3ce}@anchor{gnat_rm/the_gnat_library id116}@anchor{3cf} @section @code{GNAT.String_Split} (@code{g-strspl.ads}) @@ -25036,7 +25052,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id117}@anchor{3d0} +@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3d0}@anchor{gnat_rm/the_gnat_library id117}@anchor{3d1} @section @code{GNAT.Table} (@code{g-table.ads}) @@ -25056,7 +25072,7 @@ while an instantiation of @code{GNAT.Dynamic_Tables} creates a type that can be used to define dynamic instances of the table. @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id118}@anchor{3d2} +@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3d2}@anchor{gnat_rm/the_gnat_library id118}@anchor{3d3} @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads}) @@ -25073,7 +25089,7 @@ single global task lock. Appropriate for use in situations where contention between tasks is very rarely expected. @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id119}@anchor{3d4} +@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d4}@anchor{gnat_rm/the_gnat_library id119}@anchor{3d5} @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads}) @@ -25088,7 +25104,7 @@ represents the current date and time in ISO 8601 format. This is a very simple routine with minimal code and there are no dependencies on any other unit. @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id120}@anchor{3d6} +@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d6}@anchor{gnat_rm/the_gnat_library id120}@anchor{3d7} @section @code{GNAT.Threads} (@code{g-thread.ads}) @@ -25105,7 +25121,7 @@ further details if your program has threads that are created by a non-Ada environment which then accesses Ada code. @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id121}@anchor{3d8} +@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d8}@anchor{gnat_rm/the_gnat_library id121}@anchor{3d9} @section @code{GNAT.Traceback} (@code{g-traceb.ads}) @@ -25117,7 +25133,7 @@ Provides a facility for obtaining non-symbolic traceback information, useful in various debugging situations. @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id122}@anchor{3da} +@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3da}@anchor{gnat_rm/the_gnat_library id122}@anchor{3db} @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads}) @@ -25126,7 +25142,7 @@ in various debugging situations. @geindex Trace back facilities @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id123}@anchor{3dc} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3dc}@anchor{gnat_rm/the_gnat_library id123}@anchor{3dd} @section @code{GNAT.UTF_32} (@code{g-utf_32.ads}) @@ -25145,7 +25161,7 @@ lower case to upper case fold routine corresponding to the Ada 2005 rules for identifier equivalence. @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id124}@anchor{3de} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3de}@anchor{gnat_rm/the_gnat_library id124}@anchor{3df} @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads}) @@ -25158,7 +25174,7 @@ near misspelling of another wide wide string, where the strings are represented using the UTF_32_String type defined in System.Wch_Cnv. @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id125}@anchor{3e0} +@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e0}@anchor{gnat_rm/the_gnat_library id125}@anchor{3e1} @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads}) @@ -25170,7 +25186,7 @@ Provides a function for determining whether one wide string is a plausible near misspelling of another wide string. @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id126}@anchor{3e2} +@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3e2}@anchor{gnat_rm/the_gnat_library id126}@anchor{3e3} @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads}) @@ -25184,7 +25200,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id127}@anchor{3e4} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e4}@anchor{gnat_rm/the_gnat_library id127}@anchor{3e5} @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads}) @@ -25196,7 +25212,7 @@ Provides a function for determining whether one wide wide string is a plausible near misspelling of another wide wide string. @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id128}@anchor{3e6} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e6}@anchor{gnat_rm/the_gnat_library id128}@anchor{3e7} @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads}) @@ -25210,7 +25226,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id129}@anchor{3e7}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e8} +@anchor{gnat_rm/the_gnat_library id129}@anchor{3e8}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e9} @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads}) @@ -25221,7 +25237,7 @@ for use with either manually or automatically generated bindings to C libraries. @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id130}@anchor{3e9}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3ea} +@anchor{gnat_rm/the_gnat_library id130}@anchor{3ea}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3eb} @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads}) @@ -25234,7 +25250,7 @@ This package is a binding for the most commonly used operations on C streams. @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id131}@anchor{3eb}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3ec} +@anchor{gnat_rm/the_gnat_library id131}@anchor{3ec}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3ed} @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads}) @@ -25249,7 +25265,7 @@ from a packed decimal format compatible with that used on IBM mainframes. @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id132}@anchor{3ed}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3ee} +@anchor{gnat_rm/the_gnat_library id132}@anchor{3ee}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3ef} @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads}) @@ -25263,7 +25279,7 @@ mainframes. This package provides a limited binding to the VxWorks API. @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id133}@anchor{3ef}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3f0} +@anchor{gnat_rm/the_gnat_library id133}@anchor{3f0}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3f1} @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads}) @@ -25286,7 +25302,7 @@ function codes. A particular use of this package is to enable the use of Get_Immediate under VxWorks. @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id134}@anchor{3f1}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f2} +@anchor{gnat_rm/the_gnat_library id134}@anchor{3f2}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f3} @section @code{System.Address_Image} (@code{s-addima.ads}) @@ -25302,7 +25318,7 @@ function that gives an (implementation dependent) string which identifies an address. @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id135}@anchor{3f3}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f4} +@anchor{gnat_rm/the_gnat_library id135}@anchor{3f4}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f5} @section @code{System.Assertions} (@code{s-assert.ads}) @@ -25318,7 +25334,7 @@ by an run-time assertion failure, as well as the routine that is used internally to raise this assertion. @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id136}@anchor{3f5}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f6} +@anchor{gnat_rm/the_gnat_library id136}@anchor{3f6}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f7} @section @code{System.Atomic_Counters} (@code{s-atocou.ads}) @@ -25332,7 +25348,7 @@ on most targets, including all Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9, x86, and x86_64 platforms. @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id137}@anchor{3f7}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f8} +@anchor{gnat_rm/the_gnat_library id137}@anchor{3f8}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f9} @section @code{System.Memory} (@code{s-memory.ads}) @@ -25350,7 +25366,7 @@ calls to this unit may be made for low level allocation uses (for example see the body of @code{GNAT.Tables}). @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id138}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3fa} +@anchor{gnat_rm/the_gnat_library id138}@anchor{3fa}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3fb} @section @code{System.Multiprocessors} (@code{s-multip.ads}) @@ -25363,7 +25379,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id139}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3fc} +@anchor{gnat_rm/the_gnat_library id139}@anchor{3fc}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3fd} @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads}) @@ -25376,7 +25392,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id140}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3fe} +@anchor{gnat_rm/the_gnat_library id140}@anchor{3fe}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3ff} @section @code{System.Partition_Interface} (@code{s-parint.ads}) @@ -25389,7 +25405,7 @@ is used primarily in a distribution context when using Annex E with @code{GLADE}. @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id141}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{400} +@anchor{gnat_rm/the_gnat_library id141}@anchor{400}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{401} @section @code{System.Pool_Global} (@code{s-pooglo.ads}) @@ -25406,7 +25422,7 @@ declared. It uses malloc/free to allocate/free and does not attempt to do any automatic reclamation. @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id142}@anchor{401}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{402} +@anchor{gnat_rm/the_gnat_library id142}@anchor{402}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{403} @section @code{System.Pool_Local} (@code{s-pooloc.ads}) @@ -25423,7 +25439,7 @@ a list of allocated blocks, so that all storage allocated for the pool can be freed automatically when the pool is finalized. @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id143}@anchor{403}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{404} +@anchor{gnat_rm/the_gnat_library id143}@anchor{404}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{405} @section @code{System.Restrictions} (@code{s-restri.ads}) @@ -25439,7 +25455,7 @@ compiler determined information on which restrictions are violated by one or more packages in the partition. @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id144}@anchor{405}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{406} +@anchor{gnat_rm/the_gnat_library id144}@anchor{406}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{407} @section @code{System.Rident} (@code{s-rident.ads}) @@ -25455,7 +25471,7 @@ since the necessary instantiation is included in package System.Restrictions. @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id145}@anchor{407}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{408} +@anchor{gnat_rm/the_gnat_library id145}@anchor{408}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{409} @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads}) @@ -25471,7 +25487,7 @@ stream attributes are applied to string types, but the subprograms in this package can be used directly by application programs. @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id146}@anchor{409}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{40a} +@anchor{gnat_rm/the_gnat_library id146}@anchor{40a}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{40b} @section @code{System.Unsigned_Types} (@code{s-unstyp.ads}) @@ -25484,7 +25500,7 @@ also contains some related definitions for other specialized types used by the compiler in connection with packed array types. @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id147}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{40c} +@anchor{gnat_rm/the_gnat_library id147}@anchor{40c}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{40d} @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads}) @@ -25505,7 +25521,7 @@ encoding method. It uses definitions in package @code{System.Wch_Con}. @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id148}@anchor{40d}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40e} +@anchor{gnat_rm/the_gnat_library id148}@anchor{40e}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40f} @section @code{System.Wch_Con} (@code{s-wchcon.ads}) @@ -25517,7 +25533,7 @@ in ordinary strings. These definitions are used by the package @code{System.Wch_Cnv}. @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top -@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{410}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} +@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{410}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{411}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} @chapter Interfacing to Other Languages @@ -25535,7 +25551,7 @@ provided. @end menu @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{411}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{412} +@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{412}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{413} @section Interfacing to C @@ -25675,7 +25691,7 @@ of the length corresponding to the @code{type'Size} value in Ada. @end itemize @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{413} +@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{414} @section Interfacing to C++ @@ -25732,7 +25748,7 @@ The @code{External_Name} is the name of the C++ RTTI symbol. You can then cover a specific C++ exception in an exception handler. @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{414}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{415} +@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{415}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{416} @section Interfacing to COBOL @@ -25740,7 +25756,7 @@ Interfacing to COBOL is achieved as described in section B.4 of the Ada Reference Manual. @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{416}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{417} +@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{417}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{418} @section Interfacing to Fortran @@ -25750,7 +25766,7 @@ multi-dimensional array causes the array to be stored in column-major order as required for convenient interface to Fortran. @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{418}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{419} +@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{419}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{41a} @section Interfacing to non-GNAT Ada code @@ -25774,7 +25790,7 @@ values or simple record types without variants, or simple array types with fixed bounds. @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top -@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{41a}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{41b}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} +@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{41b}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{41c}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} @chapter Specialized Needs Annexes @@ -25815,7 +25831,7 @@ in Ada 2005) is fully implemented. @end table @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top -@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41c}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} +@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41e}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} @chapter Implementation of Specific Ada Features @@ -25834,7 +25850,7 @@ facilities. @end menu @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41e}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{177} +@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{178} @section Machine Code Insertions @@ -26002,7 +26018,7 @@ according to normal visibility rules. In particular if there is no qualification is required. @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{420} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{420}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{421} @section GNAT Implementation of Tasking @@ -26018,7 +26034,7 @@ to compliance with the Real-Time Systems Annex. @end menu @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{421}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{422} +@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{422}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{423} @subsection Mapping Ada Tasks onto the Underlying Kernel Threads @@ -26087,7 +26103,7 @@ support this functionality when the parent contains more than one task. @geindex Forking a new process @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{423}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{424} +@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{424}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{425} @subsection Ensuring Compliance with the Real-Time Annex @@ -26138,7 +26154,7 @@ placed at the end. @c Support_for_Locking_Policies @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{425} +@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{426} @subsection Support for Locking Policies @@ -26172,7 +26188,7 @@ then ceiling locking is used. Otherwise, the @code{Ceiling_Locking} policy is ignored. @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{427} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{428} @section GNAT Implementation of Shared Passive Packages @@ -26270,7 +26286,7 @@ This is used to provide the required locking semantics for proper protected object synchronization. @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{429} +@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{429}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{42a} @section Code Generation for Array Aggregates @@ -26301,7 +26317,7 @@ component values and static subtypes also lead to simpler code. @end menu @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{42b} +@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{42b}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{42c} @subsection Static constant aggregates with static bounds @@ -26348,7 +26364,7 @@ Zero2: constant two_dim := (others => (others => 0)); @end example @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{42d} +@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{42d}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{42e} @subsection Constant aggregates with unconstrained nominal types @@ -26363,7 +26379,7 @@ Cr_Unc : constant One_Unc := (12,24,36); @end example @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42f} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42f}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{430} @subsection Aggregates with static bounds @@ -26391,7 +26407,7 @@ end loop; @end example @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{431} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{431}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{432} @subsection Aggregates with nonstatic bounds @@ -26402,7 +26418,7 @@ have to be applied to sub-arrays individually, if they do not have statically compatible subtypes. @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{433} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{433}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{434} @subsection Aggregates in assignment statements @@ -26444,7 +26460,7 @@ a temporary (created either by the front-end or the code generator) and then that temporary will be copied onto the target. @node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{435} +@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{435}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{436} @section The Size of Discriminated Records with Default Discriminants @@ -26524,7 +26540,7 @@ say) must be consistent, so it is imperative that the object, once created, remain invariant. @node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{437} +@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{437}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{438} @section Image Values For Nonscalar Types @@ -26544,7 +26560,7 @@ control of image text is required for some type T, then T’Put_Image should be explicitly specified. @node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{438}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{439} +@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{439}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{43a} @section Strict Conformance to the Ada Reference Manual @@ -26571,7 +26587,7 @@ behavior (although at the cost of a significant performance penalty), so infinite and NaN values are properly generated. @node Implementation of Ada 2012 Features,GNAT language extensions,Implementation of Specific Ada Features,Top -@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{43a}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{43b}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14} +@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{43b}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{43c}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14} @chapter Implementation of Ada 2012 Features @@ -28737,7 +28753,7 @@ RM References: 4.03.01 (17) @end itemize @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2012 Features,Top -@anchor{gnat_rm/gnat_language_extensions doc}@anchor{43c}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{43d}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{43e} +@anchor{gnat_rm/gnat_language_extensions doc}@anchor{43d}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{43e}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{43f} @chapter GNAT language extensions @@ -28768,7 +28784,7 @@ prototyping phase. @end menu @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{43f} +@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{440} @section How to activate the extended GNAT Ada superset @@ -28807,7 +28823,7 @@ for serious projects, and is only means as a playground/technology preview. @end cartouche @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{440}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{69} +@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{441}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{69} @section Curated Extensions @@ -28824,7 +28840,7 @@ for serious projects, and is only means as a playground/technology preview. @end menu @node Local Declarations Without Block,Conditional when constructs,,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{441} +@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{442} @subsection Local Declarations Without Block @@ -28847,7 +28863,7 @@ end if; @end example @node Conditional when constructs,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{442} +@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{443} @subsection Conditional when constructs @@ -28919,7 +28935,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-conditional-when-constructs.rst} @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Conditional when constructs,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{443} +@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{444} @subsection Fixed lower bounds for array types and subtypes @@ -28973,7 +28989,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-fixed-lower-bound.rst} @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{444} +@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{445} @subsection Prefixed-view notation for calls to primitive subprograms of untagged types @@ -29026,7 +29042,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-prefixed-untagged.rst} @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{445} +@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{446} @subsection Expression defaults for generic formal functions @@ -29055,7 +29071,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-expression-functions-as-default-for-generic-formal-function-parameters.rst} @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{446} +@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{447} @subsection String interpolation @@ -29221,7 +29237,7 @@ Here is a link to the original RFC : @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-string-interpolation.rst} @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{447} +@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{448} @subsection Constrained attribute for generic objects @@ -29229,7 +29245,7 @@ The @code{Constrained} attribute is permitted for objects of generic types. The result indicates whether the corresponding actual is constrained. @node Static aspect on intrinsic functions,,Constrained attribute for generic objects,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{448} +@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{449} @subsection @code{Static} aspect on intrinsic functions @@ -29238,7 +29254,7 @@ and the compiler will evaluate some of these intrinsics statically, in particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6a}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{449} +@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6a}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{44a} @section Experimental Language Extensions @@ -29252,7 +29268,7 @@ particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. @end menu @node Storage Model,Attribute Super,,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{44a} +@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{44b} @subsection Storage Model @@ -29267,7 +29283,7 @@ Here is a link to the full RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-storage-model.rst} @node Attribute Super,Simpler accessibility model,Storage Model,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{44b} +@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{44c} @subsection Attribute Super @@ -29297,7 +29313,7 @@ Here is a link to the full RFC: @indicateurl{https://github.com/QuentinOchem/ada-spark-rfcs/blob/oop/considered/rfc-oop-super.rst} @node Simpler accessibility model,Case pattern matching,Attribute Super,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{44c} +@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{44d} @subsection Simpler accessibility model @@ -29310,7 +29326,7 @@ Here is a link to the full RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-simpler-accessibility.md} @node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler accessibility model,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{44d} +@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{44e} @subsection Case pattern matching @@ -29442,7 +29458,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/master/prototyped/rfc-pattern-matching.rst} @node Mutably Tagged Types with Size’Class Aspect,,Case pattern matching,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{44e} +@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{44f} @subsection Mutably Tagged Types with Size’Class Aspect @@ -29482,7 +29498,7 @@ Link to the original RFC: @indicateurl{https://github.com/AdaCore/ada-spark-rfcs/blob/topic/rfc-finally/considered/rfc-class-size.md} @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top -@anchor{gnat_rm/security_hardening_features doc}@anchor{44f}@anchor{gnat_rm/security_hardening_features id1}@anchor{450}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15} +@anchor{gnat_rm/security_hardening_features doc}@anchor{450}@anchor{gnat_rm/security_hardening_features id1}@anchor{451}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15} @chapter Security Hardening Features @@ -29504,7 +29520,7 @@ change. @end menu @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features -@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{451} +@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{452} @section Register Scrubbing @@ -29540,7 +29556,7 @@ programming languages, see @cite{Using the GNU Compiler Collection (GCC)}. @c Stack Scrubbing: @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features -@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{452} +@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{453} @section Stack Scrubbing @@ -29684,7 +29700,7 @@ Bar_Callable_Ptr. @c Hardened Conditionals: @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features -@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{453} +@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{454} @section Hardened Conditionals @@ -29774,7 +29790,7 @@ be used with other programming languages supported by GCC. @c Hardened Booleans: @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features -@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{454} +@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{455} @section Hardened Booleans @@ -29835,7 +29851,7 @@ and more details on that attribute, see @cite{Using the GNU Compiler Collection @c Control Flow Redundancy: @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features -@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{455} +@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{456} @section Control Flow Redundancy @@ -30003,7 +30019,7 @@ see @cite{Using the GNU Compiler Collection (GCC)}. These options can be used with other programming languages supported by GCC. @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top -@anchor{gnat_rm/obsolescent_features doc}@anchor{456}@anchor{gnat_rm/obsolescent_features id1}@anchor{457}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16} +@anchor{gnat_rm/obsolescent_features doc}@anchor{457}@anchor{gnat_rm/obsolescent_features id1}@anchor{458}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16} @chapter Obsolescent Features @@ -30022,7 +30038,7 @@ compatibility purposes. @end menu @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id2}@anchor{458}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{459} +@anchor{gnat_rm/obsolescent_features id2}@anchor{459}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{45a} @section pragma No_Run_Time @@ -30035,7 +30051,7 @@ preferred usage is to use an appropriately configured run-time that includes just those features that are to be made accessible. @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id3}@anchor{45a}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{45b} +@anchor{gnat_rm/obsolescent_features id3}@anchor{45b}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{45c} @section pragma Ravenscar @@ -30044,7 +30060,7 @@ The pragma @code{Ravenscar} has exactly the same effect as pragma is part of the new Ada 2005 standard. @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id4}@anchor{45c}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{45d} +@anchor{gnat_rm/obsolescent_features id4}@anchor{45d}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{45e} @section pragma Restricted_Run_Time @@ -30054,7 +30070,7 @@ preferred since the Ada 2005 pragma @code{Profile} is intended for this kind of implementation dependent addition. @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id5}@anchor{45e}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{45f} +@anchor{gnat_rm/obsolescent_features id5}@anchor{45f}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{460} @section pragma Task_Info @@ -30080,7 +30096,7 @@ in the spec of package System.Task_Info in the runtime library. @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features -@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{460}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{461} +@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{461}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{462} @section package System.Task_Info (@code{s-tasinf.ads}) @@ -30090,7 +30106,7 @@ to support the @code{Task_Info} pragma. The predefined Ada package standard replacement for GNAT’s @code{Task_Info} functionality. @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top -@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{462}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{463} +@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{463}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{464} @chapter Compatibility and Porting Guide @@ -30112,7 +30128,7 @@ applications developed in other Ada environments. @end menu @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{464}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{465} +@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{465}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{466} @section Writing Portable Fixed-Point Declarations @@ -30234,7 +30250,7 @@ If you follow this scheme you will be guaranteed that your fixed-point types will be portable. @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{466}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{467} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{467}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{468} @section Compatibility with Ada 83 @@ -30262,7 +30278,7 @@ following subsections treat the most likely issues to be encountered. @end menu @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{468}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{469} +@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{469}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{46a} @subsection Legal Ada 83 programs that are illegal in Ada 95 @@ -30362,7 +30378,7 @@ the fix is usually simply to add the @code{(<>)} to the generic declaration. @end itemize @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{46a}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{46b} +@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{46b}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{46c} @subsection More deterministic semantics @@ -30390,7 +30406,7 @@ which open select branches are executed. @end itemize @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{46c}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{46d} +@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{46d}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{46e} @subsection Changed semantics @@ -30432,7 +30448,7 @@ covers only the restricted range. @end itemize @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{46e}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{46f} +@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{46f}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{470} @subsection Other language compatibility issues @@ -30465,7 +30481,7 @@ include @code{pragma Interface} and the floating point type attributes @end itemize @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{470}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{471} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{471}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{472} @section Compatibility between Ada 95 and Ada 2005 @@ -30537,7 +30553,7 @@ can declare a function returning a value from an anonymous access type. @end itemize @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{472}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{473} +@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{473}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{474} @section Implementation-dependent characteristics @@ -30560,7 +30576,7 @@ transition from certain Ada 83 compilers. @end menu @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{474}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{475} +@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{475}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{476} @subsection Implementation-defined pragmas @@ -30582,7 +30598,7 @@ avoiding compiler rejection of units that contain such pragmas; they are not relevant in a GNAT context and hence are not otherwise implemented. @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{476}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{477} +@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{477}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{478} @subsection Implementation-defined attributes @@ -30596,7 +30612,7 @@ Ada 83, GNAT supplies the attributes @code{Bit}, @code{Machine_Size} and @code{Type_Class}. @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{478}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{479} +@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{479}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{47a} @subsection Libraries @@ -30625,7 +30641,7 @@ be preferable to retrofit the application using modular types. @end itemize @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{47a}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{47b} +@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{47b}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{47c} @subsection Elaboration order @@ -30661,7 +30677,7 @@ pragmas either globally (as an effect of the `-gnatE' switch) or locally @end itemize @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{47c}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{47d} +@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{47d}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{47e} @subsection Target-specific aspects @@ -30674,10 +30690,10 @@ on the robustness of the original design. Moreover, Ada 95 (and thus Ada 2005 and Ada 2012) are sometimes incompatible with typical Ada 83 compiler practices regarding implicit packing, the meaning of the Size attribute, and the size of access values. -GNAT’s approach to these issues is described in @ref{47e,,Representation Clauses}. +GNAT’s approach to these issues is described in @ref{47f,,Representation Clauses}. @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{47f}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{480} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{480}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{481} @section Compatibility with Other Ada Systems @@ -30720,7 +30736,7 @@ far beyond this minimal set, as described in the next section. @end itemize @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{481}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{47e} +@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{482}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{47f} @section Representation Clauses @@ -30813,7 +30829,7 @@ with thin pointers. @end itemize @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{482}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{483} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{483}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{484} @section Compatibility with HP Ada 83 @@ -30843,7 +30859,7 @@ extension of package System. @end itemize @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top -@anchor{share/gnu_free_documentation_license doc}@anchor{484}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{485} +@anchor{share/gnu_free_documentation_license doc}@anchor{485}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{486} @chapter GNU Free Documentation License diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index db06a771dddd6..135a4e13e7831 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -2848,6 +2848,7 @@ Ignore_Pragma Implicit_Packing Initialize_Scalars Interrupt_State +Interrupts_System_By_Default License Locking_Policy No_Component_Reordering @@ -6415,6 +6416,9 @@ then you need to instruct the Ada part not to install its own signal handler. This is done using @code{pragma Interrupt_State} that provides a general mechanism for overriding such uses of interrupts. +Additionally, @code{pragma Interrupts_System_By_Default} can be used to default +all interrupts to System. + The set of interrupts for which the Ada run-time library sets a specific signal handler is the following: @@ -29666,8 +29670,8 @@ to permit their use in free software. @printindex ge -@anchor{d1}@w{ } @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } +@anchor{d1}@w{ } @c %**end of body @bye diff --git a/gcc/ada/init.c b/gcc/ada/init.c index 7cf77471f1dbf..acb8c7cc57ee2 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -122,6 +122,7 @@ int __gl_leap_seconds_support = 0; int __gl_canonical_streams = 0; char *__gl_bind_env_addr = NULL; int __gl_xdr_stream = 0; +int __gl_interrupts_default_to_system = 0; /* This value is not used anymore, but kept for bootstrapping purpose. */ int __gl_zero_cost_exceptions = 0; @@ -148,20 +149,25 @@ int __gnat_inside_elab_final_code = 0; char __gnat_get_interrupt_state (int); /* This routine is called from the runtime as needed to determine the state - of an interrupt, as set by an Interrupt_State pragma appearing anywhere - in the current partition. The input argument is the interrupt number, - and the result is one of the following: + of an interrupt, as set by an Interrupt_State pragma or an + Interrupts_System_By_Default pragma appearing anywhere in the current + partition. The input argument is the interrupt number, and the result + is one of the following: - 'n' this interrupt not set by any Interrupt_State pragma - 'u' Interrupt_State pragma set state to User - 'r' Interrupt_State pragma set state to Runtime - 's' Interrupt_State pragma set state to System */ + 'u' if Interrupt_State pragma set to User; + 'r' if Interrupt_State pragma set to Runtime; + 's' if Interrupt_State pragma set to System or + Interrupts_System_By_Default in effect; otherwise + 'n' (there is no Interrupt_State pragma and no request for a default). + + See pragma Interrupt_State documentation for a description + of the effect and meaning of states User, Runtime, and System. */ char __gnat_get_interrupt_state (int intrup) { if (intrup >= __gl_num_interrupt_states) - return 'n'; + return (__gl_interrupts_default_to_system ? 's' : 'n'); else return __gl_interrupt_states [intrup]; } @@ -2094,10 +2100,14 @@ __gnat_install_handler (void) /* For VxWorks, install all signal handlers, since pragma Interrupt_State applies to vectored hardware interrupts, not signals. */ - sigaction (SIGFPE, &act, NULL); - sigaction (SIGILL, &act, NULL); - sigaction (SIGSEGV, &act, NULL); - sigaction (SIGBUS, &act, NULL); + if (__gnat_get_interrupt_state (SIGFPE) != 's') + sigaction (SIGFPE, &act, NULL); + if (__gnat_get_interrupt_state (SIGILL) != 's') + sigaction (SIGILL, &act, NULL); + if (__gnat_get_interrupt_state (SIGSEGV) != 's') + sigaction (SIGSEGV, &act, NULL); + if (__gnat_get_interrupt_state (SIGBUS) != 's') + sigaction (SIGBUS, &act, NULL); #if defined(__leon__) && defined(_WRS_KERNEL) /* Specific to the LEON VxWorks kernel run-time library */ diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb index 0755b92e4dbd5..3d43907a08b33 100644 --- a/gcc/ada/lib-writ.adb +++ b/gcc/ada/lib-writ.adb @@ -1266,6 +1266,10 @@ package body Lib.Writ is Write_Info_Char (Partition_Elaboration_Policy); end if; + if Opt.Interrupts_System_By_Default then + Write_Info_Str (" ID"); + end if; + if No_Component_Reordering_Config then Write_Info_Str (" NC"); end if; diff --git a/gcc/ada/lib-writ.ads b/gcc/ada/lib-writ.ads index 6bc6e961028ba..fd62ef9363c28 100644 --- a/gcc/ada/lib-writ.ads +++ b/gcc/ada/lib-writ.ads @@ -199,6 +199,11 @@ package Lib.Writ is -- GP Set if this compilation was done in GNATprove mode, either -- from direct use of GNATprove, or from use of -gnatdF. + -- ID Interrupts_System_By_Default pragma applies to this + -- partition. No handlers will be installed by default, + -- including signal handlers. This is a configuration + -- pragma. + -- Lx A valid Locking_Policy pragma applies to all the units in -- this file, where x is the first character (upper case) of -- the policy name (e.g. 'C' for Ceiling_Locking). diff --git a/gcc/ada/libgnarl/s-intman__posix.adb b/gcc/ada/libgnarl/s-intman__posix.adb index 311a1ded36780..f494843a0d069 100644 --- a/gcc/ada/libgnarl/s-intman__posix.adb +++ b/gcc/ada/libgnarl/s-intman__posix.adb @@ -154,6 +154,12 @@ package body System.Interrupt_Management is System.Task_Primitives.Alternate_Stack_Size /= 0; -- Whether to use an alternate signal stack for stack overflows + Sigsetable_Signal_Mask : aliased sigset_t; + + Interrupts_Default_To_System : Integer; + pragma Import (C, Interrupts_Default_To_System, + "__gl_interrupts_default_to_system"); + begin if Initialized then return; @@ -250,9 +256,25 @@ package body System.Interrupt_Management is -- Check all signals for state that requires keeping them unmasked and -- reserved. + -- Unmasking might involve explicit operations later on, typically + -- performed on the entire set of relevant signals gathered together + -- by way of sigset_t mask. Doing anything of this kind is forbidden + -- for very specific signals and would trip assertion checks if + -- attempted. Check for this here, preventing the Keep_Unmasked + -- request upfront. This is of particular relevance for + -- Interrupts_System_By_Default as it would lead to such requests + -- for every signal not altered otherwise. + + Result := sigemptyset (Sigsetable_Signal_Mask'Access); + pragma Assert (Result = 0); + for J in Interrupt_ID'Range loop if State (J) = Default or else State (J) = Runtime then - Keep_Unmasked (J) := True; + if Interrupts_Default_To_System = 0 or else + sigaddset (Sigsetable_Signal_Mask'Access, Signal (J)) = 0 + then + Keep_Unmasked (J) := True; + end if; Reserve (J) := True; end if; end loop; diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index ce0caf48168b9..71d031a69dc5c 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -1109,6 +1109,10 @@ package Opt is -- This flag is set True if a No_Run_Time pragma is encountered. See spec -- of Rtsfind for a full description of handling of this pragma. + Interrupts_System_By_Default : Boolean := False; + -- GNATBIND + -- Set True if pragma Interrupts_System_By_Default is seen. + No_Split_Units : Boolean := False; -- GPRBUILD -- Set to True with switch --no-split-units. When True, unit sources, spec, diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 04eed22031a1d..88a04397cf29b 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -1495,6 +1495,7 @@ begin | Pragma_No_Inline | Pragma_No_Return | Pragma_No_Run_Time + | Pragma_Interrupts_System_By_Default | Pragma_No_Strict_Aliasing | Pragma_No_Tagged_Streams | Pragma_Normalize_Scalars diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 772bf1b1abb9c..6091b5e48d30b 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -21080,6 +21080,18 @@ package body Sem_Prag is end if; end; + ---------------------------------- + -- Interrupts_System_By_Default -- + ---------------------------------- + + -- pragma Interrupts_System_By_Default; + + when Pragma_Interrupts_System_By_Default => + GNAT_Pragma; + Check_Arg_Count (0); + Check_Valid_Configuration_Pragma; + Interrupts_System_By_Default := True; + ----------------------- -- No_Tagged_Streams -- ----------------------- @@ -32767,6 +32779,7 @@ package body Sem_Prag is Pragma_No_Inline => 0, Pragma_No_Return => 0, Pragma_No_Run_Time => -1, + Pragma_Interrupts_System_By_Default => 0, Pragma_No_Strict_Aliasing => -1, Pragma_No_Tagged_Streams => 0, Pragma_Normalize_Scalars => 0, diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index ade933e0bbc7e..6027864e58345 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -461,6 +461,7 @@ package Snames is Name_No_Component_Reordering : constant Name_Id := N + $; -- GNAT Name_No_Heap_Finalization : constant Name_Id := N + $; -- GNAT Name_No_Run_Time : constant Name_Id := N + $; -- GNAT + Name_Interrupts_System_By_Default : constant Name_Id := N + $; -- GNAT Name_No_Strict_Aliasing : constant Name_Id := N + $; -- GNAT Name_Normalize_Scalars : constant Name_Id := N + $; Name_Optimize_Alignment : constant Name_Id := N + $; -- GNAT @@ -1774,6 +1775,7 @@ package Snames is Pragma_No_Component_Reordering, Pragma_No_Heap_Finalization, Pragma_No_Run_Time, + Pragma_Interrupts_System_By_Default, Pragma_No_Strict_Aliasing, Pragma_Normalize_Scalars, Pragma_Optimize_Alignment, From e8e0306649a09f47c429b36b7fcf95eaff100095 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 21 May 2024 08:40:06 +0200 Subject: [PATCH 046/114] ada: Fix composition of primitive equality for untagged records with variant part In Ada 2012, primitive equality operators of untagged record types compose like those of tagged record types, but this has never been implemented for untagged record types with a variant part. gcc/ada/ * exp_ch4.adb (Expand_Composite_Equality): In the untagged record case, always look for a user-defined equality operator in Ada 2012. --- gcc/ada/exp_ch4.adb | 50 ++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 983f66231a2c1..1674d6c813208 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -2329,6 +2329,28 @@ package body Exp_Ch4 is -- Case of untagged record types elsif Is_Record_Type (Full_Type) then + -- Equality composes in Ada 2012 for untagged record types. It also + -- composes for bounded strings, because they are part of the + -- predefined environment (see 4.5.2(32.1/1)). We could make it + -- compose for bounded strings by making them tagged, or by making + -- sure all subcomponents are set to the same value, even when not + -- used. Instead, we have this special case in the compiler, because + -- it's more efficient. + + if Ada_Version >= Ada_2012 or else Is_Bounded_String (Comp_Type) then + declare + Eq_Call : constant Node_Id := + Build_Eq_Call (Comp_Type, Loc, Lhs, Rhs); + + begin + if Present (Eq_Call) then + return Eq_Call; + end if; + end; + end if; + + -- Check whether a TSS has been created for the type + Eq_Op := TSS (Full_Type, TSS_Composite_Equality); if Present (Eq_Op) then @@ -2355,34 +2377,6 @@ package body Exp_Ch4 is Parameter_Associations => New_List (L_Exp, R_Exp)); end; - -- Equality composes in Ada 2012 for untagged record types. It also - -- composes for bounded strings, because they are part of the - -- predefined environment (see 4.5.2(32.1/1)). We could make it - -- compose for bounded strings by making them tagged, or by making - -- sure all subcomponents are set to the same value, even when not - -- used. Instead, we have this special case in the compiler, because - -- it's more efficient. - - elsif Ada_Version >= Ada_2012 or else Is_Bounded_String (Comp_Type) - then - -- If no TSS has been created for the type, check whether there is - -- a primitive equality declared for it. - - declare - Op : constant Node_Id := - Build_Eq_Call (Comp_Type, Loc, Lhs, Rhs); - - begin - -- Use user-defined primitive if it exists, otherwise use - -- predefined equality. - - if Present (Op) then - return Op; - else - return Make_Op_Eq (Loc, Lhs, Rhs); - end if; - end; - else return Expand_Record_Equality (Nod, Full_Type, Lhs, Rhs); end if; From c5d7daa37938984b931ae0825e9d3d72c748ab5a Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 24 May 2024 09:44:10 +0200 Subject: [PATCH 047/114] ada: Fix assertion failure during analysis of instantiation of formal package It's an assertion on the name of an instance of a generic child unit and it needs to cope with a renaming of the unit. gcc/ada/ * sem_ch12.adb (Instantiate_Formal_Package): Accept renamings of a generic parent that is a child unit for the abbreviated instance. --- gcc/ada/sem_ch12.adb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index d05c7b6119464..8ace16ad0089e 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -10996,7 +10996,8 @@ package body Sem_Ch12 is if Is_Child_Unit (Gen_Parent) then I_Nam := New_Copy_Tree (Name (Original_Node (Analyzed_Formal))); - pragma Assert (Entity (I_Nam) = Gen_Parent); + pragma Assert (Entity (I_Nam) = Gen_Parent + or else Renamed_Entity (Entity (I_Nam)) = Gen_Parent); else I_Nam := From 3c6dcd1d018da645316e3969748d70a1efd66dd2 Mon Sep 17 00:00:00 2001 From: Yannick Moy Date: Thu, 23 May 2024 14:39:19 +0200 Subject: [PATCH 048/114] ada: Fix inlining of fixed-lower-bound array for GNATprove Inlining in GNATprove may fail on a call to a subprogram with a formal of an array type with fixed lower bound (a GNAT extension), because the appropriate conversion is not used. Fix it. Also fix the function that inserts an unchecked conversion, in cases where it could skip sliding due to the target type having fixed lower bound. gcc/ada/ * inline.adb (Establish_Actual_Mapping_For_Inlined_Call): In the case of formal with a fixed lower bounds, insert appropriate conversion like in the case of a constrained type. * tbuild.adb (Unchecked_Convert_To): Do not skip the conversion when it may involve sliding due to a type with fixed lower bound. --- gcc/ada/inline.adb | 10 ++++++++-- gcc/ada/tbuild.adb | 12 +++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb index f5c5426351595..850145eb88732 100644 --- a/gcc/ada/inline.adb +++ b/gcc/ada/inline.adb @@ -3165,7 +3165,9 @@ package body Inline is elsif Base_Type (Etype (F)) = Base_Type (Etype (A)) and then Etype (F) /= Base_Type (Etype (F)) - and then Is_Constrained (Etype (F)) + and then (Is_Constrained (Etype (F)) + or else + Is_Fixed_Lower_Bound_Array_Subtype (Etype (F))) then Temp_Typ := Etype (F); @@ -3234,7 +3236,11 @@ package body Inline is -- GNATprove. elsif Etype (F) /= Etype (A) - and then (not GNATprove_Mode or else Is_Constrained (Etype (F))) + and then + (not GNATprove_Mode + or else (Is_Constrained (Etype (F)) + or else + Is_Fixed_Lower_Bound_Array_Subtype (Etype (F)))) then New_A := Unchecked_Convert_To (Etype (F), Relocate_Node (A)); Temp_Typ := Etype (F); diff --git a/gcc/ada/tbuild.adb b/gcc/ada/tbuild.adb index 51fa43c77ac82..b538911e8bc73 100644 --- a/gcc/ada/tbuild.adb +++ b/gcc/ada/tbuild.adb @@ -918,11 +918,17 @@ package body Tbuild is Result : Node_Id; begin - -- If the expression is already of the correct type, then nothing - -- to do, except for relocating the node + -- If the expression is already of the correct type, then nothing to do, + -- except for relocating the node. If Typ is an array type with fixed + -- lower bound, the expression might be of a subtype that does not + -- have this lower bound (on a slice), hence the conversion needs to + -- be preserved for sliding. if Present (Etype (Expr)) - and then (Base_Type (Etype (Expr)) = Typ or else Etype (Expr) = Typ) + and then + ((Base_Type (Etype (Expr)) = Typ + and then not Is_Fixed_Lower_Bound_Array_Subtype (Typ)) + or else Etype (Expr) = Typ) then return Relocate_Node (Expr); From ecb84b0aa4eac2050eedd7f9a66dd7393d5d31c2 Mon Sep 17 00:00:00 2001 From: Gary Dismukes Date: Thu, 23 May 2024 22:06:21 +0000 Subject: [PATCH 049/114] ada: Crash on selected component of formal derived type in generic instance The compiler crashes on an instantiation of a generic child unit G1.GC that has a formal private extension P_Ext of a private type P declared in the parent G1 whose full type has a component C, when analyzing a selected component ACC.C whose prefix is of an access type coming from an instantiation of another generic G2 where the designated type is the formal type P_Ext (coming in from a formal type of G2). gcc/ada/ * sem_ch4.adb (Try_Selected_Component_In_Instance): Reverse if_statement clauses so that the testing for the special case of extensions of private types in instance bodies is done first, followed by the testing for the case of a parent type that's a generic actual type. In the extension case, apply Base_Type to the type actual in the test of Used_As_Generic_Actual, and add a test of Present (Parent_Subtype (Typ)). --- gcc/ada/sem_ch4.adb | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index e75f8dfb6bcb7..1175a34df2183 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -5237,22 +5237,6 @@ package body Sem_Ch4 is end if; end loop; - -- If Par is a generic actual, look for component in ancestor types. - -- Skip this if we have no Declaration_Node, as is the case for - -- itypes. - - if Present (Par) - and then Is_Generic_Actual_Type (Par) - and then Present (Declaration_Node (Par)) - then - Par := Generic_Parent_Type (Declaration_Node (Par)); - loop - Find_Component_In_Instance (Par); - exit when Present (Entity (Sel)) - or else Par = Etype (Par); - Par := Etype (Par); - end loop; - -- Another special case: the type is an extension of a private -- type T, either is an actual in an instance or is immediately -- visible, and we are in the body of the instance, which means @@ -5263,12 +5247,29 @@ package body Sem_Ch4 is -- the Has_Private_View mechanism is bypassed because T or the -- ancestor is not directly referenced in the generic body. - elsif Is_Derived_Type (Typ) - and then (Used_As_Generic_Actual (Typ) + if Is_Derived_Type (Typ) + and then (Used_As_Generic_Actual (Base_Type (Typ)) or else Is_Immediately_Visible (Typ)) and then In_Instance_Body + and then Present (Parent_Subtype (Typ)) then Find_Component_In_Instance (Parent_Subtype (Typ)); + + -- If Par is a generic actual, look for component in ancestor types. + -- Skip this if we have no Declaration_Node, as is the case for + -- itypes. + + elsif Present (Par) + and then Is_Generic_Actual_Type (Par) + and then Present (Declaration_Node (Par)) + then + Par := Generic_Parent_Type (Declaration_Node (Par)); + loop + Find_Component_In_Instance (Par); + exit when Present (Entity (Sel)) + or else Par = Etype (Par); + Par := Etype (Par); + end loop; end if; return Etype (N) /= Any_Type; From 36bd57330f9b8f06206c909af53cd8b3ca6f6bed Mon Sep 17 00:00:00 2001 From: Steve Baird Date: Fri, 24 May 2024 14:14:03 -0700 Subject: [PATCH 050/114] ada: Replace "All" argument to Extensions_Allowed pragma with "All_Extensions" The argument to pragma Extensions_Allowed to enable all extensions is no longer "All", but instead "All_Extensions". gcc/ada/ * doc/gnat_rm/gnat_language_extensions.rst: Update documentation. * doc/gnat_rm/implementation_defined_pragmas.rst: Update documentation. * errout.adb (Error_Msg_GNAT_Extension): Update error message text. * par-prag.adb: Update pragma parsing. This includes changing the the name of the Check_Arg_Is_On_Or_Off formal parameter All_OK_Too to All_Extensions_OK_Too. * sem_prag.adb (Analyze_Pragma): In analyzing an Extensions_Allowed pragma, replace uses of Name_All with Name_All_Extensions; update a comment to reflect this. * snames.ads-tmpl: Add Name_All_Extensions declaration. * gnat_rm.texi: Regenerate. --- .../doc/gnat_rm/gnat_language_extensions.rst | 5 +++-- .../implementation_defined_pragmas.rst | 10 +++++----- gcc/ada/errout.adb | 10 ++++++---- gcc/ada/gnat_rm.texi | 15 ++++++++------- gcc/ada/par-prag.adb | 19 ++++++++++--------- gcc/ada/sem_prag.adb | 6 +++--- gcc/ada/snames.ads-tmpl | 1 + 7 files changed, 36 insertions(+), 30 deletions(-) diff --git a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst index f71e8f6eef893..d06ac4cc98d70 100644 --- a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst +++ b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst @@ -37,8 +37,9 @@ file, or in a ``.adc`` file corresponding to your project. .. attention:: You can activate the extended set of extensions by using either the ``-gnatX0`` command line flag, or the pragma ``Extensions_Allowed`` with - ``All`` as an argument. However, it is not recommended you use this subset - for serious projects, and is only means as a playground/technology preview. + ``All_Extensions`` as an argument. However, it is not recommended you use + this subset for serious projects; it is only meant as a technology preview + for use in playground experiments. .. _Curated_Language_Extensions: diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst index 6c08eaee81656..f31a1b9a7b84d 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst @@ -2208,19 +2208,19 @@ Syntax: .. code-block:: ada - pragma Extensions_Allowed (On | Off | All); + pragma Extensions_Allowed (On | Off | All_Extensions); -This configuration pragma enables (via the "On" or "All" argument) or disables -(via the "Off" argument) the implementation extension mode; the pragma takes -precedence over the ``-gnatX`` and ``-gnatX0`` command switches. +This configuration pragma enables (via the "On" or "All_Extensions" argument) +or disables (via the "Off" argument) the implementation extension mode; the +pragma takes precedence over the ``-gnatX`` and ``-gnatX0`` command switches. If an argument of ``"On"`` is specified, the latest version of the Ada language is implemented (currently Ada 2022) and, in addition, a curated set of GNAT specific extensions are recognized. (See the list here :ref:`here`) -An argument of ``"All"`` has the same effect except that some extra +An argument of ``"All_Extensions"`` has the same effect except that some extra experimental extensions are enabled (See the list here :ref:`here`) diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index c4eab2deee32c..1d82386099ced 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -902,21 +902,23 @@ package body Errout is if Is_Core_Extension then Error_Msg ("\unit must be compiled with -gnatX '[or -gnatX0'] " & - "or use pragma Extensions_Allowed (On) '[or All']", Loc); + "or use pragma Extensions_Allowed (On) '[or All_Extensions']", + Loc); else Error_Msg ("\unit must be compiled with -gnatX0 " & - "or use pragma Extensions_Allowed (All)", Loc); + "or use pragma Extensions_Allowed (All_Extensions)", Loc); end if; else Error_Msg_Sloc := Sloc (Ada_Version_Pragma); Error_Msg ("\incompatible with Ada version set#", Loc); if Is_Core_Extension then Error_Msg - ("\must use pragma Extensions_Allowed (On) '[or All']", Loc); + ("\must use pragma Extensions_Allowed (On)" & + " '[or All_Extensions']", Loc); else Error_Msg - ("\must use pragma Extensions_Allowed (All)", Loc); + ("\must use pragma Extensions_Allowed (All_Extensions)", Loc); end if; end if; end Error_Msg_GNAT_Extension; diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index c578502983c1c..b80d77eeb02f2 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -3688,19 +3688,19 @@ GNAT User’s Guide. Syntax: @example -pragma Extensions_Allowed (On | Off | All); +pragma Extensions_Allowed (On | Off | All_Extensions); @end example -This configuration pragma enables (via the “On” or “All” argument) or disables -(via the “Off” argument) the implementation extension mode; the pragma takes -precedence over the @code{-gnatX} and @code{-gnatX0} command switches. +This configuration pragma enables (via the “On” or “All_Extensions” argument) +or disables (via the “Off” argument) the implementation extension mode; the +pragma takes precedence over the @code{-gnatX} and @code{-gnatX0} command switches. If an argument of @code{"On"} is specified, the latest version of the Ada language is implemented (currently Ada 2022) and, in addition, a curated set of GNAT specific extensions are recognized. (See the list here @ref{69,,here}) -An argument of @code{"All"} has the same effect except that some extra +An argument of @code{"All_Extensions"} has the same effect except that some extra experimental extensions are enabled (See the list here @ref{6a,,here}) @@ -28817,8 +28817,9 @@ activate the curated subset of extensions. @quotation Attention You can activate the extended set of extensions by using either the @code{-gnatX0} command line flag, or the pragma @code{Extensions_Allowed} with -@code{All} as an argument. However, it is not recommended you use this subset -for serious projects, and is only means as a playground/technology preview. +@code{All_Extensions} as an argument. However, it is not recommended you use +this subset for serious projects; it is only meant as a technology preview +for use in playground experiments. @end quotation @end cartouche diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 88a04397cf29b..9e77bf16ff36c 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -74,11 +74,11 @@ function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is -- is a string literal. If not give error and raise Error_Resync. procedure Check_Arg_Is_On_Or_Off - (Arg : Node_Id; All_OK_Too : Boolean := False); + (Arg : Node_Id; All_Extensions_OK_Too : Boolean := False); -- Check the expression of the specified argument to make sure that it -- is an identifier which is either ON or OFF, and if not, then issue - -- an error message and raise Error_Resync. If All_OK_Too is True, - -- then an ALL identifer is also acceptable. + -- an error message and raise Error_Resync. If All_Extensions_OK_Too is + -- True, then an ALL_EXTENSIONS identifer is also acceptable. procedure Check_No_Identifier (Arg : Node_Id); -- Checks that the given argument does not have an identifier. If @@ -170,21 +170,22 @@ function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is ---------------------------- procedure Check_Arg_Is_On_Or_Off - (Arg : Node_Id; All_OK_Too : Boolean := False) + (Arg : Node_Id; All_Extensions_OK_Too : Boolean := False) is Argx : constant Node_Id := Expression (Arg); Error : Boolean := Nkind (Expression (Arg)) /= N_Identifier; begin if not Error then Error := Chars (Argx) not in Name_On | Name_Off - and then not (All_OK_Too and Chars (Argx) = Name_All); + and then not (All_Extensions_OK_Too + and then Chars (Argx) = Name_All_Extensions); end if; if Error then Error_Msg_Name_2 := Name_On; Error_Msg_Name_3 := Name_Off; - if All_OK_Too then - Error_Msg_Name_4 := Name_All; + if All_Extensions_OK_Too then + Error_Msg_Name_4 := Name_All_Extensions; Error_Msg_N ("argument for pragma% must be% or% or%", Argx); else Error_Msg_N ("argument for pragma% must be% or%", Argx); @@ -433,11 +434,11 @@ begin when Pragma_Extensions_Allowed => Check_Arg_Count (1); Check_No_Identifier (Arg1); - Check_Arg_Is_On_Or_Off (Arg1, All_OK_Too => True); + Check_Arg_Is_On_Or_Off (Arg1, All_Extensions_OK_Too => True); if Chars (Expression (Arg1)) = Name_On then Ada_Version := Ada_With_Core_Extensions; - elsif Chars (Expression (Arg1)) = Name_All then + elsif Chars (Expression (Arg1)) = Name_All_Extensions then Ada_Version := Ada_With_All_Extensions; else Ada_Version := Ada_Version_Explicit; diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 6091b5e48d30b..784c9a49ae3cf 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -17422,17 +17422,17 @@ package body Sem_Prag is -- Extensions_Allowed -- ------------------------ - -- pragma Extensions_Allowed (ON | OFF | ALL); + -- pragma Extensions_Allowed (ON | OFF | ALL_EXTENSIONS); when Pragma_Extensions_Allowed => GNAT_Pragma; Check_Arg_Count (1); Check_No_Identifiers; - Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off, Name_All); + Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off, Name_All_Extensions); if Chars (Get_Pragma_Arg (Arg1)) = Name_On then Ada_Version := Ada_With_Core_Extensions; - elsif Chars (Get_Pragma_Arg (Arg1)) = Name_All then + elsif Chars (Get_Pragma_Arg (Arg1)) = Name_All_Extensions then Ada_Version := Ada_With_All_Extensions; else Ada_Version := Ada_Version_Explicit; diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index 6027864e58345..c624d04a7f7a9 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -783,6 +783,7 @@ package Snames is Name_Address_Type : constant Name_Id := N + $; Name_Aggregate : constant Name_Id := N + $; + Name_All_Extensions : constant Name_Id := N + $; Name_Allow : constant Name_Id := N + $; Name_Amount : constant Name_Id := N + $; Name_As_Is : constant Name_Id := N + $; From a688a0281946b1cc11333ca548db031a9aa0e9fd Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Tue, 28 May 2024 12:19:51 -0400 Subject: [PATCH 051/114] ada: Rewrite generic formal/actual matching ...in preparation for implementing type inference for generic parameters. The main change is to do the "matching" computation early, and produce a *constant* data structure (Gen_Assocs_Rec) to represent the matching between each triple of unanalyzed formal, analyzed formal, and corresponding actual. This will allow us to look at that data structure more than once, which will be necessary for type inference. Matching_Actual is removed; Match_Assocs is added. Other changes include removal of global variables, splitting out processing into subprograms, adding assertions, comment corrections, and other general cleanups. gcc/ada/ * expander.ads: Minor comment fixes. * nlists.ads: Misc comment improvements. * sem_aux.ads (First_Discriminant): Improve comment. * sem_ch12.adb: Misc cleanups. (Associations): New package containing type Gen_Assocs_Rec to represent matchings, and function Match_Assocs to create the Gen_Assocs_Rec constant. (Analyze_Associations): Call Match_Assocs, and other major changes related to that. * sem_ch12.ads: Minor comment fixes. * sem_ch3.adb: Minor comment fixes. --- gcc/ada/expander.ads | 6 +- gcc/ada/nlists.ads | 19 +- gcc/ada/sem_aux.ads | 15 +- gcc/ada/sem_ch12.adb | 2641 +++++++++++++++++++++++------------------- gcc/ada/sem_ch12.ads | 4 +- gcc/ada/sem_ch3.adb | 3 +- 6 files changed, 1495 insertions(+), 1193 deletions(-) diff --git a/gcc/ada/expander.ads b/gcc/ada/expander.ads index 07e396420ef89..d2b67f1957d64 100644 --- a/gcc/ada/expander.ads +++ b/gcc/ada/expander.ads @@ -132,11 +132,11 @@ package Expander is -- exceptions where it makes sense to temporarily change its value are: -- -- (a) when starting/completing the processing of a generic definition - -- or declaration (see routines Start_Generic_Processing and - -- End_Generic_Processing in Sem_Ch12) + -- or declaration (see routines Start_Generic and End_Generic in + -- Sem_Ch12). -- -- (b) when starting/completing the preanalysis of an expression - -- (see the spec of package Sem for more info on preanalysis.) + -- (see the spec of package Sem for more info on preanalysis). -- -- Note that when processing a spec expression (In_Spec_Expression -- is True) or performing semantic analysis of a generic spec or body diff --git a/gcc/ada/nlists.ads b/gcc/ada/nlists.ads index 5aebd603f8b02..3aaffbe45ec23 100644 --- a/gcc/ada/nlists.ads +++ b/gcc/ada/nlists.ads @@ -124,10 +124,9 @@ package Nlists is -- Used when dealing with a list that can contain pragmas to skip past -- any initial pragmas and return the first element that is not a pragma. -- If the list is empty, or if it contains only pragmas, then Empty is - -- returned. It is an error to call First_Non_Pragma with a Node_Id value - -- or No_List (No_List is not considered to be the same as an empty list). - -- This function also skips N_Null nodes which can result from rewriting - -- unrecognized or incorrect pragmas. + -- returned. It is an error to call this with List = No_List. This function + -- also skips N_Null nodes, which can result from rewriting incorrect + -- pragmas. function Last (List : List_Id) return Node_Or_Entity_Id; pragma Inline (Last); @@ -139,8 +138,8 @@ package Nlists is function Last_Non_Pragma (List : List_Id) return Node_Or_Entity_Id; -- Obtains the last element of a given node list that is not a pragma. -- If the list is empty, or if it contains only pragmas, then Empty is - -- returned. It is an error to call Last_Non_Pragma with a Node_Id or - -- No_List. (No_List is not considered to be the same as an empty list). + -- returned. It is an error to call this with List = No_List. + -- Unlike First_Non_Pragma, this does not skip N_Null nodes. function List_Length (List : List_Id) return Nat; -- Returns number of items in the given list. If called on No_List it @@ -161,8 +160,8 @@ package Nlists is (Node : Node_Or_Entity_Id) return Node_Or_Entity_Id; -- This function returns the next node on a node list, skipping past any -- pragmas, or Empty if there is no non-pragma entry left. The argument - -- must be a member of a node list. This function also skips N_Null nodes - -- which can result from rewriting unrecognized or incorrect pragmas. + -- must be a member of a node list. This function also skips N_Null nodes, + -- which can result from rewriting incorrect pragmas. procedure Next_Non_Pragma (Node : in out Node_Or_Entity_Id); pragma Inline (Next_Non_Pragma); @@ -190,8 +189,8 @@ package Nlists is -- pragmas. If Node is the first element of the list, or if the only -- elements preceding it are pragmas, then Empty is returned. The -- argument must be a member of a node list. Note: the implementation - -- does maintain back pointers, so this function executes quickly in - -- constant time. + -- maintains back pointers, so this function executes quickly in constant + -- time. Unlike Next_Non_Pragma, this does not skip N_Null nodes. procedure Prev_Non_Pragma (Node : in out Node_Or_Entity_Id); pragma Inline (Prev_Non_Pragma); diff --git a/gcc/ada/sem_aux.ads b/gcc/ada/sem_aux.ads index 6bed7ae908494..f14a9a141d146 100644 --- a/gcc/ada/sem_aux.ads +++ b/gcc/ada/sem_aux.ads @@ -100,14 +100,13 @@ package Sem_Aux is -- entity is declared or Standard_Standard for library-level entities. function First_Discriminant (Typ : Entity_Id) return Entity_Id; - -- Typ is a type with discriminants. The discriminants are the first - -- entities declared in the type, so normally this is equivalent to - -- First_Entity. The exception arises for tagged types, where the tag - -- itself is prepended to the front of the entity chain, so the - -- First_Discriminant function steps past the tag if it is present. - -- The caller is responsible for checking that the type has discriminants. - -- When called on a private type with unknown discriminants, the function - -- always returns Empty. + -- Typ is a type with discriminants or unknown discriminants. The + -- discriminants are the first entities declared in the type, so normally + -- this is equivalent to First_Entity. The exception arises for tagged + -- types, where the tag itself is prepended to the front of the entity + -- chain, so the First_Discriminant function steps past the tag if it is + -- present. When called on a private type with unknown discriminants, the + -- function always returns Empty. -- WARNING: There is a matching C declaration of this subprogram in fe.h diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 8ace16ad0089e..b93e8231c84f7 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -190,7 +190,7 @@ package body Sem_Ch12 is -- (This is just part of the semantic analysis of New_Outer). -- Critically, references to Global within Inner must be preserved, while - -- references to Semi_Global should not preserved, because they must now + -- references to Semi_Global should not be preserved, because they must now -- resolve to an entity within New_Outer. To distinguish between these, we -- use a global variable, Current_Instantiated_Parent, which is set when -- performing a generic copy during instantiation (at 2). This variable is @@ -483,7 +483,7 @@ package body Sem_Ch12 is -- and actuals. Each association becomes a renaming declaration for the -- formal entity. F_Copy is the analyzed list of formals in the generic -- copy. It is used to apply legality checks to the actuals. I_Node is the - -- instantiation node itself. + -- instantiation node. procedure Analyze_Subprogram_Instantiation (N : Node_Id; @@ -519,6 +519,18 @@ package body Sem_Ch12 is -- The body of the wrapper is a call to the actual, with the generated -- pre/postconditon checks added. + procedure Build_Subprogram_Wrappers + (Match, Analyzed_Formal : Node_Id; Renamings : List_Id); + -- Ada 2022: AI12-0272 introduces pre/postconditions for formal + -- subprograms. The implementation of making the formal into a renaming + -- of the actual does not work, given that subprogram renaming cannot + -- carry aspect specifications. Instead we must create subprogram + -- wrappers whose body is a call to the actual, and whose declaration + -- carries the aspects of the formal. + -- The wrapper declaration and body are appended to Renamings. + -- ???But renaming declarations CAN have aspects specs, + -- and that was true from the start (see AI05-0183-1). + procedure Check_Abbreviated_Instance (N : Node_Id; Parent_Installed : in out Boolean); @@ -558,7 +570,7 @@ package body Sem_Ch12 is -- package cannot be inlined by the front end because front-end inlining -- requires a strict linear order of elaboration. - function Check_Hidden_Primitives (Assoc_List : List_Id) return Elist_Id; + function Check_Hidden_Primitives (Renamings : List_Id) return Elist_Id; -- Check if some association between formals and actuals requires to make -- visible primitives of a tagged type, and make those primitives visible. -- Return the list of primitives whose visibility is modified (to restore @@ -723,6 +735,17 @@ package body Sem_Ch12 is -- Determine whether a formal subprogram has a Pre- or Postcondition, -- in which case a subprogram wrapper has to be built for the actual. + function Has_Fully_Defined_Profile (Subp : Entity_Id) return Boolean; + -- Determine whether the parameter types and the return type of Subp + -- are fully defined at the point of instantiation. + + function Has_Null_Default (N : Node_Id) return Boolean is + (Nkind (N) in N_Formal_Subprogram_Declaration + and then Nkind (Specification (N)) = N_Procedure_Specification + and then Null_Present (Specification (N))); + -- True if N is the declaration of a formal procedure with "is null" + -- as the default. + procedure Hide_Current_Scope; -- When instantiating a generic child unit, the parent context must be -- present, but the instance and all entities that may be generated @@ -786,9 +809,9 @@ package body Sem_Ch12 is -- generic parent of a generic child unit when compiling its body, so -- that full views of types in the parent are made visible. - -- The functions Instantiate_XXX perform various legality checks and build + -- The functions Instantiate_... perform various legality checks and build -- the declarations for instantiated generic parameters. In all of these - -- Formal is the entity in the generic unit, Actual is the entity of + -- Formal is the entity in the generic unit, Actual is the entity or -- expression in the generic associations, and Analyzed_Formal is the -- formal in the generic copy, which contains the semantic information to -- be used to validate the actual. @@ -803,6 +826,11 @@ package body Sem_Ch12 is Actual : Node_Id; Analyzed_Formal : Node_Id; Actual_Decls : List_Id) return List_Id; + -- Actual_Decls is the list of renamings being built; this is used for + -- formal derived types, to determine whether the parent type is another + -- formal derived type in the same generic unit. + -- Note that the call site appends the result of this function onto + -- the same list. function Instantiate_Formal_Subprogram (Formal : Node_Id; @@ -894,6 +922,10 @@ package body Sem_Ch12 is procedure Remove_Parent (In_Body : Boolean := False); -- Reverse effect after instantiation of child is complete + function Renames_Standard_Subprogram (Subp : Entity_Id) return Boolean; + -- Determine whether Subp renames one of the subprograms defined in the + -- generated package Standard. + function Requires_Conformance_Checking (N : Node_Id) return Boolean; -- Determine whether the formal package declaration N requires conformance -- checking with actuals in instantiations. @@ -1087,507 +1119,879 @@ package body Sem_Ch12 is Table_Increment => 200, Table_Name => "Generic_Flags"); - --------------------------- - -- Abandon_Instantiation -- - --------------------------- - - procedure Abandon_Instantiation (N : Node_Id) is - begin - Error_Msg_N ("\instantiation abandoned!", N); - raise Instantiation_Error; - end Abandon_Instantiation; + ------------------ + -- Associations -- + ------------------ + + package Associations is + + type Actual_Kind is + (None, + None_Use_Clause, + -- Used when the "formal" is a use clause; there is no corresponding + -- actual. + Box_Subp_Default, + -- Used for "is <>" as a subprogram default + Box_Actual, + -- Used for explicit "name => <>" and "others => <>" in formal + -- packages. + Name_Exp, + -- Name or expression or .... + -- Used for an explicit_generic_actual_parameter, and also for the + -- default_expression of an in-mode formal, the default_subtype_mark + -- of a formal type, and the default_name of a formal subprogram. + Null_Default, + -- Used for "is null" as a subprogram default. + Exp_Func_Default, + -- Used for "is (expression)" as a subprogram default, + -- which is a language extension (and is different from "is name" + -- without parentheses). + Dummy_Assoc + -- Used for the dummy associations that are created in + -- Save_Global_Defaults. These have Explicit_Generic_Actual_Parameter + -- = Empty and Box_Present = False + ); + -- ???We wouldn't need this enumeration type if we created new node + -- kinds for N_Box_Subp_Default, N_Box_Actual, N_Null_Default, and + -- N_Exp_Func_Default. + + type Generic_Actual_Rec (Kind : Actual_Kind := None) is record + -- Representation of one generic actual parameter + case Kind is + when None | None_Use_Clause | Box_Subp_Default | Box_Actual | + Null_Default | Dummy_Assoc => + null; + when Name_Exp | Exp_Func_Default => + Name_Exp : Node_Id; + end case; + end record; + + type Actual_Origin_Enum is + (None, From_Explicit_Actual, From_Default, From_Others_Box); + -- Indication of where the Actual came from -- explicitly in the + -- instantiation, or defaulted. + + type Assoc_Index is new Pos; + subtype Assoc_Count is Assoc_Index'Base range 0 .. Assoc_Index'Last; + + type Assoc_Rec is record + -- Association between a single formal/actual pair. But we store both + -- the unanalyzed and analyzed formal. + + Un_Formal, An_Formal : Node_Id; -- unanalyzed and analyzed formals + -- An_Formal is the node in the generic copy that corresponds to + -- Un_Formal. The semantic information on this node is used to + -- perform legality checks on the actuals. Because semantic analysis + -- can introduce some anonymous entities or modify the declaration + -- node itself, the correspondence between the two lists is not + -- one-one. In addition to anonymous types, a formal "=" will + -- introduce an implicit equal and opposite "/=". + + Explicit_Assoc : Opt_N_Generic_Association_Id; + -- Explicit association, if any, from the source or generated. + + Actual : Generic_Actual_Rec; + -- Generic actual parameter corresponding to Un_Formal/An_Formal, + -- possibly from defaults or others/boxes. + + Actual_Origin : Actual_Origin_Enum; + -- Reason why Actual was set; where it came from + end record; + + type Assoc_Array is array (Assoc_Index range <>) of Assoc_Rec; + -- One element for each formal and (if legal) for each corresponding + -- actual. + + type Gen_Assocs_Rec (Num_Assocs : Assoc_Count) is record + -- Representation of formal/actual matching. Num_Assocs + -- is the number of formals and (if legal) the number + -- of actuals. + Others_Present : Boolean; + -- True if "others => <>" (only for formal packages) + Assocs : Assoc_Array (1 .. Num_Assocs); + end record; + + function Match_Assocs + (I_Node : Node_Id; Formals : List_Id; F_Copy : List_Id) + return Gen_Assocs_Rec; + -- I_Node is the instantiation node. Formals is the list of unanalyzed + -- formals. F_Copy is the analyzed list of formals in the generic copy. + -- Return a Gen_Assocs_Rec with formals, explicit actuals, and default + -- actuals filled in. Check legality rules related to formal/actual + -- matching. + + end Associations; + + procedure Analyze_One_Association + (I_Node : Node_Id; -- instantiation node + Assoc : Associations.Assoc_Rec; + -- Logical 'in out' parameters: + Result_Renamings : List_Id; + Default_Actuals : List_Id; + Actuals_To_Freeze : Elist_Id); + -- Called by Analyze_Associations for each association. The renamings + -- are appended onto Result_Renamings. Defaulted actuals are appended + -- onto Default_Actuals, and actuals that require freezing are + -- appended onto Actuals_To_Freeze. + + procedure Check_Fixed_Point_Warning + (Gen_Assocs : Associations.Gen_Assocs_Rec; + Renamings : List_Id); + -- Warn if any actual is a fixed-point type that has user-defined + -- arithmetic operators, but there is no corresponding formal in the + -- generic, in which case the predefined operators will be used. This + -- merits a warning because of the special semantics of fixed point + -- operators. However, do not warn if the formal is private, because there + -- can be no arithmetic operators in the generic so there no danger of + -- confusion. + + ------------------ + -- Associations -- + ------------------ + + package body Associations is + + generic + with procedure Action (F : Node_Id; Index : Assoc_Index); + procedure Formal_Iter (Formals : List_Id); + -- Iterate through the unanalyzed formals, calling Action for each one. + -- Skip pragmas, but do not skip use clauses. + + function Num_Formals (Formals : List_Id) return Assoc_Count; + -- Note: does not include pragmas that occur in the Formals list; + -- it does include use clauses. + + generic + with procedure Action (F : Node_Id; Index : Assoc_Index); + procedure An_Formal_Iter (An_Formals : List_Id); + -- Iterate through the analyzed formals, calling Action for each one + -- that corresponds to an unanalyzed formal. This should call Action + -- exactly the same number of times that Formal_Iter calls its Action. + -- Skip pragmas, but do not skip use clauses. Skip extraneous + -- analyzed formals in cases where there are multiple ones + -- corresponding to a particular unanalyzed one. + + function Num_An_Formals (F_Copy : List_Id) return Assoc_Count; + -- Number of analyzed formals that correspond directly to unanalyzed + -- formals. There are all sorts of other things in F_Copy, which + -- are not counted. + + procedure Check_Box (I_Node, Actual : Node_Id); + -- Check for errors in "others => <>" and "Name => <>" + + function Default (Un_Formal : Node_Id) return Generic_Actual_Rec; + -- Return the default for a given formal, which can be a name, + -- expression, box, etc. + + procedure Match_Positional + (Src_Assoc : in out Node_Id; Assoc : in out Assoc_Rec); + -- Called by Match_Assocs to match one positional parameter association. + -- If the current formal (in Assoc) is not a use clause, then there is a + -- match, and we set Assoc.Actual and move Src_Assoc to the next one. + + procedure Match_Named + (Src_Assoc : Node_Id; Assoc : in out Assoc_Rec; + Found : in out Boolean); + -- Called by Match_Assocs to match one named parameter association. + -- If the current formal (in Assoc) is not a use clause, and the + -- selector name matches the formal name, then there is a match, + -- and we set Assoc.Actual. We also set the Selector_Name to denote + -- the matched formal, and set Found to True. + + ----------------- + -- Formal_Iter -- + ----------------- + + -- Formal_Iter is straightforward; An_Formal_Iter is not. + + procedure Formal_Iter (Formals : List_Id) is + F : Node_Id := First (Formals); + Index : Assoc_Index := 1; + begin + while Present (F) loop + case Nkind (F) is + when N_Formal_Object_Declaration + | N_Formal_Type_Declaration + | N_Formal_Subprogram_Declaration + | N_Formal_Package_Declaration + | N_Use_Package_Clause + | N_Use_Type_Clause + => + Action (F, Index); + Index := Index + 1; + when N_Pragma => + null; + when others => + raise Program_Error; + end case; - ---------------------------------- - -- Adjust_Inherited_Pragma_Sloc -- - ---------------------------------- + Next (F); + end loop; + end Formal_Iter; - procedure Adjust_Inherited_Pragma_Sloc (N : Node_Id) is - begin - Adjust_Instantiation_Sloc (N, S_Adjustment); - end Adjust_Inherited_Pragma_Sloc; + ----------------- + -- Num_Formals -- + ----------------- - -------------------------- - -- Analyze_Associations -- - -------------------------- + function Num_Formals (Formals : List_Id) return Assoc_Count is + Result : Assoc_Count := 0; + procedure Action (Ignore_F : Node_Id; Ignore : Assoc_Index); + procedure Action (Ignore_F : Node_Id; Ignore : Assoc_Index) is + begin + Result := Result + 1; + end Action; + procedure Iter is new Formal_Iter (Action); + begin + Iter (Formals); + return Result; + end Num_Formals; - function Analyze_Associations - (I_Node : Node_Id; - Formals : List_Id; - F_Copy : List_Id) return List_Id - is - Actuals_To_Freeze : constant Elist_Id := New_Elmt_List; - Assoc_List : constant List_Id := New_List; - Default_Actuals : constant List_Id := New_List; - Gen_Unit : constant Entity_Id := - Defining_Entity (Parent (F_Copy)); + -------------------- + -- An_Formal_Iter -- + -------------------- - Actuals : List_Id; - Actual : Node_Id; - Analyzed_Formal : Node_Id; - First_Named : Node_Id := Empty; - Formal : Node_Id; - Match : Node_Id := Empty; - Named : Node_Id; - Saved_Formal : Node_Id; - - Default_Formals : constant List_Id := New_List; - -- If an N_Others_Choice is present, some of the formals may be - -- defaulted. To simplify the treatment of visibility in an instance, - -- we introduce individual defaults for each such formal. These - -- defaults are appended to the list of associations and replace the - -- N_Others_Choice. - - Found_Assoc : Node_Id; - -- Association for the current formal being match. Empty if there are - -- no remaining actuals, or if there is no named association with the - -- name of the formal. - - Is_Named_Assoc : Boolean; - Num_Matched : Nat := 0; - Num_Actuals : Nat := 0; - - Others_Present : Boolean := False; - -- In Ada 2005, indicates partial parameterization of a formal - -- package. As usual an 'others' association must be last in the list. - - procedure Build_Subprogram_Wrappers; - -- Ada 2022: AI12-0272 introduces pre/postconditions for formal - -- subprograms. The implementation of making the formal into a renaming - -- of the actual does not work, given that subprogram renaming cannot - -- carry aspect specifications. Instead we must create subprogram - -- wrappers whose body is a call to the actual, and whose declaration - -- carries the aspects of the formal. - - procedure Check_Fixed_Point_Actual (Actual : Node_Id); - -- Warn if an actual fixed-point type has user-defined arithmetic - -- operations, but there is no corresponding formal in the generic, - -- in which case the predefined operations will be used. This merits - -- a warning because of the special semantics of fixed point ops. - - procedure Check_Overloaded_Formal_Subprogram (Formal : Node_Id); - -- Apply RM 12.3(9): if a formal subprogram is overloaded, the instance - -- cannot have a named association for it. AI05-0025 extends this rule - -- to formals of formal packages by AI05-0025, and it also applies to - -- box-initialized formals. - - function Has_Fully_Defined_Profile (Subp : Entity_Id) return Boolean; - -- Determine whether the parameter types and the return type of Subp - -- are fully defined at the point of instantiation. - - function Matching_Actual - (F : Entity_Id; - A_F : Entity_Id) return Node_Id; - -- Find actual that corresponds to a given formal parameter. If the - -- actuals are positional, return the next one, if any. If the actuals - -- are named, scan the parameter associations to find the right one. - -- A_F is the corresponding entity in the analyzed generic, which is - -- placed on the selector name. - -- - -- In Ada 2005, a named association may be given with a box, in which - -- case Matching_Actual sets Found_Assoc to the generic association, - -- but return Empty for the actual itself. In this case the code below - -- creates a corresponding declaration for the formal. - - function Partial_Parameterization return Boolean; - -- Ada 2005: if no match is found for a given formal, check if the - -- association for it includes a box, or whether the associations - -- include an Others clause. - - procedure Process_Default (Formal : Node_Id); - -- Add a copy of the declaration of a generic formal to the list of - -- associations, and add an explicit box association for its entity - -- if there is none yet, and the default comes from an N_Others_Choice. - - function Renames_Standard_Subprogram (Subp : Entity_Id) return Boolean; - -- Determine whether Subp renames one of the subprograms defined in the - -- generated package Standard. - - procedure Set_Analyzed_Formal; - -- Find the node in the generic copy that corresponds to a given formal. - -- The semantic information on this node is used to perform legality - -- checks on the actuals. Because semantic analysis can introduce some - -- anonymous entities or modify the declaration node itself, the - -- correspondence between the two lists is not one-one. In addition to - -- anonymous types, the presence a formal equality will introduce an - -- implicit declaration for the corresponding inequality. + procedure An_Formal_Iter (An_Formals : List_Id) is + F : Node_Id := First (An_Formals); + Index : Assoc_Index := 1; + begin + -- The correspondence between unanalyzed and analyzed formals is not + -- one-one; hence this needs to do some fancy footwork to skip some + -- items in the analyzed formals list. In each case where multiple + -- items in An_Formals correspond to a particular unanalyzed formal, + -- we must pick the "main" one. + + while Present (F) loop + case Nkind (F) is + when N_Use_Package_Clause | N_Use_Type_Clause => + Action (F, Index); + Index := Index + 1; + + when N_Formal_Object_Declaration + | N_Formal_Type_Declaration + | N_Formal_Subprogram_Declaration + | N_Package_Declaration + | N_Full_Type_Declaration + | N_Private_Type_Declaration + | N_Private_Extension_Declaration + => + if Is_Internal_Name (Chars (Defining_Entity (F))) then + null; + else + Action (F, Index); + Index := Index + 1; + + if Nkind (F) = N_Full_Type_Declaration + and then Nkind (Type_Definition (F)) = + N_Derived_Type_Definition + and then Present (Next (F)) + and then Nkind (Next (F)) = N_Full_Type_Declaration + and then Chars (Defining_Identifier (F)) = + Chars (Defining_Identifier (Next (F))) + then + Next (F); -- Skip full type of derived type + end if; + end if; - ------------------------------- - -- Build_Subprogram_Wrappers -- - ------------------------------- + when N_Subtype_Declaration => + if Nkind (Original_Node (F)) in N_Formal_Type_Declaration + then + pragma Assert + (not Is_Internal_Name (Chars (Defining_Entity (F)))); + Action (F, Index); + Index := Index + 1; + elsif Nkind (Original_Node (F)) in N_Full_Type_Declaration + then + null; + else + -- subtype of a formal object + pragma Assert + (Nkind (Next (F)) = N_Formal_Object_Declaration); + end if; + when N_Pragma => + null; + when N_Formal_Package_Declaration => + -- If there were no errors, this would have been transformed + -- into N_Package_Declaration. + Check_Error_Detected; + pragma Assert (Error_Posted (F)); + Abandon_Instantiation (Instantiation_Node); + when others => + raise Program_Error; + end case; - procedure Build_Subprogram_Wrappers is - function Adjust_Aspect_Sloc (N : Node_Id) return Traverse_Result; - -- Adjust sloc so that errors located at N will be reported with - -- information about the instance and not just about the generic. + Next (F); + end loop; + end An_Formal_Iter; - ------------------------ - -- Adjust_Aspect_Sloc -- - ------------------------ + -------------------- + -- Num_An_Formals -- + -------------------- - function Adjust_Aspect_Sloc (N : Node_Id) return Traverse_Result is + function Num_An_Formals (F_Copy : List_Id) return Assoc_Count is + Result : Assoc_Count := 0; + procedure Action (Ignore_F : Node_Id; Ignore : Assoc_Index); + procedure Action (Ignore_F : Node_Id; Ignore : Assoc_Index) is begin - Adjust_Instantiation_Sloc (N, S_Adjustment); - return OK; - end Adjust_Aspect_Sloc; - - procedure Adjust_Aspect_Slocs is new - Traverse_Proc (Adjust_Aspect_Sloc); - - Formal : constant Entity_Id := - Defining_Unit_Name (Specification (Analyzed_Formal)); - Aspect_Spec : Node_Id; - Decl_Node : Node_Id; - Actual_Name : Node_Id; + Result := Result + 1; + end Action; + procedure Iter is new An_Formal_Iter (Action); + begin + Iter (F_Copy); + return Result; + end Num_An_Formals; - -- Start of processing for Build_Subprogram_Wrappers + --------------- + -- Check_Box -- + --------------- + procedure Check_Box (I_Node, Actual : Node_Id) is begin - -- Create declaration for wrapper subprogram - -- The actual can be overloaded, in which case it will be - -- resolved when the call in the wrapper body is analyzed. - -- We attach the possible interpretations of the actual to - -- the name to be used in the call in the wrapper body. - - if Is_Entity_Name (Match) then - Actual_Name := New_Occurrence_Of (Entity (Match), Sloc (Match)); + -- "... => <>" is allowed only in formal packages, not old-fashioned + -- instantiations. - if Is_Overloaded (Match) then - Save_Interps (Match, Actual_Name); + if Nkind (I_Node) /= N_Formal_Package_Declaration + and then Comes_From_Source (I_Node) + then + if Actual in N_Others_Choice_Id then + Error_Msg_N + ("OTHERS association not allowed in an instance", Actual); + elsif Box_Present (Actual) then + Error_Msg_N + ("box association not allowed in an instance", Actual); end if; + end if; - else - -- Use renaming declaration created when analyzing actual. - -- This may be incomplete if there are several formal - -- subprograms whose actual is an attribute ??? - - declare - Renaming_Decl : constant Node_Id := Last (Assoc_List); + -- "others => <>" must come last - begin - Actual_Name := New_Occurrence_Of - (Defining_Entity (Renaming_Decl), Sloc (Match)); - Set_Etype (Actual_Name, Get_Instance_Of (Etype (Formal))); - end; + if Actual in N_Others_Choice_Id + and then Present (Next (Actual)) + then + Error_Msg_N + ("OTHERS must be last association", Actual); end if; + end Check_Box; - Decl_Node := Build_Subprogram_Decl_Wrapper (Formal); + ------------- + -- Default -- + ------------- - -- Transfer aspect specifications from formal subprogram to wrapper + function Default (Un_Formal : Node_Id) return Generic_Actual_Rec is + begin + return Result : Generic_Actual_Rec do + case Nkind (Un_Formal) is + when N_Formal_Object_Declaration => + if Present (Default_Expression (Un_Formal)) then + Result := (Name_Exp, Default_Expression (Un_Formal)); + end if; + when N_Formal_Type_Declaration => + if Present (Default_Subtype_Mark (Un_Formal)) then + Result := (Name_Exp, Default_Subtype_Mark (Un_Formal)); + end if; + when N_Formal_Subprogram_Declaration => + if Present (Default_Name (Un_Formal)) then + pragma Assert (Result.Kind = None); + Result := (Name_Exp, Default_Name (Un_Formal)); + end if; - Set_Aspect_Specifications (Decl_Node, - New_Copy_List_Tree (Aspect_Specifications (Analyzed_Formal))); + if Box_Present (Un_Formal) then + pragma Assert (Result.Kind = None); + Result := (Kind => Box_Subp_Default); + end if; - Aspect_Spec := First (Aspect_Specifications (Decl_Node)); - while Present (Aspect_Spec) loop - Adjust_Aspect_Slocs (Aspect_Spec); - Set_Analyzed (Aspect_Spec, False); - Next (Aspect_Spec); - end loop; + if Present (Expression (Un_Formal)) then + pragma Assert (Result.Kind = None); + Result := (Exp_Func_Default, Expression (Un_Formal)); + end if; - Append_To (Assoc_List, Decl_Node); + if Has_Null_Default (Un_Formal) then + pragma Assert (Result.Kind = None); + Result := (Kind => Null_Default); + end if; - -- Create corresponding body, and append it to association list - -- that appears at the head of the declarations in the instance. - -- The subprogram may be called in the analysis of subsequent - -- actuals. + when N_Formal_Package_Declaration => null; + when others => raise Program_Error; + end case; + pragma Assert + (if Result.Kind in Name_Exp | Exp_Func_Default then + Present (Result.Name_Exp)); + end return; + end Default; - Append_To (Assoc_List, - Build_Subprogram_Body_Wrapper (Formal, Actual_Name)); - end Build_Subprogram_Wrappers; + ---------------------- + -- Match_Positional -- + ---------------------- - ---------------------------------------- - -- Check_Overloaded_Formal_Subprogram -- - ---------------------------------------- + procedure Match_Positional + (Src_Assoc : in out Node_Id; Assoc : in out Assoc_Rec) is + begin + if Nkind (Assoc.Un_Formal) not in + N_Use_Package_Clause | N_Use_Type_Clause + then + pragma Assert (No (Assoc.Explicit_Assoc)); + pragma Assert (Assoc.Actual.Kind = None); + Assoc.Explicit_Assoc := Src_Assoc; - procedure Check_Overloaded_Formal_Subprogram (Formal : Node_Id) is - Temp_Formal : Node_Id; + -- A "<>" without "name =>" is illegal syntax - begin - Temp_Formal := First (Formals); - while Present (Temp_Formal) loop - if Nkind (Temp_Formal) in N_Formal_Subprogram_Declaration - and then Temp_Formal /= Formal - and then - Chars (Defining_Unit_Name (Specification (Formal))) = - Chars (Defining_Unit_Name (Specification (Temp_Formal))) - then - if Present (Found_Assoc) then + if Box_Present (Src_Assoc) then + Assoc.Actual := (Kind => Box_Actual); + if False then -- ??? + -- Disable this for now, because we have various + -- code that needs to be updated. Error_Msg_N - ("named association not allowed for overloaded formal", - Found_Assoc); - Abandon_Instantiation (Instantiation_Node); + ("box requires named notation", Src_Assoc); end if; + else + Assoc.Actual := + (Name_Exp, + Explicit_Generic_Actual_Parameter (Src_Assoc)); + pragma Assert (Present (Assoc.Actual.Name_Exp)); end if; + Assoc.Actual_Origin := From_Explicit_Actual; - Next (Temp_Formal); - end loop; - end Check_Overloaded_Formal_Subprogram; - - ------------------------------- - -- Check_Fixed_Point_Actual -- - ------------------------------- + Next (Src_Assoc); + end if; + end Match_Positional; - procedure Check_Fixed_Point_Actual (Actual : Node_Id) is - Typ : constant Entity_Id := Entity (Actual); - Prims : constant Elist_Id := Collect_Primitive_Operations (Typ); - Elem : Elmt_Id; - Formal : Node_Id; - Op : Entity_Id; + ----------------- + -- Match_Named -- + ----------------- + procedure Match_Named + (Src_Assoc : Node_Id; Assoc : in out Assoc_Rec; + Found : in out Boolean) is begin - -- Locate primitive operations of the type that are arithmetic - -- operations. + if Nkind (Assoc.Un_Formal) not in + N_Use_Package_Clause | N_Use_Type_Clause + and then Chars (Selector_Name (Src_Assoc)) = + Chars (Defining_Entity (Assoc.Un_Formal)) + then + if Found then -- second formal with the same name + pragma Assert (Comes_From_Source (Src_Assoc)); + Error_Msg_N + ("named association not allowed for " & + "overloaded formal", Src_Assoc); + Abandon_Instantiation (Instantiation_Node); + end if; - Elem := First_Elmt (Prims); - while Present (Elem) loop - if Nkind (Node (Elem)) = N_Defining_Operator_Symbol then + if Assoc.Actual.Kind /= None then + if Comes_From_Source (Src_Assoc) then + Error_Msg_NE + ("duplicate actual for &", + Src_Assoc, Selector_Name (Src_Assoc)); + end if; + else + Assoc.Explicit_Assoc := Src_Assoc; + if Box_Present (Src_Assoc) then + Assoc.Actual := (Kind => Box_Actual); - -- Check whether the generic unit has a formal subprogram of - -- the same name. This does not check types but is good enough - -- to justify a warning. + else + if No (Explicit_Generic_Actual_Parameter (Src_Assoc)) then + Assoc.Actual := (Kind => Dummy_Assoc); + else + Assoc.Actual := + (Name_Exp, + Explicit_Generic_Actual_Parameter (Src_Assoc)); + end if; - Formal := First_Non_Pragma (Formals); - Op := Alias (Node (Elem)); + -- Set Entity (etc.) of the selector name: - while Present (Formal) loop - if Nkind (Formal) = N_Formal_Concrete_Subprogram_Declaration - and then Chars (Defining_Entity (Formal)) = - Chars (Node (Elem)) - then - exit; - - elsif Nkind (Formal) = N_Formal_Package_Declaration then - declare - Assoc : Node_Id; - Ent : Entity_Id; + declare + A_F : constant Entity_Id := + Defining_Entity (Assoc.An_Formal); + Orig_F : constant Node_Id := + Original_Node (Assoc.An_Formal); + Sel : constant Node_Id := + Selector_Name (Assoc.Explicit_Assoc); + begin + Set_Entity (Sel, A_F); + Set_Etype (Sel, Etype (A_F)); - begin - -- Locate corresponding actual, and check whether it - -- includes a fixed-point type. + if Nkind (Orig_F) = N_Formal_Package_Declaration then + Generate_Reference (Defining_Identifier (Orig_F), Sel); + -- ???Original_Node makes no sense, but we're + -- preserving the old behavior. + else + Generate_Reference (A_F, Sel); + end if; + end; + end if; - Assoc := First (Assoc_List); - while Present (Assoc) loop - exit when - Nkind (Assoc) = N_Package_Renaming_Declaration - and then Chars (Defining_Unit_Name (Assoc)) = - Chars (Defining_Identifier (Formal)); + Assoc.Actual_Origin := From_Explicit_Actual; + Found := True; + end if; + end if; + end Match_Named; - Next (Assoc); - end loop; + ------------------ + -- Match_Assocs -- + ------------------ - if Present (Assoc) then + function Match_Assocs + (I_Node : Node_Id; Formals : List_Id; F_Copy : List_Id) + return Gen_Assocs_Rec + is + Src_Assocs : constant List_Id := Generic_Associations (I_Node); + Gen_Unit : constant Entity_Id := Defining_Entity (Parent (F_Copy)); + begin + pragma Assert + (Num_An_Formals (F_Copy) = Num_Formals (Formals) + or else Serious_Errors_Detected > 0); - -- If formal package declares a fixed-point type, - -- and the user-defined operator is derived from - -- a generic instance package, the fixed-point type - -- does not use the corresponding predefined op. + return Result : Gen_Assocs_Rec (Num_Assocs => Num_Formals (Formals)) + do + Result.Others_Present := False; - Ent := First_Entity (Entity (Name (Assoc))); - while Present (Ent) loop - if Is_Fixed_Point_Type (Ent) - and then Present (Op) - and then Is_Generic_Instance (Scope (Op)) - then - return; - end if; + -- Loop through the unanalyzed formals: - Next_Entity (Ent); - end loop; - end if; - end; + declare + procedure Set_Formal (F : Node_Id; Index : Assoc_Index); + procedure Set_Formal (F : Node_Id; Index : Assoc_Index) is + Assoc : Assoc_Rec renames Result.Assocs (Index); + begin + if Nkind (F) in N_Use_Package_Clause | N_Use_Type_Clause then + Assoc := + (Un_Formal => F, + An_Formal => Empty, + Explicit_Assoc => Empty, + Actual => (Kind => None_Use_Clause), + Actual_Origin => None); + else + Assoc := + (Un_Formal => F, + An_Formal => Empty, + Explicit_Assoc => Empty, + Actual => <>, + Actual_Origin => None); end if; + end Set_Formal; + procedure Iter is new Formal_Iter (Set_Formal); + begin + Iter (Formals); + end; - Next (Formal); - end loop; + -- Loop through the analyzed copy of the formals: - if No (Formal) then - Error_Msg_Sloc := Sloc (Node (Elem)); - Error_Msg_NE - ("?instance uses predefined, not primitive, operator&#", - Actual, Node (Elem)); - end if; - end if; - - Next_Elmt (Elem); - end loop; - end Check_Fixed_Point_Actual; + declare + procedure Set_An_Formal (F : Node_Id; Index : Assoc_Index); + procedure Set_An_Formal (F : Node_Id; Index : Assoc_Index) is + Assoc : Assoc_Rec renames Result.Assocs (Index); + begin + Assoc.An_Formal := F; + if Nkind (F) in N_Use_Package_Clause | N_Use_Type_Clause then + pragma Assert + (Nkind (Assoc.Un_Formal) = Nkind (Assoc.An_Formal)); - ------------------------------- - -- Has_Fully_Defined_Profile -- - ------------------------------- + else + case Nkind (Assoc.Un_Formal) is + when N_Formal_Object_Declaration + | N_Formal_Subprogram_Declaration + => + pragma Assert + (Nkind (Assoc.Un_Formal) = + Nkind (Assoc.An_Formal)); + + when N_Formal_Type_Declaration => + pragma Assert + (Nkind (Original_Node (Assoc.An_Formal)) = + N_Formal_Type_Declaration); + pragma Assert + (Nkind (Assoc.An_Formal) in + N_Formal_Type_Declaration + | N_Full_Type_Declaration + | N_Private_Type_Declaration + | N_Private_Extension_Declaration + | N_Subtype_Declaration); + + when N_Formal_Package_Declaration => + pragma Assert + (Nkind (Original_Node (Assoc.An_Formal)) = + N_Formal_Package_Declaration); + pragma Assert + (Nkind (Assoc.An_Formal) = N_Package_Declaration); + + when others => pragma Assert (False); + end case; + + pragma Assert + (Chars (Defining_Entity (Assoc.Un_Formal)) = + Chars (Defining_Entity (Assoc.An_Formal))); + end if; + end Set_An_Formal; - function Has_Fully_Defined_Profile (Subp : Entity_Id) return Boolean is - function Is_Fully_Defined_Type (Typ : Entity_Id) return Boolean; - -- Determine whethet type Typ is fully defined + procedure Iter is new An_Formal_Iter (Set_An_Formal); + begin + pragma Assert + (Num_An_Formals (F_Copy) = Result.Assocs'Last + or else Serious_Errors_Detected > 0); + Iter (F_Copy); + end; - --------------------------- - -- Is_Fully_Defined_Type -- - --------------------------- + -- Loop through actual source associations: - function Is_Fully_Defined_Type (Typ : Entity_Id) return Boolean is - begin - -- A private type without a full view is not fully defined + declare + Src_Assoc : Node_Id := First (Src_Assocs); + -- Generic association from the source + + function Positional return Boolean is + (Present (Src_Assoc) + and then Src_Assoc not in N_Others_Choice_Id + and then No (Selector_Name (Src_Assoc))); + -- True if Src_Assoc is position; i.e. not named and not others + begin + -- Loop through positional actuals: - if Is_Private_Type (Typ) - and then No (Full_View (Typ)) - then - return False; + for Index in Result.Assocs'Range loop + exit when not Positional; + Match_Positional (Src_Assoc, Result.Assocs (Index)); + end loop; - -- An incomplete type is never fully defined + if Positional then + Error_Msg_Sloc := Sloc (Gen_Unit); + Error_Msg_NE + ("unmatched actual in instantiation of & declared#", + Src_Assoc, Gen_Unit); + else + -- Loop through named actuals and "others => <>": - elsif Is_Incomplete_Type (Typ) then - return False; + while Present (Src_Assoc) loop + Check_Box (I_Node, Src_Assoc); + if Src_Assoc in N_Others_Choice_Id then + Result.Others_Present := True; + exit; + end if; - -- All other types are fully defined + if Positional then + Error_Msg_N + ("invalid positional actual after named one", + Src_Assoc); + else + -- For actual "X => ...", find formal whose name is X. + -- Complain if X has already been specified (could be + -- by a positional association, or by a previous named + -- one). Also complain if there's more than one X. + -- See RM-12.3(9/3) and 12.7(4.1/3). + -- However, this rule does not apply to generated + -- code,because for nested instances, we routinely + -- generate things like: + -- X => ..., X => ... + -- where the first one refers to the first formal X, + -- and the second one refers to the second formal X, + -- and so on. (The X's are formal subprograms in this + -- case.) + + declare + Found : Boolean := False; + begin + for Index in Result.Assocs'Range loop + Match_Named + (Src_Assoc, Result.Assocs (Index), Found); + exit when Found + and then not Comes_From_Source (Src_Assoc); + end loop; - else - return True; - end if; - end Is_Fully_Defined_Type; + if not Found and then Comes_From_Source (Src_Assoc) + then + Error_Msg_Sloc := Sloc (Gen_Unit); + Error_Msg_NE + ("unmatched actual &", + Src_Assoc, Selector_Name (Src_Assoc)); + Error_Msg_NE + ("\in instantiation of & declared#", + Src_Assoc, Gen_Unit); + end if; + end; + end if; - -- Local declarations + Next (Src_Assoc); + end loop; + end if; + end; - Param : Entity_Id; + -- Fill in defaults. For each formal F with no associated actual, + -- if there is "others => <>", set the actual to "F => <>". + -- Otherwise, if the formal has a default, set the actual to + -- "F => default". Otherwise leave it Empty. - -- Start of processing for Has_Fully_Defined_Profile + for Index in Result.Assocs'Range loop + declare + Assoc : Assoc_Rec renames Result.Assocs (Index); + begin + if Assoc.Actual.Kind = None then + pragma Assert (No (Assoc.Explicit_Assoc)); + if Result.Others_Present then + Assoc.Actual := (Kind => Box_Actual); + Assoc.Actual_Origin := From_Others_Box; + else + Assoc.Actual := Default (Assoc.Un_Formal); + if Assoc.Actual.Kind /= None then + Assoc.Actual_Origin := From_Default; + end if; + end if; + end if; + end; + end loop; - begin - -- Check the parameters + -- Check for missing actuals - Param := First_Formal (Subp); - while Present (Param) loop - if not Is_Fully_Defined_Type (Etype (Param)) then - return False; - end if; + for Index in Result.Assocs'Range loop + if Result.Assocs (Index).Actual.Kind = None then + Error_Msg_Sloc := Sloc (Gen_Unit); + Error_Msg_NE + ("missing actual &", + Instantiation_Node, + Defining_Entity (Result.Assocs (Index).Un_Formal)); + Error_Msg_NE + ("\in instantiation of & declared#", + Instantiation_Node, Gen_Unit); + Abandon_Instantiation (Instantiation_Node); + end if; + end loop; + end return; + end Match_Assocs; - Next_Formal (Param); - end loop; + end Associations; - -- Check the return type + --------------------------- + -- Abandon_Instantiation -- + --------------------------- - return Is_Fully_Defined_Type (Etype (Subp)); - end Has_Fully_Defined_Profile; + procedure Abandon_Instantiation (N : Node_Id) is + begin + Error_Msg_N ("\instantiation abandoned!", N); + raise Instantiation_Error; + end Abandon_Instantiation; - --------------------- - -- Matching_Actual -- - --------------------- + ---------------------------------- + -- Adjust_Inherited_Pragma_Sloc -- + ---------------------------------- - function Matching_Actual - (F : Entity_Id; - A_F : Entity_Id) return Node_Id - is - Prev : Node_Id; - Act : Node_Id; + procedure Adjust_Inherited_Pragma_Sloc (N : Node_Id) is + begin + Adjust_Instantiation_Sloc (N, S_Adjustment); + end Adjust_Inherited_Pragma_Sloc; - begin - Is_Named_Assoc := False; + -------------------------- + -- Analyze_Associations -- + -------------------------- - -- End of list of purely positional parameters + function Analyze_Associations + (I_Node : Node_Id; + Formals : List_Id; + F_Copy : List_Id) return List_Id + is + use Associations; - if No (Actual) or else Nkind (Actual) = N_Others_Choice then - Found_Assoc := Empty; - Act := Empty; + Result_Renamings : constant List_Id := New_List; + -- To be returned. Includes "renamings" broadly interpreted + -- (e.g. subtypes are used for types). - -- Case of positional parameter corresponding to current formal + Actuals_To_Freeze : constant Elist_Id := New_Elmt_List; + Default_Actuals : constant List_Id := New_List; - elsif No (Selector_Name (Actual)) then - -- A "<>" without "name =>" is illegal syntax + Gen_Assocs : constant Gen_Assocs_Rec := + Match_Assocs (I_Node, Formals, F_Copy); - if Box_Present (Actual) then - if False then -- ??? - -- Disable this for now, because we have various code that - -- needs to be updated. - Error_Msg_N ("box requires named notation", Actual); - end if; + begin + for Matching_Actual_Index in Gen_Assocs.Assocs'Range loop + declare + Assoc : Assoc_Rec renames + Gen_Assocs.Assocs (Matching_Actual_Index); + begin + if Nkind (Assoc.Un_Formal) = N_Formal_Package_Declaration + and then Error_Posted (Assoc.An_Formal) + then + -- Restrict this to N_Formal_Package_Declaration, + -- because otherwise many test diffs (and maybe + -- many missing errors). + Abandon_Instantiation (Instantiation_Node); end if; - Found_Assoc := Actual; - Act := Explicit_Generic_Actual_Parameter (Actual); - Num_Matched := Num_Matched + 1; - Next (Actual); + if Nkind (Assoc.Un_Formal) in + N_Use_Package_Clause | N_Use_Type_Clause + then + -- Copy the use clause to where it belongs: + Append (New_Copy_Tree (Assoc.Un_Formal), Result_Renamings); - -- Otherwise scan list of named actuals to find the one with the - -- desired name. All remaining actuals have explicit names. + else + Analyze_One_Association + (I_Node, Assoc, + Result_Renamings, Default_Actuals, Actuals_To_Freeze); + end if; + end; + end loop; - else - Is_Named_Assoc := True; - Found_Assoc := Empty; - Act := Empty; - Prev := Empty; - - while Present (Actual) loop - if Nkind (Actual) = N_Others_Choice then - Found_Assoc := Empty; - Act := Empty; - - elsif Chars (Selector_Name (Actual)) = Chars (F) then - Set_Entity (Selector_Name (Actual), A_F); - Set_Etype (Selector_Name (Actual), Etype (A_F)); - Generate_Reference (A_F, Selector_Name (Actual)); - - Found_Assoc := Actual; - Act := Explicit_Generic_Actual_Parameter (Actual); - Num_Matched := Num_Matched + 1; - exit; - end if; + -- An instantiation freezes all generic actuals, except for incomplete + -- types and subprograms that are not fully defined at the point of + -- instantiation. - Prev := Actual; - Next (Actual); - end loop; + declare + Elmt : Elmt_Id := First_Elmt (Actuals_To_Freeze); + begin + while Present (Elmt) loop + Freeze_Before (I_Node, Node (Elmt)); + Next_Elmt (Elmt); + end loop; + end; - -- Reset for subsequent searches. In most cases the named - -- associations are in order. If they are not, we reorder them - -- to avoid scanning twice the same actual. This is not just a - -- question of efficiency: there may be multiple defaults with - -- boxes that have the same name. In a nested instantiation we - -- insert actuals for those defaults, and cannot rely on their - -- names to disambiguate them. + -- If there are defaults, normalize the tree by adding explicit + -- associations for them. This is required if the instance appears + -- within a generic. - if Actual = First_Named then - Next (First_Named); + if not Is_Empty_List (Default_Actuals) then + declare + Default : Node_Id; - elsif Present (Actual) then - Insert_Before (First_Named, Remove_Next (Prev)); + begin + Default := First (Default_Actuals); + while Present (Default) loop + Mark_Rewrite_Insertion (Default); + Next (Default); + end loop; + + if No (Generic_Associations (I_Node)) then + Set_Generic_Associations (I_Node, Default_Actuals); + else + Append_List_To (Generic_Associations (I_Node), Default_Actuals); end if; + end; + end if; - Actual := First_Named; - end if; + Check_Fixed_Point_Warning (Gen_Assocs, Result_Renamings); - if Is_Entity_Name (Act) and then Present (Entity (Act)) then - Set_Used_As_Generic_Actual (Entity (Act)); - end if; + return Result_Renamings; + end Analyze_Associations; - return Act; - end Matching_Actual; + ----------------------------- + -- Analyze_One_Association -- + ----------------------------- - ------------------------------ - -- Partial_Parameterization -- - ------------------------------ + procedure Analyze_One_Association + (I_Node : Node_Id; + Assoc : Associations.Assoc_Rec; + -- Logical 'in out' parameters: + Result_Renamings : List_Id; + Default_Actuals : List_Id; + Actuals_To_Freeze : Elist_Id) + is + use Associations; - function Partial_Parameterization return Boolean is - begin - return Others_Present - or else (Present (Found_Assoc) and then Box_Present (Found_Assoc)); - end Partial_Parameterization; + procedure Process_Box_Actual (Formal : Node_Id); + -- Called for "Formal => <>", and also if "Formal => ..." is missing, + -- but there is "others => <>". Add a copy of the declaration of the + -- generic formal to the Result_Renamings. --------------------- - -- Process_Default -- + -- Process_Box_Actual -- --------------------- - procedure Process_Default (Formal : Node_Id) is - Loc : constant Source_Ptr := Sloc (I_Node); - F_Id : constant Entity_Id := Defining_Entity (Formal); - Decl : Node_Id; - Default : Node_Id; - Id : Entity_Id; - + procedure Process_Box_Actual (Formal : Node_Id) is + pragma Assert (Assoc.Actual.Kind = Box_Actual); + F_Id : constant Entity_Id := Defining_Entity (Formal); + Decl : constant Node_Id := New_Copy_Tree (Formal); + Id : constant Entity_Id := + Make_Defining_Identifier (Sloc (F_Id), Chars (F_Id)); begin - -- Append copy of formal declaration to associations, and create new - -- defining identifier for it. - - Decl := New_Copy_Tree (Formal); - Id := Make_Defining_Identifier (Sloc (F_Id), Chars (F_Id)); - if Nkind (Formal) in N_Formal_Subprogram_Declaration then Set_Defining_Unit_Name (Specification (Decl), Id); @@ -1595,722 +1999,403 @@ package body Sem_Ch12 is Set_Defining_Identifier (Decl, Id); end if; - Append (Decl, Assoc_List); - - if No (Found_Assoc) then -- i.e. 'others' - Default := - Make_Generic_Association (Loc, - Selector_Name => - New_Occurrence_Of (Id, Loc), - Explicit_Generic_Actual_Parameter => Empty); - Set_Box_Present (Default); - Append (Default, Default_Formals); - end if; - end Process_Default; - - --------------------------------- - -- Renames_Standard_Subprogram -- - --------------------------------- - - function Renames_Standard_Subprogram (Subp : Entity_Id) return Boolean is - Id : Entity_Id; - - begin - Id := Alias (Subp); - while Present (Id) loop - if Scope (Id) = Standard_Standard then - return True; - end if; - - Id := Alias (Id); - end loop; - - return False; - end Renames_Standard_Subprogram; - - ------------------------- - -- Set_Analyzed_Formal -- - ------------------------- - - procedure Set_Analyzed_Formal is - Kind : Node_Kind; - - begin - while Present (Analyzed_Formal) loop - Kind := Nkind (Analyzed_Formal); - - case Nkind (Formal) is - when N_Formal_Subprogram_Declaration => - exit when Kind in N_Formal_Subprogram_Declaration - and then - Chars - (Defining_Unit_Name (Specification (Formal))) = - Chars - (Defining_Unit_Name (Specification (Analyzed_Formal))); - - when N_Formal_Package_Declaration => - exit when Kind in N_Formal_Package_Declaration - | N_Generic_Package_Declaration - | N_Package_Declaration; - - when N_Use_Package_Clause - | N_Use_Type_Clause - => - exit; - - when others => + Append (Decl, Result_Renamings); + end Process_Box_Actual; - -- Skip freeze nodes, and nodes inserted to replace - -- unrecognized pragmas. - - exit when - Kind not in N_Formal_Subprogram_Declaration - and then Kind not in N_Subprogram_Declaration - | N_Freeze_Entity - | N_Null_Statement - | N_Itype_Reference - and then Chars (Defining_Identifier (Formal)) = - Chars (Defining_Identifier (Analyzed_Formal)); - end case; - - Next (Analyzed_Formal); - end loop; - end Set_Analyzed_Formal; + Match : Node_Id; - -- Start of processing for Analyze_Associations + -- Start of processing for Analyze_One_Association begin - Actuals := Generic_Associations (I_Node); - - if Present (Actuals) then - - -- Check for an Others choice, indicating a partial parameterization - -- for a formal package. - - Actual := First (Actuals); - while Present (Actual) loop - if Nkind (Actual) = N_Others_Choice then - Others_Present := True; + if Assoc.Actual_Origin = From_Explicit_Actual + and then Assoc.Actual.Kind = Name_Exp + then + Match := Assoc.Actual.Name_Exp; - if Present (Next (Actual)) then - Error_Msg_N ("OTHERS must be last association", Actual); - end if; + if Is_Entity_Name (Match) and then Present (Entity (Match)) then + Set_Used_As_Generic_Actual (Entity (Match)); + end if; + else + Match := Empty; + end if; - -- This subprogram is used both for formal packages and for - -- instantiations. For the latter, associations must all be - -- explicit. + case Nkind (Assoc.Un_Formal) is + when N_Formal_Object_Declaration => + if Assoc.Actual.Kind = Box_Actual then + Process_Box_Actual (Assoc.Un_Formal); - if Nkind (I_Node) /= N_Formal_Package_Declaration - and then Comes_From_Source (I_Node) - then - Error_Msg_N - ("OTHERS association not allowed in an instance", - Actual); + else + Append_List + (Instantiate_Object (Assoc.Un_Formal, Match, Assoc.An_Formal), + Result_Renamings); + + -- GNATprove: For a defaulted in-mode parameter, create + -- an entry in the list of defaulted actuals, for + -- GNATprove use. Do not include these defaults for an + -- instance nested within a generic, because the defaults + -- are also used in the analysis of the enclosing + -- generic, and only defaulted subprograms are relevant + -- there. + + if No (Match) and then not Inside_A_Generic then + Append_To (Default_Actuals, + Make_Generic_Association (Sloc (I_Node), + Selector_Name => + New_Occurrence_Of + (Defining_Identifier + (Assoc.Un_Formal), Sloc (I_Node)), + Explicit_Generic_Actual_Parameter => + New_Copy_Tree (Default_Expression (Assoc.Un_Formal)))); end if; + end if; - -- In any case, nothing to do after the others association - - exit; + -- If the object is a call to an expression function, this + -- is a freezing point for it. - elsif Box_Present (Actual) - and then Comes_From_Source (I_Node) - and then Nkind (I_Node) /= N_Formal_Package_Declaration + if Is_Entity_Name (Match) + and then Present (Entity (Match)) + and then Nkind + (Original_Node (Unit_Declaration_Node (Entity (Match)))) + = N_Expression_Function then - Error_Msg_N - ("box association not allowed in an instance", Actual); + Append_Elmt (Entity (Match), Actuals_To_Freeze); end if; - Next (Actual); - end loop; - - -- If named associations are present, save first named association - -- (it may of course be Empty) to facilitate subsequent name search. - - First_Named := First (Actuals); - while Present (First_Named) - and then Nkind (First_Named) /= N_Others_Choice - and then No (Selector_Name (First_Named)) - loop - Num_Actuals := Num_Actuals + 1; - Next (First_Named); - end loop; - end if; - - Named := First_Named; - while Present (Named) loop - if Nkind (Named) /= N_Others_Choice - and then No (Selector_Name (Named)) - then - Error_Msg_N ("invalid positional actual after named one", Named); - Abandon_Instantiation (Named); - end if; - - -- A named association may lack an actual parameter, if it was - -- introduced for a default subprogram that turns out to be local - -- to the outer instantiation. If it has a box association it must - -- correspond to some formal in the generic. - - if Nkind (Named) /= N_Others_Choice - and then (Present (Explicit_Generic_Actual_Parameter (Named)) - or else Box_Present (Named)) - then - Num_Actuals := Num_Actuals + 1; - end if; - - Next (Named); - end loop; - - if Present (Formals) then - Formal := First_Non_Pragma (Formals); - Analyzed_Formal := First_Non_Pragma (F_Copy); - - if Present (Actuals) then - Actual := First (Actuals); - - -- All formals should have default values - - else - Actual := Empty; - end if; - - while Present (Formal) loop - Set_Analyzed_Formal; - Saved_Formal := Next_Non_Pragma (Formal); - - case Nkind (Formal) is - when N_Formal_Object_Declaration => - Match := - Matching_Actual - (Defining_Identifier (Formal), - Defining_Identifier (Analyzed_Formal)); - - if No (Match) and then Partial_Parameterization then - Process_Default (Formal); - - else - Append_List - (Instantiate_Object (Formal, Match, Analyzed_Formal), - Assoc_List); - - -- For a defaulted in_parameter, create an entry in the - -- the list of defaulted actuals, for GNATprove use. Do - -- not included these defaults for an instance nested - -- within a generic, because the defaults are also used - -- in the analysis of the enclosing generic, and only - -- defaulted subprograms are relevant there. - - if No (Match) and then not Inside_A_Generic then - Append_To (Default_Actuals, - Make_Generic_Association (Sloc (I_Node), - Selector_Name => - New_Occurrence_Of - (Defining_Identifier (Formal), Sloc (I_Node)), - Explicit_Generic_Actual_Parameter => - New_Copy_Tree (Default_Expression (Formal)))); - end if; - end if; - - -- If the object is a call to an expression function, this - -- is a freezing point for it. - - if Is_Entity_Name (Match) - and then Present (Entity (Match)) - and then Nkind - (Original_Node (Unit_Declaration_Node (Entity (Match)))) - = N_Expression_Function - then - Append_Elmt (Entity (Match), Actuals_To_Freeze); - end if; - - when N_Formal_Type_Declaration => - Match := - Matching_Actual - (Defining_Identifier (Formal), - Defining_Identifier (Analyzed_Formal)); - - if No (Match) then - if Partial_Parameterization then - Process_Default (Formal); - - elsif Present (Default_Subtype_Mark (Formal)) then - Match := New_Copy (Default_Subtype_Mark (Formal)); - Append_List - (Instantiate_Type - (Formal, Match, Analyzed_Formal, Assoc_List), - Assoc_List); - Append_Elmt (Entity (Match), Actuals_To_Freeze); - - else - Error_Msg_Sloc := Sloc (Gen_Unit); - Error_Msg_NE - ("missing actual&", - Instantiation_Node, Defining_Identifier (Formal)); - Error_Msg_NE - ("\in instantiation of & declared#", - Instantiation_Node, Gen_Unit); - Abandon_Instantiation (Instantiation_Node); - end if; - - else - Analyze (Match); - Append_List - (Instantiate_Type - (Formal, Match, Analyzed_Formal, Assoc_List), - Assoc_List); - - -- Warn when an actual is a fixed-point with user- - -- defined promitives. The warning is superfluous - -- if the formal is private, because there can be - -- no arithmetic operations in the generic so there - -- no danger of confusion. - - if Is_Fixed_Point_Type (Entity (Match)) - and then not Is_Private_Type - (Defining_Identifier (Analyzed_Formal)) - then - Check_Fixed_Point_Actual (Match); - end if; - - -- An instantiation is a freeze point for the actuals, - -- unless this is a rewritten formal package, or the - -- formal is an Ada 2012 formal incomplete type. + when N_Formal_Type_Declaration => + if Assoc.Actual.Kind = Box_Actual then + Process_Box_Actual (Assoc.Un_Formal); + + elsif No (Match) then + if Present (Default_Subtype_Mark (Assoc.Un_Formal)) then + Match := New_Copy (Default_Subtype_Mark (Assoc.Un_Formal)); + Append_List + (Instantiate_Type + (Assoc.Un_Formal, Match, Assoc.An_Formal, + Result_Renamings), + Result_Renamings); + Append_Elmt (Entity (Match), Actuals_To_Freeze); + end if; - if Nkind (I_Node) = N_Formal_Package_Declaration - or else - (Ada_Version >= Ada_2012 - and then - Ekind (Defining_Identifier (Analyzed_Formal)) = - E_Incomplete_Type) - then - null; + else + Analyze (Match); + Append_List + (Instantiate_Type + (Assoc.Un_Formal, Match, Assoc.An_Formal, + Result_Renamings), + Result_Renamings); + + -- An instantiation is a freeze point for the actuals, + -- unless this is a rewritten formal package, or the + -- formal is an Ada 2012 formal incomplete type. + + if Nkind (I_Node) = N_Formal_Package_Declaration + or else + (Ada_Version >= Ada_2012 + and then + Ekind (Defining_Identifier (Assoc.An_Formal)) = + E_Incomplete_Type) + then + null; - else - Append_Elmt (Entity (Match), Actuals_To_Freeze); - end if; - end if; + else + Append_Elmt (Entity (Match), Actuals_To_Freeze); + end if; + end if; - -- A remote access-to-class-wide type is not a legal actual - -- for a generic formal of an access type (E.2.2(17/2)). - -- In GNAT an exception to this rule is introduced when - -- the formal is marked as remote using implementation - -- defined aspect/pragma Remote_Access_Type. In that case - -- the actual must be remote as well. + -- A remote access-to-class-wide type is not a legal actual + -- for a generic formal of an access type (E.2.2(17/2)). + -- In GNAT an exception to this rule is introduced when + -- the formal is marked as remote using implementation + -- defined aspect/pragma Remote_Access_Type. In that case + -- the actual must be remote as well. - -- If the current instantiation is the construction of a - -- local copy for a formal package the actuals may be - -- defaulted, and there is no matching actual to check. + -- If the current instantiation is the construction of a + -- local copy for a formal package the actuals may be + -- defaulted, and there is no matching actual to check. - if Nkind (Analyzed_Formal) = N_Formal_Type_Declaration - and then - Nkind (Formal_Type_Definition (Analyzed_Formal)) = - N_Access_To_Object_Definition - and then Present (Match) + if Nkind (Assoc.An_Formal) = N_Formal_Type_Declaration + and then + Nkind (Formal_Type_Definition (Assoc.An_Formal)) = + N_Access_To_Object_Definition + and then Present (Match) + then + declare + Formal_Ent : constant Entity_Id := + Defining_Identifier (Assoc.An_Formal); + begin + if Is_Remote_Access_To_Class_Wide_Type (Entity (Match)) + = Is_Remote_Types (Formal_Ent) then - declare - Formal_Ent : constant Entity_Id := - Defining_Identifier (Analyzed_Formal); - begin - if Is_Remote_Access_To_Class_Wide_Type (Entity (Match)) - = Is_Remote_Types (Formal_Ent) - then - -- Remoteness of formal and actual match + -- Remoteness of formal and actual match - null; - - elsif Is_Remote_Types (Formal_Ent) then - - -- Remote formal, non-remote actual - - Error_Msg_NE - ("actual for& must be remote", Match, Formal_Ent); - - else - -- Non-remote formal, remote actual - - Error_Msg_NE - ("actual for& may not be remote", - Match, Formal_Ent); - end if; - end; - end if; - - when N_Formal_Subprogram_Declaration => - Match := - Matching_Actual - (Defining_Unit_Name (Specification (Formal)), - Defining_Unit_Name (Specification (Analyzed_Formal))); - - -- If the formal subprogram has the same name as another - -- formal subprogram of the generic, then a named - -- association is illegal (12.3(9)). Exclude named - -- associations that are generated for a nested instance. - - if Present (Match) - and then Is_Named_Assoc - and then Comes_From_Source (Found_Assoc) - then - Check_Overloaded_Formal_Subprogram (Formal); - end if; + null; - -- If there is no corresponding actual, this may be case - -- of partial parameterization, or else the formal has a - -- default or a box. + elsif Is_Remote_Types (Formal_Ent) then - if No (Match) and then Partial_Parameterization then - Process_Default (Formal); + -- Remote formal, non-remote actual - if Nkind (I_Node) = N_Formal_Package_Declaration then - Check_Overloaded_Formal_Subprogram (Formal); - end if; + Error_Msg_NE + ("actual for& must be remote", Match, Formal_Ent); else - Append_To (Assoc_List, - Instantiate_Formal_Subprogram - (Formal, Match, Analyzed_Formal)); - - -- If formal subprogram has contracts, create wrappers - -- for it. This is an expansion activity that cannot - -- take place e.g. within an enclosing generic unit. - - if Has_Contracts (Analyzed_Formal) - and then (Expander_Active or GNATprove_Mode) - then - Build_Subprogram_Wrappers; - end if; - - -- An instantiation is a freeze point for the actuals, - -- unless this is a rewritten formal package. + -- Non-remote formal, remote actual - if Nkind (I_Node) /= N_Formal_Package_Declaration - and then Nkind (Match) = N_Identifier - and then Is_Subprogram (Entity (Match)) - - -- The actual subprogram may rename a routine defined - -- in Standard. Avoid freezing such renamings because - -- subprograms coming from Standard cannot be frozen. - - and then - not Renames_Standard_Subprogram (Entity (Match)) - - -- If the actual subprogram comes from a different - -- unit, it is already frozen, either by a body in - -- that unit or by the end of the declarative part - -- of the unit. This check avoids the freezing of - -- subprograms defined in Standard which are used - -- as generic actuals. - - and then In_Same_Code_Unit (Entity (Match), I_Node) - and then Has_Fully_Defined_Profile (Entity (Match)) - then - -- Mark the subprogram as having a delayed freeze - -- since this may be an out-of-order action. - - Set_Has_Delayed_Freeze (Entity (Match)); - Append_Elmt (Entity (Match), Actuals_To_Freeze); - end if; + Error_Msg_NE + ("actual for& may not be remote", + Match, Formal_Ent); end if; + end; + end if; - -- If this is a nested generic, preserve default for later - -- instantiations. We do this as well for GNATprove use, - -- so that the list of generic associations is complete. + when N_Formal_Subprogram_Declaration => + -- If there is no corresponding actual, this may be case + -- of partial parameterization, or else the formal has a + -- default or a box. - if No (Match) and then Box_Present (Formal) then - declare - Subp : constant Entity_Id := - Defining_Unit_Name - (Specification (Last (Assoc_List))); + if Assoc.Actual.Kind = Box_Actual then + Process_Box_Actual (Assoc.Un_Formal); - begin - Append_To (Default_Actuals, - Make_Generic_Association (Sloc (I_Node), - Selector_Name => - New_Occurrence_Of (Subp, Sloc (I_Node)), - Explicit_Generic_Actual_Parameter => - New_Occurrence_Of (Subp, Sloc (I_Node)))); - end; - end if; - - when N_Formal_Package_Declaration => - -- The name of the formal package may be hidden by the - -- formal parameter itself. + else + Append_To (Result_Renamings, + Instantiate_Formal_Subprogram + (Assoc.Un_Formal, Match, Assoc.An_Formal)); - if Error_Posted (Analyzed_Formal) then - Abandon_Instantiation (Instantiation_Node); + -- If formal subprogram has contracts, create wrappers + -- for it. This is an expansion activity that cannot + -- take place e.g. within an enclosing generic unit. - else - Match := - Matching_Actual - (Defining_Identifier (Formal), - Defining_Identifier - (Original_Node (Analyzed_Formal))); - end if; + if Has_Contracts (Assoc.An_Formal) + and then (Expander_Active or GNATprove_Mode) + then + Build_Subprogram_Wrappers + (Match, Assoc.An_Formal, Result_Renamings); + end if; - if No (Match) then - if Partial_Parameterization then - Process_Default (Formal); + -- An instantiation is a freeze point for the actuals, + -- unless this is a rewritten formal package. - else - Error_Msg_Sloc := Sloc (Gen_Unit); - Error_Msg_NE - ("missing actual&", - Instantiation_Node, Defining_Identifier (Formal)); - Error_Msg_NE - ("\in instantiation of & declared#", - Instantiation_Node, Gen_Unit); + if Nkind (I_Node) /= N_Formal_Package_Declaration + and then Nkind (Match) = N_Identifier + and then Is_Subprogram (Entity (Match)) - Abandon_Instantiation (Instantiation_Node); - end if; + -- The actual subprogram may rename a routine defined + -- in Standard. Avoid freezing such renamings because + -- subprograms coming from Standard cannot be frozen. - else - Analyze (Match); - Append_List - (Instantiate_Formal_Package - (Formal, Match, Analyzed_Formal), - Assoc_List); - - -- Determine whether the actual package needs an explicit - -- freeze node. This is only the case if the actual is - -- declared in the same unit and has a body. Normally - -- packages do not have explicit freeze nodes, and gigi - -- only uses them to elaborate entities in a package - -- body. - - Explicit_Freeze_Check : declare - Actual : constant Entity_Id := Entity (Match); - Gen_Par : Entity_Id; - - Needs_Freezing : Boolean; - P : Node_Id; - - procedure Check_Generic_Parent; - -- The actual may be an instantiation of a unit - -- declared in a previous instantiation. If that - -- one is also in the current compilation, it must - -- itself be frozen before the actual. The actual - -- may be an instantiation of a generic child unit, - -- in which case the same applies to the instance - -- of the parent which must be frozen before the - -- actual. - -- Should this itself be recursive ??? - - -------------------------- - -- Check_Generic_Parent -- - -------------------------- - - procedure Check_Generic_Parent is - Inst : constant Node_Id := - Get_Unit_Instantiation_Node (Actual); - Par : Entity_Id; + and then + not Renames_Standard_Subprogram (Entity (Match)) - begin - Par := Empty; + -- If the actual subprogram comes from a different + -- unit, it is already frozen, either by a body in + -- that unit or by the end of the declarative part + -- of the unit. This check avoids the freezing of + -- subprograms defined in Standard which are used + -- as generic actuals. - if Nkind (Parent (Actual)) = N_Package_Specification - then - Par := Scope (Generic_Parent (Parent (Actual))); - - if Is_Generic_Instance (Par) then - null; - - -- If the actual is a child generic unit, check - -- whether the instantiation of the parent is - -- also local and must also be frozen now. We - -- must retrieve the instance node to locate the - -- parent instance if any. - - elsif Ekind (Par) = E_Generic_Package - and then Is_Child_Unit (Gen_Par) - and then Ekind (Scope (Gen_Par)) = - E_Generic_Package - then - if Nkind (Inst) = N_Package_Instantiation - and then Nkind (Name (Inst)) = - N_Expanded_Name - then - -- Retrieve entity of parent instance + and then In_Same_Code_Unit (Entity (Match), I_Node) + and then Has_Fully_Defined_Profile (Entity (Match)) + then + -- Mark the subprogram as having a delayed freeze + -- since this may be an out-of-order action. - Par := Entity (Prefix (Name (Inst))); - end if; + Set_Has_Delayed_Freeze (Entity (Match)); + Append_Elmt (Entity (Match), Actuals_To_Freeze); + end if; + end if; - else - Par := Empty; - end if; - end if; + -- If this is a nested generic, preserve default for later + -- instantiations. We do this as well for GNATprove use, + -- so that the list of generic associations is complete. - if Present (Par) - and then Is_Generic_Instance (Par) - and then Scope (Par) = Current_Scope - and then - (No (Freeze_Node (Par)) - or else - not Is_List_Member (Freeze_Node (Par))) - then - Set_Has_Delayed_Freeze (Par); - Append_Elmt (Par, Actuals_To_Freeze); - end if; - end Check_Generic_Parent; + if No (Match) and then Box_Present (Assoc.Un_Formal) then + declare + Subp : constant Entity_Id := + Defining_Unit_Name + (Specification (Last (Result_Renamings))); - -- Start of processing for Explicit_Freeze_Check + begin + Append_To (Default_Actuals, + Make_Generic_Association (Sloc (I_Node), + Selector_Name => + New_Occurrence_Of (Subp, Sloc (I_Node)), + Explicit_Generic_Actual_Parameter => + New_Occurrence_Of (Subp, Sloc (I_Node)))); + end; + end if; - begin - if Present (Renamed_Entity (Actual)) then - Gen_Par := - Generic_Parent (Specification - (Unit_Declaration_Node - (Renamed_Entity (Actual)))); - else - Gen_Par := - Generic_Parent (Specification - (Unit_Declaration_Node (Actual))); - end if; + when N_Formal_Package_Declaration => + if Assoc.Actual.Kind = Box_Actual then + Process_Box_Actual (Assoc.Un_Formal); - if not Expander_Active - or else not Has_Completion (Actual) - or else not In_Same_Source_Unit (I_Node, Actual) - or else Is_Frozen (Actual) - or else - (Present (Renamed_Entity (Actual)) - and then - not In_Same_Source_Unit - (I_Node, (Renamed_Entity (Actual)))) - then - null; + else + Analyze (Match); + Append_List + (Instantiate_Formal_Package + (Assoc.Un_Formal, Match, Assoc.An_Formal), + Result_Renamings); + + -- Determine whether the actual package needs an explicit + -- freeze node. This is only the case if the actual is + -- declared in the same unit and has a body. Normally + -- packages do not have explicit freeze nodes, and gigi + -- only uses them to elaborate entities in a package + -- body. + + Explicit_Freeze_Check : declare + Actual : constant Entity_Id := Entity (Match); + Gen_Par : Entity_Id; + + Needs_Freezing : Boolean; + P : Node_Id; + + procedure Check_Generic_Parent; + -- The actual may be an instantiation of a unit + -- declared in a previous instantiation. If that + -- one is also in the current compilation, it must + -- itself be frozen before the actual. The actual + -- may be an instantiation of a generic child unit, + -- in which case the same applies to the instance + -- of the parent which must be frozen before the + -- actual. + -- Should this itself be recursive ??? + + -------------------------- + -- Check_Generic_Parent -- + -------------------------- + + procedure Check_Generic_Parent is + Inst : constant Node_Id := + Get_Unit_Instantiation_Node (Actual); + Par : Entity_Id; - else - -- Finally we want to exclude such freeze nodes - -- from statement sequences, which freeze - -- everything before them. - -- Is this strictly necessary ??? - - Needs_Freezing := True; - - P := Parent (I_Node); - while Nkind (P) /= N_Compilation_Unit loop - if Nkind (P) = N_Handled_Sequence_Of_Statements - then - Needs_Freezing := False; - exit; - end if; + begin + Par := Empty; - P := Parent (P); - end loop; + if Nkind (Parent (Actual)) = N_Package_Specification + then + Par := Scope (Generic_Parent (Parent (Actual))); - if Needs_Freezing then - Check_Generic_Parent; - - -- If the actual is a renaming of a proper - -- instance of the formal package, indicate - -- that it is the instance that must be frozen. - - if Nkind (Parent (Actual)) = - N_Package_Renaming_Declaration - then - Set_Has_Delayed_Freeze - (Renamed_Entity (Actual)); - Append_Elmt - (Renamed_Entity (Actual), - Actuals_To_Freeze); - else - Set_Has_Delayed_Freeze (Actual); - Append_Elmt (Actual, Actuals_To_Freeze); - end if; - end if; - end if; - end Explicit_Freeze_Check; - end if; + if Is_Generic_Instance (Par) then + null; - -- Copy use clauses to where they belong + -- If the actual is a child generic unit, check + -- whether the instantiation of the parent is + -- also local and must also be frozen now. We + -- must retrieve the instance node to locate the + -- parent instance if any. - when N_Use_Package_Clause - | N_Use_Type_Clause - => - Append (New_Copy_Tree (Formal), Assoc_List); + elsif Ekind (Par) = E_Generic_Package + and then Is_Child_Unit (Gen_Par) + and then Ekind (Scope (Gen_Par)) = + E_Generic_Package + then + if Nkind (Inst) = N_Package_Instantiation + and then Nkind (Name (Inst)) = + N_Expanded_Name + then + -- Retrieve entity of parent instance - when others => - raise Program_Error; - end case; + Par := Entity (Prefix (Name (Inst))); + end if; - -- Check here the correct use of Ghost entities in generic - -- instantiations, as now the generic has been resolved and - -- we know which formal generic parameters are ghost (SPARK - -- RM 6.9(10)). + else + Par := Empty; + end if; + end if; - if Nkind (Formal) not in N_Use_Package_Clause - | N_Use_Type_Clause - then - Check_Ghost_Context_In_Generic_Association - (Actual => Match, - Formal => Defining_Entity (Analyzed_Formal)); - end if; + if Present (Par) + and then Is_Generic_Instance (Par) + and then Scope (Par) = Current_Scope + and then + (No (Freeze_Node (Par)) + or else + not Is_List_Member (Freeze_Node (Par))) + then + Set_Has_Delayed_Freeze (Par); + Append_Elmt (Par, Actuals_To_Freeze); + end if; + end Check_Generic_Parent; - Formal := Saved_Formal; - Next_Non_Pragma (Analyzed_Formal); - end loop; + -- Start of processing for Explicit_Freeze_Check - if Num_Actuals > Num_Matched then - Error_Msg_Sloc := Sloc (Gen_Unit); + begin + if Present (Renamed_Entity (Actual)) then + Gen_Par := + Generic_Parent (Specification + (Unit_Declaration_Node + (Renamed_Entity (Actual)))); + else + Gen_Par := + Generic_Parent (Specification + (Unit_Declaration_Node (Actual))); + end if; - if Present (Selector_Name (Actual)) then - Error_Msg_NE - ("unmatched actual &", Actual, Selector_Name (Actual)); - Error_Msg_NE - ("\in instantiation of & declared#", Actual, Gen_Unit); - else - Error_Msg_NE - ("unmatched actual in instantiation of & declared#", - Actual, Gen_Unit); - end if; - end if; + if not Expander_Active + or else not Has_Completion (Actual) + or else not In_Same_Source_Unit (I_Node, Actual) + or else Is_Frozen (Actual) + or else + (Present (Renamed_Entity (Actual)) + and then + not In_Same_Source_Unit + (I_Node, (Renamed_Entity (Actual)))) + then + null; - elsif Present (Actuals) then - Error_Msg_N - ("too many actuals in generic instantiation", Instantiation_Node); - end if; + else + -- Finally we want to exclude such freeze nodes + -- from statement sequences, which freeze + -- everything before them. + -- Is this strictly necessary ??? - -- An instantiation freezes all generic actuals. The only exceptions - -- to this are incomplete types and subprograms which are not fully - -- defined at the point of instantiation. + Needs_Freezing := True; - declare - Elmt : Elmt_Id := First_Elmt (Actuals_To_Freeze); - begin - while Present (Elmt) loop - Freeze_Before (I_Node, Node (Elmt)); - Next_Elmt (Elmt); - end loop; - end; + P := Parent (I_Node); + while Nkind (P) /= N_Compilation_Unit loop + if Nkind (P) = N_Handled_Sequence_Of_Statements + then + Needs_Freezing := False; + exit; + end if; - -- If there are default subprograms, normalize the tree by adding - -- explicit associations for them. This is required if the instance - -- appears within a generic. + P := Parent (P); + end loop; - if not Is_Empty_List (Default_Actuals) then - declare - Default : Node_Id; + if Needs_Freezing then + Check_Generic_Parent; - begin - Default := First (Default_Actuals); - while Present (Default) loop - Mark_Rewrite_Insertion (Default); - Next (Default); - end loop; + -- If the actual is a renaming of a proper + -- instance of the formal package, indicate + -- that it is the instance that must be frozen. - if No (Actuals) then - Set_Generic_Associations (I_Node, Default_Actuals); - else - Append_List_To (Actuals, Default_Actuals); + if Nkind (Parent (Actual)) = + N_Package_Renaming_Declaration + then + Set_Has_Delayed_Freeze + (Renamed_Entity (Actual)); + Append_Elmt + (Renamed_Entity (Actual), + Actuals_To_Freeze); + else + Set_Has_Delayed_Freeze (Actual); + Append_Elmt (Actual, Actuals_To_Freeze); + end if; + end if; + end if; + end Explicit_Freeze_Check; end if; - end; - end if; - -- If this is a formal package, normalize the parameter list by adding - -- explicit box associations for the formals that are covered by an - -- N_Others_Choice. + when others => + raise Program_Error; + end case; - Append_List (Default_Formals, Formals); + -- Check for correct use of Ghost entities in generic + -- instantiations (SPARK RM 6.9(10)). - return Assoc_List; - end Analyze_Associations; + Check_Ghost_Context_In_Generic_Association + (Actual => Match, + Formal => Defining_Entity (Assoc.An_Formal)); + end Analyze_One_Association; ------------------------------- -- Analyze_Formal_Array_Type -- @@ -2944,9 +3029,9 @@ package body Sem_Ch12 is -- part, so that names with the proper types are available in the -- specification of the formal package. - -- On the other hand, if there are no associations, then all the - -- formals must have defaults, and this will be checked by the - -- call to Analyze_Associations. + -- On the other hand, if there are no associations (as in "new G;"), + -- then all the formals must have defaults, and this will be checked + -- by the call to Analyze_Associations. if Box_Present (N) or else Nkind (First (Generic_Associations (N))) = N_Others_Choice @@ -3402,9 +3487,7 @@ package body Sem_Ch12 is -- A formal abstract procedure cannot have a null default -- (RM 12.6(4.1/2)). - if Nkind (Spec) = N_Procedure_Specification - and then Null_Present (Spec) - then + if Has_Null_Default (N) then Error_Msg_N ("a formal abstract subprogram cannot default to null", Spec); end if; @@ -4291,7 +4374,7 @@ package body Sem_Ch12 is Inline_Now : Boolean := False; Needs_Body : Boolean; Parent_Installed : Boolean := False; - Renaming_List : List_Id; + Renamings : List_Id; Unit_Renaming : Node_Id; Vis_Prims_List : Elist_Id := No_Elist; @@ -4523,13 +4606,13 @@ package body Sem_Ch12 is Set_Private_Declarations (Act_Spec, New_List); end if; - Renaming_List := + Renamings := Analyze_Associations (I_Node => N, Formals => Generic_Formal_Declarations (Act_Tree), F_Copy => Generic_Formal_Declarations (Gen_Decl)); - Vis_Prims_List := Check_Hidden_Primitives (Renaming_List); + Vis_Prims_List := Check_Hidden_Primitives (Renamings); Set_Instance_Env (Gen_Unit, Act_Decl_Id); Set_Defining_Unit_Name (Act_Spec, Act_Decl_Name); @@ -4549,16 +4632,16 @@ package body Sem_Ch12 is Make_Defining_Identifier (Loc, Chars (Gen_Unit)), Name => New_Occurrence_Of (Act_Decl_Id, Loc)); - Append (Unit_Renaming, Renaming_List); + Append (Unit_Renaming, Renamings); -- The renaming declarations are the first local declarations of the -- new unit. if Is_Non_Empty_List (Visible_Declarations (Act_Spec)) then Insert_List_Before - (First (Visible_Declarations (Act_Spec)), Renaming_List); + (First (Visible_Declarations (Act_Spec)), Renamings); else - Set_Visible_Declarations (Act_Spec, Renaming_List); + Set_Visible_Declarations (Act_Spec, Renamings); end if; Act_Decl := Make_Package_Declaration (Loc, Specification => Act_Spec); @@ -5428,6 +5511,8 @@ package body Sem_Ch12 is return False; end Is_Inlined_Or_Child_Of_Inlined; + -- Start of processing for Need_Subprogram_Instance_Body + begin -- Must be in the main unit or inlined (or child of inlined) @@ -5494,7 +5579,7 @@ package body Sem_Ch12 is Pack_Id : Entity_Id; Parent_Installed : Boolean := False; - Renaming_List : List_Id; + Renamings : List_Id; -- The list of declarations that link formals and actuals of the -- instance. These are subtype declarations for formal types, and -- renaming declarations for other formals. The subprogram declaration @@ -5552,7 +5637,7 @@ package body Sem_Ch12 is Make_Package_Declaration (Loc, Specification => Make_Package_Specification (Loc, Defining_Unit_Name => Pack_Id, - Visible_Declarations => Renaming_List, + Visible_Declarations => Renamings, End_Label => Empty)); Set_Instance_Spec (N, Pack_Decl); @@ -5693,7 +5778,7 @@ package body Sem_Ch12 is -- itself, do not add this renaming declaration, to prevent -- ambiguities when there is a call with that name in the body. - Renaming_Decl := First (Renaming_List); + Renaming_Decl := First (Renamings); while Present (Renaming_Decl) loop if Nkind (Renaming_Decl) = N_Subprogram_Renaming_Declaration and then @@ -5706,7 +5791,7 @@ package body Sem_Ch12 is end loop; if No (Renaming_Decl) then - Append (Unit_Renaming, Renaming_List); + Append (Unit_Renaming, Renamings); end if; end Build_Subprogram_Renaming; @@ -5850,13 +5935,13 @@ package body Sem_Ch12 is Set_Must_Override (Act_Spec, Must_Override (N)); Set_Must_Not_Override (Act_Spec, Must_Not_Override (N)); - Renaming_List := + Renamings := Analyze_Associations (I_Node => N, Formals => Generic_Formal_Declarations (Act_Tree), F_Copy => Generic_Formal_Declarations (Gen_Decl)); - Vis_Prims_List := Check_Hidden_Primitives (Renaming_List); + Vis_Prims_List := Check_Hidden_Primitives (Renamings); -- The subprogram itself cannot contain a nested instance, so the -- current parent is left empty. @@ -5885,14 +5970,14 @@ package body Sem_Ch12 is Hide_Current_Scope; end if; - Append (Act_Decl, Renaming_List); + Append (Act_Decl, Renamings); -- Contract-related source pragmas that follow a generic subprogram -- must be instantiated explicitly because they are not part of the -- subprogram template. Instantiate_Subprogram_Contract - (Original_Node (Gen_Decl), Renaming_List); + (Original_Node (Gen_Decl), Renamings); Build_Subprogram_Renaming; @@ -6304,6 +6389,92 @@ package body Sem_Ch12 is return Body_Node; end Build_Subprogram_Body_Wrapper; + ------------------------------- + -- Build_Subprogram_Wrappers -- + ------------------------------- + + procedure Build_Subprogram_Wrappers + (Match, Analyzed_Formal : Node_Id; Renamings : List_Id) + is + function Adjust_Aspect_Sloc (N : Node_Id) return Traverse_Result; + -- Adjust Sloc so that errors will be reported on the instance rather + -- than the generic. + + ------------------------ + -- Adjust_Aspect_Sloc -- + ------------------------ + + function Adjust_Aspect_Sloc (N : Node_Id) return Traverse_Result is + begin + Adjust_Instantiation_Sloc (N, S_Adjustment); + return OK; + end Adjust_Aspect_Sloc; + + procedure Adjust_Aspect_Slocs is new + Traverse_Proc (Adjust_Aspect_Sloc); + + Formal : constant Entity_Id := + Defining_Unit_Name (Specification (Analyzed_Formal)); + Aspect_Spec : Node_Id; + Decl_Node : Node_Id; + Actual_Name : Node_Id; + + -- Start of processing for Build_Subprogram_Wrappers + + begin + -- Create declaration for wrapper subprogram. + -- The actual can be overloaded, in which case it will be + -- resolved when the call in the wrapper body is analyzed. + -- We attach the possible interpretations of the actual to + -- the name to be used in the call in the wrapper body. + + if Is_Entity_Name (Match) then + Actual_Name := New_Occurrence_Of (Entity (Match), Sloc (Match)); + + if Is_Overloaded (Match) then + Save_Interps (Match, Actual_Name); + end if; + + else + -- Use renaming declaration created when analyzing actual. + -- This may be incomplete if there are several formal + -- subprograms whose actual is an attribute ??? + + declare + Renaming_Decl : constant Node_Id := Last (Renamings); + + begin + Actual_Name := New_Occurrence_Of + (Defining_Entity (Renaming_Decl), Sloc (Match)); + Set_Etype (Actual_Name, Get_Instance_Of (Etype (Formal))); + end; + end if; + + Decl_Node := Build_Subprogram_Decl_Wrapper (Formal); + + -- Transfer aspect specifications from formal subprogram to wrapper + + Set_Aspect_Specifications (Decl_Node, + New_Copy_List_Tree (Aspect_Specifications (Analyzed_Formal))); + + Aspect_Spec := First (Aspect_Specifications (Decl_Node)); + while Present (Aspect_Spec) loop + Adjust_Aspect_Slocs (Aspect_Spec); + Set_Analyzed (Aspect_Spec, False); + Next (Aspect_Spec); + end loop; + + Append_To (Renamings, Decl_Node); + + -- Create corresponding body, and append it to association list + -- that appears at the head of the declarations in the instance. + -- The subprogram may be called in the analysis of subsequent + -- actuals. + + Append_To (Renamings, + Build_Subprogram_Body_Wrapper (Formal, Actual_Name)); + end Build_Subprogram_Wrappers; + ------------------------------------------- -- Build_Instance_Compilation_Unit_Nodes -- ------------------------------------------- @@ -6859,6 +7030,122 @@ package body Sem_Ch12 is end loop; end Check_Formal_Package_Instance; + ------------------------------- + -- Check_Fixed_Point_Warning -- + ------------------------------- + + procedure Check_Fixed_Point_Warning + (Gen_Assocs : Associations.Gen_Assocs_Rec; + Renamings : List_Id) + is + use Associations; + begin + for Type_Index in Gen_Assocs.Assocs'Range loop + declare + Assoc : Assoc_Rec renames Gen_Assocs.Assocs (Type_Index); + begin + if Nkind (Assoc.An_Formal) = N_Formal_Type_Declaration + and then Is_Fixed_Point_Type (Defining_Entity (Assoc.An_Formal)) + and then Assoc.Actual.Kind = Name_Exp + then + declare + Typ : constant Entity_Id := Entity (Assoc.Actual.Name_Exp); + pragma Assert (Is_Fixed_Point_Type (Typ)); + + Prims : constant Elist_Id := + Collect_Primitive_Operations (Typ); + Elem : Elmt_Id := First_Elmt (Prims); + Formal : Node_Id; + Op : Entity_Id; + begin + -- Locate primitive operations of the type that are + -- arithmetic operations. + + while Present (Elem) loop + if Nkind (Node (Elem)) = N_Defining_Operator_Symbol then + + -- Check whether the generic unit has a formal + -- subprogram of the same name. This does not check + -- types but is good enough to justify a warning. + + Op := Alias (Node (Elem)); + + for Op_Index in Type_Index + 1 .. + Gen_Assocs.Assocs'Last + loop + Formal := Gen_Assocs.Assocs (Op_Index).Un_Formal; + + if Nkind (Formal) = + N_Formal_Concrete_Subprogram_Declaration + and then Chars (Defining_Entity (Formal)) = + Chars (Node (Elem)) + then + goto OK; + + elsif Nkind (Formal) = N_Formal_Package_Declaration + then + declare + Assoc : Node_Id; + Ent : Entity_Id; + + begin + -- Locate corresponding actual, and check + -- whether it includes a fixed-point type. + + Assoc := First (Renamings); + while Present (Assoc) loop + exit when + Nkind (Assoc) = + N_Package_Renaming_Declaration + and then + Chars (Defining_Unit_Name (Assoc)) = + Chars (Defining_Identifier (Formal)); + + Next (Assoc); + end loop; + + if Present (Assoc) then + -- If the formal package declares a + -- fixed-point type, and the user-defined + -- operator is derived from a generic + -- instance package, the fixed-point type + -- does not use the corresponding + -- predefined op. + + Ent := + First_Entity (Entity (Name (Assoc))); + while Present (Ent) loop + if Is_Fixed_Point_Type (Ent) + and then Present (Op) + and then + Is_Generic_Instance (Scope (Op)) + then + goto OK; + end if; + + Next_Entity (Ent); + end loop; + end if; + end; + end if; + end loop; + + Error_Msg_Sloc := Sloc (Node (Elem)); + Error_Msg_NE + ("?instance uses predefined, not primitive, " & + "operator&#", + Assoc.Actual.Name_Exp, Node (Elem)); + <> null; + end if; + + Next_Elmt (Elem); + end loop; + end; + end if; + end; + end loop; + end Check_Fixed_Point_Warning; + --------------------------- -- Check_Formal_Packages -- --------------------------- @@ -7034,6 +7321,8 @@ package body Sem_Ch12 is return False; end Scope_Within_Body_Or_Same; + -- Start of processing for Check_Actual_Type + begin -- The exchange is only needed if the generic is defined -- within a package which is not a common ancestor of the @@ -7812,6 +8101,8 @@ package body Sem_Ch12 is end if; end Check_Private_Type; + -- Start of processing for Check_Private_View + begin if Present (Typ) then -- If the type appears in a subtype declaration, the subtype in @@ -7874,20 +8165,20 @@ package body Sem_Ch12 is -- Check_Hidden_Primitives -- ----------------------------- - function Check_Hidden_Primitives (Assoc_List : List_Id) return Elist_Id is + function Check_Hidden_Primitives (Renamings : List_Id) return Elist_Id is Actual : Node_Id; Gen_T : Entity_Id; Result : Elist_Id := No_Elist; begin - if No (Assoc_List) then + if No (Renamings) then return No_Elist; end if; -- Traverse the list of associations between formals and actuals -- searching for renamings of tagged types - Actual := First (Assoc_List); + Actual := First (Renamings); while Present (Actual) loop if Nkind (Actual) = N_Subtype_Declaration then Gen_T := Generic_Parent_Type (Actual); @@ -9670,6 +9961,62 @@ package body Sem_Ch12 is return False; end Has_Contracts; + ------------------------------- + -- Has_Fully_Defined_Profile -- + ------------------------------- + + function Has_Fully_Defined_Profile (Subp : Entity_Id) return Boolean is + function Is_Fully_Defined_Type (Typ : Entity_Id) return Boolean; + -- Determine whethet type Typ is fully defined + + --------------------------- + -- Is_Fully_Defined_Type -- + --------------------------- + + function Is_Fully_Defined_Type (Typ : Entity_Id) return Boolean is + begin + -- A private type without a full view is not fully defined + + if Is_Private_Type (Typ) + and then No (Full_View (Typ)) + then + return False; + + -- An incomplete type is never fully defined + + elsif Is_Incomplete_Type (Typ) then + return False; + + -- All other types are fully defined + + else + return True; + end if; + end Is_Fully_Defined_Type; + + -- Local declarations + + Param : Entity_Id; + + -- Start of processing for Has_Fully_Defined_Profile + + begin + -- Check the parameters + + Param := First_Formal (Subp); + while Present (Param) loop + if not Is_Fully_Defined_Type (Etype (Param)) then + return False; + end if; + + Next_Formal (Param); + end loop; + + -- Check the return type + + return Is_Fully_Defined_Type (Etype (Subp)); + end Has_Fully_Defined_Profile; + ---------- -- Hash -- ---------- @@ -10458,6 +10805,26 @@ package body Sem_Ch12 is end if; end Install_Hidden_Primitives; + --------------------------------- + -- Renames_Standard_Subprogram -- + --------------------------------- + + function Renames_Standard_Subprogram (Subp : Entity_Id) return Boolean is + Id : Entity_Id; + + begin + Id := Alias (Subp); + while Present (Id) loop + if Scope (Id) = Standard_Standard then + return True; + end if; + + Id := Alias (Id); + end loop; + + return False; + end Renames_Standard_Subprogram; + ------------------------------- -- Restore_Hidden_Primitives -- ------------------------------- @@ -10976,9 +11343,7 @@ package body Sem_Ch12 is if Requires_Conformance_Checking (Formal) then declare I_Pack : constant Entity_Id := Make_Temporary (Loc, 'P'); - I_Nam : Node_Id; - begin Set_Is_Internal (I_Pack); Mutate_Ekind (I_Pack, E_Package); @@ -11222,9 +11587,7 @@ package body Sem_Ch12 is Nam := Make_Identifier (Loc, Chars (Formal_Sub)); end if; - elsif Nkind (Specification (Formal)) = N_Procedure_Specification - and then Null_Present (Specification (Formal)) - then + elsif Has_Null_Default (Formal) then -- Generate null body for procedure, for use in the instance Decl_Node := @@ -11281,13 +11644,7 @@ package body Sem_Ch12 is return Decl_Node; else - Error_Msg_Sloc := Sloc (Scope (Analyzed_S)); - Error_Msg_NE - ("missing actual&", Instantiation_Node, Formal_Sub); - Error_Msg_NE - ("\in instantiation of & declared#", - Instantiation_Node, Scope (Analyzed_S)); - Abandon_Instantiation (Instantiation_Node); + pragma Assert (False); end if; Decl_Node := @@ -11426,14 +11783,6 @@ package body Sem_Ch12 is Acc_Def := Access_Definition (Formal); end if; - -- Sloc for error message on missing actual - - Error_Msg_Sloc := Sloc (Scope (A_Gen_Obj)); - - if Get_Instance_Of (Gen_Obj) /= Gen_Obj then - Error_Msg_N ("duplicate instantiation of generic parameter", Actual); - end if; - Set_Parent (List, Act_Assoc); -- OUT present @@ -11444,21 +11793,11 @@ package body Sem_Ch12 is -- renaming declaration. The actual is the name being renamed. We -- use the actual directly, rather than a copy, because it is not -- used further in the list of actuals, and because a copy or a use - -- of relocate_node is incorrect if the instance is nested within a + -- of Relocate_Node is incorrect if the instance is nested within a -- generic. In order to simplify e.g. ASIS queries, the -- Generic_Parent field links the declaration to the generic -- association. - if No (Actual) then - Error_Msg_NE - ("missing actual &", - Instantiation_Node, Gen_Obj); - Error_Msg_NE - ("\in instantiation of & declared#", - Instantiation_Node, Scope (A_Gen_Obj)); - Abandon_Instantiation (Instantiation_Node); - end if; - if Present (Subt_Mark) then Decl_Node := Make_Object_Renaming_Declaration (Loc, @@ -11622,14 +11961,14 @@ package body Sem_Ch12 is (Actual => Actual, Formal => A_Gen_Obj); - -- Formal in-parameter + -- Formal in-mode parameter else - -- The instantiation of a generic formal in-parameter is constant - -- declaration. The actual is the expression for that declaration. - -- Its type is a full copy of the type of the formal. This may be - -- an access to subprogram, for which we need to generate entities - -- for the formals in the new signature. + -- The instantiation of a generic formal in-mode parameter is a + -- constant declaration. The actual is the expression for that + -- declaration. Its type is a full copy of the type of the + -- formal. This may be an access to subprogram, for which we need + -- to generate entities for the formals in the new signature. if Present (Actual) then if Present (Subt_Mark) then @@ -11750,37 +12089,7 @@ package body Sem_Ch12 is Set_Analyzed (Expression (Decl_Node), False); else - Error_Msg_NE ("missing actual&", Instantiation_Node, Gen_Obj); - Error_Msg_NE ("\in instantiation of & declared#", - Instantiation_Node, Scope (A_Gen_Obj)); - - if Is_Scalar_Type (Etype (A_Gen_Obj)) then - - -- Create dummy constant declaration so that instance can be - -- analyzed, to minimize cascaded visibility errors. - - if Present (Subt_Mark) then - Def := Subt_Mark; - else pragma Assert (Present (Acc_Def)); - Def := Acc_Def; - end if; - - Decl_Node := - Make_Object_Declaration (Loc, - Defining_Identifier => New_Copy (Gen_Obj), - Constant_Present => True, - Null_Exclusion_Present => Null_Exclusion_Present (Formal), - Object_Definition => New_Copy (Def), - Expression => - Make_Attribute_Reference (Sloc (Gen_Obj), - Attribute_Name => Name_First, - Prefix => New_Copy (Def))); - - Append (Decl_Node, List); - - else - Abandon_Instantiation (Instantiation_Node); - end if; + pragma Assert (False); end if; end if; @@ -12880,7 +13189,7 @@ package body Sem_Ch12 is Act_T : Entity_Id; Ancestor : Entity_Id := Empty; Decl_Node : Node_Id; - Decl_Nodes : List_Id; + Decl_Nodes : List_Id; -- result Loc : Source_Ptr; Subt : Entity_Id; @@ -12892,7 +13201,7 @@ package body Sem_Ch12 is -- There are a number of constructs in which a discrete type with -- predicates is illegal, e.g. as an index in an array type declaration. -- If a generic type is used is such a construct in a generic package - -- declaration, it carries the flag No_Predicate_On_Actual. it is part + -- declaration, it carries the flag No_Predicate_On_Actual. It is part -- of the generic contract that the actual cannot have predicates. function Subtypes_Match (Gen_T, Act_T : Entity_Id) return Boolean; @@ -13042,9 +13351,8 @@ package body Sem_Ch12 is -- wide types), or designated types (when dealing with anonymous -- access types) of Gen_T and Act_T are statically matching subtypes. - return ((Base_Type (T) = Act_T - or else Base_Type (T) = Base_Type (Act_T)) - and then Subtypes_Statically_Match (T, Act_T)) + return (Base_Type (Base_Type (T)) = Base_Type (Act_T) + and then Subtypes_Statically_Match (T, Act_T)) or else (Is_Class_Wide_Type (Gen_T) and then Is_Class_Wide_Type (Act_T) @@ -13486,7 +13794,7 @@ package body Sem_Ch12 is or else Ekind (Get_Instance_Of (A_Gen_T)) = E_Record_Type_With_Private then - -- Check whether the parent is another derived formal type in the + -- Check whether the parent is another formal derived type in the -- same generic unit. if Etype (A_Gen_T) /= A_Gen_T @@ -14178,11 +14486,6 @@ package body Sem_Ch12 is -- Start of processing for Instantiate_Type begin - if Get_Instance_Of (A_Gen_T) /= A_Gen_T then - Error_Msg_N ("duplicate instantiation of generic type", Actual); - return New_List (Error); - end if; - if not Is_Entity_Name (Actual) or else not Is_Type (Entity (Actual)) then @@ -14299,9 +14602,7 @@ package body Sem_Ch12 is Check_Shared_Variable_Control_Aspects; - if Error_Posted (Act_T) then - null; - else + if not Error_Posted (Act_T) then case Nkind (Def) is when N_Formal_Private_Type_Definition => Validate_Private_Type_Instance; @@ -16319,8 +16620,10 @@ package body Sem_Ch12 is -- If there are other defaults, add a dummy association in case -- there are other defaulted formals with the same name. + -- Note that we are creating an N_Generic_Association with + -- neither Explicit_Generic_Actual_Parameter nor Box_Present. - elsif Present (Next (Act2)) then + elsif Present (Next (Act2)) and True then Ndec := Make_Generic_Association (Loc, Selector_Name => diff --git a/gcc/ada/sem_ch12.ads b/gcc/ada/sem_ch12.ads index 6639d546e3169..0356f2acfae86 100644 --- a/gcc/ada/sem_ch12.ads +++ b/gcc/ada/sem_ch12.ads @@ -135,7 +135,7 @@ package Sem_Ch12 is -- captured as described here. -- Because instantiations can be nested, the environment of the instance, - -- involving the actuals and other data-structures, must be saved and + -- involving the actuals and other data structures, must be saved and -- restored in stack-like fashion. Front-end inlining also uses these -- structures for the management of private/full views. @@ -186,7 +186,7 @@ package Sem_Ch12 is Act_Unit : Entity_Id); -- Because instantiations can be nested, the compiler maintains a stack -- of environments that holds variables relevant to the current instance: - -- most importanty Instantiated_Parent, Exchanged_Views, Hidden_Entities, + -- most importantly Instantiated_Parent, Exchanged_Views, Hidden_Entities, -- and others (see full list in Instance_Env). procedure Restore_Env; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 0e951c1b6b876..eebaedc216bcd 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -1250,7 +1250,8 @@ package body Sem_Ch3 is -- to incomplete types declared in some enclosing scope, not to limited -- views from other packages. - -- Prior to Ada 2012, access to functions can only have in_parameters. + -- Prior to Ada 2012, access to functions parameters must be of mode + -- 'in'. if Present (Formals) then Formal := First_Formal (Desig_Type); From 4c98b695fd8ee8246d84ba954dd59ddb87ac16d7 Mon Sep 17 00:00:00 2001 From: Yannick Moy Date: Mon, 27 May 2024 12:06:47 +0200 Subject: [PATCH 052/114] ada: Fix checking of SPARK RM on ghost with concurrent part SPARK RM 6.9(21) forbids a ghost type to have concurrent parts. This was not enforced, instead only the type itself was checked to be concurrent. Now fixed. gcc/ada/ * ghost.adb (Check_Ghost_Type): Fix checking. --- gcc/ada/ghost.adb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ghost.adb b/gcc/ada/ghost.adb index d220e0e1ec0d9..84fd40ed98af4 100644 --- a/gcc/ada/ghost.adb +++ b/gcc/ada/ghost.adb @@ -1054,7 +1054,9 @@ package body Ghost is Full_Typ : Entity_Id; begin - if Is_Ghost_Entity (Typ) then + if Is_Ghost_Entity (Typ) + and then Comes_From_Source (Typ) + then Conc_Typ := Empty; Full_Typ := Typ; @@ -1062,7 +1064,9 @@ package body Ghost is Conc_Typ := Anonymous_Object (Typ); Full_Typ := Conc_Typ; - elsif Is_Concurrent_Type (Typ) then + elsif Has_Protected (Typ) + or else Has_Task (Typ) + then Conc_Typ := Typ; end if; From 301927d93356871f606ff3db2549bb5d44e74516 Mon Sep 17 00:00:00 2001 From: Steve Baird Date: Thu, 16 May 2024 14:49:17 -0700 Subject: [PATCH 053/114] ada: Reference to nonexistent operator in reduction expression accepted In some cases, a reduction expression that references the (nonexistent) "+" operator of a generic formal private type is incorrectly accepted. gcc/ada/ * sem_attr.adb (Resolve_Attribute.Proper_Op): When resolving the name of the reducer subprogram in a reduction expression, Proper_Op treats references to operators defined in Standard specially. Disable this special treatment if the type of the reduction expression is not the right class of type for the operator, or if a new Boolean parameter (named "Strict") is True. (Resolve_Attribute): In the overloaded case, iterate over the reducer subprogram candidates twice. First with Strict => True and then, if no good intepretation is found, with Strict => False. --- gcc/ada/sem_attr.adb | 110 ++++++++++++++++++++++++++++++++----------- 1 file changed, 83 insertions(+), 27 deletions(-) diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index c2bb094492d34..72f5ab4917594 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -12600,21 +12600,30 @@ package body Sem_Attr is when Attribute_Reduce => declare - E1 : constant Node_Id := First (Expressions (N)); - E2 : constant Node_Id := Next (E1); + Reducer_Subp_Name : constant Node_Id := First (Expressions (N)); + Init_Value_Exp : constant Node_Id := + Next (Reducer_Subp_Name); Op : Entity_Id := Empty; Index : Interp_Index; It : Interp; - function Proper_Op (Op : Entity_Id) return Boolean; + + function Proper_Op + (Op : Entity_Id; + Strict : Boolean := False) return Boolean; + -- Is Op a suitable reducer subprogram? + -- Strict indicates whether ops found in Standard should be + -- considered even if Typ is not a predefined type. --------------- -- Proper_Op -- --------------- - function Proper_Op (Op : Entity_Id) return Boolean is + function Proper_Op + (Op : Entity_Id; + Strict : Boolean := False) return Boolean + is F1, F2 : Entity_Id; - begin F1 := First_Formal (Op); if No (F1) then @@ -12630,42 +12639,89 @@ package body Sem_Attr is return Ekind (F1) = E_In_Out_Parameter and then Covers (Typ, Etype (F1)); + elsif Covers (Typ, Etype (Op)) then + return True; + + elsif Ekind (Op) = E_Operator + and then Scope (Op) = Standard_Standard + and then not Strict + then + declare + Op_Chars : constant Any_Operator_Name := Chars (Op); + -- Nonassociative ops like division are unlikely + -- to come up in practice, but they are legal. + begin + case Op_Chars is + when Name_Op_Add + | Name_Op_Subtract + | Name_Op_Multiply + | Name_Op_Divide + | Name_Op_Expon + => + return Is_Numeric_Type (Typ); + + when Name_Op_Mod | Name_Op_Rem => + return Is_Numeric_Type (Typ) + and then Is_Discrete_Type (Typ); + + when Name_Op_And | Name_Op_Or | Name_Op_Xor => + -- No Boolean array operators in Standard + return Is_Boolean_Type (Typ) + or else Is_Modular_Integer_Type (Typ); + + when Name_Op_Concat => + return Is_Array_Type (Typ) + and then Number_Dimensions (Typ) = 1; + + when Name_Op_Eq | Name_Op_Ne + | Name_Op_Lt | Name_Op_Le + | Name_Op_Gt | Name_Op_Ge + => + return Is_Boolean_Type (Typ); + + when Name_Op_Abs | Name_Op_Not => + -- unary ops were already handled + pragma Assert (False); + raise Program_Error; + end case; + end; else - return - (Ekind (Op) = E_Operator - and then Scope (Op) = Standard_Standard) - or else Covers (Typ, Etype (Op)); + return False; end if; end if; end Proper_Op; begin - Resolve (E2, Typ); - if Is_Overloaded (E1) then - Get_First_Interp (E1, Index, It); - while Present (It.Nam) loop - if Proper_Op (It.Nam) then - Op := It.Nam; - Set_Entity (E1, Op); - exit; - end if; + Resolve (Init_Value_Exp, Typ); + if Is_Overloaded (Reducer_Subp_Name) then + Outer : + for Retry in Boolean loop + Get_First_Interp (Reducer_Subp_Name, Index, It); + while Present (It.Nam) loop + if Proper_Op (It.Nam, Strict => not Retry) then + Op := It.Nam; + Set_Entity (Reducer_Subp_Name, Op); + exit Outer; + end if; - Get_Next_Interp (Index, It); - end loop; + Get_Next_Interp (Index, It); + end loop; + end loop Outer; - elsif Nkind (E1) = N_Attribute_Reference - and then (Attribute_Name (E1) = Name_Max - or else Attribute_Name (E1) = Name_Min) + elsif Nkind (Reducer_Subp_Name) = N_Attribute_Reference + and then (Attribute_Name (Reducer_Subp_Name) = Name_Max + or else Attribute_Name (Reducer_Subp_Name) = Name_Min) then - Op := E1; + Op := Reducer_Subp_Name; - elsif Proper_Op (Entity (E1)) then - Op := Entity (E1); + elsif Proper_Op (Entity (Reducer_Subp_Name)) then + Op := Entity (Reducer_Subp_Name); Set_Etype (N, Typ); end if; if No (Op) then - Error_Msg_N ("No visible subprogram for reduction", E1); + Error_Msg_N ("No suitable reducer subprogram found", + Reducer_Subp_Name); end if; end; From 1340ddea0158de3f49aeb75b4013e5fc313ff6f4 Mon Sep 17 00:00:00 2001 From: Matthias Kretz Date: Fri, 14 Jun 2024 15:11:25 +0200 Subject: [PATCH 054/114] libstdc++: Fix find_last_set(simd_mask) to ignore padding bits With the change to the AVX512 find_last_set implementation, the change to AVX512 operator!= is unnecessary. However, the latter was not producing optimal code and unnecessarily set the padding bits. In theory, the compiler could determine that with the new != implementation, the bit operation for clearing the padding bits is a no-op and can be elided. Signed-off-by: Matthias Kretz libstdc++-v3/ChangeLog: PR libstdc++/115454 * include/experimental/bits/simd_x86.h (_S_not_equal_to): Use neq comparison instead of bitwise negation after eq. (_S_find_last_set): Clear unused high bits before computing bit_width. * testsuite/experimental/simd/pr115454_find_last_set.cc: New test. --- .../include/experimental/bits/simd_x86.h | 26 +++++----- .../simd/pr115454_find_last_set.cc | 49 +++++++++++++++++++ 2 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc diff --git a/libstdc++-v3/include/experimental/bits/simd_x86.h b/libstdc++-v3/include/experimental/bits/simd_x86.h index 4ab933b573c61..e498b1e4ee4d2 100644 --- a/libstdc++-v3/include/experimental/bits/simd_x86.h +++ b/libstdc++-v3/include/experimental/bits/simd_x86.h @@ -2339,29 +2339,29 @@ template __assert_unreachable<_Tp>(); } else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 8) - return ~_mm512_mask_cmpeq_epi64_mask(__k1, __xi, __yi); + return _mm512_mask_cmpneq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 4) - return ~_mm512_mask_cmpeq_epi32_mask(__k1, __xi, __yi); + return _mm512_mask_cmpneq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 2) - return ~_mm512_mask_cmpeq_epi16_mask(__k1, __xi, __yi); + return _mm512_mask_cmpneq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 1) - return ~_mm512_mask_cmpeq_epi8_mask(__k1, __xi, __yi); + return _mm512_mask_cmpneq_epi8_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 8) - return ~_mm256_mask_cmpeq_epi64_mask(__k1, __xi, __yi); + return _mm256_mask_cmpneq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 4) - return ~_mm256_mask_cmpeq_epi32_mask(__k1, __xi, __yi); + return _mm256_mask_cmpneq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 2) - return ~_mm256_mask_cmpeq_epi16_mask(__k1, __xi, __yi); + return _mm256_mask_cmpneq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 1) - return ~_mm256_mask_cmpeq_epi8_mask(__k1, __xi, __yi); + return _mm256_mask_cmpneq_epi8_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 8) - return ~_mm_mask_cmpeq_epi64_mask(__k1, __xi, __yi); + return _mm_mask_cmpneq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 4) - return ~_mm_mask_cmpeq_epi32_mask(__k1, __xi, __yi); + return _mm_mask_cmpneq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 2) - return ~_mm_mask_cmpeq_epi16_mask(__k1, __xi, __yi); + return _mm_mask_cmpneq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 1) - return ~_mm_mask_cmpeq_epi8_mask(__k1, __xi, __yi); + return _mm_mask_cmpneq_epi8_mask(__k1, __xi, __yi); else __assert_unreachable<_Tp>(); } // }}} @@ -5292,7 +5292,7 @@ template _S_find_last_set(simd_mask<_Tp, _Abi> __k) { if constexpr (__is_avx512_abi<_Abi>()) - return std::__bit_width(__k._M_data._M_data) - 1; + return std::__bit_width(_Abi::_S_masked(__k._M_data)._M_data) - 1; else return _Base::_S_find_last_set(__k); } diff --git a/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc b/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc new file mode 100644 index 0000000000000..b47f19d30674f --- /dev/null +++ b/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc @@ -0,0 +1,49 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target *-*-* } } +// { dg-require-effective-target c++17 } +// { dg-additional-options "-march=x86-64-v4" { target avx512f } } +// { dg-require-cmath "" } + +#include + +namespace stdx = std::experimental; + +using T = std::uint64_t; + +template +using V = stdx::simd>; + +[[gnu::noinline, gnu::noipa]] +int reduce(V x) +{ + static_assert(stdx::find_last_set(V([](unsigned i) { return i; }) != V(0)) == 3); + return stdx::find_last_set(x != -1); +} + +[[gnu::noinline, gnu::noipa]] +int reduce2() +{ + using M8 = typename V::mask_type; + using M4 = typename V::mask_type; + if constexpr (sizeof(M8) == sizeof(M4)) + { + M4 k; + __builtin_memcpy(&__data(k), &__data(M8(true)), sizeof(M4)); + return stdx::find_last_set(k); + } + return 3; +} + + +int main() +{ + const V x {}; + + const int r = reduce(x); + if (r != 3) + __builtin_abort(); + + const int r2 = reduce2(); + if (r2 != 3) + __builtin_abort(); +} From f739ad5e35b0a60dec65bb12f8d07aadd0c98196 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Thu, 20 Jun 2024 08:43:37 -0600 Subject: [PATCH 055/114] [RISC-V] Minor cleanup/improvement to bset/binv patterns Changes since V1: Whitespace fixes noted by the linter Missed using the iterator for the output template in _mask pattern! -- This patch introduces a bit_optab iterator that maps IOR/XOR to bset and binv (and one day bclr if we need it). That allows us to combine some patterns that only differed in the RTL opcode (IOR vs XOR) and in the name/assembly (bset vs binv). Additionally this also allow us to use the iterator in the bsetmask and bsetidisi patterns thus potentially fixing a missed optimization. This has gone through my tester. I'll wait for a verdict from pre-commit CI before moving forward. gcc/ * config/riscv/bitmanip.md (): New unified pattern for bset/binv using a code iterator. (i): Likewise. (_mask): Likewise. Support XOR via any_or. (isidi): Likewise. * config/riscv/iterators.md (bit_optab): New iterator. --- gcc/config/riscv/bitmanip.md | 59 +++++++++++++---------------------- gcc/config/riscv/iterators.md | 3 ++ 2 files changed, 25 insertions(+), 37 deletions(-) diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md index ae5e7e510c0e0..3eedabffca013 100644 --- a/gcc/config/riscv/bitmanip.md +++ b/gcc/config/riscv/bitmanip.md @@ -569,24 +569,26 @@ ;; ZBS extension. -(define_insn "*bset" +(define_insn "*" [(set (match_operand:X 0 "register_operand" "=r") - (ior:X (ashift:X (const_int 1) - (match_operand:QI 2 "register_operand" "r")) - (match_operand:X 1 "register_operand" "r")))] + (any_or:X (ashift:X (const_int 1) + (match_operand:QI 2 "register_operand" "r")) + (match_operand:X 1 "register_operand" "r")))] "TARGET_ZBS" - "bset\t%0,%1,%2" + "\t%0,%1,%2" [(set_attr "type" "bitmanip")]) -(define_insn "*bset_mask" +(define_insn "*_mask" [(set (match_operand:X 0 "register_operand" "=r") - (ior:X (ashift:X (const_int 1) - (subreg:QI - (and:X (match_operand:X 2 "register_operand" "r") - (match_operand 3 "" "")) 0)) - (match_operand:X 1 "register_operand" "r")))] + (any_or:X + (ashift:X + (const_int 1) + (subreg:QI + (and:X (match_operand:X 2 "register_operand" "r") + (match_operand 3 "" "")) 0)) + (match_operand:X 1 "register_operand" "r")))] "TARGET_ZBS" - "bset\t%0,%1,%2" + "\t%0,%1,%2" [(set_attr "type" "bitmanip")]) (define_insn "*bset_1" @@ -655,24 +657,24 @@ "bset\t%0,x0,%1" [(set_attr "type" "bitmanip")]) -(define_insn "*bseti" +(define_insn "*i" [(set (match_operand:X 0 "register_operand" "=r") - (ior:X (match_operand:X 1 "register_operand" "r") - (match_operand:X 2 "single_bit_mask_operand" "DbS")))] + (any_or:X (match_operand:X 1 "register_operand" "r") + (match_operand:X 2 "single_bit_mask_operand" "DbS")))] "TARGET_ZBS" - "bseti\t%0,%1,%S2" + "i\t%0,%1,%S2" [(set_attr "type" "bitmanip")]) ;; As long as the SImode operand is not a partial subreg, we can use a ;; bseti without postprocessing, as the middle end is smart enough to ;; stay away from the signbit. -(define_insn "*bsetidisi" +(define_insn "*idisi" [(set (match_operand:DI 0 "register_operand" "=r") - (ior:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r")) - (match_operand 2 "single_bit_mask_operand" "i")))] + (any_or:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r")) + (match_operand 2 "single_bit_mask_operand" "i")))] "TARGET_ZBS && TARGET_64BIT && !partial_subreg_p (operands[1])" - "bseti\t%0,%1,%S2" + "i\t%0,%1,%S2" [(set_attr "type" "bitmanip")]) ;; We can easily handle zero extensions @@ -781,23 +783,6 @@ (and:DI (rotate:DI (const_int -2) (match_dup 1)) (match_dup 3)))]) -(define_insn "*binv" - [(set (match_operand:X 0 "register_operand" "=r") - (xor:X (ashift:X (const_int 1) - (match_operand:QI 2 "register_operand" "r")) - (match_operand:X 1 "register_operand" "r")))] - "TARGET_ZBS" - "binv\t%0,%1,%2" - [(set_attr "type" "bitmanip")]) - -(define_insn "*binvi" - [(set (match_operand:X 0 "register_operand" "=r") - (xor:X (match_operand:X 1 "register_operand" "r") - (match_operand:X 2 "single_bit_mask_operand" "DbS")))] - "TARGET_ZBS" - "binvi\t%0,%1,%S2" - [(set_attr "type" "bitmanip")]) - (define_insn "*bext" [(set (match_operand:X 0 "register_operand" "=r") (zero_extract:X (match_operand:X 1 "register_operand" "r") diff --git a/gcc/config/riscv/iterators.md b/gcc/config/riscv/iterators.md index 1e37e84302333..20745faa55ef2 100644 --- a/gcc/config/riscv/iterators.md +++ b/gcc/config/riscv/iterators.md @@ -275,6 +275,9 @@ (fix "fix_trunc") (unsigned_fix "fixuns_trunc")]) +(define_code_attr bit_optab [(ior "bset") + (xor "binv")]) + ;; code attributes (define_code_attr or_optab [(ior "ior") (xor "xor")]) From 9a76db24e044c8058497051a652cca4228cbc8e9 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Thu, 20 Jun 2024 16:30:15 +0100 Subject: [PATCH 056/114] i386: Allow all register_operand SUBREGs in x86_ternlog_idx. This patch tweaks ix86_ternlog_idx to allow any SUBREG that matches the register_operand predicate, and is split out as an independent piece of a patch that I have to clean-up redundant ternlog patterns in sse.md. It turns out that some of these patterns aren't (yet) sufficiently redundant to be obsolete. The problem is that the "new" ternlog pattern has the restriction that it allows SUBREGs, but only those where the inner and outer modes are the same size, where regular patterns use "register_operand" which allows arbitrary including paradoxical SUBREGs. A motivating example is f2 in gcc.target/i386/avx512dq-abs-copysign-1.c void f2 (float x, float y) { register float a __asm ("xmm16"), b __asm ("xmm17"); a = x; b = y; asm volatile ("" : "+v" (a), "+v" (b)); a = __builtin_copysignf (a, b); asm volatile ("" : "+v" (a)); } for which combine tries: (set (subreg:V4SF (reg:SF 100 [ _3 ]) 0) (ior:V4SF (and:V4SF (not:V4SF (reg:V4SF 104)) (subreg:V4SF (reg:SF 110) 0)) (reg:V4SF 106))) where the SUBREG is paradoxical, with inner mode SF and outer mode V4SF. This patch allows the recently added ternlog_operand to accept this case. 2024-06-20 Roger Sayle gcc/ChangeLog * config/i386/i386-expand.cc (ix86_ternlog_idx): Allow any SUBREG that matches register_operand. Use rtx_equal_p to compare REG or SUBREG "leaf" operands. --- gcc/config/i386/i386-expand.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 5c29ee1353f76..ac423000ce675 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -25576,27 +25576,32 @@ ix86_ternlog_idx (rtx op, rtx *args) switch (GET_CODE (op)) { + case SUBREG: + if (!register_operand (op, GET_MODE (op))) + return -1; + /* FALLTHRU */ + case REG: if (!args[0]) { args[0] = op; return 0xf0; } - if (REGNO (op) == REGNO (args[0])) + if (rtx_equal_p (op, args[0])) return 0xf0; if (!args[1]) { args[1] = op; return 0xcc; } - if (REGNO (op) == REGNO (args[1])) + if (rtx_equal_p (op, args[1])) return 0xcc; if (!args[2]) { args[2] = op; return 0xaa; } - if (REG_P (args[2]) && REGNO (op) == REGNO (args[2])) + if (rtx_equal_p (op, args[2])) return 0xaa; return -1; @@ -25634,12 +25639,6 @@ ix86_ternlog_idx (rtx op, rtx *args) return 0x55; return -1; - case SUBREG: - if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))) - != GET_MODE_SIZE (GET_MODE (op))) - return -1; - return ix86_ternlog_idx (SUBREG_REG (op), args); - case NOT: idx0 = ix86_ternlog_idx (XEXP (op, 0), args); return (idx0 >= 0) ? idx0 ^ 0xff : -1; From e71481ed7fbcd2c3ad6998ec1ece0e7707fd9751 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Fri, 21 Jun 2024 00:17:08 +0000 Subject: [PATCH 057/114] Daily bump. --- ChangeLog | 7 + gcc/ChangeLog | 56 ++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 310 ++++++++++++++++++++++++++++++++++++++++ gcc/fortran/ChangeLog | 29 ++++ gcc/testsuite/ChangeLog | 16 +++ libstdc++-v3/ChangeLog | 10 ++ 7 files changed, 429 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 201193fee8c0a..3631d9bffb2d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2024-06-20 Collin Funk + + PR bootstrap/115453 + * configure.ac: Quote variable result of AC_SEARCH_LIBS. Fix + typo ac_cv_search_pthread_crate. + * configure: Regenerate. + 2024-06-19 YunQiang Su Revert: diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8610e76b07b30..7693558c4e3c9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,59 @@ +2024-06-20 Roger Sayle + + * config/i386/i386-expand.cc (ix86_ternlog_idx): Allow any SUBREG + that matches register_operand. Use rtx_equal_p to compare REG + or SUBREG "leaf" operands. + +2024-06-20 Jeff Law + + * config/riscv/bitmanip.md (): New unified + pattern for bset/binv using a code iterator. + (i): Likewise. + (_mask): Likewise. Support XOR via any_or. + (isidi): Likewise. + * config/riscv/iterators.md (bit_optab): New iterator. + +2024-06-20 Hongyu Wang + + * config/i386/i386-options.cc (ix86_option_override_internal): + Use TARGET_*_P (opts->x_ix86_isa_flags*) instead of TARGET_* + for UINTR, LAM and APX_F. + +2024-06-20 Richard Biener + + PR tree-optimization/114413 + * tree-vect-slp.cc (release_scalar_stmts_to_slp_tree_map): + New function, split out from ... + (vect_analyze_slp): ... here. Call it. + (vect_cse_slp_nodes): New function. + (vect_optimize_slp): Call it. + +2024-06-20 Feng Xue + + * tree-vect-loop.cc (vect_transform_reduction): Change assertion to + cover all lane-reducing ops. + +2024-06-20 Feng Xue + + * tree-vect-loop.cc (vect_transform_reduction): Replace vec_oprnds0/1/2 + with one new array variable vec_oprnds[3]. + +2024-06-20 Feng Xue + + * tree-vect-loop.cc (vectorizable_reduction): Remove v_reduc_type, and + replace it to another local variable reduction_type. + +2024-06-20 Feng Xue + + * tree-vect-loop.cc (vectorizable_reduction): Remove the duplicated + check. + +2024-06-20 Feng Xue + + * tree-vectorizer.h (lane_reducing_stmt_p): New function. + * tree-vect-slp.cc (vect_analyze_slp): Use new function + lane_reducing_stmt_p to check statement. + 2024-06-19 YunQiang Su Revert: diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 9df1831b6e340..e778c427d11fc 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240620 +20240621 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 222b9cd9083f8..9e835405a8227 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,313 @@ +2024-06-20 Steve Baird + + * sem_attr.adb (Resolve_Attribute.Proper_Op): When resolving the + name of the reducer subprogram in a reduction expression, + Proper_Op treats references to operators defined in Standard + specially. Disable this special treatment if the type of the + reduction expression is not the right class of type for the + operator, or if a new Boolean parameter (named "Strict") is True. + (Resolve_Attribute): In the overloaded case, iterate over the + reducer subprogram candidates twice. First with Strict => True and + then, if no good intepretation is found, with Strict => False. + +2024-06-20 Yannick Moy + + * ghost.adb (Check_Ghost_Type): Fix checking. + +2024-06-20 Bob Duff + + * expander.ads: Minor comment fixes. + * nlists.ads: Misc comment improvements. + * sem_aux.ads (First_Discriminant): Improve comment. + * sem_ch12.adb: Misc cleanups. + (Associations): New package containing type Gen_Assocs_Rec + to represent matchings, and function Match_Assocs to create the + Gen_Assocs_Rec constant. + (Analyze_Associations): Call Match_Assocs, and other major + changes related to that. + * sem_ch12.ads: Minor comment fixes. + * sem_ch3.adb: Minor comment fixes. + +2024-06-20 Steve Baird + + * doc/gnat_rm/gnat_language_extensions.rst: Update documentation. + * doc/gnat_rm/implementation_defined_pragmas.rst: Update + documentation. + * errout.adb + (Error_Msg_GNAT_Extension): Update error message text. + * par-prag.adb: Update pragma parsing. This includes changing the + the name of the Check_Arg_Is_On_Or_Off formal parameter All_OK_Too + to All_Extensions_OK_Too. + * sem_prag.adb (Analyze_Pragma): In analyzing an + Extensions_Allowed pragma, replace uses of Name_All with + Name_All_Extensions; update a comment to reflect this. + * snames.ads-tmpl: Add Name_All_Extensions declaration. + * gnat_rm.texi: Regenerate. + +2024-06-20 Gary Dismukes + + * sem_ch4.adb (Try_Selected_Component_In_Instance): Reverse if_statement + clauses so that the testing for the special case of extensions of private + types in instance bodies is done first, followed by the testing for the case + of a parent type that's a generic actual type. In the extension case, apply + Base_Type to the type actual in the test of Used_As_Generic_Actual, and add + a test of Present (Parent_Subtype (Typ)). + +2024-06-20 Yannick Moy + + * inline.adb (Establish_Actual_Mapping_For_Inlined_Call): In the + case of formal with a fixed lower bounds, insert appropriate + conversion like in the case of a constrained type. + * tbuild.adb (Unchecked_Convert_To): Do not skip the conversion + when it may involve sliding due to a type with fixed lower bound. + +2024-06-20 Eric Botcazou + + * sem_ch12.adb (Instantiate_Formal_Package): Accept renamings of a + generic parent that is a child unit for the abbreviated instance. + +2024-06-20 Eric Botcazou + + * exp_ch4.adb (Expand_Composite_Equality): In the untagged record + case, always look for a user-defined equality operator in Ada 2012. + +2024-06-20 Doug Rupp + + * ali.ads (Interrupts_Default_To_System): New boolean. + (Interrupts_Default_To_System_Specified): New boolean. + * ali.adb (Interrupts_Default_To_System_Specified): Initialize. + (Interrupts_Default_To_System): Initialize. + (Scan_ALI): Processing for "ID". + * bindgen.adb: Coallesce comments on interrupt settings to ... + (Gen_Adainit): Import Interrupts_Default_To_System flag and set if + pragma specified. + (Gen_Output_File_Ada): Generate Local_Interrupt_States according + to pragma. + * init.c: ... here. + [vxworks] (__gnat_install_handler): Test for interrupt_state. + (__gl_interrupts_default_to_system): New global flag. + (__gnat_get_interrupt_State): return interrupt state according to + new global flag. + * lib-writ.ads: Document "ID". + * lib-writ.adb: Write out "ID". + * opt.ads (Interrupts_System_By_Default): New boolean, defaulted + to False. + * par-prag.adb (Pragma_Interrupts_System_By_Default): New. + * sem_prag.adb (Pragma_Interrupts_System_By_Default): Handle it. + (Pragma_Interrupts_System_By_Default): Default it. + * snames.ads-tmpl (Name_Interrupts_System_By_Default): New name. + (Pragma_Interrupts_System_By_Default): New + * libgnarl/s-intman__posix.adb (Initialize): Ensure the + Keep_Unmasked signal is sigset-able. + * doc/gnat_rm/implementation_defined_pragmas.rst: Document pragma + Interrupts_System_By_Default. + * doc/gnat_ugn/the_gnat_compilation_model.rst (Configuration + pragmas): Add Interrupts_System_By_Default. (Partition-Wide + Settings): Mention pragma Interrupts_System_By_Default. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Eric Botcazou + + * exp_ch4.adb (Expand_Array_Equality.Component_Equality): Copy the + Comes_From_Source flag from the original test to the new one, and + remove obsolete code dealing with unchecked unions. + * sem_util.adb (Has_Inferable_Discriminants): Return False for an + incomplete or private nominal subtype. + +2024-06-20 Eric Botcazou + + * freeze.adb (Freeze_Expression): Also attach pending freeze nodes + to the parent in the case of an internal block in a spec expression. + +2024-06-20 Eric Botcazou + + * debug.adb (d_l): Document new usage for the compiler. + * freeze.adb (Check_Strict_Alignment): Set the Strict_Alignment + flag on array types with aliased component, except if the + component size is equal to the storage unit or the -gnatd_l switch + is specified. + +2024-06-20 Eric Botcazou + + * doc/gnat_rm/implementation_advice.rst (Representation Clauses): + Remove >> marker and add end of sentence after code-block directive. + (RM 13.5.3(7-8)): Update to Ada 2005 wording. + * doc/gnat_rm/implementation_defined_characteristics.rst + (RM 13.5.3(5)): Likewise. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Piotr Trojanek + + * doc/gnat_rm/implementation_defined_aspects.rst + (Aspect Subprogram_Variant): Refer to SPARK User's Guide. + * doc/gnat_rm/implementation_defined_pragmas.rst + (Pragma Subprogram_Variant): Document syntax to satisfy the + convention; refer to SPARK User's Guide for semantics. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Eric Botcazou + + * freeze.adb (Freeze_Array_Type): Call Propagate_Controlled_Flags + to propagate the controlled flags from the component to the array. + (Freeze_Record_Type): Propagate the Finalize_Storage_Only flag + from the components to the record. + * sem_ch3.adb (Analyze_Private_Extension_Declaration): Do not call + Propagate_Concurrent_Flags here but... + (Array_Type_Declaration): Tidy and call Propagate_Controlled_Flags + to propagate the controlled flags from the component to the array. + (Build_Derived_Private_Type): Do not propagate the controlled flags + manually here but... + (Build_Derived_Record_Type): ...call Propagate_Controlled_Flags to + propagate the controlled flags from parent to derived type. + (Build_Derived_Type): Likewise. + (Copy_Array_Base_Type_Attributes): Call Propagate_Controlled_Flags + to copy the controlled flags. + (Record_Type_Definition): Streamline the propagation of the + Finalize_Storage_Only flag from the components to the record. + * sem_ch7.adb (Preserve_Full_Attributes): Use Full_Base and call + Propagate_Controlled_Flags to copy the controlled flags. + * sem_ch9.adb (Analyze_Protected_Definition): Use canonical idiom + to compute Has_Controlled_Component. + (Analyze_Protected_Type_Declaration): Minor tweak. + * sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): Do not deal with + Finalize_Storage_Only here. + * sem_util.ads (Propagate_Controlled_Flags): New declaration. + * sem_util.adb (Propagate_Controlled_Flags): New procedure. + +2024-06-20 Piotr Trojanek + + * freeze.adb (Check_Current_Instance): This routine is only called + with parameter E being a type entity, so there is no need to check + for types just before the equality with E. + * sem_ch13.adb (Analyze_Aspect_Specifications): Regroup condition + to avoid unnecessary evaluation. + (Check_Aspect_At_End_Of_Declarations): If In_Instance is true, + then the routine exits early. + +2024-06-20 Piotr Trojanek + + * freeze.adb (Find_Aspect_No_Parts): Tune whitespace. + * sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): Fix style. + +2024-06-20 Eric Botcazou + + * aspects.ads (Aspect_Id): Remove Aspect_Max_Entry_Queue_Depth. + (global arrays): Remove entry for it. + * exp_ch9.adb (Expand_N_Protected_Type_Declaration): Remove + reference to pragma Max_Entry_Queue_Depth in comment. + * par-prag.adb (Prag): Remove handling of + Pragma_Max_Entry_Queue_Depth. + * sem_ch13.adb (Analyze_Aspect_Specifications): Remove reference + to aspect Max_Entry_Queue_Depth in comment. + (Analyze_Aspect_Specifications): Remove processing of aspect + Max_Entry_Queue_Depth. + (Check_Aspect_At_Freeze_Point): Likewise. + * sem_prag.ads (Find_Related_Declaration_Or_Body): Remove + reference to pragma Max_Entry_Queue_Depth in comment. + * sem_prag.adb (Analyze_Pragma): Remove processing of pragma + Max_Entry_Queue_Depth. + (Sig_Flags): Remove entry for Pragma_Max_Entry_Queue_Depth. + * sem_util.adb (Get_Max_Queue_Length): Remove handling of pragma + Max_Entry_Queue_Depth. + (Has_Max_Queue_Length): Likewise. + * snames.ads-tmpl (Name_Max_Entry_Queue_Depth): Move back from + pragmas section to others section. + (Pragma_Id): Remove Pragma_Max_Entry_Queue_Depth. + +2024-06-20 Eric Botcazou + + * doc/gnat_rm/gnat_language_extensions.rst (Pragma Storage_Model): + Rename to Storage Model. + * doc/gnat_rm/implementation_defined_aspects.rst: Alphabetize. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Ronan Desplanques + + * gnat1drv.adb (Gnat1drv): Add coverage instrumentation + annotations. + +2024-06-20 Eric Botcazou + + * exp_ch3.adb (Expand_Freeze_Array_Type): Do not propagate the + concurrent flags and the Has_Controlled_Component flag here. + (Expand_Freeze_Record_Type): Likewise. + * freeze.adb (Freeze_Array_Type): Propagate the concurrent flags. + (Freeze_Record_Type): Likewise. + * sem_util.adb (Has_Some_Controlled_Component): Adjust comment. + +2024-06-20 Eric Botcazou + + * mutably_tagged.ads: Fix minor issues in comments throughout. + +2024-06-20 Richard Kenner + + * debug.adb: Add documentation for -gnatd_w. + +2024-06-20 Viljar Indus + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update + documentation for -gnatw.v. + * sem_ch13.adb: Convert all -gnatw.v related messages to warnings. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Viljar Indus + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update + documentation for -gnatw.n switch. + * exp_util.adb: Convert info messages into warnings. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Viljar Indus + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add + entry for -gnatis. + * errout.adb (Error_Msg_Internal): Stop printing info messages if + -gnatis was used. + * opt.ads: Add Info_Suppressed flag to track whether info messages + should be suppressed. + * switch-c.adb: Add parsing for -gnatis. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Viljar Indus + + * atree.ads: Remove Warning_Info_Messages. + * errout.adb: Remove various places where Warning_Info_Messages + was used. + * erroutc.adb: Remove various places where Warning_Info_Messages + was used. Create Error_Msg_Object objects with only an info + attribute if the message contained both info and warning insertion + characters. New method Has_Switch_Tag for detecting if a message + should have an error tag. + * errutil.adb: Create Error_Msg_Object objects with only an info + attribute if the message contained both info and warning insertion + characters. + +2024-06-20 Justin Squirek + + * doc/gnat_rm/gnat_language_extensions.rst: Add entry for 'Super. + * doc/gnat_rm/implementation_defined_attributes.rst: Remove entry + for 'Super. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2024-06-20 Steve Baird + + * gprep.adb (Process_Files.Process_One_File): When calling OS_Exit in an error + path, pass in a Status parameter of 1 instead of 0 (because 0 + indicates success). + * lib-load.adb (Load_Main_Source): Do not emit a message about a missing source file + if other error messages were generated by calling Load_Source_File; + the file isn't missing - it failed preprocessing. + +2024-06-20 Piotr Trojanek + + * sem_attr.adb (Attribute_22): Add Put_Image and Object_Size. + * sem_attr.ads (Attribute_Impl_Def): Remove Object_Size. + 2024-06-14 Eric Botcazou * gcc-interface/Makefile.in (tmake_file): Remove all references. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 8fcd6d40c956c..e07e417939fca 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,32 @@ +2024-06-20 Paul Thomas + + PR fortran/59104 + * dependency.cc (dependency_fcn, gfc_function_dependency): New + functions to detect dependency in array bounds and character + lengths on old style function results. + * dependency.h : Add prototype for gfc_function_dependency. + * error.cc (error_print): Remove trailing space. + * gfortran.h : Remove dummy_order and add fn_result_spec. + * symbol.cc : Remove declaration of next_dummy_order.. + (gfc_set_sym_referenced): remove setting of symbol dummy order. + * trans-array.cc (gfc_trans_auto_array_allocation): Detect + non-dummy symbols with function dependencies and put the + allocation at the end of the initialization code. + * trans-decl.cc : Include dependency.h. + (decl_order): New function that determines uses the location + field of the symbol 'declared_at' to determine the order of two + declarations. + (gfc_defer_symbol_init): Call gfc_function_dependency to put + dependent symbols in the right part of the tlink chain. Use + the location field of the symbol declared_at to determine the + order of declarations. + (gfc_trans_auto_character_variable): Put character length + initialization of dependent symbols at the end of the chain. + * trans.cc (gfc_add_init_cleanup): Add boolean argument with + default false that determines whther an expression is placed at + the back or the front of the initialization chain. + * trans.h : Update the prototype for gfc_add_init_cleanup. + 2024-06-19 Harald Anlauf PR fortran/115390 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 69e269330d9f1..57e6fcb34d818 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,19 @@ +2024-06-20 Hongyu Wang + + * gcc.target/i386/apx-ccmp-2.c: Remove -mno-apxf in option. + * gcc.target/i386/funcspec-56.inc: Drop uintr tests. + * gcc.target/i386/funcspec-6.c: Add uintr tests. + +2024-06-20 Paul Thomas + + PR fortran/59104 + * gfortran.dg/dependent_decls_2.f90: New test. + +2024-06-20 Richard Biener + + PR tree-optimization/114413 + * gcc.dg/vect/bb-slp-32.c: Expect CSE and vectorization on x86. + 2024-06-19 demin.han * gcc.target/riscv/rvv/base/float-point-cmp-eqne.c: New test. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 94a5ce9a1329c..4881fbe36e791 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2024-06-20 Matthias Kretz + + PR libstdc++/115454 + * include/experimental/bits/simd_x86.h (_S_not_equal_to): Use + neq comparison instead of bitwise negation after eq. + (_S_find_last_set): Clear unused high bits before computing + bit_width. + * testsuite/experimental/simd/pr115454_find_last_set.cc: New + test. + 2024-06-19 Jonathan Wakely * include/std/future: Adjust whitespace to use tabs for From 52c112800d9f44457c4832309a48c00945811313 Mon Sep 17 00:00:00 2001 From: Kewen Lin Date: Thu, 20 Jun 2024 20:23:56 -0500 Subject: [PATCH 058/114] rs6000: Fix wrong RTL patterns for vector merge high/low word on LE Commit r12-4496 changes some define_expands and define_insns for vector merge high/low word, which are altivec_vmrg[hl]w, vsx_xxmrg[hl]w_. These defines are mainly for built-in function vec_merge{h,l}, __builtin_vsx_xxmrghw, __builtin_vsx_xxmrghw_4si and some internal gen function needs. These functions should consider endianness, taking vec_mergeh as example, as PVIPR defines, vec_mergeh "Merges the first halves (in element order) of two vectors", it does note it's in element order. So it's mapped into vmrghw on BE while vmrglw on LE respectively. Although the mapped insns are different, as the discussion in PR106069, the RTL pattern should be still the same, it is conformed before commit r12-4496, define_expand altivec_vmrghw got expanded into: (vec_select:VSX_W (vec_concat: (match_operand:VSX_W 1 "register_operand" "wa,v") (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 0) (const_int 4) (const_int 1) (const_int 5)])))] on both BE and LE then. But commit r12-4496 changed it to expand into: (vec_select:VSX_W (vec_concat: (match_operand:VSX_W 1 "register_operand" "wa,v") (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 0) (const_int 4) (const_int 1) (const_int 5)])))] on BE, and (vec_select:VSX_W (vec_concat: (match_operand:VSX_W 1 "register_operand" "wa,v") (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 2) (const_int 6) (const_int 3) (const_int 7)])))] on LE, although the mapped insn are still vmrghw on BE and vmrglw on LE, the associated RTL pattern is completely wrong and inconsistent with the mapped insn. If optimization passes leave this pattern alone, even if its pattern doesn't represent its mapped insn, it's still fine, that's why simple testing on bif doesn't expose this issue. But once some optimization pass such as combine does some changes basing on this wrong pattern, because the pattern doesn't match the semantics that the expanded insn is intended to represent, it would cause the unexpected result. So this patch is to fix the wrong RTL pattern, ensure the associated RTL patterns become the same as before which can have the same semantic as their mapped insns. With the proposed patch, the expanders like altivec_vmrghw expands into altivec_vmrghb_direct_be or altivec_vmrglb_direct_le depending on endianness, "direct" can easily show which insn would be generated, _be and _le are mainly for the different RTL patterns as endianness. Co-authored-by: Xionghu Luo PR target/106069 PR target/115355 gcc/ChangeLog: * config/rs6000/altivec.md (altivec_vmrghw_direct_): Rename to ... (altivec_vmrghw_direct__be): ... this. Add the condition BYTES_BIG_ENDIAN. (altivec_vmrghw_direct__le): New define_insn. (altivec_vmrglw_direct_): Rename to ... (altivec_vmrglw_direct__be): ... this. Add the condition BYTES_BIG_ENDIAN. (altivec_vmrglw_direct__le): New define_insn. (altivec_vmrghw): Adjust by calling gen_altivec_vmrghw_direct_v4si_be for BE and gen_altivec_vmrglw_direct_v4si_le for LE. (altivec_vmrglw): Adjust by calling gen_altivec_vmrglw_direct_v4si_be for BE and gen_altivec_vmrghw_direct_v4si_le for LE. (vec_widen_umult_hi_v8hi): Adjust the call to gen_altivec_vmrghw_direct_v4si by gen_altivec_vmrghw for BE and by gen_altivec_vmrglw for LE. (vec_widen_smult_hi_v8hi): Likewise. (vec_widen_umult_lo_v8hi): Adjust the call to gen_altivec_vmrglw_direct_v4si by gen_altivec_vmrglw for BE and by gen_altivec_vmrghw for LE (vec_widen_smult_lo_v8hi): Likewise. * config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace CODE_FOR_altivec_vmrghw_direct_v4si by CODE_FOR_altivec_vmrghw_direct_v4si_be for BE and CODE_FOR_altivec_vmrghw_direct_v4si_le for LE. And replace CODE_FOR_altivec_vmrglw_direct_v4si by CODE_FOR_altivec_vmrglw_direct_v4si_be for BE and CODE_FOR_altivec_vmrglw_direct_v4si_le for LE. * config/rs6000/vsx.md (vsx_xxmrghw_): Adjust by calling gen_altivec_vmrghw_direct_v4si_be for BE and gen_altivec_vmrglw_direct_v4si_le for LE. (vsx_xxmrglw_): Adjust by calling gen_altivec_vmrglw_direct_v4si_be for BE and gen_altivec_vmrghw_direct_v4si_le for LE. gcc/testsuite/ChangeLog: * g++.target/powerpc/pr106069.C: New test. * gcc.target/powerpc/pr115355.c: New test. --- gcc/config/rs6000/altivec.md | 80 +++++++++---- gcc/config/rs6000/rs6000.cc | 8 +- gcc/config/rs6000/vsx.md | 28 +++-- gcc/testsuite/g++.target/powerpc/pr106069.C | 119 ++++++++++++++++++++ gcc/testsuite/gcc.target/powerpc/pr115355.c | 37 ++++++ 5 files changed, 232 insertions(+), 40 deletions(-) create mode 100644 gcc/testsuite/g++.target/powerpc/pr106069.C create mode 100644 gcc/testsuite/gcc.target/powerpc/pr115355.c diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index bb20441c096c4..dcc71cc0f52d8 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -1212,16 +1212,18 @@ (use (match_operand:V4SI 2 "register_operand"))] "VECTOR_MEM_ALTIVEC_P (V4SImode)" { - rtx (*fun) (rtx, rtx, rtx); - fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrghw_direct_v4si - : gen_altivec_vmrglw_direct_v4si; - if (!BYTES_BIG_ENDIAN) - std::swap (operands[1], operands[2]); - emit_insn (fun (operands[0], operands[1], operands[2])); + if (BYTES_BIG_ENDIAN) + emit_insn (gen_altivec_vmrghw_direct_v4si_be (operands[0], + operands[1], + operands[2])); + else + emit_insn (gen_altivec_vmrglw_direct_v4si_le (operands[0], + operands[2], + operands[1])); DONE; }) -(define_insn "altivec_vmrghw_direct_" +(define_insn "altivec_vmrghw_direct__be" [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") (vec_select:VSX_W (vec_concat: @@ -1229,7 +1231,21 @@ (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 0) (const_int 4) (const_int 1) (const_int 5)])))] - "TARGET_ALTIVEC" + "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" + "@ + xxmrghw %x0,%x1,%x2 + vmrghw %0,%1,%2" + [(set_attr "type" "vecperm")]) + +(define_insn "altivec_vmrghw_direct__le" + [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") + (vec_select:VSX_W + (vec_concat: + (match_operand:VSX_W 2 "register_operand" "wa,v") + (match_operand:VSX_W 1 "register_operand" "wa,v")) + (parallel [(const_int 2) (const_int 6) + (const_int 3) (const_int 7)])))] + "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "@ xxmrghw %x0,%x1,%x2 vmrghw %0,%1,%2" @@ -1318,16 +1334,18 @@ (use (match_operand:V4SI 2 "register_operand"))] "VECTOR_MEM_ALTIVEC_P (V4SImode)" { - rtx (*fun) (rtx, rtx, rtx); - fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrglw_direct_v4si - : gen_altivec_vmrghw_direct_v4si; - if (!BYTES_BIG_ENDIAN) - std::swap (operands[1], operands[2]); - emit_insn (fun (operands[0], operands[1], operands[2])); + if (BYTES_BIG_ENDIAN) + emit_insn (gen_altivec_vmrglw_direct_v4si_be (operands[0], + operands[1], + operands[2])); + else + emit_insn (gen_altivec_vmrghw_direct_v4si_le (operands[0], + operands[2], + operands[1])); DONE; }) -(define_insn "altivec_vmrglw_direct_" +(define_insn "altivec_vmrglw_direct__be" [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") (vec_select:VSX_W (vec_concat: @@ -1335,7 +1353,21 @@ (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 2) (const_int 6) (const_int 3) (const_int 7)])))] - "TARGET_ALTIVEC" + "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" + "@ + xxmrglw %x0,%x1,%x2 + vmrglw %0,%1,%2" + [(set_attr "type" "vecperm")]) + +(define_insn "altivec_vmrglw_direct__le" + [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") + (vec_select:VSX_W + (vec_concat: + (match_operand:VSX_W 2 "register_operand" "wa,v") + (match_operand:VSX_W 1 "register_operand" "wa,v")) + (parallel [(const_int 0) (const_int 4) + (const_int 1) (const_int 5)])))] + "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "@ xxmrglw %x0,%x1,%x2 vmrglw %0,%1,%2" @@ -3861,13 +3893,13 @@ { emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo)); + emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], vo, ve)); + emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } DONE; }) @@ -3886,13 +3918,13 @@ { emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], ve, vo)); + emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], vo, ve)); + emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } DONE; }) @@ -3911,13 +3943,13 @@ { emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo)); + emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], vo, ve)); + emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } DONE; }) @@ -3936,13 +3968,13 @@ { emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], ve, vo)); + emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2])); - emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], vo, ve)); + emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } DONE; }) diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index e4dc629ddcc9a..2046a831938a8 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -23450,8 +23450,8 @@ altivec_expand_vec_perm_const (rtx target, rtx op0, rtx op1, : CODE_FOR_altivec_vmrglh_direct, {0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23}}, {OPTION_MASK_ALTIVEC, - BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si - : CODE_FOR_altivec_vmrglw_direct_v4si, + BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si_be + : CODE_FOR_altivec_vmrglw_direct_v4si_le, {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23}}, {OPTION_MASK_ALTIVEC, BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglb_direct @@ -23462,8 +23462,8 @@ altivec_expand_vec_perm_const (rtx target, rtx op0, rtx op1, : CODE_FOR_altivec_vmrghh_direct, {8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31}}, {OPTION_MASK_ALTIVEC, - BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglw_direct_v4si - : CODE_FOR_altivec_vmrghw_direct_v4si, + BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglw_direct_v4si_be + : CODE_FOR_altivec_vmrghw_direct_v4si_le, {8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31}}, {OPTION_MASK_P8_VECTOR, BYTES_BIG_ENDIAN ? CODE_FOR_p8_vmrgew_v4sf_direct diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index f135fa079bd81..7a9c19ac90305 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -4798,12 +4798,14 @@ (const_int 1) (const_int 5)])))] "VECTOR_MEM_VSX_P (mode)" { - rtx (*fun) (rtx, rtx, rtx); - fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrghw_direct_ - : gen_altivec_vmrglw_direct_; - if (!BYTES_BIG_ENDIAN) - std::swap (operands[1], operands[2]); - emit_insn (fun (operands[0], operands[1], operands[2])); + if (BYTES_BIG_ENDIAN) + emit_insn (gen_altivec_vmrghw_direct_v4si_be (operands[0], + operands[1], + operands[2])); + else + emit_insn (gen_altivec_vmrglw_direct_v4si_le (operands[0], + operands[2], + operands[1])); DONE; } [(set_attr "type" "vecperm")]) @@ -4818,12 +4820,14 @@ (const_int 3) (const_int 7)])))] "VECTOR_MEM_VSX_P (mode)" { - rtx (*fun) (rtx, rtx, rtx); - fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrglw_direct_ - : gen_altivec_vmrghw_direct_; - if (!BYTES_BIG_ENDIAN) - std::swap (operands[1], operands[2]); - emit_insn (fun (operands[0], operands[1], operands[2])); + if (BYTES_BIG_ENDIAN) + emit_insn (gen_altivec_vmrglw_direct_v4si_be (operands[0], + operands[1], + operands[2])); + else + emit_insn (gen_altivec_vmrghw_direct_v4si_le (operands[0], + operands[2], + operands[1])); DONE; } [(set_attr "type" "vecperm")]) diff --git a/gcc/testsuite/g++.target/powerpc/pr106069.C b/gcc/testsuite/g++.target/powerpc/pr106069.C new file mode 100644 index 0000000000000..537207d2fe838 --- /dev/null +++ b/gcc/testsuite/g++.target/powerpc/pr106069.C @@ -0,0 +1,119 @@ +/* { dg-options "-O -fno-tree-forwprop -maltivec" } */ +/* { dg-require-effective-target vmx_hw } */ +/* { dg-do run } */ + +typedef __attribute__ ((altivec (vector__))) unsigned native_simd_type; + +union +{ + native_simd_type V; + int R[4]; +} store_le_vec; + +struct S +{ + S () = default; + S (unsigned B0) + { + native_simd_type val{B0}; + m_simd = val; + } + void store_le (unsigned int out[]) + { + store_le_vec.V = m_simd; + unsigned int x0 = store_le_vec.R[0]; + __builtin_memcpy (out, &x0, 4); + } + S rotl (unsigned int r) + { + native_simd_type rot{r}; + return __builtin_vec_rl (m_simd, rot); + } + void operator+= (S other) + { + m_simd = __builtin_vec_add (m_simd, other.m_simd); + } + void operator^= (S other) + { + m_simd = __builtin_vec_xor (m_simd, other.m_simd); + } + static void transpose (S &B0, S B1, S B2, S B3) + { + native_simd_type T0 = __builtin_vec_mergeh (B0.m_simd, B2.m_simd); + native_simd_type T1 = __builtin_vec_mergeh (B1.m_simd, B3.m_simd); + native_simd_type T2 = __builtin_vec_mergel (B0.m_simd, B2.m_simd); + native_simd_type T3 = __builtin_vec_mergel (B1.m_simd, B3.m_simd); + B0 = __builtin_vec_mergeh (T0, T1); + B3 = __builtin_vec_mergel (T2, T3); + } + S (native_simd_type x) : m_simd (x) {} + native_simd_type m_simd; +}; + +void +foo (unsigned int output[], unsigned state[]) +{ + S R00 = state[0]; + S R01 = state[0]; + S R02 = state[2]; + S R03 = state[0]; + S R05 = state[5]; + S R06 = state[6]; + S R07 = state[7]; + S R08 = state[8]; + S R09 = state[9]; + S R10 = state[10]; + S R11 = state[11]; + S R12 = state[12]; + S R13 = state[13]; + S R14 = state[4]; + S R15 = state[15]; + for (int r = 0; r != 10; ++r) + { + R09 += R13; + R11 += R15; + R05 ^= R09; + R06 ^= R10; + R07 ^= R11; + R07 = R07.rotl (7); + R00 += R05; + R01 += R06; + R02 += R07; + R15 ^= R00; + R12 ^= R01; + R13 ^= R02; + R00 += R05; + R01 += R06; + R02 += R07; + R15 ^= R00; + R12 = R12.rotl (8); + R13 = R13.rotl (8); + R10 += R15; + R11 += R12; + R08 += R13; + R09 += R14; + R05 ^= R10; + R06 ^= R11; + R07 ^= R08; + R05 = R05.rotl (7); + R06 = R06.rotl (7); + R07 = R07.rotl (7); + } + R00 += state[0]; + S::transpose (R00, R01, R02, R03); + R00.store_le (output); +} + +unsigned int res[1]; +unsigned main_state[]{1634760805, 60878, 2036477234, 6, + 0, 825562964, 1471091955, 1346092787, + 506976774, 4197066702, 518848283, 118491664, + 0, 0, 0, 0}; +int +main () +{ + foo (res, main_state); + if (res[0] != 0x41fcef98) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr115355.c b/gcc/testsuite/gcc.target/powerpc/pr115355.c new file mode 100644 index 0000000000000..8955126b80850 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr115355.c @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-require-effective-target p9vector_hw } */ +/* Force vectorization with -fno-vect-cost-model to have vector unpack + which exposes the issue in PR115355. */ +/* { dg-options "-O2 -mdejagnu-cpu=power9 -fno-vect-cost-model" } */ + +/* Verify it runs successfully. */ + +__attribute__((noipa)) +void setToIdentityGOOD(unsigned long long *mVec, unsigned int mLen) +{ + #pragma GCC novector + for (unsigned int i = 0; i < mLen; i++) + mVec[i] = i; +} + +__attribute__((noipa)) +void setToIdentityBAD(unsigned long long *mVec, unsigned int mLen) +{ + for (unsigned int i = 0; i < mLen; i++) + mVec[i] = i; +} + +unsigned long long vec1[100]; +unsigned long long vec2[100]; + +int main() +{ + unsigned int l = 29; + setToIdentityGOOD (vec1, 29); + setToIdentityBAD (vec2, 29); + + if (__builtin_memcmp (vec1, vec2, l * sizeof (vec1[0])) != 0) + __builtin_abort (); + + return 0; +} From 7b67ec4b50ae523a1e1be410644abb627daa9590 Mon Sep 17 00:00:00 2001 From: YunQiang Su Date: Tue, 18 Jun 2024 17:03:51 +0800 Subject: [PATCH 059/114] MIPS: Set condmove cost to SET(REG, REG) On most uarch, the cost condmove is same as other noraml integer, and it should be COSTS_N_INSNS(1). In GCC12 or previous, the condmove is always enabled, and from GCC13, we start to compare the cost. The generic rtx_cost give the result of COSTS_N_INSN(2). Let's define it to COSTS_N_INSN(1) in mips_rtx_costs. gcc * config/mips/mips.cc(mips_rtx_costs): Set condmove cost. * config/mips/mips.md(mov_on_, mov_on__mips16e2, mov_on__ne mov_on__ne_mips16e2): Define name by remove starting *, so that we can use CODE_FOR_. gcc/testsuite * gcc.target/mips/movcc-2.c: Add k?100:1000 test. --- gcc/config/mips/mips.cc | 24 ++++++++++++++++++++++++ gcc/config/mips/mips.md | 8 ++++---- gcc/testsuite/gcc.target/mips/movcc-2.c | 14 ++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index b7acf04190354..48924116937be 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -4692,6 +4692,30 @@ mips_rtx_costs (rtx x, machine_mode mode, int outer_code, *total = mips_set_reg_reg_cost (GET_MODE (SET_DEST (x))); return true; } + int insn_code; + if (register_operand (SET_DEST (x), VOIDmode) + && GET_CODE (SET_SRC (x)) == IF_THEN_ELSE) + insn_code = recog_memoized (make_insn_raw (x)); + else + insn_code = -1; + switch (insn_code) + { + /* MIPS16e2 ones may be listed here, while the only known CPU core + that implements MIPS16e2 is interAptiv. The Dependency delays + of MOVN/MOVZ on interAptiv is 3. */ + case CODE_FOR_movsi_on_si: + case CODE_FOR_movdi_on_si: + case CODE_FOR_movsi_on_di: + case CODE_FOR_movdi_on_di: + case CODE_FOR_movsi_on_si_ne: + case CODE_FOR_movdi_on_si_ne: + case CODE_FOR_movsi_on_di_ne: + case CODE_FOR_movdi_on_di_ne: + *total = mips_set_reg_reg_cost (GET_MODE (SET_DEST (x))); + return true; + default: + break; + } return false; default: diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 806fd29cf97fb..f9da06663bb58 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -7459,7 +7459,7 @@ ;; MIPS4 Conditional move instructions. -(define_insn "*mov_on_" +(define_insn "mov_on_" [(set (match_operand:GPR 0 "register_operand" "=d,d") (if_then_else:GPR (match_operator 4 "equality_operator" @@ -7474,7 +7474,7 @@ [(set_attr "type" "condmove") (set_attr "mode" "")]) -(define_insn "*mov_on__mips16e2" +(define_insn "mov_on__mips16e2" [(set (match_operand:GPR 0 "register_operand" "=d,d,d,d") (if_then_else:GPR (match_operator 4 "equality_operator" @@ -7492,7 +7492,7 @@ (set_attr "mode" "") (set_attr "extended_mips16" "yes")]) -(define_insn "*mov_on__ne" +(define_insn "mov_on__ne" [(set (match_operand:GPR 0 "register_operand" "=d,d") (if_then_else:GPR (match_operand:GPR2 1 "register_operand" ",") @@ -7505,7 +7505,7 @@ [(set_attr "type" "condmove") (set_attr "mode" "")]) -(define_insn "*mov_on__ne_mips16e2" +(define_insn "mov_on__ne_mips16e2" [(set (match_operand:GPR 0 "register_operand" "=d,d,d,d") (if_then_else:GPR (match_operand:GPR2 1 "register_operand" ",,t,t") diff --git a/gcc/testsuite/gcc.target/mips/movcc-2.c b/gcc/testsuite/gcc.target/mips/movcc-2.c index 1926e6460d144..cbda3c8febc89 100644 --- a/gcc/testsuite/gcc.target/mips/movcc-2.c +++ b/gcc/testsuite/gcc.target/mips/movcc-2.c @@ -3,6 +3,8 @@ /* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ /* { dg-final { scan-assembler "\tmovz\t" } } */ /* { dg-final { scan-assembler "\tmovn\t" } } */ +/* { dg-final { scan-assembler "\tmovz\t" } } */ +/* { dg-final { scan-assembler "\tmovn\t" } } */ void ext_long (long); @@ -17,3 +19,15 @@ sub5 (long i, long j, int k) { ext_long (!k ? i : j); } + +NOMIPS16 long +sub6 (int k) +{ + return !k ? 100 : 1000; +} + +NOMIPS16 long +sub7 (int k) +{ + return !k ? 100 : 1000; +} From 573f11ec34eeb6a6c3bd3d7619738f927236727b Mon Sep 17 00:00:00 2001 From: YunQiang Su Date: Thu, 20 Jun 2024 10:37:39 +0800 Subject: [PATCH 060/114] Build: Set gcc_cv_as_mips_explicit_relocs if gcc_cv_as_mips_explicit_relocs_pcrel We check gcc_cv_as_mips_explicit_relocs if gcc_cv_as_mips_explicit_relocs_pcrel only, while gcc_cv_as_mips_explicit_relocs is used by later code. Maybe, it is time for use to set gcc_cv_as_mips_explicit_relocs always now, as it has been in Binutils for more than 20 years. gcc * configure.ac: Set gcc_cv_as_mips_explicit_relocs if gcc_cv_as_mips_explicit_relocs_pcrel. * configure: Regenerate. --- gcc/configure | 2 ++ gcc/configure.ac | 2 ++ 2 files changed, 4 insertions(+) diff --git a/gcc/configure b/gcc/configure index 9dc0b65dfaace..ad998105da3c5 100755 --- a/gcc/configure +++ b/gcc/configure @@ -30278,6 +30278,8 @@ $as_echo "#define MIPS_EXPLICIT_RELOCS MIPS_EXPLICIT_RELOCS_BASE" >>confdefs.h fi + else + gcc_cv_as_mips_explicit_relocs=yes fi if test x$gcc_cv_as_mips_explicit_relocs = xno; then \ diff --git a/gcc/configure.ac b/gcc/configure.ac index b2243e9954aac..c51d3ca5f1bd5 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -5255,6 +5255,8 @@ LCF0: [ lw $4,%gp_rel(foo)($4)],, [AC_DEFINE(MIPS_EXPLICIT_RELOCS, MIPS_EXPLICIT_RELOCS_BASE, [Define if assembler supports %reloc.])]) + else + gcc_cv_as_mips_explicit_relocs=yes fi if test x$gcc_cv_as_mips_explicit_relocs = xno; then \ From 1f974c3a24b76e25a2b7f31a6c7f4aee93a9eaab Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 21 Jun 2024 08:05:22 +0200 Subject: [PATCH 061/114] Remove outdated info from passes.texi This applies some maintainance to passes.texi by removing references to no longer existing passes. It also fixes a few minor things but doesn't fill the gaps that meanwhile exist. * doc/passes.texi: Remove references to no longer existing passes. --- gcc/doc/passes.texi | 70 ++++++--------------------------------------- 1 file changed, 9 insertions(+), 61 deletions(-) diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi index b50d3d5635bdd..5746d3ec63639 100644 --- a/gcc/doc/passes.texi +++ b/gcc/doc/passes.texi @@ -450,18 +450,6 @@ The following briefly describes the Tree optimization passes that are run after gimplification and what source files they are located in. @itemize @bullet -@item Remove useless statements - -This pass is an extremely simple sweep across the gimple code in which -we identify obviously dead code and remove it. Here we do things like -simplify @code{if} statements with constant conditions, remove -exception handling constructs surrounding code that obviously cannot -throw, remove lexical bindings that contain no variables, and other -assorted simplistic cleanups. The idea is to get rid of the obvious -stuff quickly rather than wait until later when it's more work to get -rid of it. This pass is located in @file{tree-cfg.cc} and described by -@code{pass_remove_useless_stmts}. - @item OpenMP lowering If OpenMP generation (@option{-fopenmp}) is enabled, this pass lowers @@ -511,15 +499,6 @@ This pass decomposes a function into basic blocks and creates all of the edges that connect them. It is located in @file{tree-cfg.cc} and is described by @code{pass_build_cfg}. -@item Find all referenced variables - -This pass walks the entire function and collects an array of all -variables referenced in the function, @code{referenced_vars}. The -index at which a variable is found in the array is used as a UID -for the variable within this function. This data is needed by the -SSA rewriting routines. The pass is located in @file{tree-dfa.cc} -and is described by @code{pass_referenced_vars}. - @item Enter static single assignment form This pass rewrites the function such that it is in SSA form. After @@ -527,7 +506,7 @@ this pass, all @code{is_gimple_reg} variables will be referenced by @code{SSA_NAME}, and all occurrences of other variables will be annotated with @code{VDEFS} and @code{VUSES}; PHI nodes will have been inserted as necessary for each basic block. This pass is -located in @file{tree-ssa.cc} and is described by @code{pass_build_ssa}. +located in @file{tree-into-ssa.cc} and is described by @code{pass_build_ssa}. @item Warn for uninitialized variables @@ -536,7 +515,7 @@ are fed by default definition. For non-parameter variables, such uses are uninitialized. The pass is run twice, before and after optimization (if turned on). In the first pass we only warn for uses that are positively uninitialized; in the second pass we warn for uses that -are possibly uninitialized. The pass is located in @file{tree-ssa.cc} +are possibly uninitialized. The pass is located in @file{tree-ssa-uninit.cc} and is defined by @code{pass_early_warn_uninitialized} and @code{pass_late_warn_uninitialized}. @@ -562,15 +541,6 @@ variables that are used once into the expression that uses them and seeing if the result can be simplified. It is located in @file{tree-ssa-forwprop.cc} and is described by @code{pass_forwprop}. -@item Copy Renaming - -This pass attempts to change the name of compiler temporaries involved in -copy operations such that SSA->normal can coalesce the copy away. When compiler -temporaries are copies of user variables, it also renames the compiler -temporary to the user variable resulting in better use of user symbols. It is -located in @file{tree-ssa-copyrename.c} and is described by -@code{pass_copyrename}. - @item PHI node optimizations This pass recognizes forms of PHI inputs that can be represented as @@ -586,10 +556,9 @@ is used to promote variables from in-memory addressable objects to non-aliased variables that can be renamed into SSA form. We also update the @code{VDEF}/@code{VUSE} memory tags for non-renameable aggregates so that we get fewer false kills. The pass is located -in @file{tree-ssa-alias.cc} and is described by @code{pass_may_alias}. +in @file{tree-ssa-structalias.cc} and is described by @code{pass_may_alias}. -Interprocedural points-to information is located in -@file{tree-ssa-structalias.cc} and described by @code{pass_ipa_pta}. +Interprocedural points-to information is described by @code{pass_ipa_pta}. @item Profiling @@ -644,8 +613,9 @@ This pass eliminates partially redundant computations, as well as performing load motion. The pass is located in @file{tree-ssa-pre.cc} and is described by @code{pass_pre}. -Just before partial redundancy elimination, if -@option{-funsafe-math-optimizations} is on, GCC tries to convert +@item CSE of reciprocals + +If @option{-funsafe-math-optimizations} is on, GCC tries to convert divisions to multiplications by the reciprocal. The pass is located in @file{tree-ssa-math-opts.cc} and is described by @code{pass_cse_reciprocal}. @@ -744,10 +714,6 @@ that must be constant even in the presence of conditional branches. The pass is located in @file{tree-ssa-ccp.cc} and is described by @code{pass_ccp}. -A related pass that works on memory loads and stores, and not just -register values, is located in @file{tree-ssa-ccp.cc} and described by -@code{pass_store_ccp}. - @item Conditional copy propagation This is similar to constant propagation but the lattice of values is @@ -755,10 +721,6 @@ the ``copy-of'' relation. It eliminates redundant copies from the code. The pass is located in @file{tree-ssa-copy.cc} and described by @code{pass_copy_prop}. -A related pass that works on memory copies, and not just register -copies, is located in @file{tree-ssa-copy.cc} and described by -@code{pass_store_copy_prop}. - @item Value range propagation This transformation is similar to constant propagation but @@ -811,14 +773,6 @@ run last so that we have as much time as possible to prove that the statement is not reachable. It is located in @file{tree-cfg.cc} and is described by @code{pass_warn_function_return}. -@item Leave static single assignment form - -This pass rewrites the function such that it is in normal form. At -the same time, we eliminate as many single-use temporaries as possible, -so the intermediate language is no longer GIMPLE, but GENERIC@. The -pass is located in @file{tree-outof-ssa.cc} and is described by -@code{pass_del_ssa}. - @item Merge PHI nodes that feed into one another This is part of the CFG cleanup passes. It attempts to join PHI nodes @@ -867,14 +821,8 @@ includes loop interchange, scaling, skewing and reversal and they are all geared to the optimization of data locality in array traversals and the removal of dependencies that hamper optimizations such as loop parallelization and vectorization. The pass is located in -@file{tree-loop-linear.c} and described by -@code{pass_linear_transform}. - -@item Removal of empty loops - -This pass removes loops with no code in them. The pass is located in -@file{tree-ssa-loop-ivcanon.cc} and described by -@code{pass_empty_loop}. +the @file{graphile-*.cc} files and described by +@code{pass_graphite}. @item Unrolling of small loops From 59221dc587f369695d9b0c2f73aedf8458931f0f Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Thu, 20 Jun 2024 15:52:05 -0700 Subject: [PATCH 062/114] complex-lowering: Better handling of PAREN_EXPR [PR68855] When PAREN_EXPR tree code was added in r0-85884-gdedd42d511b6e4, a simplified handling was added to complex lowering. Which means we would get: ``` _9 = COMPLEX_EXPR <_15, _14>; _11 = ((_9)); _19 = REALPART_EXPR <_11>; _20 = IMAGPART_EXPR <_11>; ``` In many cases instead of just simply: ``` _19 = ((_15)); _20 = ((_14)); ``` So this adds full support for PAREN_EXPR to complex lowering. It is handled very similar as NEGATE_EXPR; except creating PAREN_EXPR instead of NEGATE_EXPR for the real/imag parts. This allows for more optimizations including vectorization, especially with -ffast-math. gfortran.dg/vect/pr68855.f90 is an example where this could show up. It also shows up in SPEC CPU 2006's 465.tonto; though I have not done any benchmarking there. Bootstrapped and tested on x86_64-linux-gnu with no regressions. gcc/ChangeLog: PR tree-optimization/68855 * tree-complex.cc (init_dont_simulate_again): Handle PAREN_EXPR like NEGATE_EXPR. (complex_propagate::visit_stmt): Likewise. (expand_complex_move): Don't handle PAREN_EXPR. (expand_complex_paren): New function. (expand_complex_operations_1): Handle PAREN_EXPR like NEGATE_EXPR. And call expand_complex_paren for PAREN_EXPR. gcc/testsuite/ChangeLog: * gcc.dg/vect/pr68855.c: New test. * gfortran.dg/vect/pr68855.f90: New test. Signed-off-by: Andrew Pinski --- gcc/testsuite/gcc.dg/vect/pr68855.c | 17 +++++++++++++ gcc/testsuite/gfortran.dg/vect/pr68855.f90 | 16 ++++++++++++ gcc/tree-complex.cc | 29 ++++++++++++++++++++-- 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr68855.c create mode 100644 gcc/testsuite/gfortran.dg/vect/pr68855.f90 diff --git a/gcc/testsuite/gcc.dg/vect/pr68855.c b/gcc/testsuite/gcc.dg/vect/pr68855.c new file mode 100644 index 0000000000000..68a3a1cee36ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr68855.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_float } */ + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ + +/* PAREN_EXPR should not cause the vectorization of complex float add to be missed. */ +void foo(_Complex float *a, int n) +{ + for(int i = 0; i < n; i++) + { + _Complex float t; + t = a[i]; + t += 6.0; + t = __builtin_assoc_barrier(t); + a[i] = t; + } +} diff --git a/gcc/testsuite/gfortran.dg/vect/pr68855.f90 b/gcc/testsuite/gfortran.dg/vect/pr68855.f90 new file mode 100644 index 0000000000000..90d444c86bfa0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/vect/pr68855.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-require-effective-target vect_float } + +! { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } +! PAREN_EXPR should not cause the vectorization of complex float add to be missed. + +subroutine foo(a,n) + + complex (kind(1.0)) :: a(*) + integer :: i,n + + do i=1,n + a(i)=(a(i)+(6.0,1.0)) + enddo + +end subroutine foo diff --git a/gcc/tree-complex.cc b/gcc/tree-complex.cc index 877913972bdda..8a879acffca89 100644 --- a/gcc/tree-complex.cc +++ b/gcc/tree-complex.cc @@ -281,6 +281,7 @@ init_dont_simulate_again (void) case NEGATE_EXPR: case CONJ_EXPR: + case PAREN_EXPR: if (TREE_CODE (TREE_TYPE (op0)) == COMPLEX_TYPE) saw_a_complex_op = true; break; @@ -391,6 +392,7 @@ complex_propagate::visit_stmt (gimple *stmt, edge *taken_edge_p ATTRIBUTE_UNUSED break; case NEGATE_EXPR: + case PAREN_EXPR: case CONJ_EXPR: new_l = find_lattice_value (gimple_assign_rhs1 (stmt)); break; @@ -852,8 +854,7 @@ expand_complex_move (gimple_stmt_iterator *gsi, tree type) update_complex_components_on_edge (e, lhs, r, i); } else if (is_gimple_call (stmt) - || gimple_has_side_effects (stmt) - || gimple_assign_rhs_code (stmt) == PAREN_EXPR) + || gimple_has_side_effects (stmt)) { r = build1 (REALPART_EXPR, inner_type, lhs); i = build1 (IMAGPART_EXPR, inner_type, lhs); @@ -1545,6 +1546,25 @@ expand_complex_negation (gimple_stmt_iterator *gsi, tree inner_type, update_complex_assignment (gsi, rr, ri); } +/* Expand complex paren to scalars: + ((a)) = ((ar)) + i((ai)) +*/ + +static void +expand_complex_paren (gimple_stmt_iterator *gsi, tree inner_type, + tree ar, tree ai) +{ + tree rr, ri; + gimple_seq stmts = NULL; + location_t loc = gimple_location (gsi_stmt (*gsi)); + + rr = gimple_build (&stmts, loc, PAREN_EXPR, inner_type, ar); + ri = gimple_build (&stmts, loc, PAREN_EXPR, inner_type, ai); + + gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT); + update_complex_assignment (gsi, rr, ri); +} + /* Expand complex conjugate to scalars: ~a = (ar) + i(-ai) */ @@ -1697,6 +1717,7 @@ expand_complex_operations_1 (gimple_stmt_iterator *gsi) case ROUND_DIV_EXPR: case RDIV_EXPR: case NEGATE_EXPR: + case PAREN_EXPR: case CONJ_EXPR: if (TREE_CODE (type) != COMPLEX_TYPE) return; @@ -1815,6 +1836,10 @@ expand_complex_operations_1 (gimple_stmt_iterator *gsi) expand_complex_comparison (gsi, ar, ai, br, bi, code); break; + case PAREN_EXPR: + expand_complex_paren (gsi, inner_type, ar, ai); + break; + default: gcc_unreachable (); } From 3ebd803b861e1da85f08664915e3267f690ff611 Mon Sep 17 00:00:00 2001 From: Justin Squirek Date: Thu, 9 May 2024 20:16:24 +0000 Subject: [PATCH 063/114] ada: Spurious style error with mutiple square brackets This patch fixes a spurious error in the compiler when checking for style for token separation where two square brackets are next to each other. gcc/ada/ * csets.ads (Identifier_Char): New function - replacing table. * csets.adb (Identifier_Char): Rename and move table for static values. (Initialize): Remove dynamic calculations. (Identifier_Char): New function to calculate dynamic values. * opt.adb (Set_Config_Switches): Remove setting of Identifier_Char. --- gcc/ada/csets.adb | 46 ++++++++++++++++++++++++++++++++++++---------- gcc/ada/csets.ads | 14 +++++++------- gcc/ada/opt.adb | 3 --- 3 files changed, 43 insertions(+), 20 deletions(-) diff --git a/gcc/ada/csets.adb b/gcc/ada/csets.adb index 7e5af3ffa1714..54ebdb46b6cd7 100644 --- a/gcc/ada/csets.adb +++ b/gcc/ada/csets.adb @@ -29,6 +29,12 @@ with System.WCh_Con; use System.WCh_Con; package body Csets is + Identifier_Char_Table : Char_Array_Flags; + -- This table contains all statically known characters which can appear in + -- identifiers, but excludes characters which need to be known dynamically, + -- for example like those that depend on the current Ada version which may + -- change from file to file. + X_80 : constant Character := Character'Val (16#80#); X_81 : constant Character := Character'Val (16#81#); X_82 : constant Character := Character'Val (16#82#); @@ -1085,6 +1091,34 @@ package body Csets is others => ' '); + --------------------- + -- Identifier_Char -- + --------------------- + + function Identifier_Char (Item : Character) return Boolean is + begin + -- Handle explicit dynamic cases + + case Item is + + -- Add [ as an identifier character to deal with the brackets + -- notation for wide characters used in identifiers for versions up + -- to Ada 2012. + + -- Note that if we are not allowing wide characters in identifiers, + -- then any use of this notation will be flagged as an error in + -- Scan_Identifier. + + when '[' | ']' => + return Ada_Version < Ada_2022; + + -- Otherwise, this is a static case - use the table + + when others => + return Identifier_Char_Table (Item); + end case; + end Identifier_Char; + ---------------- -- Initialize -- ---------------- @@ -1144,24 +1178,16 @@ package body Csets is -- Build Identifier_Char table from used entries of Fold_Upper for J in Character loop - Identifier_Char (J) := (Fold_Upper (J) /= ' '); + Identifier_Char_Table (J) := (Fold_Upper (J) /= ' '); end loop; - -- Add [ as an identifier character to deal with the brackets notation - -- for wide characters used in identifiers for versions up to Ada 2012. - -- Note that if we are not allowing wide characters in identifiers, then - -- any use of this notation will be flagged as an error in - -- Scan_Identifier. - - Identifier_Char ('[') := Ada_Version < Ada_2022; - -- Add entry for ESC if wide characters in use with a wide character -- encoding method active that uses the ESC code for encoding. if Identifier_Character_Set = 'w' and then Wide_Character_Encoding_Method in WC_ESC_Encoding_Method then - Identifier_Char (ASCII.ESC) := True; + Identifier_Char_Table (ASCII.ESC) := True; end if; end Initialize; diff --git a/gcc/ada/csets.ads b/gcc/ada/csets.ads index 9dc78ba10e87b..f0930df47dbe9 100644 --- a/gcc/ada/csets.ads +++ b/gcc/ada/csets.ads @@ -80,12 +80,12 @@ package Csets is Fold_Lower : Translate_Table; -- Table to fold upper case identifier letters to lower case - Identifier_Char : Char_Array_Flags; - -- This table has True entries for all characters that can legally appear - -- in identifiers, including digits, the underline character, all letters - -- including upper and lower case and extended letters (as controlled by - -- the setting of Opt.Identifier_Character_Set), left bracket for brackets - -- notation wide characters and also ESC if wide characters are permitted - -- in identifiers using escape sequences starting with ESC. + function Identifier_Char (Item : Character) return Boolean; + -- Return True for all characters that can legally appear in identifiers, + -- including digits, the underline character, all letters including upper + -- and lower case and extended letters (as controlled by the setting of + -- Opt.Identifier_Character_Set), left bracket for brackets notation wide + -- characters and also ESC if wide characters are permitted in identifiers + -- using escape sequences starting with ESC. end Csets; diff --git a/gcc/ada/opt.adb b/gcc/ada/opt.adb index 5427a95a3b68b..8598ce234cc7e 100644 --- a/gcc/ada/opt.adb +++ b/gcc/ada/opt.adb @@ -23,8 +23,6 @@ -- -- ------------------------------------------------------------------------------ -with Csets; use Csets; - package body Opt is -------------------- @@ -188,7 +186,6 @@ package body Opt is Prefix_Exception_Messages := True; Uneval_Old := 'E'; Use_VADS_Size := False; - Identifier_Char ('[') := False; -- Note: we do not need to worry about Warnings_As_Errors_Count since -- we do not expect to get any warnings from compiling such a unit. From a0546a36e007d1def02f5a575d1b4e2a08a66115 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Thu, 16 May 2024 10:59:31 +0200 Subject: [PATCH 064/114] ada: Fix for Default_Component_Value with declare expressions When the expression of aspect Default_Component_Value includes a declare expression with current type instance, we attempted to recursively froze that type, which itself caused an infinite recursion, because we didn't properly manage the scope of declare expression. This patch fixes both the detection of the current type instance and analysis of the expression that caused recursive freezing. gcc/ada/ * sem_attr.adb (In_Aspect_Specification): Use the standard condition that works correctly with declare expressions. * sem_ch13.adb (Analyze_Aspects_At_Freeze_Point): Replace ordinary analysis with preanalysis of spec expressions. --- gcc/ada/sem_attr.adb | 4 +++- gcc/ada/sem_ch13.adb | 12 ++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 72f5ab4917594..d56c25a79cc86 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -1843,7 +1843,9 @@ package body Sem_Attr is if Nkind (P) = N_Aspect_Specification then return P_Type = Entity (P); - elsif Nkind (P) in N_Declaration then + -- Prevent the search from going too far + + elsif Is_Body_Or_Package_Declaration (P) then return False; end if; diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 4012932a6f21f..a86f774018a35 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -1037,11 +1037,19 @@ package body Sem_Ch13 is Parent_Type : Entity_Id; + Save_In_Spec_Expression : constant Boolean := In_Spec_Expression; + begin -- Ensure Expr is analyzed so that e.g. all types are properly - -- resolved for Find_Type_Reference. + -- resolved for Find_Type_Reference. We preanalyze this expression + -- as a spec expression (to avoid recursive freezing), while skipping + -- resolution (to not fold type self-references, e.g. T'Last). - Analyze (Expr); + In_Spec_Expression := True; + + Preanalyze (Expr); + + In_Spec_Expression := Save_In_Spec_Expression; -- A self-referential aspect is illegal if it forces freezing the -- entity before the corresponding aspect has been analyzed. From c5aed359a563c48f616d58f708c398f8494d7731 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 21 May 2024 19:49:32 +0200 Subject: [PATCH 065/114] ada: Fix assertion failure on predicate involving access parameter The assertion fails because the Original_Node of the expression has no Etype since its an unanalyzed identifier. gcc/ada/ * accessibility.adb (Accessibility_Level): Apply the processing to Expr when its Original_Node is an unanalyzed identifier. --- gcc/ada/accessibility.adb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ada/accessibility.adb b/gcc/ada/accessibility.adb index da4d1d9ce2e2c..298103377a7bc 100644 --- a/gcc/ada/accessibility.adb +++ b/gcc/ada/accessibility.adb @@ -398,7 +398,7 @@ package body Accessibility is -- Local variables - E : Node_Id := Original_Node (Expr); + E : Node_Id; Pre : Node_Id; -- Start of processing for Accessibility_Level @@ -409,6 +409,17 @@ package body Accessibility is if Present (Param_Entity (Expr)) then E := Param_Entity (Expr); + + -- Use the original node unless it is an unanalyzed identifier, as we + -- don't want to reason on unanalyzed expressions from predicates. + + elsif Nkind (Original_Node (Expr)) /= N_Identifier + or else Analyzed (Original_Node (Expr)) + then + E := Original_Node (Expr); + + else + E := Expr; end if; -- Extract the entity From 244d02bb288a07f3252fc9ed38675b93a9a91225 Mon Sep 17 00:00:00 2001 From: Steve Baird Date: Thu, 23 May 2024 17:11:42 -0700 Subject: [PATCH 066/114] ada: Predefined arithmetic operators incorrectly treated as directly visible In some cases, a predefined operator (e.g., the "+" operator for an integer type) is incorrectly treated as being directly visible when it is not. This can lead to both accepting operator uses that should be rejected and also to incorrectly rejecting legal constructs as ambiguous (for example, an expression "Foo + 1" where Foo is an overloaded function and the "+" operator is directly visible for the result type of only one of the possible callees). gcc/ada/ * sem_ch4.adb (Is_Effectively_Visible_Operator): A new function. (Check_Arithmetic_Pair): In paths where Add_One_Interp was previously called unconditionally, instead call only if Is_Effectively_Visible_Operator returns True. (Check_Boolean_Pair): Likewise. (Find_Unary_Types): Likewise. --- gcc/ada/sem_ch4.adb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 1175a34df2183..dfeff02a011b0 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -270,6 +270,18 @@ package body Sem_Ch4 is -- these aspects can be achieved without larger modifications to the -- two-pass resolution algorithm. + function Is_Effectively_Visible_Operator + (N : Node_Id; Typ : Entity_Id) return Boolean + is (Is_Visible_Operator (N => N, Typ => Typ) + or else + -- test for a rewritten Foo."+" call + (N /= Original_Node (N) + and then Is_Effectively_Visible_Operator + (N => Original_Node (N), Typ => Typ)) + or else not Comes_From_Source (N)); + -- Return True iff either Is_Visible_Operator returns True or if + -- there is a reason it is ok for Is_Visible_Operator to return False. + function Possible_Type_For_Conditional_Expression (T1, T2 : Entity_Id) return Entity_Id; -- Given two types T1 and T2 that are _not_ compatible, return a type that @@ -6641,6 +6653,8 @@ package body Sem_Ch4 is and then (Covers (T1 => T1, T2 => T2) or else Covers (T1 => T2, T2 => T1)) + and then Is_Effectively_Visible_Operator + (N, Specific_Type (T1, T2)) then Add_One_Interp (N, Op_Id, Specific_Type (T1, T2)); end if; @@ -6670,6 +6684,8 @@ package body Sem_Ch4 is and then (Covers (T1 => T1, T2 => T2) or else Covers (T1 => T2, T2 => T1)) + and then Is_Effectively_Visible_Operator + (N, Specific_Type (T1, T2)) then Add_One_Interp (N, Op_Id, Specific_Type (T1, T2)); @@ -6713,6 +6729,8 @@ package body Sem_Ch4 is and then (Covers (T1 => T1, T2 => T2) or else Covers (T1 => T2, T2 => T1)) + and then Is_Effectively_Visible_Operator + (N, Specific_Type (T1, T2)) then Add_One_Interp (N, Op_Id, Specific_Type (T1, T2)); end if; @@ -7086,6 +7104,7 @@ package body Sem_Ch4 is T := Any_Modular; end if; + -- test Is_Effectively_Visible_Operator here ??? Add_One_Interp (N, Op_Id, T); end if; end Check_Boolean_Pair; @@ -7615,7 +7634,8 @@ package body Sem_Ch4 is then null; - else + elsif Is_Effectively_Visible_Operator (N, Base_Type (It.Typ)) + then Add_One_Interp (N, Op_Id, Base_Type (It.Typ)); end if; end if; From 39f35956587fe09fbdb87ebd203df6e3674f7b59 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Wed, 17 Apr 2024 14:58:24 +0200 Subject: [PATCH 067/114] ada: Fix gnatcheck violation reported after a recent cleanup Code cleanup; semantics is unaffected. gcc/ada/ * sem_ch3.adb (Add_Interface_Tag_Components): Simplify with No. --- gcc/ada/sem_ch3.adb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index eebaedc216bcd..a1112d7b44ae2 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -1618,7 +1618,7 @@ package body Sem_Ch3 is Last_Tag := Empty; - if not Present (Component_List (Ext)) then + if No (Component_List (Ext)) then Set_Null_Present (Ext, False); L := New_List; Set_Component_List (Ext, From 9ce1b11e154a930de3ba20b9e26af5631a73c7f3 Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Thu, 30 May 2024 15:16:47 -0400 Subject: [PATCH 068/114] ada: Generic formal/actual matching -- misc cleanup The only substantive change is to remove Activation_Chain_Entity from N_Generic_Package_Declaration. The comment in sinfo.ads suggesting this change was written in 1993! Various pieces of missing documentation are added to Sinfo and Einfo. Also other minor cleanups. gcc/ada/ * gen_il-gen-gen_nodes.adb (N_Generic_Package_Declaration): Remove Activation_Chain_Entity. * sinfo.ads: Comment improvements. Add missing doc. Remove obsolete comment about Activation_Chain_Entity. * einfo.ads: Comment improvements. Add missing doc. * einfo-utils.adb (Base_Type): Add Assert (disabled for now). (Next_Index): Minor cleanup. * aspects.ads: Minor comment fix. * exp_ch6.adb: Likewise. * sem_ch3.adb: Likewise. --- gcc/ada/aspects.ads | 2 +- gcc/ada/einfo-utils.adb | 29 ++++++++++++++++++++--------- gcc/ada/einfo.ads | 29 +++++++++++++++-------------- gcc/ada/exp_ch6.adb | 4 ++-- gcc/ada/gen_il-gen-gen_nodes.adb | 3 +-- gcc/ada/sem_ch3.adb | 4 ++-- gcc/ada/sinfo.ads | 32 ++++++++++++++++++-------------- 7 files changed, 59 insertions(+), 44 deletions(-) diff --git a/gcc/ada/aspects.ads b/gcc/ada/aspects.ads index 140fb7c8fe12a..cf992a89038f3 100644 --- a/gcc/ada/aspects.ads +++ b/gcc/ada/aspects.ads @@ -1176,7 +1176,7 @@ package Aspects is Class_Present : Boolean := False; Or_Rep_Item : Boolean := False) return Node_Id; -- Find the aspect specification of aspect A (or A'Class if Class_Present) - -- associated with entity I. + -- associated with entity Id. -- If found, then return the aspect specification. -- If not found and Or_Rep_Item is true, then look for a representation -- item (as opposed to an N_Aspect_Specification node) which specifies diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb index 438868ac7573e..4c86ba1c3b195 100644 --- a/gcc/ada/einfo-utils.adb +++ b/gcc/ada/einfo-utils.adb @@ -664,12 +664,22 @@ package body Einfo.Utils is function Base_Type (Id : E) return E is begin - if Is_Base_Type (Id) then - return Id; - else - pragma Assert (Is_Type (Id)); - return Etype (Id); - end if; + return Result : E do + if Is_Base_Type (Id) then + Result := Id; + else + pragma Assert (Is_Type (Id)); + Result := Etype (Id); + if False then + pragma Assert (Is_Base_Type (Result)); + -- ???It seems like Base_Type should return a base type, + -- but this assertion is disabled because it is not always + -- true. Hence the need to say "Base_Type (Base_Type (...))" + -- in some cases; Base_Type is not idempotent as one might + -- expect. + end if; + end if; + end return; end Base_Type; ---------------------- @@ -2018,10 +2028,11 @@ package body Einfo.Utils is ---------------- function Next_Index (Id : N) return Node_Id is - begin pragma Assert (Nkind (Id) in N_Is_Index); - pragma Assert (No (Next (Id)) or else Nkind (Next (Id)) in N_Is_Index); - return Next (Id); + Result : constant Node_Id := Next (Id); + pragma Assert (No (Result) or else Nkind (Result) in N_Is_Index); + begin + return Result; end Next_Index; ------------------ diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index 8ee419b3e0717..dd95ea051c1b3 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -1334,7 +1334,7 @@ package Einfo is -- First_Component (synthesized) -- Applies to incomplete, private, protected, record and task types. -- Returns the first component by following the chain of declared --- entities for the type a component is found (one with an Ekind of +-- entities for the type until a component is found (one with an Ekind of -- E_Component). The discriminants are skipped. If the record is null, -- then Empty is returned. @@ -1342,6 +1342,10 @@ package Einfo is -- Similar to First_Component, but discriminants are not skipped, so will -- find the first discriminant if discriminants are present. +-- First_Discriminant (synthesized) +-- Defined for types with discriminants or unknown discriminants. +-- Returns the first in the Next_Discriminant chain; see Sem_Aux. + -- First_Entity -- Defined in all entities that act as scopes to which a list of -- associated entities is attached, and also in all [sub]types. Some @@ -1375,12 +1379,11 @@ package Einfo is -- First_Index -- Defined in array types and subtypes. By introducing implicit subtypes -- for the index constraints, we have the same structure for constrained --- and unconstrained arrays, subtype marks and discrete ranges are --- both represented by a subtype. This function returns the tree node --- corresponding to an occurrence of the first index (NOT the entity for --- the type). Subsequent indices are obtained using Next_Index. Note that --- this field is defined for the case of string literal subtypes, but is --- always Empty. +-- and unconstrained arrays, subtype marks and discrete ranges are both +-- represented by a subtype. This function returns the N_Is_Index tree +-- node corresponding to the first index (not an entity). Subsequent +-- indices are obtained using Next_Index. Note that this field is defined +-- for the case of string literal subtypes, but is always Empty. -- First_Literal -- Defined in all enumeration types, including character and boolean @@ -3749,13 +3752,11 @@ package Einfo is -- all the extra formals (see description of Extra_Formal field) -- Next_Index (synthesized) --- Applies to array types and subtypes and to string types and --- subtypes. Yields the next index. The first index is obtained by --- using the First_Index attribute, and then subsequent indexes are --- obtained by applying Next_Index to the previous index. Empty is --- returned to indicate that there are no more indexes. Note that --- unlike most attributes in this package, Next_Index applies to --- nodes for the indexes, not to entities. +-- Applies to the N_Is_Index node returned by First_Index/Next_Index; +-- returns the next N_Is_Index node in the chain. Empty is returned to +-- indicate that there are no more indexes. Note that unlike most +-- attributes in this package, Next_Index applies to nodes for the +-- indexes, not to entities. -- Next_Inlined_Subprogram -- Defined in subprograms. Used to chain inlined subprograms used in diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index da19c031c3dc3..6d3d05fcf203f 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -2939,8 +2939,8 @@ package body Exp_Ch6 is -- If the aspect is inherited, convert the pointer to the -- parent type that specifies the contract. -- If the original access_to_subprogram has defaults for - -- in_parameters, the call may include named associations, so - -- we create one for the pointer as well. + -- in-mode parameters, the call may include named associations, + -- so we create one for the pointer as well. if Is_Derived_Type (Ptr_Type) and then Ptr_Type /= Etype (Last_Formal (Wrapper)) diff --git a/gcc/ada/gen_il-gen-gen_nodes.adb b/gcc/ada/gen_il-gen-gen_nodes.adb index 580723666c50e..b1ca6cf6c8656 100644 --- a/gcc/ada/gen_il-gen-gen_nodes.adb +++ b/gcc/ada/gen_il-gen-gen_nodes.adb @@ -915,8 +915,7 @@ begin -- Gen_IL.Gen.Gen_Nodes Cc (N_Generic_Package_Declaration, N_Generic_Declaration, (Sy (Specification, Node_Id), Sy (Generic_Formal_Declarations, List_Id), - Sy (Aspect_Specifications, List_Id, Default_No_List), - Sm (Activation_Chain_Entity, Node_Id))); + Sy (Aspect_Specifications, List_Id, Default_No_List))); Cc (N_Generic_Subprogram_Declaration, N_Generic_Declaration, (Sy (Specification, Node_Id), diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index a1112d7b44ae2..fa13bd23ac7b2 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -1250,8 +1250,8 @@ package body Sem_Ch3 is -- to incomplete types declared in some enclosing scope, not to limited -- views from other packages. - -- Prior to Ada 2012, access to functions parameters must be of mode - -- 'in'. + -- Prior to Ada 2012, all parameters of an access-to-function type must + -- be of mode 'in'. if Present (Formals) then Formal := First_Formal (Desig_Type); diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads index 599f4f63cce06..3696ca4f7b4c6 100644 --- a/gcc/ada/sinfo.ads +++ b/gcc/ada/sinfo.ads @@ -2304,6 +2304,10 @@ package Sinfo is -- scope all use this field to reference the corresponding scope entity. -- See Einfo for further details. + -- Selector_Name + -- Present in N_Expanded_Name N_Selected_Component, + -- N_Generic_Association, and N_Parameter_Association nodes. + -- Shift_Count_OK -- A flag present in shift nodes to indicate that the shift count is -- known to be in range, i.e. is in the range from zero to word length @@ -7013,7 +7017,7 @@ package Sinfo is -- GENERIC_FORMAL_PART SUBPROGRAM_SPECIFICATION -- [ASPECT_SPECIFICATIONS]; - -- Note: Generic_Formal_Declarations can include pragmas + -- Note: Generic_Formal_Declarations can include pragmas and use clauses -- N_Generic_Subprogram_Declaration -- Sloc points to GENERIC @@ -7030,11 +7034,7 @@ package Sinfo is -- GENERIC_FORMAL_PART PACKAGE_SPECIFICATION -- [ASPECT_SPECIFICATIONS]; - -- Note: when we do generics right, the Activation_Chain_Entity entry - -- for this node can be removed (since the expander won't see generic - -- units any more)???. - - -- Note: Generic_Formal_Declarations can include pragmas + -- Note: Generic_Formal_Declarations can include pragmas and use clauses -- N_Generic_Package_Declaration -- Sloc points to GENERIC @@ -7042,7 +7042,6 @@ package Sinfo is -- Corresponding_Body -- Generic_Formal_Declarations from generic formal part -- Parent_Spec - -- Activation_Chain_Entity ------------------------------- -- 12.1 Generic Formal Part -- @@ -7143,16 +7142,19 @@ package Sinfo is -- Note: unlike the procedure call case, a generic association node -- is generated for every association, even if no formal parameter - -- selector name is present. In this case the parser will leave the - -- Selector_Name field set to Empty, to be filled in later by the - -- semantic pass. + -- selector name is present, in which case Selector_Name is Empty. -- In Ada 2005, a formal may be associated with a box, if the -- association is part of the list of actuals for a formal package. - -- If the association is given by OTHERS => <>, the association is + -- If the association is given by OTHERS => <>, the association is -- an N_Others_Choice (not an N_Generic_Association whose Selector_Name -- is an N_Others_Choice). + -- In source nodes, either Explicit_Generic_Actual_Parameter is present, + -- or Box_Present is True. However, Sem_Ch12 generates "dummy" nodes + -- with Explicit_Generic_Actual_Parameter = Empty and Box_Present = + -- False. + -- N_Generic_Association -- Sloc points to first token of generic association -- Selector_Name (set to Empty if no formal @@ -7382,13 +7384,15 @@ package Sinfo is -- Default_Name (set to Empty if no subprogram default) -- Box_Present -- Expression (set to Empty if no expression present) + -- If the default is "is null", then Null_Present is set + -- on the Specification of this node. -- Note: If no subprogram default is present, then Name is set -- to Empty, and Box_Present is False. - -- Note: The Expression field is only used for the GNAT extension - -- that allows a FORMAL_CONCRETE_SUBPROGRAM_DECLARATION to specify - -- an expression default for generic formal functions. + -- Note: The Expression field is for the GNAT extension that allows a + -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION to specify an expression + -- default for generic formal functions. -------------------------------------------------- -- 12.6 Formal Abstract Subprogram Declaration -- From 8c7ce88c00f9bea9fb6f7e466c8706439fb5b131 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 31 May 2024 00:13:44 +0200 Subject: [PATCH 069/114] ada: Fix incorrect handling of packed array with aliased composite components The problem is that the handling of the interaction between packing and aliased/atomic/independent components of an array type is tied to that of the interaction between a component clause and aliased/atomic/independent components, although the semantics are different: packing is a best effort thing, whereas a component clause must be honored or else an error be given. This decouples the two handlings, but retrofits the separate processing of independent components done in both cases into the common code and changes the error message from "minimum allowed is" to "minimum allowed value is" for the sake of consistency with the aliased/atomic processing. gcc/ada/ * freeze.adb (Freeze_Array_Type): Decouple the handling of the interaction between packing and aliased/atomic components from that of the interaction between a component clause and aliased/ atomic components, and retrofit the processing of the interaction between the two characteristics and independent components into the common processing. gcc/testsuite/ChangeLog: * gnat.dg/atomic10.adb: Adjust. --- gcc/ada/freeze.adb | 190 ++++++++++++++--------------- gcc/testsuite/gnat.dg/atomic10.adb | 4 +- 2 files changed, 93 insertions(+), 101 deletions(-) diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 1867880b314b4..29733a17a56ca 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -3634,7 +3634,9 @@ package body Freeze is procedure Freeze_Array_Type (Arr : Entity_Id) is FS : constant Entity_Id := First_Subtype (Arr); Ctyp : constant Entity_Id := Component_Type (Arr); - Clause : Entity_Id; + + Clause : Node_Id; + -- Set to Component_Size clause or Atomic pragma, if any Non_Standard_Enum : Boolean := False; -- Set true if any of the index types is an enumeration type with a @@ -3710,76 +3712,57 @@ package body Freeze is end; end if; - -- Check for Aliased or Atomic_Components or Full Access with - -- unsuitable packing or explicit component size clause given. - - if (Has_Aliased_Components (Arr) - or else Has_Atomic_Components (Arr) - or else Is_Full_Access (Ctyp)) - and then - (Has_Component_Size_Clause (Arr) or else Is_Packed (Arr)) - then - Alias_Atomic_Check : declare + -- Check for Aliased or Atomic or Full Access or Independent + -- components with an unsuitable component size clause given. + -- The main purpose is to give an error when bit packing would + -- be required to honor the component size, because bit packing + -- is incompatible with these aspects; when bit packing is not + -- required, the final validation of the component size may be + -- left to the back end. - procedure Complain_CS (T : String); - -- Outputs error messages for incorrect CS clause or pragma - -- Pack for aliased or full access components (T is either - -- "aliased" or "atomic" or "volatile full access"); + if Has_Component_Size_Clause (Arr) then + CS_Check : declare + procedure Complain_CS (T : String; Min : Boolean := False); + -- Output an error message for an unsuitable component size + -- clause for independent components (T is either "aliased" + -- or "atomic" or "volatile full access" or "independent"). ----------------- -- Complain_CS -- ----------------- - procedure Complain_CS (T : String) is + procedure Complain_CS (T : String; Min : Boolean := False) is begin - if Has_Component_Size_Clause (Arr) then - Clause := - Get_Attribute_Definition_Clause - (FS, Attribute_Component_Size); + Clause := + Get_Attribute_Definition_Clause + (FS, Attribute_Component_Size); - Error_Msg_N - ("incorrect component size for " - & T & " components", Clause); - Error_Msg_Uint_1 := Esize (Ctyp); - Error_Msg_N - ("\only allowed value is^", Clause); + Error_Msg_N + ("incorrect component size for " & T & " components", + Clause); + if Known_Static_Esize (Ctyp) then + Error_Msg_Uint_1 := Esize (Ctyp); + if Min then + Error_Msg_N ("\minimum allowed value is^", Clause); + else + Error_Msg_N ("\only allowed value is^", Clause); + end if; else Error_Msg_N - ("?cannot pack " & T & " components (RM 13.2(7))", - Get_Rep_Pragma (FS, Name_Pack)); - Set_Is_Packed (Arr, False); + ("\must be multiple of storage unit", Clause); end if; end Complain_CS; - -- Start of processing for Alias_Atomic_Check + -- Start of processing for CS_Check begin - -- If object size of component type isn't known, we cannot - -- be sure so we defer to the back end. + -- OK if the component size and object size are equal, or + -- if the component size is a multiple of the storage unit. - if not Known_Static_Esize (Ctyp) then - null; - - -- Case where component size has no effect. First check for - -- object size of component type multiple of the storage - -- unit size. - - elsif Esize (Ctyp) mod System_Storage_Unit = 0 - - -- OK in both packing case and component size case if RM - -- size is known and static and same as the object size. - - and then - ((Known_Static_RM_Size (Ctyp) - and then Esize (Ctyp) = RM_Size (Ctyp)) - - -- Or if we have an explicit component size clause and - -- the component size and object size are equal. - - or else - (Has_Component_Size_Clause (Arr) - and then Component_Size (Arr) = Esize (Ctyp))) + if (if Known_Static_Esize (Ctyp) + then Component_Size (Arr) = Esize (Ctyp) + else Component_Size (Arr) mod System_Storage_Unit = 0) then null; @@ -3793,67 +3776,76 @@ package body Freeze is elsif Is_Volatile_Full_Access (Ctyp) then Complain_CS ("volatile full access"); + + -- For Independent a larger size is permitted + + elsif (Has_Independent_Components (Arr) + or else Is_Independent (Ctyp)) + and then (not Known_Static_Esize (Ctyp) + or else Component_Size (Arr) < Esize (Ctyp)) + then + Complain_CS ("independent", Min => True); end if; - end Alias_Atomic_Check; - end if; + end CS_Check; - -- Check for Independent_Components/Independent with unsuitable - -- packing or explicit component size clause given. + -- Check for Aliased or Atomic or Full Access or Independent + -- components with an unsuitable aspect/pragma Pack given. + -- The main purpose is to prevent bit packing from occurring, + -- because bit packing is incompatible with these aspects; when + -- bit packing cannot occur, the final handling of the packing + -- may be left to the back end. - if (Has_Independent_Components (Arr) or else Is_Independent (Ctyp)) - and then - (Has_Component_Size_Clause (Arr) or else Is_Packed (Arr)) - then - begin - -- If object size of component type isn't known, we cannot - -- be sure so we defer to the back end. + elsif Is_Packed (Arr) and then Known_Static_RM_Size (Ctyp) then + Pack_Check : declare - if not Known_Static_Esize (Ctyp) then - null; + procedure Complain_Pack (T : String); + -- Output a warning message for an unsuitable aspect/pragma + -- Pack for independent components (T is either "aliased" or + -- "atomic" or "volatile full access" or "independent") and + -- reset the Is_Packed flag on the array type. - -- Case where component size has no effect. First check for - -- object size of component type multiple of the storage - -- unit size. + ------------------- + -- Complain_Pack -- + ------------------- - elsif Esize (Ctyp) mod System_Storage_Unit = 0 + procedure Complain_Pack (T : String) is + begin + Error_Msg_N + ("?cannot pack " & T & " components (RM 13.2(7))", + Get_Rep_Pragma (FS, Name_Pack)); - -- OK in both packing case and component size case if RM - -- size is known and multiple of the storage unit size. + Set_Is_Packed (Arr, False); + end Complain_Pack; - and then - ((Known_Static_RM_Size (Ctyp) - and then RM_Size (Ctyp) mod System_Storage_Unit = 0) + -- Start of processing for Pack_Check - -- Or if we have an explicit component size clause and - -- the component size is larger than the object size. + begin + -- OK if the component size and object size are equal, or + -- if the component size is a multiple of the storage unit. - or else - (Has_Component_Size_Clause (Arr) - and then Component_Size (Arr) >= Esize (Ctyp))) + if (if Known_Static_Esize (Ctyp) + then RM_Size (Ctyp) = Esize (Ctyp) + else RM_Size (Ctyp) mod System_Storage_Unit = 0) then null; - else - if Has_Component_Size_Clause (Arr) then - Clause := - Get_Attribute_Definition_Clause - (FS, Attribute_Component_Size); + elsif Has_Aliased_Components (Arr) then + Complain_Pack ("aliased"); - Error_Msg_N - ("incorrect component size for " - & "independent components", Clause); - Error_Msg_Uint_1 := Esize (Ctyp); - Error_Msg_N - ("\minimum allowed is^", Clause); + elsif Has_Atomic_Components (Arr) + or else Is_Atomic (Ctyp) + then + Complain_Pack ("atomic"); - else - Error_Msg_N - ("?cannot pack independent components (RM 13.2(7))", - Get_Rep_Pragma (FS, Name_Pack)); - Set_Is_Packed (Arr, False); - end if; + elsif Is_Volatile_Full_Access (Ctyp) then + Complain_Pack ("volatile full access"); + + elsif Has_Independent_Components (Arr) + or else Is_Independent (Ctyp) + then + Complain_Pack ("independent"); end if; - end; + end Pack_Check; end if; -- If packing was requested or if the component size was diff --git a/gcc/testsuite/gnat.dg/atomic10.adb b/gcc/testsuite/gnat.dg/atomic10.adb index 5f99ca66266ca..69685732f21bf 100644 --- a/gcc/testsuite/gnat.dg/atomic10.adb +++ b/gcc/testsuite/gnat.dg/atomic10.adb @@ -14,8 +14,8 @@ procedure Atomic10 is subtype Index_Type is Positive range 1 .. Max; - type Array_Type is array (Index_Type) of aliased Atomic_Unsigned; -- { dg-error "cannot be guaranteed" } - for Array_Type'Component_Size use Comp_Size; + type Array_Type is array (Index_Type) of aliased Atomic_Unsigned; + for Array_Type'Component_Size use Comp_Size; -- { dg-error "incorrect|only" } Slots : Array_Type; begin From aa34d34f753cee8974af6942e0603dfc2f8ea160 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 28 May 2024 23:08:32 +0200 Subject: [PATCH 070/114] ada: Fix internal error on case expression used as index of array component This occurs when the bounds of the array component depend on a discriminant and the component reference is not nested, that is to say the component is not (referenced as) a subcomponent of a larger record. In this case, Analyze_Selected_Component does not build the actual subtype for the component, but it turns out to be required for constructs generated during the analysis of the case expression. The change causes this actual subtype to be built, and also renames a local variable used to hold the prefix of the selected component. gcc/ada/ * sem_ch4.adb (Analyze_Selected_Component): Rename Name into Pref and use Sel local variable consistently. (Is_Simple_Indexed_Component): New predicate. Call Is_Simple_Indexed_Component to determine whether to build an actual subtype for the component. --- gcc/ada/sem_ch4.adb | 108 ++++++++++++++++++++++++++++++-------------- 1 file changed, 73 insertions(+), 35 deletions(-) diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index dfeff02a011b0..4e1d1bc7ed760 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -4927,7 +4927,7 @@ package body Sem_Ch4 is -- the selector must denote a visible entry. procedure Analyze_Selected_Component (N : Node_Id) is - Name : constant Node_Id := Prefix (N); + Pref : constant Node_Id := Prefix (N); Sel : constant Node_Id := Selector_Name (N); Act_Decl : Node_Id; Comp : Entity_Id := Empty; @@ -4962,8 +4962,11 @@ package body Sem_Ch4 is -- indexed component rather than a function call. function Has_Dereference (Nod : Node_Id) return Boolean; - -- Check whether prefix includes a dereference, explicit or implicit, - -- at any recursive level. + -- Check whether Nod includes a dereference, explicit or implicit, at + -- any recursive level. + + function Is_Simple_Indexed_Component (Nod : Node_Id) return Boolean; + -- Check whether Nod is a simple indexed component in the context function Try_By_Protected_Procedure_Prefixed_View return Boolean; -- Return True if N is an access attribute whose prefix is a prefixed @@ -5107,6 +5110,40 @@ package body Sem_Ch4 is end if; end Has_Dereference; + --------------------------------- + -- Is_Simple_Indexed_Component -- + --------------------------------- + + function Is_Simple_Indexed_Component (Nod : Node_Id) return Boolean is + Expr : Node_Id; + + begin + -- Nod must be an indexed component + + if Nkind (Nod) /= N_Indexed_Component then + return False; + end if; + + -- The context must not be a nested selected component + + if Nkind (Pref) = N_Selected_Component then + return False; + end if; + + -- The expressions must not be case expressions + + Expr := First (Expressions (Nod)); + while Present (Expr) loop + if Nkind (Expr) = N_Case_Expression then + return False; + end if; + + Next (Expr); + end loop; + + return True; + end Is_Simple_Indexed_Component; + ---------------------------------------------- -- Try_By_Protected_Procedure_Prefixed_View -- ---------------------------------------------- @@ -5292,17 +5329,17 @@ package body Sem_Ch4 is begin Set_Etype (N, Any_Type); - if Is_Overloaded (Name) then + if Is_Overloaded (Pref) then Analyze_Overloaded_Selected_Component (N); return; - elsif Etype (Name) = Any_Type then + elsif Etype (Pref) = Any_Type then Set_Entity (Sel, Any_Id); Set_Etype (Sel, Any_Type); return; else - Prefix_Type := Etype (Name); + Prefix_Type := Etype (Pref); end if; if Is_Access_Type (Prefix_Type) then @@ -5345,8 +5382,8 @@ package body Sem_Ch4 is -- component prefixes because of the prefixed dispatching call case. -- Note that implicit dereferences are checked for this just above. - elsif Nkind (Name) = N_Explicit_Dereference - and then Is_Remote_Access_To_Class_Wide_Type (Etype (Prefix (Name))) + elsif Nkind (Pref) = N_Explicit_Dereference + and then Is_Remote_Access_To_Class_Wide_Type (Etype (Prefix (Pref))) and then Comes_From_Source (N) then if Try_Object_Operation (N) then @@ -5397,7 +5434,7 @@ package body Sem_Ch4 is Is_Concurrent_Type (Prefix_Type) and then Is_Internal_Name (Chars (Prefix_Type)) and then not Is_Derived_Type (Prefix_Type) - and then Is_Entity_Name (Name); + and then Is_Entity_Name (Pref); -- Avoid initializing Comp if that initialization is not needed -- (and, more importantly, if the call to First_Entity could fail). @@ -5425,8 +5462,8 @@ package body Sem_Ch4 is -- subsequent semantic checks might examine the original node. Set_Entity (Sel, Comp); - Rewrite (Selector_Name (N), New_Occurrence_Of (Comp, Sloc (N))); - Set_Original_Discriminant (Selector_Name (N), Comp); + Rewrite (Sel, New_Occurrence_Of (Comp, Sloc (N))); + Set_Original_Discriminant (Sel, Comp); Set_Etype (N, Etype (Comp)); Check_Implicit_Dereference (N, Etype (Comp)); @@ -5477,7 +5514,7 @@ package body Sem_Ch4 is -- to duplicate this prefix and duplication is only allowed -- on fully resolved expressions. - Resolve (Name); + Resolve (Pref); -- Ada 2005 (AI-50217): Check wrong use of incomplete types or -- subtypes in a package specification. @@ -5490,38 +5527,39 @@ package body Sem_Ch4 is -- N : Natural := X.all.Comp; -- ERROR, limited view -- end Pkg; -- Comp is not visible - if Nkind (Name) = N_Explicit_Dereference - and then From_Limited_With (Etype (Prefix (Name))) - and then not Is_Potentially_Use_Visible (Etype (Name)) + if Nkind (Pref) = N_Explicit_Dereference + and then From_Limited_With (Etype (Prefix (Pref))) + and then not Is_Potentially_Use_Visible (Etype (Pref)) and then Nkind (Parent (Cunit_Entity (Current_Sem_Unit))) = N_Package_Specification then Error_Msg_NE - ("premature usage of incomplete}", Prefix (Name), - Etype (Prefix (Name))); + ("premature usage of incomplete}", Prefix (Pref), + Etype (Prefix (Pref))); end if; - -- We never need an actual subtype for the case of a selection - -- for a indexed component of a non-packed array, since in - -- this case gigi generates all the checks and can find the - -- necessary bounds information. + -- We generally do not need an actual subtype for the case of + -- a selection for an indexed component of a non-packed array, + -- since, in this case, gigi can find all the necessary bound + -- information. However, when the prefix is itself a selected + -- component, for example a.b.c (i), gigi may regard a.b.c as + -- a dynamic-sized temporary, so we generate an actual subtype + -- for this case. Moreover, if the expressions are complex, + -- the actual subtype may be needed for constructs generated + -- by their analysis. -- We also do not need an actual subtype for the case of a -- first, last, length, or range attribute applied to a -- non-packed array, since gigi can again get the bounds in -- these cases (gigi cannot handle the packed case, since it -- has the bounds of the packed array type, not the original - -- bounds of the type). However, if the prefix is itself a - -- selected component, as in a.b.c (i), gigi may regard a.b.c - -- as a dynamic-sized temporary, so we do generate an actual - -- subtype for this case. + -- bounds of the type). Parent_N := Parent (N); if not Is_Packed (Etype (Comp)) and then - ((Nkind (Parent_N) = N_Indexed_Component - and then Nkind (Name) /= N_Selected_Component) + (Is_Simple_Indexed_Component (Parent_N) or else (Nkind (Parent_N) = N_Attribute_Reference and then @@ -5603,8 +5641,8 @@ package body Sem_Ch4 is -- Force the generation of a mutably tagged type conversion -- when we encounter a special class-wide equivalent type. - if Is_Mutably_Tagged_CW_Equivalent_Type (Etype (Name)) then - Make_Mutably_Tagged_Conversion (Name, Force => True); + if Is_Mutably_Tagged_CW_Equivalent_Type (Etype (Pref)) then + Make_Mutably_Tagged_Conversion (Pref, Force => True); end if; Check_Implicit_Dereference (N, Etype (N)); @@ -5616,7 +5654,7 @@ package body Sem_Ch4 is -- which can appear in expanded code in a tag check. if Ekind (Type_To_Use) = E_Record_Type_With_Private - and then Chars (Selector_Name (N)) /= Name_uTag + and then Chars (Sel) /= Name_uTag then exit when Comp = Last_Entity (Type_To_Use); end if; @@ -5786,7 +5824,7 @@ package body Sem_Ch4 is elsif Ekind (Comp) in E_Discriminant | E_Entry_Family or else (In_Scope and then not Is_Protected_Type (Prefix_Type) - and then Is_Entity_Name (Name)) + and then Is_Entity_Name (Pref)) then Set_Entity_With_Checks (Sel, Comp); Generate_Reference (Comp, Sel); @@ -5856,8 +5894,8 @@ package body Sem_Ch4 is -- and the selector is one of the task operations. if In_Scope - and then not Is_Entity_Name (Name) - and then not Has_Dereference (Name) + and then not Is_Entity_Name (Pref) + and then not Has_Dereference (Pref) then if Is_Task_Type (Prefix_Type) and then Present (Entity (Sel)) @@ -5974,7 +6012,7 @@ package body Sem_Ch4 is if Present (Comp) then if Is_Single_Concurrent_Object then - Error_Msg_Node_2 := Entity (Name); + Error_Msg_Node_2 := Entity (Pref); Error_Msg_NE ("invisible selector& for &", N, Sel); else @@ -6006,7 +6044,7 @@ package body Sem_Ch4 is if Etype (N) = Any_Type then if Is_Single_Concurrent_Object then - Error_Msg_Node_2 := Entity (Name); + Error_Msg_Node_2 := Entity (Pref); Error_Msg_NE ("no selector& for&", N, Sel); Check_Misspelled_Selector (Type_To_Use, Sel); From 2b55cc520cf51089d961414a78e6e5371f3c3e20 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 30 May 2024 12:46:57 +0200 Subject: [PATCH 071/114] ada: Fix missing index check with declare expression The Do_Range_Check flag is properly set on the Expression of the EWA node built for the declare expression, so this instructs Generate_Index_Checks to look into this Expression. gcc/ada/ * checks.adb (Generate_Index_Checks): Add specific treatment for index expressions that are N_Expression_With_Actions nodes. --- gcc/ada/checks.adb | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index bada3dffcbfc0..c8a0696be6717 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -7248,7 +7248,8 @@ package body Checks is Loc : constant Source_Ptr := Sloc (N); A : constant Node_Id := Prefix (N); A_Ent : constant Entity_Id := Entity_Of_Prefix; - Sub : Node_Id; + + Expr : Node_Id; -- Start of processing for Generate_Index_Checks @@ -7294,13 +7295,13 @@ package body Checks is -- us to omit the check have already been taken into account in the -- setting of the Do_Range_Check flag earlier on. - Sub := First (Expressions (N)); + Expr := First (Expressions (N)); -- Handle string literals if Ekind (Etype (A)) = E_String_Literal_Subtype then - if Do_Range_Check (Sub) then - Set_Do_Range_Check (Sub, False); + if Do_Range_Check (Expr) then + Set_Do_Range_Check (Expr, False); -- For string literals we obtain the bounds of the string from the -- associated subtype. @@ -7310,8 +7311,8 @@ package body Checks is Condition => Make_Not_In (Loc, Left_Opnd => - Convert_To (Base_Type (Etype (Sub)), - Duplicate_Subexpr_Move_Checks (Sub)), + Convert_To (Base_Type (Etype (Expr)), + Duplicate_Subexpr_Move_Checks (Expr)), Right_Opnd => Make_Attribute_Reference (Loc, Prefix => New_Occurrence_Of (Etype (A), Loc), @@ -7330,11 +7331,19 @@ package body Checks is Ind : Pos; Num : List_Id; Range_N : Node_Id; + Stmt : Node_Id; + Sub : Node_Id; begin A_Idx := First_Index (Etype (A)); Ind := 1; - while Present (Sub) loop + while Present (Expr) loop + if Nkind (Expr) = N_Expression_With_Actions then + Sub := Expression (Expr); + else + Sub := Expr; + end if; + if Do_Range_Check (Sub) then Set_Do_Range_Check (Sub, False); @@ -7396,7 +7405,7 @@ package body Checks is Expressions => Num); end if; - Insert_Action (N, + Stmt := Make_Raise_Constraint_Error (Loc, Condition => Make_Not_In (Loc, @@ -7404,14 +7413,21 @@ package body Checks is Convert_To (Base_Type (Etype (Sub)), Duplicate_Subexpr_Move_Checks (Sub)), Right_Opnd => Range_N), - Reason => CE_Index_Check_Failed)); + Reason => CE_Index_Check_Failed); + + if Nkind (Expr) = N_Expression_With_Actions then + Append_To (Actions (Expr), Stmt); + Analyze (Stmt); + else + Insert_Action (Expr, Stmt); + end if; Checks_Generated.Elements (Ind) := True; end if; Next_Index (A_Idx); Ind := Ind + 1; - Next (Sub); + Next (Expr); end loop; end; end if; From df0637007e08eb11ead3ba4ac76de2b69a115327 Mon Sep 17 00:00:00 2001 From: Javier Miranda Date: Thu, 30 May 2024 11:24:54 +0000 Subject: [PATCH 072/114] ada: Cannot override inherited function with controlling result When a package has the declaration of a derived tagged type T with private null extension that inherits a public function F with controlling result, and a derivation of T is declared in the public part of another package, overriding function F may be rejected by the compiler. gcc/ada/ * sem_disp.adb (Find_Hidden_Overridden_Primitive): Check public dispatching primitives of ancestors; previously, only immediately-visible primitives were checked. --- gcc/ada/sem_disp.adb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index 9c498ee9a3f7e..fe822290e453b 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -89,7 +89,9 @@ package body Sem_Disp is -- to the found entity; otherwise return Empty. -- -- This routine does not search for non-hidden primitives since they are - -- covered by the normal Ada 2005 rules. + -- covered by the normal Ada 2005 rules. Its name was motivated by an + -- intermediate version of AI05-0125 where this term was proposed to + -- name these entities in the RM. function Is_Inherited_Public_Operation (Op : Entity_Id) return Boolean; -- Check whether a primitive operation is inherited from an operation @@ -2403,7 +2405,7 @@ package body Sem_Disp is Orig_Prim := Original_Corresponding_Operation (Prim); if Orig_Prim /= Prim - and then Is_Immediately_Visible (Orig_Prim) + and then not Is_Hidden (Orig_Prim) then Vis_Ancestor := First_Elmt (Vis_List); while Present (Vis_Ancestor) loop From 3c99b1a75585b3c5ea5f79c87702c33b60e47a14 Mon Sep 17 00:00:00 2001 From: Doug Rupp Date: Tue, 4 Jun 2024 10:17:57 -0700 Subject: [PATCH 073/114] ada: Revert conditional installation of signal handlers on VxWorks The conditional installation resulted in a semantic change, and although it is likely what is ultimately wanted (since HW interrupts are being reworked on VxWorks). However it must be done in concert with other modifications for the new formulation of HW interrupts and not in isolation. gcc/ada/ * init.c [vxworks] (__gnat_install_handler): Revert to installing signal handlers without regard to interrupt_state. --- gcc/ada/init.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/gcc/ada/init.c b/gcc/ada/init.c index acb8c7cc57ee2..93e73f53c64cf 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -2100,14 +2100,10 @@ __gnat_install_handler (void) /* For VxWorks, install all signal handlers, since pragma Interrupt_State applies to vectored hardware interrupts, not signals. */ - if (__gnat_get_interrupt_state (SIGFPE) != 's') - sigaction (SIGFPE, &act, NULL); - if (__gnat_get_interrupt_state (SIGILL) != 's') - sigaction (SIGILL, &act, NULL); - if (__gnat_get_interrupt_state (SIGSEGV) != 's') - sigaction (SIGSEGV, &act, NULL); - if (__gnat_get_interrupt_state (SIGBUS) != 's') - sigaction (SIGBUS, &act, NULL); + sigaction (SIGFPE, &act, NULL); + sigaction (SIGILL, &act, NULL); + sigaction (SIGSEGV, &act, NULL); + sigaction (SIGBUS, &act, NULL); #if defined(__leon__) && defined(_WRS_KERNEL) /* Specific to the LEON VxWorks kernel run-time library */ From 7a51065e94e759d20dcb00cf58d4b472cc8185fd Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 4 Jun 2024 21:33:28 +0200 Subject: [PATCH 074/114] ada: Small cleanup in processing of primitive operations The processing of primitive operations is now always uniform for tagged and untagged types, but the code contains left-overs from the time where it was specific to tagged types, in particular for the handling of subtypes. gcc/ada/ * einfo.ads (Direct_Primitive_Operations): Mention concurrent types as well as GNAT extensions instead of implementation details. (Primitive_Operations): Document that Direct_Primitive_Operations is also used for concurrent types as a fallback. * einfo-utils.adb (Primitive_Operations): Tweak formatting. * exp_util.ads (Find_Prim_Op): Adjust description. * exp_util.adb (Make_Subtype_From_Expr): In the private case with unknown discriminants, always copy Direct_Primitive_Operations and do not overwrite the Class_Wide_Type of the expression's base type. * sem_ch3.adb (Analyze_Incomplete_Type_Decl): Tweak comment. (Analyze_Subtype_Declaration): Remove older and now dead calls to Set_Direct_Primitive_Operations. Tweak comment. (Build_Derived_Private_Type): Likewise. (Build_Derived_Record_Type): Likewise. (Build_Discriminated_Subtype): Set Direct_Primitive_Operations in all cases instead of just for tagged types. (Complete_Private_Subtype): Likewise. (Derived_Type_Declaration): Tweak comment. * sem_ch4.ads (Try_Object_Operation): Adjust description. --- gcc/ada/einfo-utils.adb | 4 +-- gcc/ada/einfo.ads | 34 ++++++++++++----------- gcc/ada/exp_util.adb | 8 ++---- gcc/ada/exp_util.ads | 10 +++---- gcc/ada/sem_ch3.adb | 61 ++++++++++++++++++----------------------- gcc/ada/sem_ch4.ads | 5 ++-- 6 files changed, 55 insertions(+), 67 deletions(-) diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb index 4c86ba1c3b195..c0c79f92e136a 100644 --- a/gcc/ada/einfo-utils.adb +++ b/gcc/ada/einfo-utils.adb @@ -2422,8 +2422,8 @@ package body Einfo.Utils is begin if Is_Concurrent_Type (Id) then if Present (Corresponding_Record_Type (Id)) then - return Direct_Primitive_Operations - (Corresponding_Record_Type (Id)); + return + Direct_Primitive_Operations (Corresponding_Record_Type (Id)); -- When expansion is disabled, the corresponding record type is -- absent, but if this is a tagged type with ancestors, or if the diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index dd95ea051c1b3..de175310ee9d4 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -932,18 +932,17 @@ package Einfo is -- subtypes. Contains the Digits value specified in the declaration. -- Direct_Primitive_Operations --- Defined in tagged types and subtypes (including synchronized types), --- in tagged private types, and in tagged incomplete types. Moreover, it --- is also defined for untagged types, both when Extensions_Allowed is --- True (-gnatX) to support the extension feature of prefixed calls for --- untagged types, and when Extensions_Allowed is False to get better --- error messages. This field is an element list of entities for --- primitive operations of the type. For incomplete types the list is --- always empty. In order to follow the C++ ABI, entities of primitives --- that come from source must be stored in this list in the order of --- their occurrence in the sources. When expansion is disabled, the --- corresponding record type of a synchronized type is not constructed. --- In that case, such types carry this attribute directly. +-- Defined in concurrent types, tagged record types and subtypes, tagged +-- private types, and tagged incomplete types. Moreover, it is also +-- defined in untagged types, both when GNAT extensions are allowed, to +-- support prefixed calls for untagged types, and when GNAT extensions +-- are not allowed, to give better error messages. Set to a list of +-- entities for primitive operations of the type. For incomplete types +-- the list is always empty. In order to follow the C++ ABI, entities of +-- primitives that come from source must be stored in this list in the +-- order of their occurrence in the sources. When expansion is disabled, +-- the corresponding record type of concurrent types is not constructed; +-- in this case, such types carry this attribute directly. -- Directly_Designated_Type -- Defined in access types. This field points to the type that is @@ -4066,10 +4065,13 @@ package Einfo is -- Primitive_Operations (synthesized) -- Defined in concurrent types, tagged record types and subtypes, tagged --- private types and tagged incomplete types. For concurrent types whose --- Corresponding_Record_Type (CRT) is available, returns the list of --- Direct_Primitive_Operations of its CRT; otherwise returns No_Elist. --- For all the other types returns the Direct_Primitive_Operations. +-- private types, and tagged incomplete types. Moreover, it is also +-- defined in untagged types, both when GNAT extensions are allowed, to +-- support prefixed calls for untagged types, and when GNAT extensions +-- are not allowed, to give better error messages. For concurrent types +-- whose Corresponding_Record_Type (CRT) is available, returns the list +-- of Direct_Primitive_Operations of this CRT. In all the other cases, +-- returns the list of Direct_Primitive_Operations. -- Prival -- Defined in private components of protected types. Refers to the entity diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 7a756af97ea3c..e86e7037d1ff6 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -10671,12 +10671,8 @@ package body Exp_Util is Set_Is_Itype (Priv_Subtyp); Set_Associated_Node_For_Itype (Priv_Subtyp, E); - if Is_Tagged_Type (Priv_Subtyp) then - Set_Class_Wide_Type - (Base_Type (Priv_Subtyp), Class_Wide_Type (Unc_Typ)); - Set_Direct_Primitive_Operations (Priv_Subtyp, - Direct_Primitive_Operations (Unc_Typ)); - end if; + Set_Direct_Primitive_Operations + (Priv_Subtyp, Direct_Primitive_Operations (Unc_Typ)); Set_Full_View (Priv_Subtyp, Full_Subtyp); diff --git a/gcc/ada/exp_util.ads b/gcc/ada/exp_util.ads index 16d8e14976ca9..6460bf02c1b56 100644 --- a/gcc/ada/exp_util.ads +++ b/gcc/ada/exp_util.ads @@ -578,11 +578,11 @@ package Exp_Util is -- Find the last initialization call related to object declaration Decl function Find_Prim_Op (T : Entity_Id; Name : Name_Id) return Entity_Id; - -- Find the first primitive operation of a tagged type T with name Name. - -- This function allows the use of a primitive operation which is not - -- directly visible. If T is a class-wide type, then the reference is to an - -- operation of the corresponding root type. It is an error if no primitive - -- operation with the given name is found. + -- Find the first primitive operation of type T with the specified Name, + -- disregarding any visibility considerations. If T is a class-wide type, + -- then examine the primitive operations of its corresponding root type. + -- Raise Program_Error if no primitive operation with the specified Name + -- is found. function Find_Prim_Op (T : Entity_Id; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index fa13bd23ac7b2..391727a37f419 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -3554,8 +3554,7 @@ package body Sem_Ch3 is -- Initialize the list of primitive operations to an empty list, -- to cover tagged types as well as untagged types. For untagged -- types this is used either to analyze the call as legal when - -- Core_Extensions_Allowed is True, or to issue a better error message - -- otherwise. + -- GNAT extensions are allowed, or to give better error messages. Set_Direct_Primitive_Operations (T, New_Elmt_List); @@ -5864,8 +5863,6 @@ package body Sem_Ch3 is Set_No_Tagged_Streams_Pragma (Id, No_Tagged_Streams_Pragma (T)); Set_Is_Abstract_Type (Id, Is_Abstract_Type (T)); - Set_Direct_Primitive_Operations - (Id, Direct_Primitive_Operations (T)); Set_Class_Wide_Type (Id, Class_Wide_Type (T)); if Is_Interface (T) then @@ -5895,8 +5892,6 @@ package body Sem_Ch3 is No_Tagged_Streams_Pragma (T)); Set_Is_Abstract_Type (Id, Is_Abstract_Type (T)); Set_Class_Wide_Type (Id, Class_Wide_Type (T)); - Set_Direct_Primitive_Operations (Id, - Direct_Primitive_Operations (T)); end if; -- In general the attributes of the subtype of a private type @@ -6000,16 +5995,6 @@ package body Sem_Ch3 is (Id, No_Tagged_Streams_Pragma (T)); end if; - -- For tagged types, or when prefixed-call syntax is allowed - -- for untagged types, initialize the list of primitive - -- operations to an empty list. - - if Is_Tagged_Type (Id) - or else Core_Extensions_Allowed - then - Set_Direct_Primitive_Operations (Id, New_Elmt_List); - end if; - -- Ada 2005 (AI-412): Decorate an incomplete subtype of an -- incomplete type visible through a limited with clause. @@ -6050,7 +6035,8 @@ package body Sem_Ch3 is -- When prefixed calls are enabled for untagged types, the subtype -- shares the primitive operations of its base type. Do this even - -- when Extensions_Allowed is False to issue better error messages. + -- when GNAT extensions are not allowed, in order to give better + -- error messages. Set_Direct_Primitive_Operations (Id, Direct_Primitive_Operations (Base_Type (T))); @@ -8462,8 +8448,7 @@ package body Sem_Ch3 is -- Initialize the list of primitive operations to an empty list, -- to cover tagged types as well as untagged types. For untagged -- types this is used either to analyze the call as legal when - -- Extensions_Allowed is True, or to issue a better error message - -- otherwise. + -- GNAT extensions are allowed, or to give better error messages. Set_Direct_Primitive_Operations (Derived_Type, New_Elmt_List); @@ -9862,8 +9847,7 @@ package body Sem_Ch3 is -- Initialize the list of primitive operations to an empty list, -- to cover tagged types as well as untagged types. For untagged -- types this is used either to analyze the call as legal when - -- Extensions_Allowed is True, or to issue a better error message - -- otherwise. + -- GNAT extensions are allowed, or to give better error messages. Set_Direct_Primitive_Operations (Derived_Type, New_Elmt_List); @@ -10911,6 +10895,14 @@ package body Sem_Ch3 is Make_Class_Wide_Type (Def_Id); end if; + -- When prefixed calls are enabled for untagged types, the subtype + -- shares the primitive operations of its base type. Do this even + -- when GNAT extensions are not allowed, in order to give better + -- error messages. + + Set_Direct_Primitive_Operations + (Def_Id, Direct_Primitive_Operations (T)); + Set_Stored_Constraint (Def_Id, No_Elist); if Has_Discrs then @@ -10921,17 +10913,11 @@ package body Sem_Ch3 is if Is_Tagged_Type (T) then -- Ada 2005 (AI-251): In case of concurrent types we inherit the - -- concurrent record type (which has the list of primitive - -- operations). + -- concurrent record type. - if Ada_Version >= Ada_2005 - and then Is_Concurrent_Type (T) - then - Set_Corresponding_Record_Type (Def_Id, - Corresponding_Record_Type (T)); - else - Set_Direct_Primitive_Operations (Def_Id, - Direct_Primitive_Operations (T)); + if Ada_Version >= Ada_2005 and then Is_Concurrent_Type (T) then + Set_Corresponding_Record_Type + (Def_Id, Corresponding_Record_Type (T)); end if; Set_Is_Abstract_Type (Def_Id, Is_Abstract_Type (T)); @@ -13083,6 +13069,14 @@ package body Sem_Ch3 is Set_First_Rep_Item (Full, First_Rep_Item (Full_Base)); Set_Depends_On_Private (Full, Has_Private_Component (Full)); + -- When prefixed calls are enabled for untagged types, the subtype + -- shares the primitive operations of its base type. Do this even + -- when GNAT extensions are not allowed, in order to give better + -- error messages. + + Set_Direct_Primitive_Operations + (Full, Direct_Primitive_Operations (Full_Base)); + -- Freeze the private subtype entity if its parent is delayed, and not -- already frozen. We skip this processing if the type is an anonymous -- subtype of a record component, or is the corresponding record of a @@ -13189,8 +13183,6 @@ package body Sem_Ch3 is Set_Is_Tagged_Type (Full); Set_Is_Limited_Record (Full, Is_Limited_Record (Full_Base)); - Set_Direct_Primitive_Operations - (Full, Direct_Primitive_Operations (Full_Base)); Set_No_Tagged_Streams_Pragma (Full, No_Tagged_Streams_Pragma (Full_Base)); @@ -17469,8 +17461,7 @@ package body Sem_Ch3 is -- Initialize the list of primitive operations to an empty list, -- to cover tagged types as well as untagged types. For untagged -- types this is used either to analyze the call as legal when - -- Extensions_Allowed is True, or to issue a better error message - -- otherwise. + -- GNAT extensions are allowed, or to give better error messages. Set_Direct_Primitive_Operations (T, New_Elmt_List); diff --git a/gcc/ada/sem_ch4.ads b/gcc/ada/sem_ch4.ads index 7aae598b32a1c..dbe0f9a73daf2 100644 --- a/gcc/ada/sem_ch4.ads +++ b/gcc/ada/sem_ch4.ads @@ -84,9 +84,8 @@ package Sem_Ch4 is -- true then N is an N_Selected_Component node which is part of a call to -- an entry or procedure of a tagged concurrent type and this routine is -- invoked to search for class-wide subprograms conflicting with the target - -- entity. If Allow_Extensions is True, then a prefixed call of a primitive - -- of a non-tagged type is allowed as if Extensions_Allowed returned True. - -- This is used to issue better error messages. + -- entity. If Allow_Extensions is True, then a prefixed call to a primitive + -- of an untagged type is allowed (used to give better error messages). procedure Unresolved_Operator (N : Node_Id); -- Give an error for an unresolved operator From 498c6260ce0508a4c865071fed11e964d6f22b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Poulhi=C3=A8s?= Date: Tue, 4 Jun 2024 14:37:17 +0200 Subject: [PATCH 075/114] ada: Change error message on invalid RTS path Include the invalid path in the error message. gcc/ada/ * make.adb (Scan_Make_Arg): Adjust error message. * gnatls.adb (Search_RTS): Likewise. * switch-b.adb (Scan_Debug_Switches): Likewise. --- gcc/ada/gnatls.adb | 11 ++++++++--- gcc/ada/make.adb | 14 +++++++++----- gcc/ada/switch-b.adb | 15 ++++++++++----- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/gcc/ada/gnatls.adb b/gcc/ada/gnatls.adb index 2c26001743ad6..c52c1aea9c3f5 100644 --- a/gcc/ada/gnatls.adb +++ b/gcc/ada/gnatls.adb @@ -1673,9 +1673,13 @@ procedure Gnatls is end if; if Lib_Path /= null then - Osint.Fail ("RTS path not valid: missing adainclude directory"); + Osint.Fail + ("RTS path """ & Name + & """ not valid: missing adainclude directory"); elsif Src_Path /= null then - Osint.Fail ("RTS path not valid: missing adalib directory"); + Osint.Fail + ("RTS path """ & Name + & """ not valid: missing adalib directory"); end if; -- Try to find the RTS on the project path. First setup the project path @@ -1710,7 +1714,8 @@ procedure Gnatls is end if; Osint.Fail - ("RTS path not valid: missing adainclude and adalib directories"); + ("RTS path """ & Name + & """ not valid: missing adainclude and adalib directories"); end Search_RTS; ------------------- diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb index 24b2d099bfeba..cef243411358e 100644 --- a/gcc/ada/make.adb +++ b/gcc/ada/make.adb @@ -4478,13 +4478,14 @@ package body Make is RTS_Switch := True; declare + RTS_Arg_Path : constant String := Argv (7 .. Argv'Last); Src_Path_Name : constant String_Ptr := Get_RTS_Search_Dir - (Argv (7 .. Argv'Last), Include); + (RTS_Arg_Path, Include); Lib_Path_Name : constant String_Ptr := Get_RTS_Search_Dir - (Argv (7 .. Argv'Last), Objects); + (RTS_Arg_Path, Objects); begin if Src_Path_Name /= null @@ -4501,16 +4502,19 @@ package body Make is and then Lib_Path_Name = null then Make_Failed - ("RTS path not valid: missing adainclude and adalib " + ("RTS path """ & RTS_Arg_Path + & """ not valid: missing adainclude and adalib " & "directories"); elsif Src_Path_Name = null then Make_Failed - ("RTS path not valid: missing adainclude directory"); + ("RTS path """ & RTS_Arg_Path + & """ not valid: missing adainclude directory"); else pragma Assert (Lib_Path_Name = null); Make_Failed - ("RTS path not valid: missing adalib directory"); + ("RTS path """ & RTS_Arg_Path + & """ not valid: missing adalib directory"); end if; end; end if; diff --git a/gcc/ada/switch-b.adb b/gcc/ada/switch-b.adb index 8d8dc58937c1f..2de516dba56b6 100644 --- a/gcc/ada/switch-b.adb +++ b/gcc/ada/switch-b.adb @@ -672,13 +672,15 @@ package body Switch.B is Opt.RTS_Switch := True; declare + RTS_Arg_Path : constant String := + Switch_Chars (Ptr + 1 .. Max); Src_Path_Name : constant String_Ptr := Get_RTS_Search_Dir - (Switch_Chars (Ptr + 1 .. Max), + (RTS_Arg_Path, Include); Lib_Path_Name : constant String_Ptr := Get_RTS_Search_Dir - (Switch_Chars (Ptr + 1 .. Max), + (RTS_Arg_Path, Objects); begin @@ -698,14 +700,17 @@ package body Switch.B is and then Lib_Path_Name = null then Osint.Fail - ("RTS path not valid: missing adainclude and " + ("RTS path """ & RTS_Arg_Path + & """ not valid: missing adainclude and " & "adalib directories"); elsif Src_Path_Name = null then Osint.Fail - ("RTS path not valid: missing adainclude directory"); + ("RTS path """ & RTS_Arg_Path + & """ not valid: missing adainclude directory"); else pragma Assert (Lib_Path_Name = null); Osint.Fail - ("RTS path not valid: missing adalib directory"); + ("RTS path """ & RTS_Arg_Path + & """ not valid: missing adalib directory"); end if; end; end if; From 96e037bcd160d2f63a04de09f2d47ed9aae082ad Mon Sep 17 00:00:00 2001 From: Javier Miranda Date: Thu, 6 Jun 2024 11:20:14 +0000 Subject: [PATCH 076/114] ada: Crash when using user defined string literals When a non-overridable aspect is explicitly specified for a non-tagged derived type, the compiler blows up processing an object declaration of an object of such type. gcc/ada/ * sem_ch13.adb (Analyze_One_Aspect): Fix code locating the entity of the parent type. --- gcc/ada/sem_ch13.adb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index a86f774018a35..90376f818a30e 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -4801,8 +4801,14 @@ package body Sem_Ch13 is and then Nkind (Type_Definition (N)) = N_Derived_Type_Definition and then not In_Instance_Body then + -- In order to locate the parent type we must go first to its + -- base type because the frontend introduces an implicit base + -- type even if there is no constraint attached to it, since + -- this is closer to the Ada semantics. + declare - Parent_Type : constant Entity_Id := Etype (E); + Parent_Type : constant Entity_Id := + Etype (Base_Type (E)); Inherited_Aspect : constant Node_Id := Find_Aspect (Parent_Type, A_Id); begin From 728c1454c2b405543687d80238d8af4f12bcdca2 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 5 Jun 2024 10:40:35 +0200 Subject: [PATCH 077/114] ada: Fix crash in GNATbind during error reporting This is the minimal fix to avoid the crash. gcc/ada/ * bcheck.adb (Check_Consistency_Of_Sdep): Guard against path to ALI file not found. --- gcc/ada/bcheck.adb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/ada/bcheck.adb b/gcc/ada/bcheck.adb index 56a417cc51760..64a6734a330c3 100644 --- a/gcc/ada/bcheck.adb +++ b/gcc/ada/bcheck.adb @@ -162,10 +162,14 @@ package body Bcheck is end if; else - ALI_Path_Id := - Osint.Full_Lib_File_Name (A.Afile); + ALI_Path_Id := Osint.Full_Lib_File_Name (A.Afile); + + -- Guard against Find_File not finding (again) the file because + -- Primary_Directory has been clobbered in between. - if Osint.Is_Readonly_Library (ALI_Path_Id) then + if Present (ALI_Path_Id) + and then Osint.Is_Readonly_Library (ALI_Path_Id) + then if Tolerate_Consistency_Errors then Error_Msg ("?{ should be recompiled"); Error_Msg_File_1 := ALI_Path_Id; From 036a37eae64ba6ff73a913fa2f93fc888e4b28b9 Mon Sep 17 00:00:00 2001 From: Ronan Desplanques Date: Thu, 6 Jun 2024 09:40:54 +0200 Subject: [PATCH 078/114] ada: Apply fixes to Examine_Array_Bounds gcc/ada/ * sem_util.adb (Examine_Array_Bounds): Add missing return statements. Fix criterion for a string literal being empty. --- gcc/ada/sem_util.adb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 4cdac9443e6db..4dde5f3964e1a 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -8157,13 +8157,15 @@ package body Sem_Util is if not Is_Constrained (Typ) then All_Static := False; Has_Empty := False; + return; -- A string literal has static bounds, and is not empty as long as it -- contains at least one character. elsif Ekind (Typ) = E_String_Literal_Subtype then All_Static := True; - Has_Empty := String_Literal_Length (Typ) > 0; + Has_Empty := String_Literal_Length (Typ) = 0; + return; end if; -- Assume that all bounds are static and not empty From 3cc00ccf4b8a866e2265445aa560a2ca00f613b8 Mon Sep 17 00:00:00 2001 From: Javier Miranda Date: Thu, 6 Jun 2024 12:06:53 +0000 Subject: [PATCH 079/114] ada: Reject ambiguous function calls in interpolated string expressions When the interpolated expression is a call to an ambiguous call the frontend does not reject it; erroneously accepts the call and generates code that calls to one of them. gcc/ada/ * sem_ch2.adb (Analyze_Interpolated_String_Literal): Reject ambiguous function calls. --- gcc/ada/sem_ch2.adb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gcc/ada/sem_ch2.adb b/gcc/ada/sem_ch2.adb index aae9990eb4d9b..08cc75c9104c4 100644 --- a/gcc/ada/sem_ch2.adb +++ b/gcc/ada/sem_ch2.adb @@ -25,7 +25,9 @@ with Atree; use Atree; with Einfo; use Einfo; +with Einfo.Entities; use Einfo.Entities; with Einfo.Utils; use Einfo.Utils; +with Errout; use Errout; with Ghost; use Ghost; with Mutably_Tagged; use Mutably_Tagged; with Namet; use Namet; @@ -141,6 +143,14 @@ package body Sem_Ch2 is Str_Elem := First (Expressions (N)); while Present (Str_Elem) loop Analyze (Str_Elem); + + if Nkind (Str_Elem) = N_Identifier + and then Ekind (Entity (Str_Elem)) = E_Function + and then Is_Overloaded (Str_Elem) + then + Error_Msg_NE ("ambiguous call to&", Str_Elem, Entity (Str_Elem)); + end if; + Next (Str_Elem); end loop; end Analyze_Interpolated_String_Literal; From 4e128544abc14871388ca194e61d6c482d3a11a6 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 5 Apr 2024 20:47:34 +0200 Subject: [PATCH 080/114] ada: Implement fast modulo reduction for nonbinary modular multiplication This implements modulo reduction for nonbinary modular multiplication with small moduli by means of the standard division-free algorithm also used in the optimizer, but with fewer constraints and therefore better results. For the sake of consistency, it is also used for the 'Mod attribute of the same modular types and, more generally, for the Mod (and Rem) operators of unsigned types if the second operand is static and not a power of two. gcc/ada/ * gcc-interface/gigi.h (fast_modulo_reduction): Declare. * gcc-interface/trans.cc (gnat_to_gnu) : In the unsigned case, call fast_modulo_reduction for {FLOOR,TRUNC}_MOD_EXPR if the RHS is a constant and not a power of two, and the precision is not larger than the word size. * gcc-interface/utils2.cc: Include expmed.h. (fast_modulo_reduction): New function. (nonbinary_modular_operation): Call fast_modulo_reduction for the multiplication if the precision is not larger than the word size. --- gcc/ada/gcc-interface/gigi.h | 5 ++ gcc/ada/gcc-interface/trans.cc | 17 ++++++ gcc/ada/gcc-interface/utils2.cc | 102 +++++++++++++++++++++++++++++++- 3 files changed, 121 insertions(+), 3 deletions(-) diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index 6ed74d6879eef..40f3f0d3d137e 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -1040,6 +1040,11 @@ extern bool simple_constant_p (Entity_Id gnat_entity); /* Return the size of TYPE, which must be a positive power of 2. */ extern unsigned int resolve_atomic_size (tree type); +/* Try to compute the reduction of OP modulo MODULUS in PRECISION bits with a + division-free algorithm. Return NULL_TREE if this is not easily doable. */ +extern tree fast_modulo_reduction (tree op, tree modulus, + unsigned int precision); + #ifdef __cplusplus extern "C" { #endif diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index e68fb3fd7769c..7c5282602b2c3 100644 --- a/gcc/ada/gcc-interface/trans.cc +++ b/gcc/ada/gcc-interface/trans.cc @@ -7317,6 +7317,23 @@ gnat_to_gnu (Node_Id gnat_node) gnu_result = build_binary_op_trapv (code, gnu_type, gnu_lhs, gnu_rhs, gnat_node); + + /* For an unsigned modulo operation with nonbinary constant modulus, + we first try to do a reduction by means of a (multiplier, shifter) + pair in the needed precision up to the word size. But not when + optimizing for size, because it will be longer than a div+mul+sub + sequence. */ + else if (!optimize_size + && (code == FLOOR_MOD_EXPR || code == TRUNC_MOD_EXPR) + && TYPE_UNSIGNED (gnu_type) + && TYPE_PRECISION (gnu_type) <= BITS_PER_WORD + && TREE_CODE (gnu_rhs) == INTEGER_CST + && !integer_pow2p (gnu_rhs) + && (gnu_expr + = fast_modulo_reduction (gnu_lhs, gnu_rhs, + TYPE_PRECISION (gnu_type)))) + gnu_result = gnu_expr; + else { /* Some operations, e.g. comparisons of arrays, generate complex diff --git a/gcc/ada/gcc-interface/utils2.cc b/gcc/ada/gcc-interface/utils2.cc index 70271cf283655..a37eccc4cfb0a 100644 --- a/gcc/ada/gcc-interface/utils2.cc +++ b/gcc/ada/gcc-interface/utils2.cc @@ -33,6 +33,7 @@ #include "tree.h" #include "inchash.h" #include "builtins.h" +#include "expmed.h" #include "fold-const.h" #include "stor-layout.h" #include "stringpool.h" @@ -534,6 +535,91 @@ compare_fat_pointers (location_t loc, tree result_type, tree p1, tree p2) p1_array_is_null, same_bounds)); } +/* Try to compute the reduction of OP modulo MODULUS in PRECISION bits with a + division-free algorithm. Return NULL_TREE if this is not easily doable. */ + +tree +fast_modulo_reduction (tree op, tree modulus, unsigned int precision) +{ + const tree type = TREE_TYPE (op); + const unsigned int type_precision = TYPE_PRECISION (type); + + /* The implementation is host-dependent for the time being. */ + if (type_precision <= HOST_BITS_PER_WIDE_INT) + { + const unsigned HOST_WIDE_INT d = tree_to_uhwi (modulus); + unsigned HOST_WIDE_INT ml, mh; + int pre_shift, post_shift; + tree t; + + /* The trick is to replace the division by d with a multiply-and-shift + sequence parameterized by a (multiplier, shifter) pair computed from + d, the precision of the type and the needed precision: + + op / d = (op * multiplier) >> shifter + + But choose_multiplier provides a slightly different interface: + + op / d = (op h* multiplier) >> reduced_shifter + + that makes things easier by using a high-part multiplication. */ + mh = choose_multiplier (d, type_precision, precision, &ml, &post_shift); + + /* If the suggested multiplier is more than TYPE_PRECISION bits, we can + do better for even divisors, using an initial right shift. */ + if (mh != 0 && (d & 1) == 0) + { + pre_shift = ctz_or_zero (d); + mh = choose_multiplier (d >> pre_shift, type_precision, + precision - pre_shift, &ml, &post_shift); + } + else + pre_shift = 0; + + /* If the suggested multiplier is still more than TYPE_PRECISION bits, + try again with a larger type up to the word size. */ + if (mh != 0) + { + if (type_precision < BITS_PER_WORD) + { + const scalar_int_mode m + = smallest_int_mode_for_size (type_precision + 1); + tree new_type = gnat_type_for_mode (m, 1); + op = fold_convert (new_type, op); + modulus = fold_convert (new_type, modulus); + t = fast_modulo_reduction (op, modulus, precision); + if (t) + return fold_convert (type, t); + } + + return NULL_TREE; + } + + /* This computes op - (op / modulus) * modulus with PRECISION bits. */ + op = gnat_protect_expr (op); + + /* t = op >> pre_shift + t = t h* ml + t = t >> post_shift + t = t * modulus */ + if (pre_shift) + t = fold_build2 (RSHIFT_EXPR, type, op, + build_int_cst (type, pre_shift)); + else + t = op; + t = fold_build2 (MULT_HIGHPART_EXPR, type, t, build_int_cst (type, ml)); + if (post_shift) + t = fold_build2 (RSHIFT_EXPR, type, t, + build_int_cst (type, post_shift)); + t = fold_build2 (MULT_EXPR, type, t, modulus); + + return fold_build2 (MINUS_EXPR, type, op, t); + } + + else + return NULL_TREE; +} + /* Compute the result of applying OP_CODE to LHS and RHS, where both are of TYPE. We know that TYPE is a modular type with a nonbinary modulus. */ @@ -543,7 +629,7 @@ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs, { tree modulus = TYPE_MODULUS (type); unsigned precision = tree_floor_log2 (modulus) + 1; - tree op_type, result; + tree op_type, result, fmr; /* For the logical operations, we only need PRECISION bits. For addition and subtraction, we need one more, and for multiplication twice as many. */ @@ -576,9 +662,19 @@ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs, if (op_code == MINUS_EXPR) result = fold_build2 (PLUS_EXPR, op_type, result, modulus); - /* For a multiplication, we have no choice but to use a modulo operation. */ + /* For a multiplication, we first try to do a modulo reduction by means of a + (multiplier, shifter) pair in the needed precision up to the word size, or + else we fall back to a standard modulo operation. But not when optimizing + for size, because it will be longer than a div+mul+sub sequence. */ if (op_code == MULT_EXPR) - result = fold_build2 (TRUNC_MOD_EXPR, op_type, result, modulus); + { + if (!optimize_size + && precision <= BITS_PER_WORD + && (fmr = fast_modulo_reduction (result, modulus, precision))) + result = fmr; + else + result = fold_build2 (TRUNC_MOD_EXPR, op_type, result, modulus); + } /* For the other operations, subtract the modulus if we are >= it. */ else From 9aa8324e8a2c992593591d965b3e2d527ed891d3 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 20 Apr 2024 12:26:52 +0200 Subject: [PATCH 081/114] ada: Implement fast modulo reduction for nonbinary modular multiplication This adds the missing guard to prevent the reduction from being used when the target does not provide or cannot synthesize a high-part multiply. gcc/ada/ * gcc-interface/trans.cc (gnat_to_gnu) : Fix formatting. * gcc-interface/utils2.cc: Include optabs-query.h. (fast_modulo_reduction): Call can_mult_highpart_p on the TYPE_MODE before generating a high-part multiply. Fix formatting. --- gcc/ada/gcc-interface/trans.cc | 2 +- gcc/ada/gcc-interface/utils2.cc | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index 7c5282602b2c3..83ed17bff8422 100644 --- a/gcc/ada/gcc-interface/trans.cc +++ b/gcc/ada/gcc-interface/trans.cc @@ -7323,7 +7323,7 @@ gnat_to_gnu (Node_Id gnat_node) pair in the needed precision up to the word size. But not when optimizing for size, because it will be longer than a div+mul+sub sequence. */ - else if (!optimize_size + else if (!optimize_size && (code == FLOOR_MOD_EXPR || code == TRUNC_MOD_EXPR) && TYPE_UNSIGNED (gnu_type) && TYPE_PRECISION (gnu_type) <= BITS_PER_WORD diff --git a/gcc/ada/gcc-interface/utils2.cc b/gcc/ada/gcc-interface/utils2.cc index a37eccc4cfb0a..d101d7729bf80 100644 --- a/gcc/ada/gcc-interface/utils2.cc +++ b/gcc/ada/gcc-interface/utils2.cc @@ -35,6 +35,7 @@ #include "builtins.h" #include "expmed.h" #include "fold-const.h" +#include "optabs-query.h" #include "stor-layout.h" #include "stringpool.h" #include "varasm.h" @@ -558,11 +559,11 @@ fast_modulo_reduction (tree op, tree modulus, unsigned int precision) op / d = (op * multiplier) >> shifter - But choose_multiplier provides a slightly different interface: + But choose_multiplier provides a slightly different interface: - op / d = (op h* multiplier) >> reduced_shifter + op / d = (op h* multiplier) >> reduced_shifter - that makes things easier by using a high-part multiplication. */ + that makes things easier by using a high-part multiplication. */ mh = choose_multiplier (d, type_precision, precision, &ml, &post_shift); /* If the suggested multiplier is more than TYPE_PRECISION bits, we can @@ -577,8 +578,9 @@ fast_modulo_reduction (tree op, tree modulus, unsigned int precision) pre_shift = 0; /* If the suggested multiplier is still more than TYPE_PRECISION bits, - try again with a larger type up to the word size. */ - if (mh != 0) + or the TYPE_MODE does not have a high-part multiply, try again with + a larger type up to the word size. */ + if (mh != 0 || !can_mult_highpart_p (TYPE_MODE (type), true)) { if (type_precision < BITS_PER_WORD) { From d69c53f73dae181c79f6ec6c7276a172476a2728 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 27 May 2024 16:31:20 +0200 Subject: [PATCH 082/114] ada: Fix bogus Address Sanitizer stack-buffer-overflow on packed record equality We set DECL_BIT_FIELD optimistically during the translation of record types and clear it afterward if needed, but fail to clear other attributes in the latter case, which fools the logic of the Address Sanitizer. gcc/ada/ * gcc-interface/utils.cc (clear_decl_bit_field): New function. (finish_record_type): Call clear_decl_bit_field instead of clearing DECL_BIT_FIELD manually. --- gcc/ada/gcc-interface/utils.cc | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/gcc/ada/gcc-interface/utils.cc b/gcc/ada/gcc-interface/utils.cc index 771cb1a17cadb..0eb9af8d4a2d5 100644 --- a/gcc/ada/gcc-interface/utils.cc +++ b/gcc/ada/gcc-interface/utils.cc @@ -2002,6 +2002,21 @@ finish_fat_pointer_type (tree record_type, tree field_list) TYPE_CONTAINS_PLACEHOLDER_INTERNAL (record_type) = 2; } +/* Clear DECL_BIT_FIELD flag and associated markers on FIELD, which is a field + of aggregate type TYPE. */ + +static void +clear_decl_bit_field (tree field, tree type) +{ + DECL_BIT_FIELD (field) = 0; + DECL_BIT_FIELD_TYPE (field) = NULL_TREE; + + /* DECL_BIT_FIELD_REPRESENTATIVE is not defined for QUAL_UNION_TYPE since + it uses the same slot as DECL_QUALIFIER. */ + if (TREE_CODE (type) != QUAL_UNION_TYPE) + DECL_BIT_FIELD_REPRESENTATIVE (field) = NULL_TREE; +} + /* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST, finish constructing the record or union type. If REP_LEVEL is zero, this record has no representation clause and so will be entirely laid out here. @@ -2112,7 +2127,7 @@ finish_record_type (tree record_type, tree field_list, int rep_level, if (TYPE_ALIGN (record_type) >= align) { SET_DECL_ALIGN (field, MAX (DECL_ALIGN (field), align)); - DECL_BIT_FIELD (field) = 0; + clear_decl_bit_field (field, record_type); } else if (!had_align && rep_level == 0 @@ -2122,7 +2137,7 @@ finish_record_type (tree record_type, tree field_list, int rep_level, { SET_TYPE_ALIGN (record_type, align); SET_DECL_ALIGN (field, MAX (DECL_ALIGN (field), align)); - DECL_BIT_FIELD (field) = 0; + clear_decl_bit_field (field, record_type); } } @@ -2130,7 +2145,7 @@ finish_record_type (tree record_type, tree field_list, int rep_level, if (!STRICT_ALIGNMENT && DECL_BIT_FIELD (field) && value_factor_p (pos, BITS_PER_UNIT)) - DECL_BIT_FIELD (field) = 0; + clear_decl_bit_field (field, record_type); } /* Clear DECL_BIT_FIELD_TYPE for a variant part at offset 0, it's simply @@ -2453,10 +2468,7 @@ rest_of_record_type_compilation (tree record_type) avoid generating useless attributes for the field in DWARF. */ if (DECL_SIZE (old_field) == TYPE_SIZE (field_type) && value_factor_p (pos, BITS_PER_UNIT)) - { - DECL_BIT_FIELD (new_field) = 0; - DECL_BIT_FIELD_TYPE (new_field) = NULL_TREE; - } + clear_decl_bit_field (new_field, new_record_type); DECL_CHAIN (new_field) = TYPE_FIELDS (new_record_type); TYPE_FIELDS (new_record_type) = new_field; From 2b510ac3aa521c6984495c63547914f271f1f51c Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 27 May 2024 16:46:03 +0200 Subject: [PATCH 083/114] ada: Fix bogus Address Sanitizer stack-buffer-overflow on packed array copy The Address Sanitizer considers that the padding at the end of a justified modular type may be accessed through the object, but it is never accessed and therefore can always be reused. gcc/ada/ * gcc-interface/decl.cc (gnat_to_gnu_entity) : Set the TYPE_JUSTIFIED_MODULAR_P flag earlier. * gcc-interface/misc.cc (gnat_unit_size_without_reusable_padding): New function. (LANG_HOOKS_UNIT_SIZE_WITHOUT_REUSABLE_PADDING): Redefine to above function. --- gcc/ada/gcc-interface/decl.cc | 2 +- gcc/ada/gcc-interface/misc.cc | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc index aa31a888818f6..5b3a3b4961b42 100644 --- a/gcc/ada/gcc-interface/decl.cc +++ b/gcc/ada/gcc-interface/decl.cc @@ -1976,6 +1976,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) gnu_type = make_node (RECORD_TYPE); TYPE_NAME (gnu_type) = create_concat_name (gnat_entity, "JM"); + TYPE_JUSTIFIED_MODULAR_P (gnu_type) = 1; TYPE_PACKED (gnu_type) = 1; TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_field_type); TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_field_type); @@ -2006,7 +2007,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) /* We will output additional debug info manually below. */ finish_record_type (gnu_type, gnu_field, 2, false); - TYPE_JUSTIFIED_MODULAR_P (gnu_type) = 1; /* Make the original array type a parallel/debug type. Note that gnat_get_array_descr_info needs a TYPE_IMPL_PACKED_ARRAY_P type diff --git a/gcc/ada/gcc-interface/misc.cc b/gcc/ada/gcc-interface/misc.cc index b703f00d3c0b3..4f6f6774fe702 100644 --- a/gcc/ada/gcc-interface/misc.cc +++ b/gcc/ada/gcc-interface/misc.cc @@ -760,6 +760,19 @@ gnat_type_max_size (const_tree gnu_type) return max_size_unit; } +/* Return the unit size of TYPE without reusable tail padding. */ + +static tree +gnat_unit_size_without_reusable_padding (tree type) +{ + /* The padding of justified modular types can always be reused. */ + if (TYPE_JUSTIFIED_MODULAR_P (type)) + return fold_convert (sizetype, + size_binop (CEIL_DIV_EXPR, + TYPE_ADA_SIZE (type), bitsize_unit_node)); + return TYPE_SIZE_UNIT (type); +} + static tree get_array_bit_stride (tree); /* Provide information in INFO for debug output about the TYPE array type. @@ -1407,6 +1420,8 @@ const struct scoped_attribute_specs *const gnat_attribute_table[] = #define LANG_HOOKS_TYPE_FOR_SIZE gnat_type_for_size #undef LANG_HOOKS_TYPES_COMPATIBLE_P #define LANG_HOOKS_TYPES_COMPATIBLE_P gnat_types_compatible_p +#undef LANG_HOOKS_UNIT_SIZE_WITHOUT_REUSABLE_PADDING +#define LANG_HOOKS_UNIT_SIZE_WITHOUT_REUSABLE_PADDING gnat_unit_size_without_reusable_padding #undef LANG_HOOKS_GET_ARRAY_DESCR_INFO #define LANG_HOOKS_GET_ARRAY_DESCR_INFO gnat_get_array_descr_info #undef LANG_HOOKS_GET_SUBRANGE_BOUNDS @@ -1433,7 +1448,7 @@ const struct scoped_attribute_specs *const gnat_attribute_table[] = #define LANG_HOOKS_DEEP_UNSHARING true #undef LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS #define LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS true -#undef LANG_HOOKS_GET_SARIF_SOURCE_LANGUAGE +#undef LANG_HOOKS_GET_SARIF_SOURCE_LANGUAGE #define LANG_HOOKS_GET_SARIF_SOURCE_LANGUAGE gnat_get_sarif_source_language struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; From fbe4dd20b9f25eaa0b6b90d008aff4708e47765b Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 28 May 2024 13:03:19 +0200 Subject: [PATCH 084/114] ada: Fix internal error on protected type with -gnatc -gnatR It occurs when the body of a protected subprogram is processed, because the references to the components of the type have not been properly expanded. gcc/ada/ * gcc-interface/trans.cc (Subprogram_Body_to_gnu): Also return early for a protected subprogram in -gnatc mode. --- gcc/ada/gcc-interface/trans.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index 83ed17bff8422..3f2eadd7b2bc4 100644 --- a/gcc/ada/gcc-interface/trans.cc +++ b/gcc/ada/gcc-interface/trans.cc @@ -3934,6 +3934,12 @@ Subprogram_Body_to_gnu (Node_Id gnat_node) if (Is_Generic_Subprogram (gnat_subprog) || Is_Eliminated (gnat_subprog)) return; + /* Likewise if this is a protected subprogram and we are only annotating + types, as the required expansion of references did not take place. */ + if (Convention (gnat_subprog) == Convention_Protected + && type_annotate_only) + return; + /* If this subprogram acts as its own spec, define it. Otherwise, just get the already-elaborated tree node. However, if this subprogram had its elaboration deferred, we will already have made a tree node for it. So From f49267e1636872128249431e9e5d20c0908b7e8e Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 21 Jun 2024 09:52:42 +0100 Subject: [PATCH 085/114] sh: Make *minus_plus_one work after RA *minus_plus_one had no constraints, which meant that it could be matched after RA with operands 0, 1 and 2 all being different. The associated split instead requires operand 0 to be tied to operand 1. gcc/ * config/sh/sh.md (*minus_plus_one): Add constraints. --- gcc/config/sh/sh.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 92a1efeb811f8..9491b49e55b68 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -1642,9 +1642,9 @@ ;; matched. Split this up into a simple sub add sequence, as this will save ;; us one sett insn. (define_insn_and_split "*minus_plus_one" - [(set (match_operand:SI 0 "arith_reg_dest" "") - (plus:SI (minus:SI (match_operand:SI 1 "arith_reg_operand" "") - (match_operand:SI 2 "arith_reg_operand" "")) + [(set (match_operand:SI 0 "arith_reg_dest" "=r") + (plus:SI (minus:SI (match_operand:SI 1 "arith_reg_operand" "0") + (match_operand:SI 2 "arith_reg_operand" "r")) (const_int 1)))] "TARGET_SH1" "#" From e2fb245b07f489ed5bfd9a945e0053b4a3211245 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 20 Jun 2024 16:13:10 +0100 Subject: [PATCH 086/114] libstdc++: Initialize base in test allocator's constructor This fixes a warning from one of the test allocators: warning: base class 'class std::allocator<__gnu_test::copy_tracker>' should be explicitly initialized in the copy constructor [-Wextra] libstdc++-v3/ChangeLog: * testsuite/util/testsuite_allocator.h (tracker_allocator): Initialize base class in copy constructor. --- libstdc++-v3/testsuite/util/testsuite_allocator.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h index b7739f13ca3d1..2f9c453cbd1cf 100644 --- a/libstdc++-v3/testsuite/util/testsuite_allocator.h +++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h @@ -154,7 +154,7 @@ namespace __gnu_test tracker_allocator() { } - tracker_allocator(const tracker_allocator&) + tracker_allocator(const tracker_allocator& a) : Alloc(a) { } ~tracker_allocator() From 510ce5eed69ee1bea9c2c696fe3b2301e16d1486 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 18 Jun 2024 13:27:02 +0100 Subject: [PATCH 087/114] libstdc++: Fix std::to_array for trivial-ish types [PR115522] Due to PR c++/85723 the std::is_trivial trait is true for types with a deleted default constructor, so the use of std::is_trivial in std::to_array is not sufficient to ensure the type can be trivially default constructed then filled using memcpy. I also forgot that a type with a deleted assignment operator can still be trivial, so we also need to check that it's assignable because the is_constant_evaluated() path can't use memcpy. Replace the uses of std::is_trivial with std::is_trivially_copyable (needed for memcpy), std::is_trivially_default_constructible (needed so that the default construction is valid and does no work) and std::is_copy_assignable (needed for the constant evaluation case). libstdc++-v3/ChangeLog: PR libstdc++/115522 * include/std/array (to_array): Workaround the fact that std::is_trivial is not sufficient to check that a type is trivially default constructible and assignable. * testsuite/23_containers/array/creation/115522.cc: New test. --- libstdc++-v3/include/std/array | 8 +++-- .../23_containers/array/creation/115522.cc | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 libstdc++-v3/testsuite/23_containers/array/creation/115522.cc diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array index 39695471e245b..8710bf75924be 100644 --- a/libstdc++-v3/include/std/array +++ b/libstdc++-v3/include/std/array @@ -431,7 +431,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static_assert(is_constructible_v<_Tp, _Tp&>); if constexpr (is_constructible_v<_Tp, _Tp&>) { - if constexpr (is_trivial_v<_Tp>) + if constexpr (is_trivially_copyable_v<_Tp> + && is_trivially_default_constructible_v<_Tp> + && is_copy_assignable_v<_Tp>) { array, _Nm> __arr; if (!__is_constant_evaluated() && _Nm != 0) @@ -460,7 +462,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static_assert(is_move_constructible_v<_Tp>); if constexpr (is_move_constructible_v<_Tp>) { - if constexpr (is_trivial_v<_Tp>) + if constexpr (is_trivially_copyable_v<_Tp> + && is_trivially_default_constructible_v<_Tp> + && is_copy_assignable_v<_Tp>) { array, _Nm> __arr; if (!__is_constant_evaluated() && _Nm != 0) diff --git a/libstdc++-v3/testsuite/23_containers/array/creation/115522.cc b/libstdc++-v3/testsuite/23_containers/array/creation/115522.cc new file mode 100644 index 0000000000000..37073e002bdb3 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/array/creation/115522.cc @@ -0,0 +1,33 @@ +// { dg-do compile { target c++20 } } + +// PR libstdc++/115522 std::to_array no longer works for struct which is +// trivial but not default constructible + +#include + +void +test_deleted_ctor() +{ + struct S + { + S() = delete; + S(int) { } + }; + + S arr[1] = {{1}}; + auto arr1 = std::to_array(arr); + auto arr2 = std::to_array(std::move(arr)); +} + +void +test_deleted_assignment() +{ + struct S + { + void operator=(const S&) = delete; + }; + + S arr[1] = {}; + auto a1 = std::to_array(arr); + auto a2 = std::to_array(std::move(arr)); +} From f906b107634bfac29676e7fcf364d0ca7ceed666 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 20 Jun 2024 13:28:08 +0100 Subject: [PATCH 088/114] libstdc++: Fix __cpp_lib_chrono for old std::string ABI The header is incomplete for the old std::string ABI, because std::chrono::tzdb is only defined for the new ABI. The feature test macro advertising full C++20 support should not be defined for the old ABI. libstdc++-v3/ChangeLog: * include/bits/version.def (chrono): Add cxx11abi = yes. * include/bits/version.h: Regenerate. * testsuite/std/time/syn_c++20.cc: Adjust expected value for the feature test macro. --- libstdc++-v3/include/bits/version.def | 1 + libstdc++-v3/include/bits/version.h | 2 +- libstdc++-v3/testsuite/std/time/syn_c++20.cc | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 683b967d54b13..42cdef2f5265c 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -574,6 +574,7 @@ ftms = { v = 201907; cxxmin = 20; hosted = yes; + cxx11abi = yes; // std::chrono::tzdb requires cxx11 std::string }; values = { v = 201611; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 4850041c0a3e7..1eaf3733bc2a8 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -639,7 +639,7 @@ #undef __glibcxx_want_boyer_moore_searcher #if !defined(__cpp_lib_chrono) -# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED +# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED # define __glibcxx_chrono 201907L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono) # define __cpp_lib_chrono 201907L diff --git a/libstdc++-v3/testsuite/std/time/syn_c++20.cc b/libstdc++-v3/testsuite/std/time/syn_c++20.cc index f0b86199e9dbf..4a527262e9d82 100644 --- a/libstdc++-v3/testsuite/std/time/syn_c++20.cc +++ b/libstdc++-v3/testsuite/std/time/syn_c++20.cc @@ -20,9 +20,16 @@ #include +// std::chrono::tzdb is not defined for the old std::string ABI. +#if _GLIBCXX_USE_CXX_ABI +# define EXPECTED_VALUE 201907L +#else +# define EXPECTED_VALUE 201611L +#endif + #ifndef __cpp_lib_chrono # error "Feature test macro for chrono is missing in " -#elif __cpp_lib_chrono < 201907L +#elif __cpp_lib_chrono < EXPECTED_VALUE # error "Feature test macro for chrono has wrong value in " #endif @@ -94,7 +101,7 @@ namespace __gnu_test using std::chrono::make12; using std::chrono::make24; -#if _GLIBCXX_USE_CXX11_ABI +#if __cpp_lib_chrono >= 201803L using std::chrono::tzdb; using std::chrono::tzdb_list; using std::chrono::get_tzdb; From bb7d052adce7292d15a8400886013ff1843f774e Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 22 Mar 2024 13:19:09 +0000 Subject: [PATCH 089/114] libstdc++: Add [[deprecated]] to std::wstring_convert and std::wbuffer_convert These were deprecated in C++17 and std::wstring_convert is planned for removal in C++26. libstdc++-v3/ChangeLog: * include/bits/locale_conv.h (wstring_convert): Add deprecated attribute for C++17 and later. (wbuffer_convert): Likewise. * testsuite/22_locale/codecvt/codecvt_utf16/79980.cc: Disable deprecated warnings. * testsuite/22_locale/codecvt/codecvt_utf8/79980.cc: Likewise. * testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc: Likewise. * testsuite/22_locale/conversions/buffer/1.cc: Add dg-warning. * testsuite/22_locale/conversions/buffer/2.cc: Likewise. * testsuite/22_locale/conversions/buffer/3.cc: Likewise. * testsuite/22_locale/conversions/buffer/requirements/typedefs.cc: Likewise. * testsuite/22_locale/conversions/string/1.cc: Likewise. * testsuite/22_locale/conversions/string/2.cc: Likewise. * testsuite/22_locale/conversions/string/3.cc: Likewise. * testsuite/22_locale/conversions/string/66441.cc: Likewise. * testsuite/22_locale/conversions/string/requirements/typedefs-2.cc: Likewise. * testsuite/22_locale/conversions/string/requirements/typedefs.cc: Likewise. --- libstdc++-v3/include/bits/locale_conv.h | 5 +++-- .../testsuite/22_locale/codecvt/codecvt_utf16/79980.cc | 1 + .../testsuite/22_locale/codecvt/codecvt_utf8/79980.cc | 1 + .../testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc | 1 + libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc | 1 + libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc | 1 + libstdc++-v3/testsuite/22_locale/conversions/buffer/3.cc | 2 ++ .../22_locale/conversions/buffer/requirements/typedefs.cc | 2 +- libstdc++-v3/testsuite/22_locale/conversions/string/1.cc | 1 + libstdc++-v3/testsuite/22_locale/conversions/string/2.cc | 1 + libstdc++-v3/testsuite/22_locale/conversions/string/3.cc | 1 + libstdc++-v3/testsuite/22_locale/conversions/string/66441.cc | 1 + .../22_locale/conversions/string/requirements/typedefs-2.cc | 1 + .../22_locale/conversions/string/requirements/typedefs.cc | 1 + 14 files changed, 17 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/include/bits/locale_conv.h b/libstdc++-v3/include/bits/locale_conv.h index 754c36b92b846..63dee1ac8727b 100644 --- a/libstdc++-v3/include/bits/locale_conv.h +++ b/libstdc++-v3/include/bits/locale_conv.h @@ -259,7 +259,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 template, typename _Byte_alloc = allocator> - class wstring_convert + class _GLIBCXX17_DEPRECATED wstring_convert { public: typedef basic_string, _Byte_alloc> byte_string; @@ -406,7 +406,8 @@ _GLIBCXX_END_NAMESPACE_CXX11 /// Buffer conversions template> - class wbuffer_convert : public basic_streambuf<_Elem, _Tr> + class _GLIBCXX17_DEPRECATED wbuffer_convert + : public basic_streambuf<_Elem, _Tr> { typedef basic_streambuf<_Elem, _Tr> _Wide_streambuf; diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc b/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc index 1c6711b56dbd8..90cb844bba393 100644 --- a/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc +++ b/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++11 } } +// { dg-additional-options "-Wno-deprecated-declarations" { target c++17 } } #include #include diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc b/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc index d6cd89ce4205d..66aadc1161d99 100644 --- a/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc +++ b/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++11 } } +// { dg-additional-options "-Wno-deprecated-declarations" { target c++17 } } #include #include diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc b/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc index d09aa41ee9318..e6934818864fb 100644 --- a/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc +++ b/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc @@ -16,6 +16,7 @@ // . // { dg-do run { target c++11 } } +// { dg-additional-options "-Wno-deprecated-declarations" { target c++17 } } #include #include diff --git a/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc b/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc index 6b1ea95021343..63125665d72fb 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc @@ -29,6 +29,7 @@ struct cvt : std::codecvt { }; template using buf_conv = std::wbuffer_convert, Elem>; +// { dg-warning "deprecated" "" { target c++17 } 31 } using std::string; using std::wstring; diff --git a/libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc b/libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc index 42653a9c7b755..5b3da13035914 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc @@ -27,6 +27,7 @@ test01() struct Cvt : std::codecvt { }; std::stringstream ss; std::wbuffer_convert cvt(ss.rdbuf()); + // { dg-warning "deprecated" "" { target c++17 } 29 } auto p = ss.std::ios::rdbuf(&cvt); ss << "hello"; VERIFY( ss.flush().good() ); diff --git a/libstdc++-v3/testsuite/22_locale/conversions/buffer/3.cc b/libstdc++-v3/testsuite/22_locale/conversions/buffer/3.cc index de2c1a413229a..5dcb9c5ec7521 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/buffer/3.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/buffer/3.cc @@ -47,6 +47,7 @@ test01() // https://gcc.gnu.org/ml/libstdc++/2017-11/msg00022.html streambuf sb; std::wbuffer_convert conv(&sb); + // { dg-warning "deprecated" "" { target c++17 } 49 } VERIFY( sb.in_avail() == 0 ); wchar_t c = conv.sgetc(); VERIFY( c == L'a' ); @@ -61,6 +62,7 @@ test02() // https://gcc.gnu.org/ml/libstdc++/2017-11/msg00022.html streambuf sb; std::wbuffer_convert conv(&sb); + // { dg-warning "deprecated" "" { target c++17 } 64 } VERIFY( sb.in_avail() == 0 ); char16_t c = conv.sgetc(); VERIFY( c == u'a' ); diff --git a/libstdc++-v3/testsuite/22_locale/conversions/buffer/requirements/typedefs.cc b/libstdc++-v3/testsuite/22_locale/conversions/buffer/requirements/typedefs.cc index 2f4ca01b906ce..bdd3c578247ef 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/buffer/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/buffer/requirements/typedefs.cc @@ -27,7 +27,7 @@ void test01() // Check for required typedefs struct cvt_type : std::codecvt { }; typedef std::char_traits traits_type; - typedef std::wbuffer_convert test_type; + typedef std::wbuffer_convert test_type; // { dg-warning "deprecated" "" { target c++17 } } typedef test_type::state_type state_type; static_assert( std::is_same::value, diff --git a/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc b/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc index b41bdc5ddfea6..33b9bdc6b5eb3 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/string/1.cc @@ -29,6 +29,7 @@ struct cvt : std::codecvt { }; template using str_conv = std::wstring_convert, Elem>; +// { dg-warning "deprecated" "" { target c++17 } 31 } using std::string; using std::wstring; diff --git a/libstdc++-v3/testsuite/22_locale/conversions/string/2.cc b/libstdc++-v3/testsuite/22_locale/conversions/string/2.cc index ac97ff4156a0c..c2b6496b9aeba 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/string/2.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/string/2.cc @@ -28,6 +28,7 @@ struct cvt : std::codecvt { }; template using str_conv = std::wstring_convert, Elem>; +// { dg-warning "deprecated" "" { target c++17 } 30 } using std::string; using std::u16string; diff --git a/libstdc++-v3/testsuite/22_locale/conversions/string/3.cc b/libstdc++-v3/testsuite/22_locale/conversions/string/3.cc index 5570ab621aaac..5a669e78ce19c 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/string/3.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/string/3.cc @@ -28,6 +28,7 @@ struct cvt : std::codecvt { }; template using str_conv = std::wstring_convert, Elem>; +// { dg-warning "deprecated" "" { target c++17 } 30 } using std::string; using std::u16string; diff --git a/libstdc++-v3/testsuite/22_locale/conversions/string/66441.cc b/libstdc++-v3/testsuite/22_locale/conversions/string/66441.cc index 104d2f7758474..f27204a56300b 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/string/66441.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/string/66441.cc @@ -29,6 +29,7 @@ test01() // convert from UCS-4 to UTF16BE with BOM. using cvt = std::codecvt_utf16; std::wstring_convert conv; + // { dg-warning "deprecated" "" { target c++17 } 31 } auto to = conv.to_bytes(U"ab\u00e7"); VERIFY( to.length() == 8 ); diff --git a/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs-2.cc b/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs-2.cc index 487f890e94e45..5026b8c68b146 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs-2.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs-2.cc @@ -33,6 +33,7 @@ template struct cvt : std::codecvt { }; using wconv = std::wstring_convert, alloc>; +// { dg-warning "deprecated" "" { target c++17 } 35 } static_assert( std::is_same>::value, "byte string is std::string" ); diff --git a/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs.cc b/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs.cc index d7f5e44173838..9405df4c3ad48 100644 --- a/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs.cc @@ -26,6 +26,7 @@ void test01() // Check for required typedefs typedef std::codecvt codecvt_type; typedef std::wstring_convert test_type; + // { dg-warning "deprecated" "" { target c++17 } 28 } typedef test_type::byte_string byte_string; typedef test_type::wide_string wide_string; typedef test_type::state_type state_type; From 577225a268ad203647746d4ae98620da0354d0a0 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Sun, 7 Apr 2024 14:12:25 +0100 Subject: [PATCH 090/114] libstdc++: Add deprecation warnings to types libstdc++-v3/ChangeLog: * include/backward/backward_warning.h: Adjust comments to suggest as another alternative to . * include/backward/strstream (strstreambuf, istrstream) (ostrstream, strstream): Add deprecated attribute. --- .../include/backward/backward_warning.h | 12 +++++++---- libstdc++-v3/include/backward/strstream | 20 +++++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/libstdc++-v3/include/backward/backward_warning.h b/libstdc++-v3/include/backward/backward_warning.h index 3f3330327d4ec..834fc5680cc60 100644 --- a/libstdc++-v3/include/backward/backward_warning.h +++ b/libstdc++-v3/include/backward/backward_warning.h @@ -40,10 +40,14 @@ A list of valid replacements is as follows: Use: Instead of: - , basic_stringbuf , strstreambuf - , basic_istringstream , istrstream - , basic_ostringstream , ostrstream - , basic_stringstream , strstream + , stringbuf + or , spanbuf , strstreambuf + , istringstream + or , ispanstream , istrstream + , ostringstream + or , ospanstream , ostrstream + , stringstream + or , spanstream , strstream , unordered_set , hash_set , unordered_multiset , hash_multiset , unordered_map , hash_map diff --git a/libstdc++-v3/include/backward/strstream b/libstdc++-v3/include/backward/strstream index 152e93767f61f..5e4211433857a 100644 --- a/libstdc++-v3/include/backward/strstream +++ b/libstdc++-v3/include/backward/strstream @@ -57,6 +57,12 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +#if __glibcxx_spanstream +# define _GLIBCXX_STRSTREAM_DEPR(A, B) _GLIBCXX_DEPRECATED_SUGGEST(A "' or '" B) +#else +# define _GLIBCXX_STRSTREAM_DEPR(A, B) _GLIBCXX_DEPRECATED_SUGGEST(A) +#endif + // Class strstreambuf, a streambuf class that manages an array of char. // Note that this class is not a template. class strstreambuf : public basic_streambuf > @@ -151,7 +157,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION bool _M_dynamic : 1; bool _M_frozen : 1; bool _M_constant : 1; - }; + } _GLIBCXX_STRSTREAM_DEPR("std::stringbuf", "std::spanbuf"); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" // Class istrstream, an istream that manages a strstreambuf. class istrstream : public basic_istream @@ -176,7 +185,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: strstreambuf _M_buf; - }; + } _GLIBCXX_STRSTREAM_DEPR("std::istringstream", "std::ispanstream"); // Class ostrstream class ostrstream : public basic_ostream @@ -201,7 +210,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: strstreambuf _M_buf; - }; + } _GLIBCXX_STRSTREAM_DEPR("std::ostringstream", "std::ospanstream"); // Class strstream class strstream : public basic_iostream @@ -231,7 +240,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: strstreambuf _M_buf; - }; + } _GLIBCXX_STRSTREAM_DEPR("std::stringstream", "std::spanstream"); + +#undef _GLIBCXX_STRSTREAM_DEPR +#pragma GCC diagnostic pop _GLIBCXX_END_NAMESPACE_VERSION } // namespace From c3e237338eb7ffc90f3cc8d32a3971d17f6d0b31 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 18 Jun 2024 16:09:08 +0100 Subject: [PATCH 091/114] libstdc++: Undeprecate std::pmr::polymorphic_allocator::destroy (P2875R4) This member function was previously deprecated, but that was reverted by P2875R4, approved earlier this year in Tokyo. Since it's not going to be deprecated in C++26, and so presumably not removed, there is no point in giving deprecated warnings for C++23 mode. libstdc++-v3/ChangeLog: * include/bits/memory_resource.h (polymorphic_allocator::destroy): Remove deprecated attribute. --- libstdc++-v3/include/bits/memory_resource.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libstdc++-v3/include/bits/memory_resource.h b/libstdc++-v3/include/bits/memory_resource.h index 022371245c154..5f50b296df7b0 100644 --- a/libstdc++-v3/include/bits/memory_resource.h +++ b/libstdc++-v3/include/bits/memory_resource.h @@ -305,7 +305,6 @@ namespace pmr #endif template - _GLIBCXX20_DEPRECATED_SUGGEST("allocator_traits::destroy") __attribute__((__nonnull__)) void destroy(_Up* __p) From 466ee78e3e975627440992dac67973ee314a0551 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 18 Jun 2024 16:59:52 +0100 Subject: [PATCH 092/114] libstdc++: Make std::any_cast ill-formed (LWG 3305) LWG 3305 was approved earlier this year in Tokyo. We need to give an error if using std::any_cast, but std::any_cast is valid (but always returns null). libstdc++-v3/ChangeLog: * include/std/any (any_cast(any*), any_cast(const any*)): Add static assertion to reject void types, as per LWG 3305. * testsuite/20_util/any/misc/lwg3305.cc: New test. --- libstdc++-v3/include/std/any | 8 ++++++++ .../testsuite/20_util/any/misc/lwg3305.cc | 15 +++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 libstdc++-v3/testsuite/20_util/any/misc/lwg3305.cc diff --git a/libstdc++-v3/include/std/any b/libstdc++-v3/include/std/any index 690ddc2aa574a..e4709b1ce0468 100644 --- a/libstdc++-v3/include/std/any +++ b/libstdc++-v3/include/std/any @@ -554,6 +554,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template inline const _ValueType* any_cast(const any* __any) noexcept { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3305. any_cast + static_assert(!is_void_v<_ValueType>); + + // As an optimization, don't bother instantiating __any_caster for + // function types, since std::any can only hold objects. if constexpr (is_object_v<_ValueType>) if (__any) return static_cast<_ValueType*>(__any_caster<_ValueType>(__any)); @@ -563,6 +569,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template inline _ValueType* any_cast(any* __any) noexcept { + static_assert(!is_void_v<_ValueType>); + if constexpr (is_object_v<_ValueType>) if (__any) return static_cast<_ValueType*>(__any_caster<_ValueType>(__any)); diff --git a/libstdc++-v3/testsuite/20_util/any/misc/lwg3305.cc b/libstdc++-v3/testsuite/20_util/any/misc/lwg3305.cc new file mode 100644 index 0000000000000..49f5d747ab3cb --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/any/misc/lwg3305.cc @@ -0,0 +1,15 @@ +// { dg-do compile { target c++17 } } + +// LWG 3305. any_cast + +#include + +void +test_lwg3305() +{ + std::any a; + (void) std::any_cast(&a); // { dg-error "here" } + const std::any a2; + (void) std::any_cast(&a2); // { dg-error "here" } +} +// { dg-error "static assertion failed" "" { target *-*-* } 0 } From 09ca26cd24778e0820525edfac1cce07262f7e6c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 21 Jun 2024 00:25:32 +0100 Subject: [PATCH 093/114] libstdc++: Qualify calls in to prevent ADL libstdc++-v3/ChangeLog: * include/bits/stl_uninitialized.h (uninitialized_default_construct) (uninitialized_default_construct_n, uninitialized_value_construct) (uninitialized_value_construct_n): Qualify calls to prevent ADL. --- libstdc++-v3/include/bits/stl_uninitialized.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h index 7f84da31578ce..3c405d8fbe808 100644 --- a/libstdc++-v3/include/bits/stl_uninitialized.h +++ b/libstdc++-v3/include/bits/stl_uninitialized.h @@ -975,7 +975,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION uninitialized_default_construct(_ForwardIterator __first, _ForwardIterator __last) { - __uninitialized_default_novalue(__first, __last); + std::__uninitialized_default_novalue(__first, __last); } /** @@ -989,7 +989,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _ForwardIterator uninitialized_default_construct_n(_ForwardIterator __first, _Size __count) { - return __uninitialized_default_novalue_n(__first, __count); + return std::__uninitialized_default_novalue_n(__first, __count); } /** @@ -1003,7 +1003,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION uninitialized_value_construct(_ForwardIterator __first, _ForwardIterator __last) { - return __uninitialized_default(__first, __last); + return std::__uninitialized_default(__first, __last); } /** @@ -1017,7 +1017,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _ForwardIterator uninitialized_value_construct_n(_ForwardIterator __first, _Size __count) { - return __uninitialized_default_n(__first, __count); + return std::__uninitialized_default_n(__first, __count); } /** From 9f4fdc3acebcf6b045edea1361570658da4bc0ab Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 21 Jun 2024 08:46:13 -0400 Subject: [PATCH 094/114] diagnostics: fixes to SARIF output [PR109360] When adding validation of .sarif files against the schema (PR testsuite/109360) I discovered various issues where we were generating invalid .sarif files. Specifically, in c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c the relatedLocations for the "note" diagnostics were missing column numbers, leading to validation failure due to non-unique elements, such as multiple: "message": {"text": "invalid UTF-8 character "}}, on line 25 with no column information. Root cause is that for some diagnostics in libcpp we have a location_t representing the line as a whole, setting a column_override on the rich_location (since the line hasn't been fully read yet). We were handling this column override for plain text output, but not for .sarif output. Similarly, in diagnostic-format-sarif-file-pr111700.c there is a warning emitted on "line 0" of the file, whereas SARIF requires line numbers to be positive. We also use column == 0 internally to mean "the line as a whole", whereas SARIF required column numbers to be positive. This patch fixes these various issues. gcc/ChangeLog: PR testsuite/109360 * diagnostic-format-sarif.cc (sarif_builder::make_location_object): Pass any column override from rich_loc to maybe_make_physical_location_object. (sarif_builder::maybe_make_physical_location_object): Add "column_override" param and pass it to maybe_make_region_object. (sarif_builder::maybe_make_region_object): Add "column_override" param and use it when the location has 0 for a column. Don't add "startLine", "startColumn", "endLine", or "endColumn" if the values aren't positive. (sarif_builder::maybe_make_region_object_for_context): Don't add "startLine" or "endLine" if the values aren't positive. libcpp/ChangeLog: PR testsuite/109360 * include/rich-location.h (rich_location::get_column_override): New accessor. Signed-off-by: David Malcolm --- gcc/diagnostic-format-sarif.cc | 75 ++++++++++++++++++++++++---------- libcpp/include/rich-location.h | 2 + 2 files changed, 56 insertions(+), 21 deletions(-) diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc index 5f438dd38a886..5581aa1579e90 100644 --- a/gcc/diagnostic-format-sarif.cc +++ b/gcc/diagnostic-format-sarif.cc @@ -243,11 +243,13 @@ class sarif_builder json::array *maybe_make_kinds_array (diagnostic_event::meaning m) const; json::object * maybe_make_physical_location_object (location_t loc, - enum diagnostic_artifact_role role); + enum diagnostic_artifact_role role, + int column_override); json::object *make_artifact_location_object (location_t loc); json::object *make_artifact_location_object (const char *filename); json::object *make_artifact_location_object_for_pwd () const; - json::object *maybe_make_region_object (location_t loc) const; + json::object *maybe_make_region_object (location_t loc, + int column_override) const; json::object *maybe_make_region_object_for_context (location_t loc) const; json::object *make_region_object_for_hint (const fixit_hint &hint) const; json::object *make_multiformat_message_string (const char *msg) const; @@ -924,8 +926,9 @@ sarif_builder::make_location_object (const rich_location &rich_loc, location_t loc = rich_loc.get_loc (); /* "physicalLocation" property (SARIF v2.1.0 section 3.28.3). */ - if (json::object *phs_loc_obj = maybe_make_physical_location_object (loc, - role)) + if (json::object *phs_loc_obj + = maybe_make_physical_location_object (loc, role, + rich_loc.get_column_override ())) location_obj->set ("physicalLocation", phs_loc_obj); /* "logicalLocations" property (SARIF v2.1.0 section 3.28.4). */ @@ -946,7 +949,7 @@ sarif_builder::make_location_object (const diagnostic_event &event, /* "physicalLocation" property (SARIF v2.1.0 section 3.28.3). */ location_t loc = event.get_location (); if (json::object *phs_loc_obj - = maybe_make_physical_location_object (loc, role)) + = maybe_make_physical_location_object (loc, role, 0)) location_obj->set ("physicalLocation", phs_loc_obj); /* "logicalLocations" property (SARIF v2.1.0 section 3.28.4). */ @@ -961,7 +964,10 @@ sarif_builder::make_location_object (const diagnostic_event &event, return location_obj; } -/* Make a physicalLocation object (SARIF v2.1.0 section 3.29) for LOC, +/* Make a physicalLocation object (SARIF v2.1.0 section 3.29) for LOC. + + If COLUMN_OVERRIDE is non-zero, then use it as the column number + if LOC has no column information. Ensure that we have an artifact object for the file, adding ROLE to it, and flagging that we will attempt to embed the contents of the artifact @@ -970,7 +976,8 @@ sarif_builder::make_location_object (const diagnostic_event &event, json::object * sarif_builder:: maybe_make_physical_location_object (location_t loc, - enum diagnostic_artifact_role role) + enum diagnostic_artifact_role role, + int column_override) { if (loc <= BUILTINS_LOCATION || LOCATION_FILE (loc) == NULL) return NULL; @@ -983,7 +990,8 @@ maybe_make_physical_location_object (location_t loc, get_or_create_artifact (LOCATION_FILE (loc), role, true); /* "region" property (SARIF v2.1.0 section 3.29.4). */ - if (json::object *region_obj = maybe_make_region_object (loc)) + if (json::object *region_obj = maybe_make_region_object (loc, + column_override)) phys_loc_obj->set ("region", region_obj); /* "contextRegion" property (SARIF v2.1.0 section 3.29.5). */ @@ -1089,10 +1097,14 @@ sarif_builder::get_sarif_column (expanded_location exploc) const } /* Make a region object (SARIF v2.1.0 section 3.30) for LOC, - or return NULL. */ + or return NULL. + + If COLUMN_OVERRIDE is non-zero, then use it as the column number + if LOC has no column information. */ json::object * -sarif_builder::maybe_make_region_object (location_t loc) const +sarif_builder::maybe_make_region_object (location_t loc, + int column_override) const { location_t caret_loc = get_pure_location (loc); @@ -1114,21 +1126,40 @@ sarif_builder::maybe_make_region_object (location_t loc) const json::object *region_obj = new json::object (); /* "startLine" property (SARIF v2.1.0 section 3.30.5) */ - region_obj->set_integer ("startLine", exploc_start.line); + if (exploc_start.line > 0) + region_obj->set_integer ("startLine", exploc_start.line); - /* "startColumn" property (SARIF v2.1.0 section 3.30.6) */ - region_obj->set_integer ("startColumn", get_sarif_column (exploc_start)); + /* "startColumn" property (SARIF v2.1.0 section 3.30.6). + + We use column == 0 to mean the whole line, so omit the column + information for this case, unless COLUMN_OVERRIDE is non-zero, + (for handling certain awkward lexer diagnostics) */ + + if (exploc_start.column == 0 && column_override) + /* Use the provided column number. */ + exploc_start.column = column_override; + + if (exploc_start.column > 0) + { + int start_column = get_sarif_column (exploc_start); + region_obj->set_integer ("startColumn", start_column); + } /* "endLine" property (SARIF v2.1.0 section 3.30.7) */ - if (exploc_finish.line != exploc_start.line) + if (exploc_finish.line != exploc_start.line + && exploc_finish.line > 0) region_obj->set_integer ("endLine", exploc_finish.line); /* "endColumn" property (SARIF v2.1.0 section 3.30.8). - This expresses the column immediately beyond the range. */ - { - int next_column = sarif_builder::get_sarif_column (exploc_finish) + 1; - region_obj->set_integer ("endColumn", next_column); - } + This expresses the column immediately beyond the range. + + We use column == 0 to mean the whole line, so omit the column + information for this case. */ + if (exploc_finish.column > 0) + { + int next_column = get_sarif_column (exploc_finish) + 1; + region_obj->set_integer ("endColumn", next_column); + } return region_obj; } @@ -1164,10 +1195,12 @@ sarif_builder::maybe_make_region_object_for_context (location_t loc) const json::object *region_obj = new json::object (); /* "startLine" property (SARIF v2.1.0 section 3.30.5) */ - region_obj->set_integer ("startLine", exploc_start.line); + if (exploc_start.line > 0) + region_obj->set_integer ("startLine", exploc_start.line); /* "endLine" property (SARIF v2.1.0 section 3.30.7) */ - if (exploc_finish.line != exploc_start.line) + if (exploc_finish.line != exploc_start.line + && exploc_finish.line > 0) region_obj->set_integer ("endLine", exploc_finish.line); /* "snippet" property (SARIF v2.1.0 section 3.30.13). */ diff --git a/libcpp/include/rich-location.h b/libcpp/include/rich-location.h index be424cb4b65f8..cc4f888f458b9 100644 --- a/libcpp/include/rich-location.h +++ b/libcpp/include/rich-location.h @@ -514,6 +514,8 @@ class rich_location const line_maps *get_line_table () const { return m_line_table; } + int get_column_override () const { return m_column_override; } + private: bool reject_impossible_fixit (location_t where); void stop_supporting_fixits (); From a84fe222029ff21903283cc8ee4bc760ebf80ec2 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 21 Jun 2024 08:46:14 -0400 Subject: [PATCH 095/114] testsuite: check that generated .sarif files validate against the SARIF schema [PR109360] This patch extends the dg directive verify-sarif-file so that if the "jsonschema" tool is available, it will be used to validate the generated .sarif file. Tested with jsonschema 3.2 with Python 3.8 gcc/ChangeLog: PR testsuite/109360 * doc/install.texi: Mention optional usage of "jsonschema" tool. gcc/testsuite/ChangeLog: PR testsuite/109360 * lib/sarif-schema-2.1.0.json: New file, downloaded from https://docs.oasis-open.org/sarif/sarif/v2.1.0/os/schemas/sarif-schema-2.1.0.json Licensing information can be seen at https://github.com/oasis-tcs/sarif-spec/issues/583 which states "They are free to incorporate it into their implementation. No need for special permission or paperwork from OASIS." * lib/scansarif.exp (verify-sarif-file): If "jsonschema" is available, use it to verify that the .sarif file complies with the SARIF schema. * lib/target-supports.exp (check_effective_target_jsonschema): New. Signed-off-by: David Malcolm --- gcc/doc/install.texi | 5 + gcc/testsuite/lib/sarif-schema-2.1.0.json | 3370 +++++++++++++++++++++ gcc/testsuite/lib/scansarif.exp | 23 + gcc/testsuite/lib/target-supports.exp | 12 + 4 files changed, 3410 insertions(+) create mode 100644 gcc/testsuite/lib/sarif-schema-2.1.0.json diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 1774a010889aa..0c7691651466c 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -460,6 +460,11 @@ is shown below: @item g++ testsuite @code{gcov}, @code{gzip}, @code{json}, @code{os} and @code{pytest}. +@item SARIF testsuite +Tests of SARIF output will use the @code{jsonschema} program from the +@code{jsonschema} module (if available) to validate generated .sarif files. +If this tool is not found, the validation parts of those tests are skipped. + @item c++ cxx api generation @code{csv}, @code{os}, @code{sys} and @code{time}. diff --git a/gcc/testsuite/lib/sarif-schema-2.1.0.json b/gcc/testsuite/lib/sarif-schema-2.1.0.json new file mode 100644 index 0000000000000..e0b652457104e --- /dev/null +++ b/gcc/testsuite/lib/sarif-schema-2.1.0.json @@ -0,0 +1,3370 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Static Analysis Results Format (SARIF) Version 2.1.0 JSON Schema", + "$id": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "description": "Static Analysis Results Format (SARIF) Version 2.1.0 JSON Schema: a standard format for the output of static analysis tools.", + "additionalProperties": false, + "type": "object", + "properties": { + + "$schema": { + "description": "The URI of the JSON schema corresponding to the version.", + "type": "string", + "format": "uri" + }, + + "version": { + "description": "The SARIF format version of this log file.", + "enum": [ "2.1.0" ] + }, + + "runs": { + "description": "The set of runs contained in this log file.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/run" + } + }, + + "inlineExternalProperties": { + "description": "References to external property files that share data between runs.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/externalProperties" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the log file.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "version", "runs" ], + + "definitions": { + + "address": { + "description": "A physical or virtual address, or a range of addresses, in an 'addressable region' (memory or a binary file).", + "additionalProperties": false, + "type": "object", + "properties": { + + "absoluteAddress": { + "description": "The address expressed as a byte offset from the start of the addressable region.", + "type": "integer", + "minimum": -1, + "default": -1 + + }, + + "relativeAddress": { + "description": "The address expressed as a byte offset from the absolute address of the top-most parent object.", + "type": "integer" + + }, + + "length": { + "description": "The number of bytes in this range of addresses.", + "type": "integer" + }, + + "kind": { + "description": "An open-ended string that identifies the address kind. 'data', 'function', 'header','instruction', 'module', 'page', 'section', 'segment', 'stack', 'stackFrame', 'table' are well-known values.", + "type": "string" + }, + + "name": { + "description": "A name that is associated with the address, e.g., '.text'.", + "type": "string" + }, + + "fullyQualifiedName": { + "description": "A human-readable fully qualified name that is associated with the address.", + "type": "string" + }, + + "offsetFromParent": { + "description": "The byte offset of this address from the absolute or relative address of the parent object.", + "type": "integer" + }, + + "index": { + "description": "The index within run.addresses of the cached object for this address.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "parentIndex": { + "description": "The index within run.addresses of the parent object.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the address.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "artifact": { + "description": "A single artifact. In some cases, this artifact might be nested within another artifact.", + "additionalProperties": false, + "type": "object", + "properties": { + + "description": { + "description": "A short description of the artifact.", + "$ref": "#/definitions/message" + }, + + "location": { + "description": "The location of the artifact.", + "$ref": "#/definitions/artifactLocation" + }, + + "parentIndex": { + "description": "Identifies the index of the immediate parent of the artifact, if this artifact is nested.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "offset": { + "description": "The offset in bytes of the artifact within its containing artifact.", + "type": "integer", + "minimum": 0 + }, + + "length": { + "description": "The length of the artifact in bytes.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "roles": { + "description": "The role or roles played by the artifact in the analysis.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "enum": [ + "analysisTarget", + "attachment", + "responseFile", + "resultFile", + "standardStream", + "tracedFile", + "unmodified", + "modified", + "added", + "deleted", + "renamed", + "uncontrolled", + "driver", + "extension", + "translation", + "taxonomy", + "policy", + "referencedOnCommandLine", + "memoryContents", + "directory", + "userSpecifiedConfiguration", + "toolSpecifiedConfiguration", + "debugOutputFile" + ] + } + }, + + "mimeType": { + "description": "The MIME type (RFC 2045) of the artifact.", + "type": "string", + "pattern": "[^/]+/.+" + }, + + "contents": { + "description": "The contents of the artifact.", + "$ref": "#/definitions/artifactContent" + }, + + "encoding": { + "description": "Specifies the encoding for an artifact object that refers to a text file.", + "type": "string" + }, + + "sourceLanguage": { + "description": "Specifies the source language for any artifact object that refers to a text file that contains source code.", + "type": "string" + }, + + "hashes": { + "description": "A dictionary, each of whose keys is the name of a hash function and each of whose values is the hashed value of the artifact produced by the specified hash function.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + + "lastModifiedTimeUtc": { + "description": "The Coordinated Universal Time (UTC) date and time at which the artifact was most recently modified. See \"Date/time properties\" in the SARIF spec for the required format.", + "type": "string", + "format": "date-time" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the artifact.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "artifactChange": { + "description": "A change to a single artifact.", + "additionalProperties": false, + "type": "object", + "properties": { + + "artifactLocation": { + "description": "The location of the artifact to change.", + "$ref": "#/definitions/artifactLocation" + }, + + "replacements": { + "description": "An array of replacement objects, each of which represents the replacement of a single region in a single artifact specified by 'artifactLocation'.", + "type": "array", + "minItems": 1, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/replacement" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the change.", + "$ref": "#/definitions/propertyBag" + } + + }, + + "required": [ "artifactLocation", "replacements" ] + }, + + "artifactContent": { + "description": "Represents the contents of an artifact.", + "type": "object", + "additionalProperties": false, + "properties": { + + "text": { + "description": "UTF-8-encoded content from a text artifact.", + "type": "string" + }, + + "binary": { + "description": "MIME Base64-encoded content from a binary artifact, or from a text artifact in its original encoding.", + "type": "string" + }, + + "rendered": { + "description": "An alternate rendered representation of the artifact (e.g., a decompiled representation of a binary region).", + "$ref": "#/definitions/multiformatMessageString" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the artifact content.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "artifactLocation": { + "description": "Specifies the location of an artifact.", + "additionalProperties": false, + "type": "object", + "properties": { + + "uri": { + "description": "A string containing a valid relative or absolute URI.", + "type": "string", + "format": "uri-reference" + }, + + "uriBaseId": { + "description": "A string which indirectly specifies the absolute URI with respect to which a relative URI in the \"uri\" property is interpreted.", + "type": "string" + }, + + "index": { + "description": "The index within the run artifacts array of the artifact object associated with the artifact location.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "description": { + "description": "A short description of the artifact location.", + "$ref": "#/definitions/message" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the artifact location.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "attachment": { + "description": "An artifact relevant to a result.", + "type": "object", + "additionalProperties": false, + "properties": { + + "description": { + "description": "A message describing the role played by the attachment.", + "$ref": "#/definitions/message" + }, + + "artifactLocation": { + "description": "The location of the attachment.", + "$ref": "#/definitions/artifactLocation" + }, + + "regions": { + "description": "An array of regions of interest within the attachment.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/region" + } + }, + + "rectangles": { + "description": "An array of rectangles specifying areas of interest within the image.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/rectangle" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the attachment.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "artifactLocation" ] + }, + + "codeFlow": { + "description": "A set of threadFlows which together describe a pattern of code execution relevant to detecting a result.", + "additionalProperties": false, + "type": "object", + "properties": { + + "message": { + "description": "A message relevant to the code flow.", + "$ref": "#/definitions/message" + }, + + "threadFlows": { + "description": "An array of one or more unique threadFlow objects, each of which describes the progress of a program through a thread of execution.", + "type": "array", + "minItems": 1, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/threadFlow" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the code flow.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "threadFlows" ] + }, + + "configurationOverride": { + "description": "Information about how a specific rule or notification was reconfigured at runtime.", + "type": "object", + "additionalProperties": false, + "properties": { + + "configuration": { + "description": "Specifies how the rule or notification was configured during the scan.", + "$ref": "#/definitions/reportingConfiguration" + }, + + "descriptor": { + "description": "A reference used to locate the descriptor whose configuration was overridden.", + "$ref": "#/definitions/reportingDescriptorReference" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the configuration override.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "configuration", "descriptor" ] + }, + + "conversion": { + "description": "Describes how a converter transformed the output of a static analysis tool from the analysis tool's native output format into the SARIF format.", + "additionalProperties": false, + "type": "object", + "properties": { + + "tool": { + "description": "A tool object that describes the converter.", + "$ref": "#/definitions/tool" + }, + + "invocation": { + "description": "An invocation object that describes the invocation of the converter.", + "$ref": "#/definitions/invocation" + }, + + "analysisToolLogFiles": { + "description": "The locations of the analysis tool's per-run log files.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/artifactLocation" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the conversion.", + "$ref": "#/definitions/propertyBag" + } + + }, + + "required": [ "tool" ] + }, + + "edge": { + "description": "Represents a directed edge in a graph.", + "type": "object", + "additionalProperties": false, + "properties": { + + "id": { + "description": "A string that uniquely identifies the edge within its graph.", + "type": "string" + }, + + "label": { + "description": "A short description of the edge.", + "$ref": "#/definitions/message" + }, + + "sourceNodeId": { + "description": "Identifies the source node (the node at which the edge starts).", + "type": "string" + }, + + "targetNodeId": { + "description": "Identifies the target node (the node at which the edge ends).", + "type": "string" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the edge.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "id", "sourceNodeId", "targetNodeId" ] + }, + + "edgeTraversal": { + "description": "Represents the traversal of a single edge during a graph traversal.", + "type": "object", + "additionalProperties": false, + "properties": { + + "edgeId": { + "description": "Identifies the edge being traversed.", + "type": "string" + }, + + "message": { + "description": "A message to display to the user as the edge is traversed.", + "$ref": "#/definitions/message" + }, + + "finalState": { + "description": "The values of relevant expressions after the edge has been traversed.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "stepOverEdgeCount": { + "description": "The number of edge traversals necessary to return from a nested graph.", + "type": "integer", + "minimum": 0 + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the edge traversal.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "edgeId" ] + }, + + "exception": { + "description": "Describes a runtime exception encountered during the execution of an analysis tool.", + "type": "object", + "additionalProperties": false, + "properties": { + + "kind": { + "type": "string", + "description": "A string that identifies the kind of exception, for example, the fully qualified type name of an object that was thrown, or the symbolic name of a signal." + }, + + "message": { + "description": "A message that describes the exception.", + "type": "string" + }, + + "stack": { + "description": "The sequence of function calls leading to the exception.", + "$ref": "#/definitions/stack" + }, + + "innerExceptions": { + "description": "An array of exception objects each of which is considered a cause of this exception.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/exception" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the exception.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "externalProperties": { + "description": "The top-level element of an external property file.", + "type": "object", + "additionalProperties": false, + "properties": { + + "schema": { + "description": "The URI of the JSON schema corresponding to the version of the external property file format.", + "type": "string", + "format": "uri" + }, + + "version": { + "description": "The SARIF format version of this external properties object.", + "enum": [ "2.1.0" ] + }, + + "guid": { + "description": "A stable, unique identifer for this external properties object, in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "runGuid": { + "description": "A stable, unique identifer for the run associated with this external properties object, in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "conversion": { + "description": "A conversion object that will be merged with a separate run.", + "$ref": "#/definitions/conversion" + }, + + "graphs": { + "description": "An array of graph objects that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "default": [], + "uniqueItems": true, + "items": { + "$ref": "#/definitions/graph" + } + }, + + "externalizedProperties": { + "description": "Key/value pairs that provide additional information that will be merged with a separate run.", + "$ref": "#/definitions/propertyBag" + }, + + "artifacts": { + "description": "An array of artifact objects that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/artifact" + } + }, + + "invocations": { + "description": "Describes the invocation of the analysis tool that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/invocation" + } + }, + + "logicalLocations": { + "description": "An array of logical locations such as namespaces, types or functions that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/logicalLocation" + } + }, + + "threadFlowLocations": { + "description": "An array of threadFlowLocation objects that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/threadFlowLocation" + } + }, + + "results": { + "description": "An array of result objects that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/result" + } + }, + + "taxonomies": { + "description": "Tool taxonomies that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "driver": { + "description": "The analysis tool object that will be merged with a separate run.", + "$ref": "#/definitions/toolComponent" + }, + + "extensions": { + "description": "Tool extensions that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "policies": { + "description": "Tool policies that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "translations": { + "description": "Tool translations that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "addresses": { + "description": "Addresses that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/address" + } + }, + + "webRequests": { + "description": "Requests that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/webRequest" + } + }, + + "webResponses": { + "description": "Responses that will be merged with a separate run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/webResponse" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the external properties.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "externalPropertyFileReference": { + "description": "Contains information that enables a SARIF consumer to locate the external property file that contains the value of an externalized property associated with the run.", + "type": "object", + "additionalProperties": false, + "properties": { + + "location": { + "description": "The location of the external property file.", + "$ref": "#/definitions/artifactLocation" + }, + + "guid": { + "description": "A stable, unique identifer for the external property file in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "itemCount": { + "description": "A non-negative integer specifying the number of items contained in the external property file.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the external property file.", + "$ref": "#/definitions/propertyBag" + } + }, + "anyOf": [ + { "required": [ "location" ] }, + { "required": [ "guid" ] } + ] + }, + + "externalPropertyFileReferences": { + "description": "References to external property files that should be inlined with the content of a root log file.", + "additionalProperties": false, + "type": "object", + "properties": { + + "conversion": { + "description": "An external property file containing a run.conversion object to be merged with the root log file.", + "$ref": "#/definitions/externalPropertyFileReference" + }, + + "graphs": { + "description": "An array of external property files containing a run.graphs object to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "externalizedProperties": { + "description": "An external property file containing a run.properties object to be merged with the root log file.", + "$ref": "#/definitions/externalPropertyFileReference" + }, + + "artifacts": { + "description": "An array of external property files containing run.artifacts arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "invocations": { + "description": "An array of external property files containing run.invocations arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "logicalLocations": { + "description": "An array of external property files containing run.logicalLocations arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "threadFlowLocations": { + "description": "An array of external property files containing run.threadFlowLocations arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "results": { + "description": "An array of external property files containing run.results arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "taxonomies": { + "description": "An array of external property files containing run.taxonomies arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "addresses": { + "description": "An array of external property files containing run.addresses arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "driver": { + "description": "An external property file containing a run.driver object to be merged with the root log file.", + "$ref": "#/definitions/externalPropertyFileReference" + }, + + "extensions": { + "description": "An array of external property files containing run.extensions arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "policies": { + "description": "An array of external property files containing run.policies arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "translations": { + "description": "An array of external property files containing run.translations arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "webRequests": { + "description": "An array of external property files containing run.requests arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "webResponses": { + "description": "An array of external property files containing run.responses arrays to be merged with the root log file.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/externalPropertyFileReference" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the external property files.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "fix": { + "description": "A proposed fix for the problem represented by a result object. A fix specifies a set of artifacts to modify. For each artifact, it specifies a set of bytes to remove, and provides a set of new bytes to replace them.", + "additionalProperties": false, + "type": "object", + "properties": { + + "description": { + "description": "A message that describes the proposed fix, enabling viewers to present the proposed change to an end user.", + "$ref": "#/definitions/message" + }, + + "artifactChanges": { + "description": "One or more artifact changes that comprise a fix for a result.", + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/artifactChange" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the fix.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "artifactChanges" ] + }, + + "graph": { + "description": "A network of nodes and directed edges that describes some aspect of the structure of the code (for example, a call graph).", + "type": "object", + "additionalProperties": false, + "properties": { + + "description": { + "description": "A description of the graph.", + "$ref": "#/definitions/message" + }, + + "nodes": { + "description": "An array of node objects representing the nodes of the graph.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/node" + } + }, + + "edges": { + "description": "An array of edge objects representing the edges of the graph.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/edge" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the graph.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "graphTraversal": { + "description": "Represents a path through a graph.", + "type": "object", + "additionalProperties": false, + "properties": { + + "runGraphIndex": { + "description": "The index within the run.graphs to be associated with the result.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "resultGraphIndex": { + "description": "The index within the result.graphs to be associated with the result.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "description": { + "description": "A description of this graph traversal.", + "$ref": "#/definitions/message" + }, + + "initialState": { + "description": "Values of relevant expressions at the start of the graph traversal that may change during graph traversal.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "immutableState": { + "description": "Values of relevant expressions at the start of the graph traversal that remain constant for the graph traversal.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "edgeTraversals": { + "description": "The sequences of edges traversed by this graph traversal.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/edgeTraversal" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the graph traversal.", + "$ref": "#/definitions/propertyBag" + } + }, + "oneOf": [ + { "required": [ "runGraphIndex" ] }, + { "required": [ "resultGraphIndex" ] } + ] + }, + + "invocation": { + "description": "The runtime environment of the analysis tool run.", + "additionalProperties": false, + "type": "object", + "properties": { + + "commandLine": { + "description": "The command line used to invoke the tool.", + "type": "string" + }, + + "arguments": { + "description": "An array of strings, containing in order the command line arguments passed to the tool from the operating system.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + + "responseFiles": { + "description": "The locations of any response files specified on the tool's command line.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/artifactLocation" + } + }, + + "startTimeUtc": { + "description": "The Coordinated Universal Time (UTC) date and time at which the invocation started. See \"Date/time properties\" in the SARIF spec for the required format.", + "type": "string", + "format": "date-time" + }, + + "endTimeUtc": { + "description": "The Coordinated Universal Time (UTC) date and time at which the invocation ended. See \"Date/time properties\" in the SARIF spec for the required format.", + "type": "string", + "format": "date-time" + }, + + "exitCode": { + "description": "The process exit code.", + "type": "integer" + }, + + "ruleConfigurationOverrides": { + "description": "An array of configurationOverride objects that describe rules related runtime overrides.", + "type": "array", + "minItems": 0, + "default": [], + "uniqueItems": true, + "items": { + "$ref": "#/definitions/configurationOverride" + } + }, + + "notificationConfigurationOverrides": { + "description": "An array of configurationOverride objects that describe notifications related runtime overrides.", + "type": "array", + "minItems": 0, + "default": [], + "uniqueItems": true, + "items": { + "$ref": "#/definitions/configurationOverride" + } + }, + + "toolExecutionNotifications": { + "description": "A list of runtime conditions detected by the tool during the analysis.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/notification" + } + }, + + "toolConfigurationNotifications": { + "description": "A list of conditions detected by the tool that are relevant to the tool's configuration.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/notification" + } + }, + + "exitCodeDescription": { + "description": "The reason for the process exit.", + "type": "string" + }, + + "exitSignalName": { + "description": "The name of the signal that caused the process to exit.", + "type": "string" + }, + + "exitSignalNumber": { + "description": "The numeric value of the signal that caused the process to exit.", + "type": "integer" + }, + + "processStartFailureMessage": { + "description": "The reason given by the operating system that the process failed to start.", + "type": "string" + }, + + "executionSuccessful": { + "description": "Specifies whether the tool's execution completed successfully.", + "type": "boolean" + }, + + "machine": { + "description": "The machine on which the invocation occurred.", + "type": "string" + }, + + "account": { + "description": "The account under which the invocation occurred.", + "type": "string" + }, + + "processId": { + "description": "The id of the process in which the invocation occurred.", + "type": "integer" + }, + + "executableLocation": { + "description": "An absolute URI specifying the location of the executable that was invoked.", + "$ref": "#/definitions/artifactLocation" + }, + + "workingDirectory": { + "description": "The working directory for the invocation.", + "$ref": "#/definitions/artifactLocation" + }, + + "environmentVariables": { + "description": "The environment variables associated with the analysis tool process, expressed as key/value pairs.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + + "stdin": { + "description": "A file containing the standard input stream to the process that was invoked.", + "$ref": "#/definitions/artifactLocation" + }, + + "stdout": { + "description": "A file containing the standard output stream from the process that was invoked.", + "$ref": "#/definitions/artifactLocation" + }, + + "stderr": { + "description": "A file containing the standard error stream from the process that was invoked.", + "$ref": "#/definitions/artifactLocation" + }, + + "stdoutStderr": { + "description": "A file containing the interleaved standard output and standard error stream from the process that was invoked.", + "$ref": "#/definitions/artifactLocation" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the invocation.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "executionSuccessful" ] + }, + + "location": { + "description": "A location within a programming artifact.", + "additionalProperties": false, + "type": "object", + "properties": { + + "id": { + "description": "Value that distinguishes this location from all other locations within a single result object.", + "type": "integer", + "minimum": -1, + "default": -1 + }, + + "physicalLocation": { + "description": "Identifies the artifact and region.", + "$ref": "#/definitions/physicalLocation" + }, + + "logicalLocations": { + "description": "The logical locations associated with the result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/logicalLocation" + } + }, + + "message": { + "description": "A message relevant to the location.", + "$ref": "#/definitions/message" + }, + + "annotations": { + "description": "A set of regions relevant to the location.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/region" + } + }, + + "relationships": { + "description": "An array of objects that describe relationships between this location and others.", + "type": "array", + "default": [], + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/locationRelationship" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the location.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "locationRelationship": { + "description": "Information about the relation of one location to another.", + "type": "object", + "additionalProperties": false, + "properties": { + + "target": { + "description": "A reference to the related location.", + "type": "integer", + "minimum": 0 + }, + + "kinds": { + "description": "A set of distinct strings that categorize the relationship. Well-known kinds include 'includes', 'isIncludedBy' and 'relevant'.", + "type": "array", + "default": [ "relevant" ], + "uniqueItems": true, + "items": { + "type": "string" + } + }, + + "description": { + "description": "A description of the location relationship.", + "$ref": "#/definitions/message" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the location relationship.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "target" ] + }, + + "logicalLocation": { + "description": "A logical location of a construct that produced a result.", + "additionalProperties": false, + "type": "object", + "properties": { + + "name": { + "description": "Identifies the construct in which the result occurred. For example, this property might contain the name of a class or a method.", + "type": "string" + }, + + "index": { + "description": "The index within the logical locations array.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "fullyQualifiedName": { + "description": "The human-readable fully qualified name of the logical location.", + "type": "string" + }, + + "decoratedName": { + "description": "The machine-readable name for the logical location, such as a mangled function name provided by a C++ compiler that encodes calling convention, return type and other details along with the function name.", + "type": "string" + }, + + "parentIndex": { + "description": "Identifies the index of the immediate parent of the construct in which the result was detected. For example, this property might point to a logical location that represents the namespace that holds a type.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "kind": { + "description": "The type of construct this logical location component refers to. Should be one of 'function', 'member', 'module', 'namespace', 'parameter', 'resource', 'returnType', 'type', 'variable', 'object', 'array', 'property', 'value', 'element', 'text', 'attribute', 'comment', 'declaration', 'dtd' or 'processingInstruction', if any of those accurately describe the construct.", + "type": "string" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the logical location.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "message": { + "description": "Encapsulates a message intended to be read by the end user.", + "type": "object", + "additionalProperties": false, + + "properties": { + + "text": { + "description": "A plain text message string.", + "type": "string" + }, + + "markdown": { + "description": "A Markdown message string.", + "type": "string" + }, + + "id": { + "description": "The identifier for this message.", + "type": "string" + }, + + "arguments": { + "description": "An array of strings to substitute into the message string.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "type": "string" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the message.", + "$ref": "#/definitions/propertyBag" + } + }, + "anyOf": [ + { "required": [ "text" ] }, + { "required": [ "id" ] } + ] + }, + + "multiformatMessageString": { + "description": "A message string or message format string rendered in multiple formats.", + "type": "object", + "additionalProperties": false, + + "properties": { + + "text": { + "description": "A plain text message string or format string.", + "type": "string" + }, + + "markdown": { + "description": "A Markdown message string or format string.", + "type": "string" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the message.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "text" ] + }, + + "node": { + "description": "Represents a node in a graph.", + "type": "object", + "additionalProperties": false, + + "properties": { + + "id": { + "description": "A string that uniquely identifies the node within its graph.", + "type": "string" + }, + + "label": { + "description": "A short description of the node.", + "$ref": "#/definitions/message" + }, + + "location": { + "description": "A code location associated with the node.", + "$ref": "#/definitions/location" + }, + + "children": { + "description": "Array of child nodes.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/node" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the node.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "id" ] + }, + + "notification": { + "description": "Describes a condition relevant to the tool itself, as opposed to being relevant to a target being analyzed by the tool.", + "type": "object", + "additionalProperties": false, + "properties": { + + "locations": { + "description": "The locations relevant to this notification.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/location" + } + }, + + "message": { + "description": "A message that describes the condition that was encountered.", + "$ref": "#/definitions/message" + }, + + "level": { + "description": "A value specifying the severity level of the notification.", + "default": "warning", + "enum": [ "none", "note", "warning", "error" ] + }, + + "threadId": { + "description": "The thread identifier of the code that generated the notification.", + "type": "integer" + }, + + "timeUtc": { + "description": "The Coordinated Universal Time (UTC) date and time at which the analysis tool generated the notification.", + "type": "string", + "format": "date-time" + }, + + "exception": { + "description": "The runtime exception, if any, relevant to this notification.", + "$ref": "#/definitions/exception" + }, + + "descriptor": { + "description": "A reference used to locate the descriptor relevant to this notification.", + "$ref": "#/definitions/reportingDescriptorReference" + }, + + "associatedRule": { + "description": "A reference used to locate the rule descriptor associated with this notification.", + "$ref": "#/definitions/reportingDescriptorReference" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the notification.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "message" ] + }, + + "physicalLocation": { + "description": "A physical location relevant to a result. Specifies a reference to a programming artifact together with a range of bytes or characters within that artifact.", + "additionalProperties": false, + "type": "object", + "properties": { + + "address": { + "description": "The address of the location.", + "$ref": "#/definitions/address" + }, + + "artifactLocation": { + "description": "The location of the artifact.", + "$ref": "#/definitions/artifactLocation" + }, + + "region": { + "description": "Specifies a portion of the artifact.", + "$ref": "#/definitions/region" + }, + + "contextRegion": { + "description": "Specifies a portion of the artifact that encloses the region. Allows a viewer to display additional context around the region.", + "$ref": "#/definitions/region" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the physical location.", + "$ref": "#/definitions/propertyBag" + } + }, + + "anyOf": [ + { + "required": [ "address" ] + }, + { + "required": [ "artifactLocation" ] + } + ] + }, + + "propertyBag": { + "description": "Key/value pairs that provide additional information about the object.", + "type": "object", + "additionalProperties": true, + "properties": { + "tags": { + + "description": "A set of distinct strings that provide additional information.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + } + }, + + "rectangle": { + "description": "An area within an image.", + "additionalProperties": false, + "type": "object", + "properties": { + + "top": { + "description": "The Y coordinate of the top edge of the rectangle, measured in the image's natural units.", + "type": "number" + }, + + "left": { + "description": "The X coordinate of the left edge of the rectangle, measured in the image's natural units.", + "type": "number" + }, + + "bottom": { + "description": "The Y coordinate of the bottom edge of the rectangle, measured in the image's natural units.", + "type": "number" + }, + + "right": { + "description": "The X coordinate of the right edge of the rectangle, measured in the image's natural units.", + "type": "number" + }, + + "message": { + "description": "A message relevant to the rectangle.", + "$ref": "#/definitions/message" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the rectangle.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "region": { + "description": "A region within an artifact where a result was detected.", + "additionalProperties": false, + "type": "object", + "properties": { + + "startLine": { + "description": "The line number of the first character in the region.", + "type": "integer", + "minimum": 1 + }, + + "startColumn": { + "description": "The column number of the first character in the region.", + "type": "integer", + "minimum": 1 + }, + + "endLine": { + "description": "The line number of the last character in the region.", + "type": "integer", + "minimum": 1 + }, + + "endColumn": { + "description": "The column number of the character following the end of the region.", + "type": "integer", + "minimum": 1 + }, + + "charOffset": { + "description": "The zero-based offset from the beginning of the artifact of the first character in the region.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "charLength": { + "description": "The length of the region in characters.", + "type": "integer", + "minimum": 0 + }, + + "byteOffset": { + "description": "The zero-based offset from the beginning of the artifact of the first byte in the region.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "byteLength": { + "description": "The length of the region in bytes.", + "type": "integer", + "minimum": 0 + }, + + "snippet": { + "description": "The portion of the artifact contents within the specified region.", + "$ref": "#/definitions/artifactContent" + }, + + "message": { + "description": "A message relevant to the region.", + "$ref": "#/definitions/message" + }, + + "sourceLanguage": { + "description": "Specifies the source language, if any, of the portion of the artifact specified by the region object.", + "type": "string" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the region.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "replacement": { + "description": "The replacement of a single region of an artifact.", + "additionalProperties": false, + "type": "object", + "properties": { + + "deletedRegion": { + "description": "The region of the artifact to delete.", + "$ref": "#/definitions/region" + }, + + "insertedContent": { + "description": "The content to insert at the location specified by the 'deletedRegion' property.", + "$ref": "#/definitions/artifactContent" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the replacement.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "deletedRegion" ] + }, + + "reportingDescriptor": { + "description": "Metadata that describes a specific report produced by the tool, as part of the analysis it provides or its runtime reporting.", + "additionalProperties": false, + "type": "object", + "properties": { + + "id": { + "description": "A stable, opaque identifier for the report.", + "type": "string" + }, + + "deprecatedIds": { + "description": "An array of stable, opaque identifiers by which this report was known in some previous version of the analysis tool.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + + "guid": { + "description": "A unique identifer for the reporting descriptor in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "deprecatedGuids": { + "description": "An array of unique identifies in the form of a GUID by which this report was known in some previous version of the analysis tool.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + } + }, + + "name": { + "description": "A report identifier that is understandable to an end user.", + "type": "string" + }, + + "deprecatedNames": { + "description": "An array of readable identifiers by which this report was known in some previous version of the analysis tool.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + + "shortDescription": { + "description": "A concise description of the report. Should be a single sentence that is understandable when visible space is limited to a single line of text.", + "$ref": "#/definitions/multiformatMessageString" + }, + + "fullDescription": { + "description": "A description of the report. Should, as far as possible, provide details sufficient to enable resolution of any problem indicated by the result.", + "$ref": "#/definitions/multiformatMessageString" + }, + + "messageStrings": { + "description": "A set of name/value pairs with arbitrary names. Each value is a multiformatMessageString object, which holds message strings in plain text and (optionally) Markdown format. The strings can include placeholders, which can be used to construct a message in combination with an arbitrary number of additional string arguments.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "defaultConfiguration": { + "description": "Default reporting configuration information.", + "$ref": "#/definitions/reportingConfiguration" + }, + + "helpUri": { + "description": "A URI where the primary documentation for the report can be found.", + "type": "string", + "format": "uri" + }, + + "help": { + "description": "Provides the primary documentation for the report, useful when there is no online documentation.", + "$ref": "#/definitions/multiformatMessageString" + }, + + "relationships": { + "description": "An array of objects that describe relationships between this reporting descriptor and others.", + "type": "array", + "default": [], + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/reportingDescriptorRelationship" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the report.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "id" ] + }, + + "reportingConfiguration": { + "description": "Information about a rule or notification that can be configured at runtime.", + "type": "object", + "additionalProperties": false, + "properties": { + + "enabled": { + "description": "Specifies whether the report may be produced during the scan.", + "type": "boolean", + "default": true + }, + + "level": { + "description": "Specifies the failure level for the report.", + "default": "warning", + "enum": [ "none", "note", "warning", "error" ] + }, + + "rank": { + "description": "Specifies the relative priority of the report. Used for analysis output only.", + "type": "number", + "default": -1.0, + "minimum": -1.0, + "maximum": 100.0 + }, + + "parameters": { + "description": "Contains configuration information specific to a report.", + "$ref": "#/definitions/propertyBag" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the reporting configuration.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "reportingDescriptorReference": { + "description": "Information about how to locate a relevant reporting descriptor.", + "type": "object", + "additionalProperties": false, + "properties": { + + "id": { + "description": "The id of the descriptor.", + "type": "string" + }, + + "index": { + "description": "The index into an array of descriptors in toolComponent.ruleDescriptors, toolComponent.notificationDescriptors, or toolComponent.taxonomyDescriptors, depending on context.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "guid": { + "description": "A guid that uniquely identifies the descriptor.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "toolComponent": { + "description": "A reference used to locate the toolComponent associated with the descriptor.", + "$ref": "#/definitions/toolComponentReference" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the reporting descriptor reference.", + "$ref": "#/definitions/propertyBag" + } + }, + "anyOf": [ + { "required": [ "index" ] }, + { "required": [ "guid" ] }, + { "required": [ "id" ] } + ] + }, + + "reportingDescriptorRelationship": { + "description": "Information about the relation of one reporting descriptor to another.", + "type": "object", + "additionalProperties": false, + "properties": { + + "target": { + "description": "A reference to the related reporting descriptor.", + "$ref": "#/definitions/reportingDescriptorReference" + }, + + "kinds": { + "description": "A set of distinct strings that categorize the relationship. Well-known kinds include 'canPrecede', 'canFollow', 'willPrecede', 'willFollow', 'superset', 'subset', 'equal', 'disjoint', 'relevant', and 'incomparable'.", + "type": "array", + "default": [ "relevant" ], + "uniqueItems": true, + "items": { + "type": "string" + } + }, + + "description": { + "description": "A description of the reporting descriptor relationship.", + "$ref": "#/definitions/message" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the reporting descriptor reference.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "target" ] + }, + + "result": { + "description": "A result produced by an analysis tool.", + "additionalProperties": false, + "type": "object", + "properties": { + + "ruleId": { + "description": "The stable, unique identifier of the rule, if any, to which this result is relevant.", + "type": "string" + }, + + "ruleIndex": { + "description": "The index within the tool component rules array of the rule object associated with this result.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "rule": { + "description": "A reference used to locate the rule descriptor relevant to this result.", + "$ref": "#/definitions/reportingDescriptorReference" + }, + + "kind": { + "description": "A value that categorizes results by evaluation state.", + "default": "fail", + "enum": [ "notApplicable", "pass", "fail", "review", "open", "informational" ] + }, + + "level": { + "description": "A value specifying the severity level of the result.", + "default": "warning", + "enum": [ "none", "note", "warning", "error" ] + }, + + "message": { + "description": "A message that describes the result. The first sentence of the message only will be displayed when visible space is limited.", + "$ref": "#/definitions/message" + }, + + "analysisTarget": { + "description": "Identifies the artifact that the analysis tool was instructed to scan. This need not be the same as the artifact where the result actually occurred.", + "$ref": "#/definitions/artifactLocation" + }, + + "locations": { + "description": "The set of locations where the result was detected. Specify only one location unless the problem indicated by the result can only be corrected by making a change at every specified location.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/location" + } + }, + + "guid": { + "description": "A stable, unique identifer for the result in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "correlationGuid": { + "description": "A stable, unique identifier for the equivalence class of logically identical results to which this result belongs, in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "occurrenceCount": { + "description": "A positive integer specifying the number of times this logically unique result was observed in this run.", + "type": "integer", + "minimum": 1 + }, + + "partialFingerprints": { + "description": "A set of strings that contribute to the stable, unique identity of the result.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + + "fingerprints": { + "description": "A set of strings each of which individually defines a stable, unique identity for the result.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + + "stacks": { + "description": "An array of 'stack' objects relevant to the result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/stack" + } + }, + + "codeFlows": { + "description": "An array of 'codeFlow' objects relevant to the result.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/codeFlow" + } + }, + + "graphs": { + "description": "An array of zero or more unique graph objects associated with the result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/graph" + } + }, + + "graphTraversals": { + "description": "An array of one or more unique 'graphTraversal' objects.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/graphTraversal" + } + }, + + "relatedLocations": { + "description": "A set of locations relevant to this result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/location" + } + }, + + "suppressions": { + "description": "A set of suppressions relevant to this result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/suppression" + } + }, + + "baselineState": { + "description": "The state of a result relative to a baseline of a previous run.", + "enum": [ + "new", + "unchanged", + "updated", + "absent" + ] + }, + + "rank": { + "description": "A number representing the priority or importance of the result.", + "type": "number", + "default": -1.0, + "minimum": -1.0, + "maximum": 100.0 + }, + + "attachments": { + "description": "A set of artifacts relevant to the result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/attachment" + } + }, + + "hostedViewerUri": { + "description": "An absolute URI at which the result can be viewed.", + "type": "string", + "format": "uri" + }, + + "workItemUris": { + "description": "The URIs of the work items associated with this result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "type": "string", + "format": "uri" + } + }, + + "provenance": { + "description": "Information about how and when the result was detected.", + "$ref": "#/definitions/resultProvenance" + }, + + "fixes": { + "description": "An array of 'fix' objects, each of which represents a proposed fix to the problem indicated by the result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/fix" + } + }, + + "taxa": { + "description": "An array of references to taxonomy reporting descriptors that are applicable to the result.", + "type": "array", + "default": [], + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/reportingDescriptorReference" + } + }, + + "webRequest": { + "description": "A web request associated with this result.", + "$ref": "#/definitions/webRequest" + }, + + "webResponse": { + "description": "A web response associated with this result.", + "$ref": "#/definitions/webResponse" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the result.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "message" ] + }, + + "resultProvenance": { + "description": "Contains information about how and when a result was detected.", + "additionalProperties": false, + "type": "object", + "properties": { + + "firstDetectionTimeUtc": { + "description": "The Coordinated Universal Time (UTC) date and time at which the result was first detected. See \"Date/time properties\" in the SARIF spec for the required format.", + "type": "string", + "format": "date-time" + }, + + "lastDetectionTimeUtc": { + "description": "The Coordinated Universal Time (UTC) date and time at which the result was most recently detected. See \"Date/time properties\" in the SARIF spec for the required format.", + "type": "string", + "format": "date-time" + }, + + "firstDetectionRunGuid": { + "description": "A GUID-valued string equal to the automationDetails.guid property of the run in which the result was first detected.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "lastDetectionRunGuid": { + "description": "A GUID-valued string equal to the automationDetails.guid property of the run in which the result was most recently detected.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "invocationIndex": { + "description": "The index within the run.invocations array of the invocation object which describes the tool invocation that detected the result.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "conversionSources": { + "description": "An array of physicalLocation objects which specify the portions of an analysis tool's output that a converter transformed into the result.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/physicalLocation" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the result.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "run": { + "description": "Describes a single run of an analysis tool, and contains the reported output of that run.", + "additionalProperties": false, + "type": "object", + "properties": { + + "tool": { + "description": "Information about the tool or tool pipeline that generated the results in this run. A run can only contain results produced by a single tool or tool pipeline. A run can aggregate results from multiple log files, as long as context around the tool run (tool command-line arguments and the like) is identical for all aggregated files.", + "$ref": "#/definitions/tool" + }, + + "invocations": { + "description": "Describes the invocation of the analysis tool.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/invocation" + } + }, + + "conversion": { + "description": "A conversion object that describes how a converter transformed an analysis tool's native reporting format into the SARIF format.", + "$ref": "#/definitions/conversion" + }, + + "language": { + "description": "The language of the messages emitted into the log file during this run (expressed as an ISO 639-1 two-letter lowercase culture code) and an optional region (expressed as an ISO 3166-1 two-letter uppercase subculture code associated with a country or region). The casing is recommended but not required (in order for this data to conform to RFC5646).", + "type": "string", + "default": "en-US", + "pattern": "^[a-zA-Z]{2}|^[a-zA-Z]{2}-[a-zA-Z]{2}]?$" + }, + + "versionControlProvenance": { + "description": "Specifies the revision in version control of the artifacts that were scanned.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/versionControlDetails" + } + }, + + "originalUriBaseIds": { + "description": "The artifact location specified by each uriBaseId symbol on the machine where the tool originally ran.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/artifactLocation" + } + }, + + "artifacts": { + "description": "An array of artifact objects relevant to the run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/artifact" + } + }, + + "logicalLocations": { + "description": "An array of logical locations such as namespaces, types or functions.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/logicalLocation" + } + }, + + "graphs": { + "description": "An array of zero or more unique graph objects associated with the run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/graph" + } + }, + + "results": { + "description": "The set of results contained in an SARIF log. The results array can be omitted when a run is solely exporting rules metadata. It must be present (but may be empty) if a log file represents an actual scan.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/result" + } + }, + + "automationDetails": { + "description": "Automation details that describe this run.", + "$ref": "#/definitions/runAutomationDetails" + }, + + "runAggregates": { + "description": "Automation details that describe the aggregate of runs to which this run belongs.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/runAutomationDetails" + } + }, + + "baselineGuid": { + "description": "The 'guid' property of a previous SARIF 'run' that comprises the baseline that was used to compute result 'baselineState' properties for the run.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "redactionTokens": { + "description": "An array of strings used to replace sensitive information in a redaction-aware property.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + }, + + "defaultEncoding": { + "description": "Specifies the default encoding for any artifact object that refers to a text file.", + "type": "string" + }, + + "defaultSourceLanguage": { + "description": "Specifies the default source language for any artifact object that refers to a text file that contains source code.", + "type": "string" + }, + + "newlineSequences": { + "description": "An ordered list of character sequences that were treated as line breaks when computing region information for the run.", + "type": "array", + "minItems": 1, + "uniqueItems": true, + "default": [ "\r\n", "\n" ], + "items": { + "type": "string" + } + }, + + "columnKind": { + "description": "Specifies the unit in which the tool measures columns.", + "enum": [ "utf16CodeUnits", "unicodeCodePoints" ] + }, + + "externalPropertyFileReferences": { + "description": "References to external property files that should be inlined with the content of a root log file.", + "$ref": "#/definitions/externalPropertyFileReferences" + }, + + "threadFlowLocations": { + "description": "An array of threadFlowLocation objects cached at run level.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/threadFlowLocation" + } + }, + + "taxonomies": { + "description": "An array of toolComponent objects relevant to a taxonomy in which results are categorized.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "addresses": { + "description": "Addresses associated with this run instance, if any.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "$ref": "#/definitions/address" + } + }, + + "translations": { + "description": "The set of available translations of the localized data provided by the tool.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "policies": { + "description": "Contains configurations that may potentially override both reportingDescriptor.defaultConfiguration (the tool's default severities) and invocation.configurationOverrides (severities established at run-time from the command line).", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "webRequests": { + "description": "An array of request objects cached at run level.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/webRequest" + } + }, + + "webResponses": { + "description": "An array of response objects cached at run level.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/webResponse" + } + }, + + "specialLocations": { + "description": "A specialLocations object that defines locations of special significance to SARIF consumers.", + "$ref": "#/definitions/specialLocations" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the run.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "tool" ] + }, + + "runAutomationDetails": { + "description": "Information that describes a run's identity and role within an engineering system process.", + "additionalProperties": false, + "type": "object", + "properties": { + + "description": { + "description": "A description of the identity and role played within the engineering system by this object's containing run object.", + "$ref": "#/definitions/message" + }, + + "id": { + "description": "A hierarchical string that uniquely identifies this object's containing run object.", + "type": "string" + }, + + "guid": { + "description": "A stable, unique identifer for this object's containing run object in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "correlationGuid": { + "description": "A stable, unique identifier for the equivalence class of runs to which this object's containing run object belongs in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the run automation details.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "specialLocations": { + "description": "Defines locations of special significance to SARIF consumers.", + "type": "object", + "additionalProperties": false, + "properties": { + + "displayBase": { + "description": "Provides a suggestion to SARIF consumers to display file paths relative to the specified location.", + "$ref": "#/definitions/artifactLocation" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the special locations.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "stack": { + "description": "A call stack that is relevant to a result.", + "additionalProperties": false, + "type": "object", + "properties": { + + "message": { + "description": "A message relevant to this call stack.", + "$ref": "#/definitions/message" + }, + + "frames": { + "description": "An array of stack frames that represents a sequence of calls, rendered in reverse chronological order, that comprise the call stack.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/stackFrame" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the stack.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "frames" ] + }, + + "stackFrame": { + "description": "A function call within a stack trace.", + "additionalProperties": false, + "type": "object", + "properties": { + + "location": { + "description": "The location to which this stack frame refers.", + "$ref": "#/definitions/location" + }, + + "module": { + "description": "The name of the module that contains the code of this stack frame.", + "type": "string" + }, + + "threadId": { + "description": "The thread identifier of the stack frame.", + "type": "integer" + }, + + "parameters": { + "description": "The parameters of the call that is executing.", + "type": "array", + "minItems": 0, + "uniqueItems": false, + "default": [], + "items": { + "type": "string", + "default": [] + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the stack frame.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "suppression": { + "description": "A suppression that is relevant to a result.", + "additionalProperties": false, + "type": "object", + "properties": { + + "guid": { + "description": "A stable, unique identifer for the suprression in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "kind": { + "description": "A string that indicates where the suppression is persisted.", + "enum": [ + "inSource", + "external" + ] + }, + + "status": { + "description": "A string that indicates the review status of the suppression.", + "enum": [ + "accepted", + "underReview", + "rejected" + ] + }, + + "justification": { + "description": "A string representing the justification for the suppression.", + "type": "string" + }, + + "location": { + "description": "Identifies the location associated with the suppression.", + "$ref": "#/definitions/location" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the suppression.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "kind" ] + }, + + "threadFlow": { + "description": "Describes a sequence of code locations that specify a path through a single thread of execution such as an operating system or fiber.", + "type": "object", + "additionalProperties": false, + "properties": { + + "id": { + "description": "An string that uniquely identifies the threadFlow within the codeFlow in which it occurs.", + "type": "string" + }, + + "message": { + "description": "A message relevant to the thread flow.", + "$ref": "#/definitions/message" + }, + + + "initialState": { + "description": "Values of relevant expressions at the start of the thread flow that may change during thread flow execution.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "immutableState": { + "description": "Values of relevant expressions at the start of the thread flow that remain constant.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "locations": { + "description": "A temporally ordered array of 'threadFlowLocation' objects, each of which describes a location visited by the tool while producing the result.", + "type": "array", + "minItems": 1, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/threadFlowLocation" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the thread flow.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "locations" ] + }, + + "threadFlowLocation": { + "description": "A location visited by an analysis tool while simulating or monitoring the execution of a program.", + "additionalProperties": false, + "type": "object", + "properties": { + + "index": { + "description": "The index within the run threadFlowLocations array.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "location": { + "description": "The code location.", + "$ref": "#/definitions/location" + }, + + "stack": { + "description": "The call stack leading to this location.", + "$ref": "#/definitions/stack" + }, + + "kinds": { + "description": "A set of distinct strings that categorize the thread flow location. Well-known kinds include 'acquire', 'release', 'enter', 'exit', 'call', 'return', 'branch', 'implicit', 'false', 'true', 'caution', 'danger', 'unknown', 'unreachable', 'taint', 'function', 'handler', 'lock', 'memory', 'resource', 'scope' and 'value'.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + }, + + "taxa": { + "description": "An array of references to rule or taxonomy reporting descriptors that are applicable to the thread flow location.", + "type": "array", + "default": [], + "minItems": 0, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/reportingDescriptorReference" + } + }, + + "module": { + "description": "The name of the module that contains the code that is executing.", + "type": "string" + }, + + "state": { + "description": "A dictionary, each of whose keys specifies a variable or expression, the associated value of which represents the variable or expression value. For an annotation of kind 'continuation', for example, this dictionary might hold the current assumed values of a set of global variables.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "nestingLevel": { + "description": "An integer representing a containment hierarchy within the thread flow.", + "type": "integer", + "minimum": 0 + }, + + "executionOrder": { + "description": "An integer representing the temporal order in which execution reached this location.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "executionTimeUtc": { + "description": "The Coordinated Universal Time (UTC) date and time at which this location was executed.", + "type": "string", + "format": "date-time" + }, + + "importance": { + "description": "Specifies the importance of this location in understanding the code flow in which it occurs. The order from most to least important is \"essential\", \"important\", \"unimportant\". Default: \"important\".", + "enum": [ "important", "essential", "unimportant" ], + "default": "important" + }, + + "webRequest": { + "description": "A web request associated with this thread flow location.", + "$ref": "#/definitions/webRequest" + }, + + "webResponse": { + "description": "A web response associated with this thread flow location.", + "$ref": "#/definitions/webResponse" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the threadflow location.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "tool": { + "description": "The analysis tool that was run.", + "additionalProperties": false, + "type": "object", + "properties": { + + "driver": { + "description": "The analysis tool that was run.", + "$ref": "#/definitions/toolComponent" + }, + + "extensions": { + "description": "Tool extensions that contributed to or reconfigured the analysis tool that was run.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponent" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the tool.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "driver" ] + }, + + "toolComponent": { + "description": "A component, such as a plug-in or the driver, of the analysis tool that was run.", + "additionalProperties": false, + "type": "object", + "properties": { + + "guid": { + "description": "A unique identifer for the tool component in the form of a GUID.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "name": { + "description": "The name of the tool component.", + "type": "string" + }, + + "organization": { + "description": "The organization or company that produced the tool component.", + "type": "string" + }, + + "product": { + "description": "A product suite to which the tool component belongs.", + "type": "string" + }, + + "productSuite": { + "description": "A localizable string containing the name of the suite of products to which the tool component belongs.", + "type": "string" + }, + + "shortDescription": { + "description": "A brief description of the tool component.", + "$ref": "#/definitions/multiformatMessageString" + }, + + "fullDescription": { + "description": "A comprehensive description of the tool component.", + "$ref": "#/definitions/multiformatMessageString" + }, + + "fullName": { + "description": "The name of the tool component along with its version and any other useful identifying information, such as its locale.", + "type": "string" + }, + + "version": { + "description": "The tool component version, in whatever format the component natively provides.", + "type": "string" + }, + + "semanticVersion": { + "description": "The tool component version in the format specified by Semantic Versioning 2.0.", + "type": "string" + }, + + "dottedQuadFileVersion": { + "description": "The binary version of the tool component's primary executable file expressed as four non-negative integers separated by a period (for operating systems that express file versions in this way).", + "type": "string", + "pattern": "[0-9]+(\\.[0-9]+){3}" + }, + + "releaseDateUtc": { + "description": "A string specifying the UTC date (and optionally, the time) of the component's release.", + "type": "string" + }, + + "downloadUri": { + "description": "The absolute URI from which the tool component can be downloaded.", + "type": "string", + "format": "uri" + }, + + "informationUri": { + "description": "The absolute URI at which information about this version of the tool component can be found.", + "type": "string", + "format": "uri" + }, + + "globalMessageStrings": { + "description": "A dictionary, each of whose keys is a resource identifier and each of whose values is a multiformatMessageString object, which holds message strings in plain text and (optionally) Markdown format. The strings can include placeholders, which can be used to construct a message in combination with an arbitrary number of additional string arguments.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/multiformatMessageString" + } + }, + + "notifications": { + "description": "An array of reportingDescriptor objects relevant to the notifications related to the configuration and runtime execution of the tool component.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/reportingDescriptor" + } + }, + + "rules": { + "description": "An array of reportingDescriptor objects relevant to the analysis performed by the tool component.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/reportingDescriptor" + } + }, + + "taxa": { + "description": "An array of reportingDescriptor objects relevant to the definitions of both standalone and tool-defined taxonomies.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/reportingDescriptor" + } + }, + + "locations": { + "description": "An array of the artifactLocation objects associated with the tool component.", + "type": "array", + "minItems": 0, + "default": [], + "items": { + "$ref": "#/definitions/artifactLocation" + } + }, + + "language": { + "description": "The language of the messages emitted into the log file during this run (expressed as an ISO 639-1 two-letter lowercase language code) and an optional region (expressed as an ISO 3166-1 two-letter uppercase subculture code associated with a country or region). The casing is recommended but not required (in order for this data to conform to RFC5646).", + "type": "string", + "default": "en-US", + "pattern": "^[a-zA-Z]{2}|^[a-zA-Z]{2}-[a-zA-Z]{2}]?$" + }, + + "contents": { + "description": "The kinds of data contained in this object.", + "type": "array", + "uniqueItems": true, + "default": [ "localizedData", "nonLocalizedData" ], + "items": { + "enum": [ + "localizedData", + "nonLocalizedData" + ] + } + }, + + "isComprehensive": { + "description": "Specifies whether this object contains a complete definition of the localizable and/or non-localizable data for this component, as opposed to including only data that is relevant to the results persisted to this log file.", + "type": "boolean", + "default": false + }, + + "localizedDataSemanticVersion": { + "description": "The semantic version of the localized strings defined in this component; maintained by components that provide translations.", + "type": "string" + }, + + "minimumRequiredLocalizedDataSemanticVersion": { + "description": "The minimum value of localizedDataSemanticVersion required in translations consumed by this component; used by components that consume translations.", + "type": "string" + }, + + "associatedComponent": { + "description": "The component which is strongly associated with this component. For a translation, this refers to the component which has been translated. For an extension, this is the driver that provides the extension's plugin model.", + "$ref": "#/definitions/toolComponentReference" + }, + + "translationMetadata": { + "description": "Translation metadata, required for a translation, not populated by other component types.", + "$ref": "#/definitions/translationMetadata" + }, + + "supportedTaxonomies": { + "description": "An array of toolComponentReference objects to declare the taxonomies supported by the tool component.", + "type": "array", + "minItems": 0, + "uniqueItems": true, + "default": [], + "items": { + "$ref": "#/definitions/toolComponentReference" + } + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the tool component.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "name" ] + }, + + "toolComponentReference": { + "description": "Identifies a particular toolComponent object, either the driver or an extension.", + "type": "object", + "additionalProperties": false, + "properties": { + + "name": { + "description": "The 'name' property of the referenced toolComponent.", + "type": "string" + }, + + "index": { + "description": "An index into the referenced toolComponent in tool.extensions.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "guid": { + "description": "The 'guid' property of the referenced toolComponent.", + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the toolComponentReference.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "translationMetadata": { + "description": "Provides additional metadata related to translation.", + "type": "object", + "additionalProperties": false, + "properties": { + + "name": { + "description": "The name associated with the translation metadata.", + "type": "string" + }, + + "fullName": { + "description": "The full name associated with the translation metadata.", + "type": "string" + }, + + "shortDescription": { + "description": "A brief description of the translation metadata.", + "$ref": "#/definitions/multiformatMessageString" + }, + + "fullDescription": { + "description": "A comprehensive description of the translation metadata.", + "$ref": "#/definitions/multiformatMessageString" + }, + + "downloadUri": { + "description": "The absolute URI from which the translation metadata can be downloaded.", + "type": "string", + "format": "uri" + }, + + "informationUri": { + "description": "The absolute URI from which information related to the translation metadata can be downloaded.", + "type": "string", + "format": "uri" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the translation metadata.", + "$ref": "#/definitions/propertyBag" + } + }, + "required": [ "name" ] + }, + + "versionControlDetails": { + "description": "Specifies the information necessary to retrieve a desired revision from a version control system.", + "type": "object", + "additionalProperties": false, + "properties": { + + "repositoryUri": { + "description": "The absolute URI of the repository.", + "type": "string", + "format": "uri" + }, + + "revisionId": { + "description": "A string that uniquely and permanently identifies the revision within the repository.", + "type": "string" + }, + + "branch": { + "description": "The name of a branch containing the revision.", + "type": "string" + }, + + "revisionTag": { + "description": "A tag that has been applied to the revision.", + "type": "string" + }, + + "asOfTimeUtc": { + "description": "A Coordinated Universal Time (UTC) date and time that can be used to synchronize an enlistment to the state of the repository at that time.", + "type": "string", + "format": "date-time" + }, + + "mappedTo": { + "description": "The location in the local file system to which the root of the repository was mapped at the time of the analysis.", + "$ref": "#/definitions/artifactLocation" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the version control details.", + "$ref": "#/definitions/propertyBag" + } + }, + + "required": [ "repositoryUri" ] + }, + + "webRequest": { + "description": "Describes an HTTP request.", + "type": "object", + "additionalProperties": false, + "properties": { + + "index": { + "description": "The index within the run.webRequests array of the request object associated with this result.", + "type": "integer", + "default": -1, + "minimum": -1 + + }, + + "protocol": { + "description": "The request protocol. Example: 'http'.", + "type": "string" + }, + + "version": { + "description": "The request version. Example: '1.1'.", + "type": "string" + }, + + "target": { + "description": "The target of the request.", + "type": "string" + }, + + "method": { + "description": "The HTTP method. Well-known values are 'GET', 'PUT', 'POST', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS', 'TRACE', 'CONNECT'.", + "type": "string" + }, + + "headers": { + "description": "The request headers.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + + "parameters": { + "description": "The request parameters.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + + "body": { + "description": "The body of the request.", + "$ref": "#/definitions/artifactContent" + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the request.", + "$ref": "#/definitions/propertyBag" + } + } + }, + + "webResponse": { + "description": "Describes the response to an HTTP request.", + "type": "object", + "additionalProperties": false, + "properties": { + + "index": { + "description": "The index within the run.webResponses array of the response object associated with this result.", + "type": "integer", + "default": -1, + "minimum": -1 + }, + + "protocol": { + "description": "The response protocol. Example: 'http'.", + "type": "string" + }, + + "version": { + "description": "The response version. Example: '1.1'.", + "type": "string" + }, + + "statusCode": { + "description": "The response status code. Example: 451.", + "type": "integer" + }, + + "reasonPhrase": { + "description": "The response reason. Example: 'Not found'.", + "type": "string" + }, + + "headers": { + "description": "The response headers.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + + "body": { + "description": "The body of the response.", + "$ref": "#/definitions/artifactContent" + }, + + "noResponseReceived": { + "description": "Specifies whether a response was received from the server.", + "type": "boolean", + "default": false + }, + + "properties": { + "description": "Key/value pairs that provide additional information about the response.", + "$ref": "#/definitions/propertyBag" + } + } + } + } +} diff --git a/gcc/testsuite/lib/scansarif.exp b/gcc/testsuite/lib/scansarif.exp index 1f7b20610b72b..3eb38b8102e9d 100644 --- a/gcc/testsuite/lib/scansarif.exp +++ b/gcc/testsuite/lib/scansarif.exp @@ -56,6 +56,9 @@ proc scan-sarif-file-not { args } { # # Assuming python3 is available, use verify-sarif-file.py to check # that the .sarif file is UTF-8 encoded and is parseable as JSON. +# +# Assuming "jsonschema" is available, use it to verify that the .sarif +# file complies with the SARIF schema. proc verify-sarif-file { args } { global srcdir subdir @@ -79,4 +82,24 @@ proc verify-sarif-file { args } { } else { pass "$what" } + + # Verify that the file complies with the SARIF schema. + + # Check that jsonschema is installed. + if { ![check_effective_target_jsonschema] } { + unsupported "$testcase verify-sarif-file: jsonschema is missing" + return + } + + set schema_file $srcdir/lib/sarif-schema-2.1.0.json + verbose "schema_file: $schema_file" 2 + + set what "$testcase (test .sarif output against SARIF schema)" + if [catch {exec jsonschema --instance $output_file $schema_file} res ] { + verbose "verify-sarif-file: res: $res" 2 + fail "$what" + return + } else { + pass "$what" + } } diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index e307f4e69efb0..ed30cd18ad693 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -13505,3 +13505,15 @@ proc check_effective_target_heap_trampoline {} { } return 0 } + +# Return 1 if jsonschema is available. + +proc check_effective_target_jsonschema { } { + set result [remote_exec host "jsonschema --version"] + set status [lindex $result 0] + if { $status == 0 } then { + return 1; + } else { + return 0; + } +} From ffaa806c302cca23b36173b65140a1ee1b1826af Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Mon, 17 Jun 2024 11:23:12 -0400 Subject: [PATCH 096/114] Add builtin_unreachable processing for fast_vrp. Add a remove_unreachable object to fast vrp, and honor the final_p flag. * tree-vrp.cc (remove_unreachable::remove): Export global range if builtin_unreachable dominates all uses. (remove_unreachable::remove_and_update_globals): Do not reset SCEV. (execute_ranger_vrp): Reset SCEV here instead. (fvrp_folder::fvrp_folder): Take final pass flag and create a remove_unreachable object when specified. (fvrp_folder::pre_fold_stmt): Register GIMPLE_CONDs with the remove_unreachcable object. (fvrp_folder::m_unreachable): New. (execute_fast_vrp): Process remove_unreachable object. (pass_vrp::execute): Add final_p flag to execute_fast_vrp. --- gcc/tree-vrp.cc | 52 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index 5f5eb9b57e94f..a3b1a5cd337ab 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -280,6 +280,25 @@ remove_unreachable::remove () gimple *s = gimple_outgoing_range_stmt_p (e->src); gcc_checking_assert (gimple_code (s) == GIMPLE_COND); + tree name = gimple_range_ssa_p (gimple_cond_lhs (s)); + if (!name) + name = gimple_range_ssa_p (gimple_cond_rhs (s)); + // Check if global value can be set for NAME. + if (name && fully_replaceable (name, src)) + { + value_range r (TREE_TYPE (name)); + if (gori_name_on_edge (r, name, e, &m_ranger) + && set_range_info (name, r) &&(dump_file)) + { + fprintf (dump_file, "Global Exported (via unreachable): "); + print_generic_expr (dump_file, name, TDF_SLIM); + fprintf (dump_file, " = "); + gimple_range_global (r, name); + r.dump (dump_file); + fputc ('\n', dump_file); + } + } + change = true; // Rewrite the condition. if (e->flags & EDGE_TRUE_VALUE) @@ -305,14 +324,10 @@ remove_unreachable::remove_and_update_globals () if (m_list.length () == 0) return false; - // If there is no import/export info, just remove unreachables if necessary. + // If there is no import/export info, Do basic removal. if (!m_ranger.gori_ssa ()) return remove (); - // Ensure the cache in SCEV has been cleared before processing - // globals to be removed. - scev_reset (); - bool change = false; tree name; unsigned i; @@ -1107,6 +1122,9 @@ execute_ranger_vrp (struct function *fun, bool final_p) rvrp_folder folder (ranger, final_p); phi_analysis_initialize (ranger->const_query ()); folder.substitute_and_fold (); + // Ensure the cache in SCEV has been cleared before processing + // globals to be removed. + scev_reset (); // Remove tagged builtin-unreachable and maybe update globals. folder.m_unreachable.remove_and_update_globals (); if (dump_file && (dump_flags & TDF_DETAILS)) @@ -1168,9 +1186,15 @@ execute_ranger_vrp (struct function *fun, bool final_p) class fvrp_folder : public substitute_and_fold_engine { public: - fvrp_folder (dom_ranger *dr) : substitute_and_fold_engine (), - m_simplifier (dr) - { m_dom_ranger = dr; } + fvrp_folder (dom_ranger *dr, bool final_p) : substitute_and_fold_engine (), + m_simplifier (dr) + { + m_dom_ranger = dr; + if (final_p) + m_unreachable = new remove_unreachable (*dr, final_p); + else + m_unreachable = NULL; + } ~fvrp_folder () { } @@ -1228,6 +1252,9 @@ class fvrp_folder : public substitute_and_fold_engine value_range vr(type); m_dom_ranger->range_of_stmt (vr, s); } + if (m_unreachable && gimple_code (s) == GIMPLE_COND) + m_unreachable->maybe_register (s); + } bool fold_stmt (gimple_stmt_iterator *gsi) override @@ -1238,6 +1265,7 @@ class fvrp_folder : public substitute_and_fold_engine return ret; } + remove_unreachable *m_unreachable; private: DISABLE_COPY_AND_ASSIGN (fvrp_folder); simplify_using_ranges m_simplifier; @@ -1248,16 +1276,18 @@ class fvrp_folder : public substitute_and_fold_engine // Main entry point for a FAST VRP pass using a dom ranger. unsigned int -execute_fast_vrp (struct function *fun) +execute_fast_vrp (struct function *fun, bool final_p) { calculate_dominance_info (CDI_DOMINATORS); dom_ranger dr; - fvrp_folder folder (&dr); + fvrp_folder folder (&dr, final_p); gcc_checking_assert (!fun->x_range_query); fun->x_range_query = &dr; folder.substitute_and_fold (); + if (folder.m_unreachable) + folder.m_unreachable->remove (); fun->x_range_query = NULL; return 0; @@ -1325,7 +1355,7 @@ class pass_vrp : public gimple_opt_pass { // Check for fast vrp. if (&data == &pass_data_fast_vrp) - return execute_fast_vrp (fun); + return execute_fast_vrp (fun, final_p); return execute_ranger_vrp (fun, final_p); } From 68532d3c63725777aaa63b9ac2e4a086c6359bfa Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Mon, 17 Jun 2024 11:32:51 -0400 Subject: [PATCH 097/114] Change fast VRP algorithm Change the fast VRP algorithm to track contextual ranges active within each basic block. * gimple-range.cc (dom_ranger::dom_ranger): Create a block vector. (dom_ranger::~dom_ranger): Dispose of the block vector. (dom_ranger::edge_range): Delete. (dom_ranger::range_on_edge): Combine range in src BB with any range gori_nme_on_edge returns. (dom_ranger::range_in_bb): Combine global range with any active contextual range for an ssa-name. (dom_ranger::range_of_stmt): Fix non-ssa LHS case, use fur_depend for folding so relations can be registered. (dom_ranger::maybe_push_edge): Delete. (dom_ranger::pre_bb): Create incoming contextual range vector. (dom_ranger::post_bb): Free contextual range vector. * gimple-range.h (dom_ranger::edge_range): Delete. (dom_ranger::m_e0): Delete. (dom_ranger::m_e1): Delete. (dom_ranger::m_bb): New. (dom_ranger::m_pop_list): Delete. * tree-vrp.cc (execute_fast_vrp): Enable relation oracle. --- gcc/gimple-range.cc | 232 ++++++++++++++++---------------------------- gcc/gimple-range.h | 8 +- gcc/tree-vrp.cc | 2 + 3 files changed, 90 insertions(+), 152 deletions(-) diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index f3e4ec2d249e7..4e507485f5e45 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -918,7 +918,15 @@ assume_query::dump (FILE *f) } // --------------------------------------------------------------------------- - +// +// The DOM based ranger assumes a single DOM walk through the IL, and is +// used by the fvrp_folder as a fast VRP. +// During the dom walk, the current block has an ssa_lazy_cache pointer +// m_bb[bb->index] which represents all the cumulative contextual ranges +// active in the block. +// These ranges are pure static ranges generated by branches, and must be +// combined with the equivlaent global range to produce the final range. +// A NULL pointer means there are no contextual ranges. // Create a DOM based ranger for use by a DOM walk pass. @@ -926,11 +934,8 @@ dom_ranger::dom_ranger () : m_global () { m_freelist.create (0); m_freelist.truncate (0); - m_e0.create (0); - m_e0.safe_grow_cleared (last_basic_block_for_fn (cfun)); - m_e1.create (0); - m_e1.safe_grow_cleared (last_basic_block_for_fn (cfun)); - m_pop_list = BITMAP_ALLOC (NULL); + m_bb.create (0); + m_bb.safe_grow_cleared (last_basic_block_for_fn (cfun)); if (dump_file && (param_ranger_debug & RANGER_DEBUG_TRACE)) tracer.enable_trace (); } @@ -945,9 +950,7 @@ dom_ranger::~dom_ranger () fprintf (dump_file, "=========================:\n"); m_global.dump (dump_file); } - BITMAP_FREE (m_pop_list); - m_e1.release (); - m_e0.release (); + m_bb.release (); m_freelist.release (); } @@ -973,6 +976,7 @@ dom_ranger::range_of_expr (vrange &r, tree expr, gimple *s) fprintf (dump_file, "\n"); } + // If there is a statement, return the range in that statements block. if (s) range_in_bb (r, gimple_bb (s), expr); else @@ -983,37 +987,15 @@ dom_ranger::range_of_expr (vrange &r, tree expr, gimple *s) return true; } - -// Return TRUE and the range if edge E has a range set for NAME in -// block E->src. - -bool -dom_ranger::edge_range (vrange &r, edge e, tree name) -{ - bool ret = false; - basic_block bb = e->src; - - // Check if BB has any outgoing ranges on edge E. - ssa_lazy_cache *out = NULL; - if (EDGE_SUCC (bb, 0) == e) - out = m_e0[bb->index]; - else if (EDGE_SUCC (bb, 1) == e) - out = m_e1[bb->index]; - - // If there is an edge vector and it has a range, pick it up. - if (out && out->has_range (name)) - ret = out->get_range (r, name); - - return ret; -} - - // Return the range of EXPR on edge E in R. // Return false if no range can be calculated. bool dom_ranger::range_on_edge (vrange &r, edge e, tree expr) { + if (!gimple_range_ssa_p (expr)) + return get_tree_range (r, expr, NULL); + basic_block bb = e->src; unsigned idx; if ((idx = tracer.header ("range_on_edge "))) @@ -1023,11 +1005,10 @@ dom_ranger::range_on_edge (vrange &r, edge e, tree expr) fputc ('\n',dump_file); } - if (!gimple_range_ssa_p (expr)) - return get_tree_range (r, expr, NULL); - - if (!edge_range (r, e, expr)) - range_in_bb (r, bb, expr); + range_in_bb (r, bb, expr); + value_range vr(TREE_TYPE (expr)); + if (gori_name_on_edge (vr, expr, e, this)) + r.intersect (vr); if (idx) tracer.trailer (idx, " ", true, expr, r); @@ -1039,35 +1020,23 @@ dom_ranger::range_on_edge (vrange &r, edge e, tree expr) void dom_ranger::range_in_bb (vrange &r, basic_block bb, tree name) { - basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (name)); - // Loop through dominators until we get to the entry block, or we find - // either the defintion block for NAME, or a single pred edge with a range. - while (bb != ENTRY_BLOCK_PTR_FOR_FN (cfun)) + // Start with the global value. + m_global.range_of_expr (r, name); + + // If there is a contextual range, intersect it with the global range + ssa_lazy_cache *context = m_bb[bb->index]; + if (context && context->has_range (name)) { - // If we hit the deifntion block, pick up the global value. - if (bb == def_bb) - { - m_global.range_of_expr (r, name); - return; - } - // If its a single pred, check the outgoing range of the edge. - if (EDGE_COUNT (bb->preds) == 1 - && edge_range (r, EDGE_PRED (bb, 0), name)) - return; - // Otherwise move up to the dominator, and check again. - bb = get_immediate_dominator (CDI_DOMINATORS, bb); + value_range cr (TREE_TYPE (name)); + context->get_range (cr, name); + r.intersect (cr); } - m_global.range_of_expr (r, name); } - // Calculate the range of NAME, as the def of stmt S and return it in R. -// Return FALSE if no range cqn be calculated. +// Return FALSE if no range can be calculated. // Also set the global range for NAME as this should only be called within // the def block during a DOM walk. -// Outgoing edges were pre-calculated, so when we establish a global defintion -// check if any outgoing edges hav ranges that can be combined with the -// global. bool dom_ranger::range_of_stmt (vrange &r, gimple *s, tree name) @@ -1075,9 +1044,10 @@ dom_ranger::range_of_stmt (vrange &r, gimple *s, tree name) unsigned idx; bool ret; if (!name) - name = gimple_range_ssa_p (gimple_get_lhs (s)); + name = gimple_get_lhs (s); - gcc_checking_assert (!name || name == gimple_get_lhs (s)); + if (name && !gimple_range_ssa_p (name)) + return get_tree_range (r, name, NULL); if ((idx = tracer.header ("range_of_stmt "))) print_gimple_stmt (dump_file, s, 0, TDF_SLIM); @@ -1091,9 +1061,13 @@ dom_ranger::range_of_stmt (vrange &r, gimple *s, tree name) return ret; } + // Fold using a fur_depend object so that relations are registered. + fold_using_range f; + fur_depend src (s, this); + ret = f.fold_stmt (r, s, src, name); + // If there is a new calculated range and it is not varying, set // a global range. - ret = fold_range (r, s, this); if (ret && name && m_global.merge_range (name, r) && !r.varying_p ()) { if (set_range_info (name, r) && dump_file) @@ -1104,115 +1078,81 @@ dom_ranger::range_of_stmt (vrange &r, gimple *s, tree name) r.dump (dump_file); fputc ('\n', dump_file); } - basic_block bb = gimple_bb (s); - unsigned bbi = bb->index; - value_range vr (TREE_TYPE (name)); - // If there is a range on edge 0, update it. - if (m_e0[bbi] && m_e0[bbi]->has_range (name)) - { - if (m_e0[bbi]->merge_range (name, r) && dump_file - && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Outgoing range for "); - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " updated on edge %d->%d : ", bbi, - EDGE_SUCC (bb, 0)->dest->index); - if (m_e0[bbi]->get_range (vr, name)) - vr.dump (dump_file); - fputc ('\n', dump_file); - } - } - // If there is a range on edge 1, update it. - if (m_e1[bbi] && m_e1[bbi]->has_range (name)) - { - if (m_e1[bbi]->merge_range (name, r) && dump_file - && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Outgoing range for "); - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " updated on edge %d->%d : ", bbi, - EDGE_SUCC (bb, 1)->dest->index); - if (m_e1[bbi]->get_range (vr, name)) - vr.dump (dump_file); - fputc ('\n', dump_file); - } - } } if (idx) tracer.trailer (idx, " ", ret, name, r); return ret; } -// Check if GORI has an ranges on edge E. If there re, store them in -// either the E0 or E1 vector based on EDGE_0. -// If there are no ranges, put the empty lazy_cache entry on the freelist -// for use next time. +// Preprocess block BB. If there is a single predecessor, start with any +// contextual ranges on the incoming edge, otherwise the initial list +// of ranges i empty for this block. Then Merge in any contextual ranges +// from the dominator block. Tihs will become the contextual ranges +// that apply to this block. void -dom_ranger::maybe_push_edge (edge e, bool edge_0) +dom_ranger::pre_bb (basic_block bb) { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "#FVRP entering BB %d\n", bb->index); + + m_bb[bb->index] = NULL; + basic_block dom_bb = get_immediate_dominator (CDI_DOMINATORS, bb); + ssa_lazy_cache *e_cache; if (!m_freelist.is_empty ()) e_cache = m_freelist.pop (); else e_cache = new ssa_lazy_cache; - gori_on_edge (*e_cache, e, this); - if (e_cache->empty_p ()) - m_freelist.safe_push (e_cache); - else + gcc_checking_assert (e_cache->empty_p ()); + + // If there is a single pred, check if there are any ranges on + // the edge and start with those. + if (single_pred_p (bb)) { - if (edge_0) - m_e0[e->src->index] = e_cache; - else - m_e1[e->src->index] = e_cache; + gori_on_edge (*e_cache, EDGE_PRED (bb, 0), this); + if (!e_cache->empty_p () && dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "\nEdge ranges BB %d->%d\n", + EDGE_PRED (bb, 0)->src->index, bb->index); + e_cache->dump(dump_file); + } } -} + // If the dominator had any ranges registered, integrate those. + if (dom_bb && m_bb [dom_bb->index]) + e_cache->merge (*(m_bb[dom_bb->index])); -// Preprocess block BB. If there are any outgoing edges, precalculate -// the outgoing ranges and store them. Note these are done before -// we process the block, so global values have not been set yet. -// These are "pure" outgoing ranges inflicted by the condition. + // If there are no ranges, this block has no contextual ranges. + if (e_cache->empty_p ()) + m_freelist.safe_push (e_cache); + else + m_bb[bb->index] = e_cache; -void -dom_ranger::pre_bb (basic_block bb) -{ if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "#FVRP entering BB %d\n", bb->index); - - // Next, see if this block needs outgoing edges calculated. - gimple_stmt_iterator gsi = gsi_last_nondebug_bb (bb); - if (!gsi_end_p (gsi)) { - gimple *s = gsi_stmt (gsi); - if (is_a (s) && gimple_range_op_handler::supported_p (s)) + if (m_bb[bb->index]) { - maybe_push_edge (EDGE_SUCC (bb, 0), true); - maybe_push_edge (EDGE_SUCC (bb, 1), false); - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - if (m_e0[bb->index]) - { - fprintf (dump_file, "\nEdge ranges BB %d->%d\n", - bb->index, EDGE_SUCC (bb, 0)->dest->index); - m_e0[bb->index]->dump(dump_file); - } - if (m_e1[bb->index]) - { - fprintf (dump_file, "\nEdge ranges BB %d->%d\n", - bb->index, EDGE_SUCC (bb, 1)->dest->index); - m_e1[bb->index]->dump(dump_file); - } - } + fprintf (dump_file, "all contextual ranges active:\n"); + m_bb[bb->index]->dump (dump_file); } + else + fprintf (dump_file, " NO contextual ranges active:\n"); } - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "#FVRP DONE entering BB %d\n", bb->index); } // Perform any post block processing. void -dom_ranger::post_bb (basic_block) +dom_ranger::post_bb (basic_block bb) { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "#FVRP POST BB %d\n", bb->index); + // If there were contextual ranges, clear them and put the + // object on the freelist. + if (m_bb[bb->index]) + { + m_bb[bb->index]->clear (); + m_freelist.safe_push (m_bb[bb->index]); + m_bb[bb->index] = NULL; + } } diff --git a/gcc/gimple-range.h b/gcc/gimple-range.h index 180090bed1583..911775679470a 100644 --- a/gcc/gimple-range.h +++ b/gcc/gimple-range.h @@ -112,19 +112,15 @@ class dom_ranger : public range_query virtual bool range_on_edge (vrange &r, edge e, tree expr) override; virtual bool range_of_stmt (vrange &r, gimple *s, tree name = NULL) override; - bool edge_range (vrange &r, edge e, tree name); - void range_in_bb (vrange &r, basic_block bb, tree name); void pre_bb (basic_block bb); void post_bb (basic_block bb); protected: + void range_in_bb (vrange &r, basic_block bb, tree name); DISABLE_COPY_AND_ASSIGN (dom_ranger); - void maybe_push_edge (edge e, bool edge_0); ssa_cache m_global; vec m_freelist; - vec m_e0; - vec m_e1; - bitmap m_pop_list; + vec m_bb; range_tracer tracer; }; #endif // GCC_GIMPLE_RANGE_H diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index a3b1a5cd337ab..6e96b639b70bf 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -1284,11 +1284,13 @@ execute_fast_vrp (struct function *fun, bool final_p) gcc_checking_assert (!fun->x_range_query); fun->x_range_query = &dr; + get_range_query (fun)->create_relation_oracle (); folder.substitute_and_fold (); if (folder.m_unreachable) folder.m_unreachable->remove (); + get_range_query (fun)->destroy_relation_oracle (); fun->x_range_query = NULL; return 0; } From 747a06017196b6344e3f664706a11231ba712548 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Mon, 17 Jun 2024 16:07:16 -0400 Subject: [PATCH 098/114] Print "Global Exported" to dump_file from set_range_info. * gimple-range.cc (gimple_ranger::register_inferred_ranges): Do not dump global range info after set_range_info. (gimple_ranger::register_transitive_inferred_ranges): Likewise. (dom_ranger::range_of_stmt): Likewise. * tree-ssanames.cc (set_range_info): If global range info changes, maybe print new range to dump_file. * tree-vrp.cc (remove_unreachable::handle_early): Do not dump global range info after set_range_info. (remove_unreachable::remove): Likewise. (remove_unreachable::remove_and_update_globals): Likewise. (pass_assumptions::execute): Likewise. --- gcc/gimple-range.cc | 60 ++++++++++++-------------------------------- gcc/tree-ssanames.cc | 42 ++++++++++++++++++++----------- gcc/tree-vrp.cc | 43 +++---------------------------- 3 files changed, 47 insertions(+), 98 deletions(-) diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index 4e507485f5e45..50448ef81a283 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -495,15 +495,8 @@ gimple_ranger::register_inferred_ranges (gimple *s) if (lhs) { value_range tmp (TREE_TYPE (lhs)); - if (range_of_stmt (tmp, s, lhs) && !tmp.varying_p () - && set_range_info (lhs, tmp) && dump_file) - { - fprintf (dump_file, "Global Exported: "); - print_generic_expr (dump_file, lhs, TDF_SLIM); - fprintf (dump_file, " = "); - tmp.dump (dump_file); - fputc ('\n', dump_file); - } + if (range_of_stmt (tmp, s, lhs) && !tmp.varying_p ()) + set_range_info (lhs, tmp); } m_cache.apply_inferred_ranges (s); } @@ -562,38 +555,25 @@ gimple_ranger::register_transitive_inferred_ranges (basic_block bb) void gimple_ranger::export_global_ranges () { - /* Cleared after the table header has been printed. */ - bool print_header = true; + if (dump_file) + { + /* Print the header only when there's something else + to print below. */ + fprintf (dump_file, "Exporting new global ranges:\n"); + fprintf (dump_file, "============================\n"); + } for (unsigned x = 1; x < num_ssa_names; x++) { tree name = ssa_name (x); if (!name) continue; value_range r (TREE_TYPE (name)); - if (name && !SSA_NAME_IN_FREE_LIST (name) - && gimple_range_ssa_p (name) - && m_cache.get_global_range (r, name) - && !r.varying_p()) - { - bool updated = set_range_info (name, r); - if (!updated || !dump_file) - continue; - - if (print_header) - { - /* Print the header only when there's something else - to print below. */ - fprintf (dump_file, "Exported global range table:\n"); - fprintf (dump_file, "============================\n"); - print_header = false; - } - - print_generic_expr (dump_file, name , TDF_SLIM); - fprintf (dump_file, " : "); - r.dump (dump_file); - fprintf (dump_file, "\n"); - } + if (name && !SSA_NAME_IN_FREE_LIST (name) && gimple_range_ssa_p (name) + && m_cache.get_global_range (r, name) && !r.varying_p()) + set_range_info (name, r); } + if (dump_file) + fprintf (dump_file, "========= Done =============\n"); } // Print the known table values to file F. @@ -1069,16 +1049,8 @@ dom_ranger::range_of_stmt (vrange &r, gimple *s, tree name) // If there is a new calculated range and it is not varying, set // a global range. if (ret && name && m_global.merge_range (name, r) && !r.varying_p ()) - { - if (set_range_info (name, r) && dump_file) - { - fprintf (dump_file, "Global Exported: "); - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " = "); - r.dump (dump_file); - fputc ('\n', dump_file); - } - } + set_range_info (name, r); + if (idx) tracer.trailer (idx, " ", ret, name, r); return ret; diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc index 615d522d0b12c..411ea848c4935 100644 --- a/gcc/tree-ssanames.cc +++ b/gcc/tree-ssanames.cc @@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple.h" #include "tree-pass.h" #include "ssa.h" +#include "gimple-pretty-print.h" #include "gimple-iterator.h" #include "stor-layout.h" #include "tree-into-ssa.h" @@ -425,23 +426,34 @@ set_range_info (tree name, const vrange &r) struct ptr_info_def *pi = get_ptr_info (name); // If R is nonnull and pi is not, set nonnull. if (r.nonzero_p () && (!pi || pi->pt.null)) - { - set_ptr_nonnull (name); - return true; - } - return false; + set_ptr_nonnull (name); + else + return false; } - - value_range tmp (type); - if (range_info_p (name)) - range_info_get_range (name, tmp); else - tmp.set_varying (type); - // If the result doesn't change, or is undefined, return false. - if (!tmp.intersect (r) || tmp.undefined_p ()) - return false; - - return range_info_set_range (name, tmp); + { + value_range tmp (type); + if (range_info_p (name)) + range_info_get_range (name, tmp); + else + tmp.set_varying (type); + // If the result doesn't change, or is undefined, return false. + if (!tmp.intersect (r) || tmp.undefined_p ()) + return false; + if (!range_info_set_range (name, tmp)) + return false; + } + if (dump_file) + { + value_range tmp (type); + fprintf (dump_file, "Global Exported: "); + print_generic_expr (dump_file, name, TDF_SLIM); + fprintf (dump_file, " = "); + gimple_range_global (tmp, name); + tmp.dump (dump_file); + fputc ('\n', dump_file); + } + return true; } /* Set nonnull attribute to pointer NAME. */ diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index 6e96b639b70bf..4fc33e63e7d29 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -228,15 +228,6 @@ remove_unreachable::handle_early (gimple *s, edge e) // Nothing at this late stage we can do if the write fails. if (!set_range_info (name, r)) continue; - if (dump_file) - { - fprintf (dump_file, "Global Exported (via early unreachable): "); - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " = "); - gimple_range_global (r, name); - r.dump (dump_file); - fputc ('\n', dump_file); - } } tree ssa = lhs_p ? gimple_cond_lhs (s) : gimple_cond_rhs (s); @@ -287,16 +278,8 @@ remove_unreachable::remove () if (name && fully_replaceable (name, src)) { value_range r (TREE_TYPE (name)); - if (gori_name_on_edge (r, name, e, &m_ranger) - && set_range_info (name, r) &&(dump_file)) - { - fprintf (dump_file, "Global Exported (via unreachable): "); - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " = "); - gimple_range_global (r, name); - r.dump (dump_file); - fputc ('\n', dump_file); - } + if (gori_name_on_edge (r, name, e, &m_ranger)) + set_range_info (name, r); } change = true; @@ -419,15 +402,6 @@ remove_unreachable::remove_and_update_globals () if (!set_range_info (name, r)) continue; change = true; - if (dump_file) - { - fprintf (dump_file, "Global Exported (via unreachable): "); - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " = "); - gimple_range_global (r, name); - r.dump (dump_file); - fputc ('\n', dump_file); - } } return change; } @@ -1404,18 +1378,9 @@ class pass_assumptions : public gimple_opt_pass if (!value_range::supports_type_p (type)) continue; value_range assume_range (type); + // Set the global range of NAME to anything calculated. if (query.assume_range_p (assume_range, name)) - { - // Set the global range of NAME to anything calculated. - set_range_info (name, assume_range); - if (dump_file) - { - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " -> "); - assume_range.dump (dump_file); - fputc ('\n', dump_file); - } - } + set_range_info (name, assume_range); } if (dump_file) { From 4a43a06c7b2bcc3402ac69d6e5ce7b8008acc69a Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 21 Jun 2024 15:40:10 +0100 Subject: [PATCH 099/114] rtl-ssa: Don't cost no-op moves No-op moves are given the code NOOP_MOVE_INSN_CODE if we plan to delete them later. Such insns shouldn't be costed, partly because they're going to disappear, and partly because targets won't recognise the insn code. gcc/ * rtl-ssa/changes.cc (rtl_ssa::changes_are_worthwhile): Don't cost no-op moves. * rtl-ssa/insns.cc (insn_info::calculate_cost): Likewise. --- gcc/rtl-ssa/changes.cc | 6 +++++- gcc/rtl-ssa/insns.cc | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gcc/rtl-ssa/changes.cc b/gcc/rtl-ssa/changes.cc index 11639e81bb7d5..3101f2dc4fc16 100644 --- a/gcc/rtl-ssa/changes.cc +++ b/gcc/rtl-ssa/changes.cc @@ -177,13 +177,17 @@ rtl_ssa::changes_are_worthwhile (array_slice changes, auto entry_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count; for (insn_change *change : changes) { + // Count zero for the old cost if the old instruction was a no-op + // move or had an unknown cost. This should reduce the chances of + // making an unprofitable change. old_cost += change->old_cost (); basic_block cfg_bb = change->bb ()->cfg_bb (); bool for_speed = optimize_bb_for_speed_p (cfg_bb); if (for_speed) weighted_old_cost += (cfg_bb->count.to_sreal_scale (entry_count) * change->old_cost ()); - if (!change->is_deletion ()) + if (!change->is_deletion () + && INSN_CODE (change->rtl ()) != NOOP_MOVE_INSN_CODE) { change->new_cost = insn_cost (change->rtl (), for_speed); new_cost += change->new_cost; diff --git a/gcc/rtl-ssa/insns.cc b/gcc/rtl-ssa/insns.cc index 0171d93c3571c..68365e323ec6b 100644 --- a/gcc/rtl-ssa/insns.cc +++ b/gcc/rtl-ssa/insns.cc @@ -48,7 +48,12 @@ insn_info::calculate_cost () const { basic_block cfg_bb = BLOCK_FOR_INSN (m_rtl); temporarily_undo_changes (0); - m_cost_or_uid = insn_cost (m_rtl, optimize_bb_for_speed_p (cfg_bb)); + if (INSN_CODE (m_rtl) == NOOP_MOVE_INSN_CODE) + // insn_cost also uses 0 to mean "don't know". Callers that + // want to distinguish the cases will need to check INSN_CODE. + m_cost_or_uid = 0; + else + m_cost_or_uid = insn_cost (m_rtl, optimize_bb_for_speed_p (cfg_bb)); redo_changes (0); } From 8f254cd4e40b692e5f01a3b40f2b5b60c8528a1e Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 21 Jun 2024 15:40:10 +0100 Subject: [PATCH 100/114] iq2000: Fix test and branch instructions The iq2000 test and branch instructions had patterns like: [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") (match_operand:SI 1 "power_of_2_operand" "I")) (const_int 0)) (match_operand 2 "pc_or_label_operand" "") (match_operand 3 "pc_or_label_operand" "")))] power_of_2_operand allows any 32-bit power of 2, whereas "I" only accepts 16-bit signed constants. This meant that any power of 2 greater than 32768 would cause an "insn does not satisfy its constraints" ICE. Also, the %p operand modifier barfed on 1<<31, which is sign- rather than zero-extended to 64 bits. The code is inherently limited to 32-bit operands -- power_of_2_operand contains a test involving "unsigned" -- so this patch just ands with 0xffffffff. gcc/ * config/iq2000/iq2000.cc (iq2000_print_operand): Make %p handle 1<<31. * config/iq2000/iq2000.md: Remove "I" constraints on power_of_2_operands. --- gcc/config/iq2000/iq2000.cc | 2 +- gcc/config/iq2000/iq2000.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/config/iq2000/iq2000.cc b/gcc/config/iq2000/iq2000.cc index f9f8c41784169..136675d0fbbb7 100644 --- a/gcc/config/iq2000/iq2000.cc +++ b/gcc/config/iq2000/iq2000.cc @@ -3127,7 +3127,7 @@ iq2000_print_operand (FILE *file, rtx op, int letter) { int value; if (code != CONST_INT - || (value = exact_log2 (INTVAL (op))) < 0) + || (value = exact_log2 (UINTVAL (op) & 0xffffffff)) < 0) output_operand_lossage ("invalid %%p value"); else fprintf (file, "%d", value); diff --git a/gcc/config/iq2000/iq2000.md b/gcc/config/iq2000/iq2000.md index 8617efac3c68e..e62c250ce8c0c 100644 --- a/gcc/config/iq2000/iq2000.md +++ b/gcc/config/iq2000/iq2000.md @@ -1175,7 +1175,7 @@ [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") - (match_operand:SI 1 "power_of_2_operand" "I")) + (match_operand:SI 1 "power_of_2_operand")) (const_int 0)) (match_operand 2 "pc_or_label_operand" "") (match_operand 3 "pc_or_label_operand" "")))] @@ -1189,7 +1189,7 @@ [(set (pc) (if_then_else (ne (and:SI (match_operand:SI 0 "register_operand" "r") - (match_operand:SI 1 "power_of_2_operand" "I")) + (match_operand:SI 1 "power_of_2_operand")) (const_int 0)) (match_operand 2 "pc_or_label_operand" "") (match_operand 3 "pc_or_label_operand" "")))] From 5320bcbd342a985a6e1db60bff2918f73dcad1a0 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 21 Jun 2024 15:40:11 +0100 Subject: [PATCH 101/114] xstormy16: Fix xs_hi_nonmemory_operand All uses of xs_hi_nonmemory_operand allow constraint "i", which means that they allow consts, symbol_refs and label_refs. The definition of xs_hi_nonmemory_operand accounted for consts, but not for symbol_refs and label_refs. gcc/ * config/stormy16/predicates.md (xs_hi_nonmemory_operand): Handle symbol_ref and label_ref. --- gcc/config/stormy16/predicates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/stormy16/predicates.md b/gcc/config/stormy16/predicates.md index 67c2ddc107c83..085c9c5ed2dec 100644 --- a/gcc/config/stormy16/predicates.md +++ b/gcc/config/stormy16/predicates.md @@ -152,7 +152,7 @@ }) (define_predicate "xs_hi_nonmemory_operand" - (match_code "const_int,reg,subreg,const") + (match_code "const_int,reg,subreg,const,symbol_ref,label_ref") { return nonmemory_operand (op, mode); }) From 77f321435b4ac37992c2ed6737ca0caa1dd50551 Mon Sep 17 00:00:00 2001 From: Matthias Kretz Date: Fri, 21 Jun 2024 16:22:22 +0200 Subject: [PATCH 102/114] libstdc++: Fix test on x86_64 and non-simd targets * Running a test compiled with AVX512 instructions requires avx512f_runtime not just avx512f. * The 'reduce2' test violated an invariant of fixed_size_simd_mask and thus failed on all targets without 16-Byte vector builtins enabled (in bits/simd.h). Signed-off-by: Matthias Kretz libstdc++-v3/ChangeLog: PR libstdc++/115575 * testsuite/experimental/simd/pr115454_find_last_set.cc: Require avx512f_runtime. Don't memcpy fixed_size masks. --- .../testsuite/experimental/simd/pr115454_find_last_set.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc b/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc index b47f19d30674f..25a713b4e948c 100644 --- a/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc +++ b/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++17" } // { dg-do run { target *-*-* } } // { dg-require-effective-target c++17 } -// { dg-additional-options "-march=x86-64-v4" { target avx512f } } +// { dg-additional-options "-march=x86-64-v4" { target avx512f_runtime } } // { dg-require-cmath "" } #include @@ -25,7 +25,9 @@ int reduce2() { using M8 = typename V::mask_type; using M4 = typename V::mask_type; - if constexpr (sizeof(M8) == sizeof(M4)) + if constexpr (sizeof(M8) == sizeof(M4) + && !std::is_same_v>) + // fixed_size invariant: padding bits of masks are zero, the memcpy would violate that { M4 k; __builtin_memcpy(&__data(k), &__data(M8(true)), sizeof(M4)); From b3743181899c5490a94c4dbde56a69ab77a40f11 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 19 Jun 2024 16:14:56 +0100 Subject: [PATCH 103/114] libstdc++: Fix std::fill and std::fill_n optimizations [PR109150] As noted in the PR, the optimization used for scalar types in std::fill and std::fill_n is non-conforming, because it doesn't consider that assigning a scalar type might have non-trivial side effects which are affected by the optimization. By changing the condition under which the optimization is done we ensure it's only performed when safe to do so, and we also enable it for additional types, which was the original subject of the PR. Instead of two overloads using __enable_if<__is_scalar::__value, R> we can combine them into one and create a local variable which is either a local copy of __value or another reference to it, depending on whether the optimization is allowed. This removes a use of std::__is_scalar, which is a step towards fixing PR 115497 by removing std::__is_pointer from libstdc++-v3/ChangeLog: PR libstdc++/109150 * include/bits/stl_algobase.h (__fill_a1): Combine the !__is_scalar and __is_scalar overloads into one and rewrite the condition used to decide whether to perform the load outside the loop. * testsuite/25_algorithms/fill/109150.cc: New test. * testsuite/25_algorithms/fill_n/109150.cc: New test. --- libstdc++-v3/include/bits/stl_algobase.h | 79 ++++++++++++------- .../testsuite/25_algorithms/fill/109150.cc | 62 +++++++++++++++ .../testsuite/25_algorithms/fill_n/109150.cc | 62 +++++++++++++++ 3 files changed, 173 insertions(+), 30 deletions(-) create mode 100644 libstdc++-v3/testsuite/25_algorithms/fill/109150.cc create mode 100644 libstdc++-v3/testsuite/25_algorithms/fill_n/109150.cc diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index d831e0e9883ce..1a0f8c14073e9 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -929,28 +929,39 @@ _GLIBCXX_END_NAMESPACE_CONTAINER #define _GLIBCXX_MOVE_BACKWARD3(_Tp, _Up, _Vp) std::copy_backward(_Tp, _Up, _Vp) #endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" template _GLIBCXX20_CONSTEXPR - inline typename - __gnu_cxx::__enable_if::__value, void>::__type - __fill_a1(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __value) - { - for (; __first != __last; ++__first) - *__first = __value; - } - - template - _GLIBCXX20_CONSTEXPR - inline typename - __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type + inline void __fill_a1(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - const _Tp __tmp = __value; + // We can optimize this loop by moving the load from __value outside + // the loop, but only if we know that making that copy is trivial, + // and the assignment in the loop is also trivial (so that the identity + // of the operand doesn't matter). + const bool __load_outside_loop = +#if __has_builtin(__is_trivially_constructible) \ + && __has_builtin(__is_trivially_assignable) + __is_trivially_constructible(_Tp, const _Tp&) + && __is_trivially_assignable(__decltype(*__first), const _Tp&) +#else + __is_trivially_copyable(_Tp) + && __is_same(_Tp, __typeof__(*__first)) +#endif + && sizeof(_Tp) <= sizeof(long long); + + // When the condition is true, we use a copy of __value, + // otherwise we just use another reference. + typedef typename __gnu_cxx::__conditional_type<__load_outside_loop, + const _Tp, + const _Tp&>::__type _Up; + _Up __val(__value); for (; __first != __last; ++__first) - *__first = __tmp; + *__first = __val; } +#pragma GCC diagnostic pop // Specialization: for char types we can use memset. template @@ -1079,28 +1090,36 @@ _GLIBCXX_END_NAMESPACE_CONTAINER __size_to_integer(__float128 __n) { return (long long)__n; } #endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" template _GLIBCXX20_CONSTEXPR - inline typename - __gnu_cxx::__enable_if::__value, _OutputIterator>::__type - __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) - { - for (; __n > 0; --__n, (void) ++__first) - *__first = __value; - return __first; - } - - template - _GLIBCXX20_CONSTEXPR - inline typename - __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type + inline _OutputIterator __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) { - const _Tp __tmp = __value; + // See std::__fill_a1 for explanation of this condition. + const bool __load_outside_loop = +#if __has_builtin(__is_trivially_constructible) \ + && __has_builtin(__is_trivially_assignable) + __is_trivially_constructible(_Tp, const _Tp&) + && __is_trivially_assignable(__decltype(*__first), const _Tp&) +#else + __is_trivially_copyable(_Tp) + && __is_same(_Tp, __typeof__(*__first)) +#endif + && sizeof(_Tp) <= sizeof(long long); + + // When the condition is true, we use a copy of __value, + // otherwise we just use another reference. + typedef typename __gnu_cxx::__conditional_type<__load_outside_loop, + const _Tp, + const _Tp&>::__type _Up; + _Up __val(__value); for (; __n > 0; --__n, (void) ++__first) - *__first = __tmp; + *__first = __val; return __first; } +#pragma GCC diagnostic pop template diff --git a/libstdc++-v3/testsuite/25_algorithms/fill/109150.cc b/libstdc++-v3/testsuite/25_algorithms/fill/109150.cc new file mode 100644 index 0000000000000..9491a998ff025 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/fill/109150.cc @@ -0,0 +1,62 @@ +// { dg-do run } + +// Test the problematic cases identified in PR libstdc++/109150 +// where the previous std::fill was non-conforming. + +#include +#include + +const int global = 0; + +struct X { + void operator=(const int& i) { VERIFY(&i == &global); } +}; + +void +test_identity_matters() +{ + X x; + // Assigning int to X has non-trivial side effects, so we cannot + // hoist the load outside the loop, we have to do exactly what the + // standard says to do. + std::fill(&x, &x+1, global); +} + +struct Y { + int i; + void operator=(int ii) { i = ii + 1; } +}; + +void +test_self_aliasing() +{ + Y y[2] = { }; + // Assigning int to X has non-trivial side effects, altering the value + // used to fill the later elements. Must not load it outside the loop. + std::fill(y, y+2, y[0].i); + VERIFY(y[1].i == 2); +} + +struct Z +{ + Z() { } +#if __cplusplus >= 201103L + explicit Z(const Z&) = default; +#endif +}; + +void +test_explicit_copy_ctor() +{ + Z z; + // The optimization that copies the fill value must use direct-initialization + // otherwise this case would be ill-formed due to the explicit constructor. + std::fill(&z, &z, z); +} + +int main() +{ + test_identity_matters(); + test_self_aliasing(); + test_explicit_copy_ctor(); +} diff --git a/libstdc++-v3/testsuite/25_algorithms/fill_n/109150.cc b/libstdc++-v3/testsuite/25_algorithms/fill_n/109150.cc new file mode 100644 index 0000000000000..13bb31c93445a --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/fill_n/109150.cc @@ -0,0 +1,62 @@ +// { dg-do run } + +// Test the problematic cases identified in PR libstdc++/109150 +// where the previous std::fill_n was non-conforming. + +#include +#include + +const int global = 0; + +struct X { + void operator=(const int& i) { VERIFY(&i == &global); } +}; + +void +test_identity_matters() +{ + X x; + // Assigning int to X has non-trivial side effects, so we cannot + // hoist the load outside the loop, we have to do exactly what the + // standard says to do. + std::fill_n(&x, 1, global); +} + +struct Y { + int i; + void operator=(int ii) { i = ii + 1; } +}; + +void +test_self_aliasing() +{ + Y y[2] = { }; + // Assigning int to X has non-trivial side effects, altering the value + // used to fill the later elements. Must not load it outside the loop. + std::fill_n(y, 2, y[0].i); + VERIFY(y[1].i == 2); +} + +struct Z +{ + Z() { } +#if __cplusplus >= 201103L + explicit Z(const Z&) = default; +#endif +}; + +void +test_explicit_copy_ctor() +{ + Z z; + // The optimization that copies the fill value must use direct-initialization + // otherwise this case would be ill-formed due to the explicit constructor. + std::fill_n(&z, 1, z); +} + +int main() +{ + test_identity_matters(); + test_self_aliasing(); + test_explicit_copy_ctor(); +} From 139d65d1f5a60ac90479653a4f9b63618509f3f9 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 19 Jun 2024 11:19:58 +0100 Subject: [PATCH 104/114] libstdc++: Don't use std::__is_scalar in std::valarray initialization [PR115497] This removes the use of the std::__is_scalar trait from , where it can be replaced by __is_trivial. It's used to decide whether we can use memset to value-initialize valarray elements, but memset is suitable for any trivial types, because value-initializing them is equivalent to filling them with zeros. This is another step towards removing the class templates in that conflict with Clang built-in names. libstdc++-v3/ChangeLog: PR libstdc++/115497 * include/bits/valarray_array.h (__valarray_default_construct): Use __is_trivial(_Tp). instead of __is_scalar<_Tp>. --- libstdc++-v3/include/bits/valarray_array.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/bits/valarray_array.h b/libstdc++-v3/include/bits/valarray_array.h index 66b74f9aaac56..07c49ce1057ca 100644 --- a/libstdc++-v3/include/bits/valarray_array.h +++ b/libstdc++-v3/include/bits/valarray_array.h @@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct _Array_default_ctor<_Tp, true> { - // For fundamental types, it suffices to say 'memset()' + // For trivial types, it suffices to say 'memset()' inline static void _S_do_it(_Tp* __b, _Tp* __e) { __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); } @@ -90,7 +90,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline void __valarray_default_construct(_Tp* __b, _Tp* __e) { - _Array_default_ctor<_Tp, __is_scalar<_Tp>::__value>::_S_do_it(__b, __e); + _Array_default_ctor<_Tp, __is_trivial(_Tp)>::_S_do_it(__b, __e); } // Turn a raw-memory into an array of _Tp filled with __t From 5f10547e021db3a4a34382cd067668f9ef97fdeb Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 19 Jun 2024 17:21:16 +0100 Subject: [PATCH 105/114] libstdc++: Stop using std::__is_pointer in and [PR115497] This replaces all uses of the std::__is_pointer type trait with uses of the new __is_pointer built-in. Since the class template was only used to enable some performance optimizations for algorithms, we can use the built-in when __has_builtin(__is_pointer) is true (which is the case for GCC trunk and for current versions of Clang) and just forego the optimization otherwise. Removing the uses of std::__is_pointer means it can be removed from , which is another step towards fixing PR 115497. libstdc++-v3/ChangeLog: PR libstdc++/115497 * include/bits/deque.tcc (__lex_cmp_dit): Replace __is_pointer class template with __is_pointer(T) built-in. (__lexicographical_compare_aux1): Likewise. * include/bits/stl_algobase.h (__equal_aux1): Likewise. (__lexicographical_compare_aux1): Likewise. --- libstdc++-v3/include/bits/deque.tcc | 19 ++++++++++++------- libstdc++-v3/include/bits/stl_algobase.h | 13 +++++++++---- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc index 2c12358ca5bf4..deb010a0ebb5e 100644 --- a/libstdc++-v3/include/bits/deque.tcc +++ b/libstdc++-v3/include/bits/deque.tcc @@ -1271,18 +1271,21 @@ _GLIBCXX_END_NAMESPACE_CONTAINER _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref, _Ptr> __last1, const _Tp2* __first2, const _Tp2* __last2) { +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) const bool __simple = (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value - && __is_pointer<_Ptr>::__value + && __is_pointer(_Ptr) #if __cplusplus > 201703L && __cpp_lib_concepts // For C++20 iterator_traits::value_type is non-volatile // so __is_byte could be true, but we can't use memcmp with // volatile data. - && !is_volatile_v<_Tp1> - && !is_volatile_v<_Tp2> + && !is_volatile_v<_Tp1> && !is_volatile_v<_Tp2> #endif ); typedef std::__lexicographical_compare<__simple> _Lc; +#else + typedef std::__lexicographical_compare _Lc; +#endif while (__first1._M_node != __last1._M_node) { @@ -1327,19 +1330,21 @@ _GLIBCXX_END_NAMESPACE_CONTAINER _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2, _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __last2) { +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) const bool __simple = (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value - && __is_pointer<_Ptr1>::__value - && __is_pointer<_Ptr2>::__value + && __is_pointer(_Ptr1) && __is_pointer(_Ptr2) #if __cplusplus > 201703L && __cpp_lib_concepts // For C++20 iterator_traits::value_type is non-volatile // so __is_byte could be true, but we can't use memcmp with // volatile data. - && !is_volatile_v<_Tp1> - && !is_volatile_v<_Tp2> + && !is_volatile_v<_Tp1> && !is_volatile_v<_Tp2> #endif ); typedef std::__lexicographical_compare<__simple> _Lc; +#else + typedef std::__lexicographical_compare _Lc; +#endif while (__first1 != __last1) { diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 1a0f8c14073e9..57ff2f7cb082e 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -1256,8 +1256,10 @@ _GLIBCXX_END_NAMESPACE_CONTAINER { typedef typename iterator_traits<_II1>::value_type _ValueType1; const bool __simple = ((__is_integer<_ValueType1>::__value - || __is_pointer<_ValueType1>::__value) - && __memcmpable<_II1, _II2>::__value); +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) + || __is_pointer(_ValueType1) +#endif + ) && __memcmpable<_II1, _II2>::__value); return std::__equal<__simple>::equal(__first1, __last1, __first2); } @@ -1420,10 +1422,10 @@ _GLIBCXX_END_NAMESPACE_CONTAINER { typedef typename iterator_traits<_II1>::value_type _ValueType1; typedef typename iterator_traits<_II2>::value_type _ValueType2; +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) const bool __simple = (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value - && __is_pointer<_II1>::__value - && __is_pointer<_II2>::__value + && __is_pointer(_II1) && __is_pointer(_II2) #if __cplusplus > 201703L && __glibcxx_concepts // For C++20 iterator_traits::value_type is non-volatile // so __is_byte could be true, but we can't use memcmp with @@ -1432,6 +1434,9 @@ _GLIBCXX_END_NAMESPACE_CONTAINER && !is_volatile_v>> #endif ); +#else + const bool __simple = false; +#endif return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, __first2, __last2); From 51cc77672add517123ef9ea45335b08442e8d57c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 19 Jun 2024 11:19:58 +0100 Subject: [PATCH 106/114] libstdc++: Remove std::__is_void class template [PR115497] This removes the std::__is_void trait, as it conflicts with a Clang built-in. There is only one use of the trait, which can easily be replaced by simpler code. Although Clang has a hack to make the class template work despite using a reserved name, removing std::__is_void will allow that hack to be dropped at some future date. libstdc++-v3/ChangeLog: PR libstdc++/115497 * include/bits/cpp_type_traits.h (__is_void): Remove. * include/debug/helper_functions.h (_Distance_traits): Adjust partial specialization to match void directly, instead of using __is_void::__type and matching __true_type. --- libstdc++-v3/include/bits/cpp_type_traits.h | 15 --------------- libstdc++-v3/include/debug/helper_functions.h | 5 ++--- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h index 6834dee555707..4d83b9472e61a 100644 --- a/libstdc++-v3/include/bits/cpp_type_traits.h +++ b/libstdc++-v3/include/bits/cpp_type_traits.h @@ -105,21 +105,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef __true_type __type; }; - // Holds if the template-argument is a void type. - template - struct __is_void - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template<> - struct __is_void - { - enum { __value = 1 }; - typedef __true_type __type; - }; - // // Integer types // diff --git a/libstdc++-v3/include/debug/helper_functions.h b/libstdc++-v3/include/debug/helper_functions.h index 5474399dc67a4..d686a29e8ee90 100644 --- a/libstdc++-v3/include/debug/helper_functions.h +++ b/libstdc++-v3/include/debug/helper_functions.h @@ -66,13 +66,12 @@ namespace __gnu_debug typedef typename std::iterator_traits<_Iterator>::difference_type _ItDiffType; - template::__type> + template // PR c++/85282 struct _DiffTraits { typedef _DiffType __type; }; template - struct _DiffTraits<_DiffType, std::__true_type> + struct _DiffTraits<_DiffType, void> { typedef std::ptrdiff_t __type; }; typedef typename _DiffTraits<_ItDiffType>::__type _DiffType; From 52a82359073653e312aaa5703f7e0ce339588961 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 19 Jun 2024 17:26:37 +0100 Subject: [PATCH 107/114] libstdc++: Remove std::__is_pointer and std::__is_scalar [PR115497] This removes the std::__is_pointer and std::__is_scalar traits, as they conflicts with a Clang built-in. Although Clang has a hack to make the class templates work despite using reserved names, removing these class templates will allow that hack to be dropped at some future date. libstdc++-v3/ChangeLog: PR libstdc++/115497 * include/bits/cpp_type_traits.h (__is_pointer, __is_scalar): Remove. (__is_arithmetic): Do not use __is_pointer in the primary template. Add partial specialization for pointers. --- libstdc++-v3/include/bits/cpp_type_traits.h | 33 --------------------- 1 file changed, 33 deletions(-) diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h index 4d83b9472e61a..abe0c7603e3e9 100644 --- a/libstdc++-v3/include/bits/cpp_type_traits.h +++ b/libstdc++-v3/include/bits/cpp_type_traits.h @@ -343,31 +343,6 @@ __INT_N(__GLIBCXX_TYPE_INT_N_3) }; #endif - // - // Pointer types - // -#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_pointer) - template - struct __is_pointer : __truth_type<_IsPtr> - { - enum { __value = _IsPtr }; - }; -#else - template - struct __is_pointer - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template - struct __is_pointer<_Tp*> - { - enum { __value = 1 }; - typedef __true_type __type; - }; -#endif - // // An arithmetic type is an integer type or a floating point type // @@ -376,14 +351,6 @@ __INT_N(__GLIBCXX_TYPE_INT_N_3) : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > { }; - // - // A scalar type is an arithmetic type or a pointer type - // - template - struct __is_scalar - : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > - { }; - // // For use in std::copy and std::find overloads for streambuf iterators. // From 37f3000a57d62b808188eb6a14a369f6a789e1ea Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 21 Jun 2024 15:58:12 -0600 Subject: [PATCH 108/114] [committed] Fix testsuite fallout on stormy16 after IOR->PLUS change More minor fallout from the IOR->PLUS change a little while ago. This time on xstormy16. The pattern to swap nibbles actually tries to handle all the cases of IOR, XOR and PLUS. But when we generate PLUS earlier in the pipeline, the simplifications/canonicalizations are slightly different resulting in the pattern not matching. This patch adds an alternate pattern which matches what we get now. Basically it looks like QImode rotate by 4, zero extended to HI. Run in my tester to verify the regression was fixed. Pushing to the trunk. gcc/ * config/stormy16/stormy16.md (swpn_zext): New pattern. --- gcc/config/stormy16/stormy16.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gcc/config/stormy16/stormy16.md b/gcc/config/stormy16/stormy16.md index 7f12679847bd6..62318345cdce7 100644 --- a/gcc/config/stormy16/stormy16.md +++ b/gcc/config/stormy16/stormy16.md @@ -1363,6 +1363,20 @@ "swpn %0 | and %0,#255" [(set_attr "length" "6")]) +;; Alternate form when we use PLUS instead of IOR early in the +;; expanders. +(define_insn "*swpn_zext" + [(set (match_operand:HI 0 "register_operand" "=r") + (zero_extend:HI + (subreg:QI + (any_or_plus:HI + (ashift:HI (match_operand:HI 1 "register_operand" "0") + (const_int 4)) + (lshiftrt:HI (match_dup 1) (const_int 4))) 0)))] + "" + "swpn %0 | and %0,#255" + [(set_attr "length" "6")]) + (define_insn "*swpn_sext" [(set (match_operand:HI 0 "register_operand" "=r") (sign_extend:HI From 4819dc7d4b84afa98881ffb8471cf19bc362221b Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 21 Jun 2024 18:20:38 -0400 Subject: [PATCH 109/114] diagnostics: move diagnostic_{event,path} functions to diagnostic-path.cc No functional change intended. gcc/ChangeLog: * diagnostic-path.cc (diagnostic_event::meaning::dump_to_pp): Move here from diagnostic.cc. (diagnostic_event::meaning::maybe_get_verb_str): Likewise. (diagnostic_event::meaning::maybe_get_noun_str): Likewise. (diagnostic_event::meaning::maybe_get_property_str): Likewise. (diagnostic_path::get_first_event_in_a_function): Likewise. (diagnostic_path::interprocedural_p): Likewise. (debug): Likewise for diagnostic_path * overload. * diagnostic.cc (diagnostic_event::meaning::dump_to_pp): Move from here to diagnostic-path.cc. (diagnostic_event::meaning::maybe_get_verb_str): Likewise. (diagnostic_event::meaning::maybe_get_noun_str): Likewise. (diagnostic_event::meaning::maybe_get_property_str): Likewise. (diagnostic_path::get_first_event_in_a_function): Likewise. (diagnostic_path::interprocedural_p): Likewise. (debug): Likewise for diagnostic_path * overload. Signed-off-by: David Malcolm --- gcc/diagnostic-path.cc | 168 +++++++++++++++++++++++++++++++++++++++++ gcc/diagnostic.cc | 168 ----------------------------------------- 2 files changed, 168 insertions(+), 168 deletions(-) diff --git a/gcc/diagnostic-path.cc b/gcc/diagnostic-path.cc index 882dc1c5805fd..ea5b1f65e0257 100644 --- a/gcc/diagnostic-path.cc +++ b/gcc/diagnostic-path.cc @@ -45,6 +45,174 @@ along with GCC; see the file COPYING3. If not see # pragma GCC diagnostic ignored "-Wformat-diag" #endif +/* class diagnostic_event. */ + +/* struct diagnostic_event::meaning. */ + +void +diagnostic_event::meaning::dump_to_pp (pretty_printer *pp) const +{ + bool need_comma = false; + pp_character (pp, '{'); + if (const char *verb_str = maybe_get_verb_str (m_verb)) + { + pp_printf (pp, "verb: %qs", verb_str); + need_comma = true; + } + if (const char *noun_str = maybe_get_noun_str (m_noun)) + { + if (need_comma) + pp_string (pp, ", "); + pp_printf (pp, "noun: %qs", noun_str); + need_comma = true; + } + if (const char *property_str = maybe_get_property_str (m_property)) + { + if (need_comma) + pp_string (pp, ", "); + pp_printf (pp, "property: %qs", property_str); + need_comma = true; + } + pp_character (pp, '}'); +} + +/* Get a string (or NULL) for V suitable for use within a SARIF + threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8). */ + +const char * +diagnostic_event::meaning::maybe_get_verb_str (enum verb v) +{ + switch (v) + { + default: + gcc_unreachable (); + case VERB_unknown: + return NULL; + case VERB_acquire: + return "acquire"; + case VERB_release: + return "release"; + case VERB_enter: + return "enter"; + case VERB_exit: + return "exit"; + case VERB_call: + return "call"; + case VERB_return: + return "return"; + case VERB_branch: + return "branch"; + case VERB_danger: + return "danger"; + } +} + +/* Get a string (or NULL) for N suitable for use within a SARIF + threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8). */ + +const char * +diagnostic_event::meaning::maybe_get_noun_str (enum noun n) +{ + switch (n) + { + default: + gcc_unreachable (); + case NOUN_unknown: + return NULL; + case NOUN_taint: + return "taint"; + case NOUN_sensitive: + return "sensitive"; + case NOUN_function: + return "function"; + case NOUN_lock: + return "lock"; + case NOUN_memory: + return "memory"; + case NOUN_resource: + return "resource"; + } +} + +/* Get a string (or NULL) for P suitable for use within a SARIF + threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8). */ + +const char * +diagnostic_event::meaning::maybe_get_property_str (enum property p) +{ + switch (p) + { + default: + gcc_unreachable (); + case PROPERTY_unknown: + return NULL; + case PROPERTY_true: + return "true"; + case PROPERTY_false: + return "false"; + } +} + +/* class diagnostic_path. */ + +/* Subroutine of diagnostic_path::interprocedural_p. + Look for the first event in this path that is within a function + i.e. has a non-null logical location for which function_p is true. + If found, write its index to *OUT_IDX and return true. + Otherwise return false. */ + +bool +diagnostic_path::get_first_event_in_a_function (unsigned *out_idx) const +{ + const unsigned num = num_events (); + for (unsigned i = 0; i < num; i++) + { + const diagnostic_event &event = get_event (i); + if (const logical_location *logical_loc = event.get_logical_location ()) + if (logical_loc->function_p ()) + { + *out_idx = i; + return true; + } + } + return false; +} + +/* Return true if the events in this path involve more than one + function, or false if it is purely intraprocedural. */ + +bool +diagnostic_path::interprocedural_p () const +{ + /* Ignore leading events that are outside of any function. */ + unsigned first_fn_event_idx; + if (!get_first_event_in_a_function (&first_fn_event_idx)) + return false; + + const diagnostic_event &first_fn_event = get_event (first_fn_event_idx); + int first_fn_stack_depth = first_fn_event.get_stack_depth (); + + const unsigned num = num_events (); + for (unsigned i = first_fn_event_idx + 1; i < num; i++) + { + if (!same_function_p (first_fn_event_idx, i)) + return true; + if (get_event (i).get_stack_depth () != first_fn_stack_depth) + return true; + } + return false; +} + +/* Print PATH by emitting a dummy "note" associated with it. */ + +DEBUG_FUNCTION +void debug (diagnostic_path *path) +{ + rich_location richloc (line_table, UNKNOWN_LOCATION); + richloc.set_path (path); + inform (&richloc, "debug path"); +} + /* Anonymous namespace for path-printing code. */ namespace { diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index 471135f16dece..c66aa5af5ff55 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -918,164 +918,6 @@ diagnostic_context::show_any_path (const diagnostic_info &diagnostic) print_path (path); } -/* class diagnostic_event. */ - -/* struct diagnostic_event::meaning. */ - -void -diagnostic_event::meaning::dump_to_pp (pretty_printer *pp) const -{ - bool need_comma = false; - pp_character (pp, '{'); - if (const char *verb_str = maybe_get_verb_str (m_verb)) - { - pp_printf (pp, "verb: %qs", verb_str); - need_comma = true; - } - if (const char *noun_str = maybe_get_noun_str (m_noun)) - { - if (need_comma) - pp_string (pp, ", "); - pp_printf (pp, "noun: %qs", noun_str); - need_comma = true; - } - if (const char *property_str = maybe_get_property_str (m_property)) - { - if (need_comma) - pp_string (pp, ", "); - pp_printf (pp, "property: %qs", property_str); - need_comma = true; - } - pp_character (pp, '}'); -} - -/* Get a string (or NULL) for V suitable for use within a SARIF - threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8). */ - -const char * -diagnostic_event::meaning::maybe_get_verb_str (enum verb v) -{ - switch (v) - { - default: - gcc_unreachable (); - case VERB_unknown: - return NULL; - case VERB_acquire: - return "acquire"; - case VERB_release: - return "release"; - case VERB_enter: - return "enter"; - case VERB_exit: - return "exit"; - case VERB_call: - return "call"; - case VERB_return: - return "return"; - case VERB_branch: - return "branch"; - case VERB_danger: - return "danger"; - } -} - -/* Get a string (or NULL) for N suitable for use within a SARIF - threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8). */ - -const char * -diagnostic_event::meaning::maybe_get_noun_str (enum noun n) -{ - switch (n) - { - default: - gcc_unreachable (); - case NOUN_unknown: - return NULL; - case NOUN_taint: - return "taint"; - case NOUN_sensitive: - return "sensitive"; - case NOUN_function: - return "function"; - case NOUN_lock: - return "lock"; - case NOUN_memory: - return "memory"; - case NOUN_resource: - return "resource"; - } -} - -/* Get a string (or NULL) for P suitable for use within a SARIF - threadFlowLocation "kinds" property (SARIF v2.1.0 section 3.38.8). */ - -const char * -diagnostic_event::meaning::maybe_get_property_str (enum property p) -{ - switch (p) - { - default: - gcc_unreachable (); - case PROPERTY_unknown: - return NULL; - case PROPERTY_true: - return "true"; - case PROPERTY_false: - return "false"; - } -} - -/* class diagnostic_path. */ - -/* Subroutine of diagnostic_path::interprocedural_p. - Look for the first event in this path that is within a function - i.e. has a non-null logical location for which function_p is true. - If found, write its index to *OUT_IDX and return true. - Otherwise return false. */ - -bool -diagnostic_path::get_first_event_in_a_function (unsigned *out_idx) const -{ - const unsigned num = num_events (); - for (unsigned i = 0; i < num; i++) - { - const diagnostic_event &event = get_event (i); - if (const logical_location *logical_loc = event.get_logical_location ()) - if (logical_loc->function_p ()) - { - *out_idx = i; - return true; - } - } - return false; -} - -/* Return true if the events in this path involve more than one - function, or false if it is purely intraprocedural. */ - -bool -diagnostic_path::interprocedural_p () const -{ - /* Ignore leading events that are outside of any function. */ - unsigned first_fn_event_idx; - if (!get_first_event_in_a_function (&first_fn_event_idx)) - return false; - - const diagnostic_event &first_fn_event = get_event (first_fn_event_idx); - int first_fn_stack_depth = first_fn_event.get_stack_depth (); - - const unsigned num = num_events (); - for (unsigned i = first_fn_event_idx + 1; i < num; i++) - { - if (!same_function_p (first_fn_event_idx, i)) - return true; - if (get_event (i).get_stack_depth () != first_fn_stack_depth) - return true; - } - return false; -} - /* class logical_location. */ /* Return true iff this is a function or method. */ @@ -2543,16 +2385,6 @@ set_text_art_charset (enum diagnostic_text_art_charset charset) } } -/* Print PATH by emitting a dummy "note" associated with it. */ - -DEBUG_FUNCTION -void debug (diagnostic_path *path) -{ - rich_location richloc (line_table, UNKNOWN_LOCATION); - richloc.set_path (path); - inform (&richloc, "debug path"); -} - /* Really call the system 'abort'. This has to go right at the end of this file, so that there are no functions after it that call abort and get the system abort instead of our macro. */ From ccbcde5ec0e481e1ea775649d59691b6f5fcc5a1 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 21 Jun 2024 18:20:38 -0400 Subject: [PATCH 110/114] diagnostics: remove duplicate copies of diagnostic_kind_text No functional change intended. gcc/ChangeLog: * diagnostic-format-json.cc (json_output_format::on_end_diagnostic): Use get_diagnostic_kind_text rather than embedding a duplicate copy of the table. * diagnostic-format-sarif.cc (make_rule_id_for_diagnostic_kind): Likewise. * diagnostic.cc (get_diagnostic_kind_text): New. * diagnostic.h (get_diagnostic_kind_text): New decl. Signed-off-by: David Malcolm --- gcc/diagnostic-format-json.cc | 8 +------- gcc/diagnostic-format-sarif.cc | 8 +------- gcc/diagnostic.cc | 8 ++++++++ gcc/diagnostic.h | 2 ++ 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/gcc/diagnostic-format-json.cc b/gcc/diagnostic-format-json.cc index ec03ac15aebab..8f2ff6cfde20d 100644 --- a/gcc/diagnostic-format-json.cc +++ b/gcc/diagnostic-format-json.cc @@ -231,14 +231,8 @@ json_output_format::on_end_diagnostic (const diagnostic_info &diagnostic, /* Get "kind" of diagnostic. */ { - static const char *const diagnostic_kind_text[] = { -#define DEFINE_DIAGNOSTIC_KIND(K, T, C) (T), -#include "diagnostic.def" -#undef DEFINE_DIAGNOSTIC_KIND - "must-not-happen" - }; /* Lose the trailing ": ". */ - const char *kind_text = diagnostic_kind_text[diagnostic.kind]; + const char *kind_text = get_diagnostic_kind_text (diagnostic.kind); size_t len = strlen (kind_text); gcc_assert (len > 2); gcc_assert (kind_text[len - 2] == ':'); diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc index 5581aa1579e90..2745c72ea3e55 100644 --- a/gcc/diagnostic-format-sarif.cc +++ b/gcc/diagnostic-format-sarif.cc @@ -662,14 +662,8 @@ maybe_get_sarif_level (diagnostic_t diag_kind) static char * make_rule_id_for_diagnostic_kind (diagnostic_t diag_kind) { - static const char *const diagnostic_kind_text[] = { -#define DEFINE_DIAGNOSTIC_KIND(K, T, C) (T), -#include "diagnostic.def" -#undef DEFINE_DIAGNOSTIC_KIND - "must-not-happen" - }; /* Lose the trailing ": ". */ - const char *kind_text = diagnostic_kind_text[diag_kind]; + const char *kind_text = get_diagnostic_kind_text (diag_kind); size_t len = strlen (kind_text); gcc_assert (len > 2); gcc_assert (kind_text[len - 2] == ':'); diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index c66aa5af5ff55..8fc22466b928a 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -590,6 +590,14 @@ static const char *const diagnostic_kind_text[] = { "must-not-happen" }; +/* Get unlocalized string describing KIND. */ + +const char * +get_diagnostic_kind_text (diagnostic_t kind) +{ + return diagnostic_kind_text[kind]; +} + /* Return a malloc'd string describing a location and the severity of the diagnostic, e.g. "foo.c:42:10: error: ". The caller is responsible for freeing the memory. */ diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index c6846525da312..4969f07836ccb 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -1121,4 +1121,6 @@ option_unspecified_p (int opt) extern char *get_cwe_url (int cwe); +extern const char *get_diagnostic_kind_text (diagnostic_t kind); + #endif /* ! GCC_DIAGNOSTIC_H */ From 69fdcd0c57c761693bd90f61bcd4884951f16365 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Sat, 22 Jun 2024 00:18:44 +0000 Subject: [PATCH 111/114] Daily bump. --- gcc/ChangeLog | 196 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 166 ++++++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 37 ++++++++ libcpp/ChangeLog | 6 ++ libstdc++-v3/ChangeLog | 115 +++++++++++++++++++++++ 6 files changed, 521 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7693558c4e3c9..f567922b82063 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,199 @@ +2024-06-21 David Malcolm + + * diagnostic-format-json.cc + (json_output_format::on_end_diagnostic): Use + get_diagnostic_kind_text rather than embedding a duplicate copy of + the table. + * diagnostic-format-sarif.cc + (make_rule_id_for_diagnostic_kind): Likewise. + * diagnostic.cc (get_diagnostic_kind_text): New. + * diagnostic.h (get_diagnostic_kind_text): New decl. + +2024-06-21 David Malcolm + + * diagnostic-path.cc (diagnostic_event::meaning::dump_to_pp): Move + here from diagnostic.cc. + (diagnostic_event::meaning::maybe_get_verb_str): Likewise. + (diagnostic_event::meaning::maybe_get_noun_str): Likewise. + (diagnostic_event::meaning::maybe_get_property_str): Likewise. + (diagnostic_path::get_first_event_in_a_function): Likewise. + (diagnostic_path::interprocedural_p): Likewise. + (debug): Likewise for diagnostic_path * overload. + * diagnostic.cc (diagnostic_event::meaning::dump_to_pp): Move from + here to diagnostic-path.cc. + (diagnostic_event::meaning::maybe_get_verb_str): Likewise. + (diagnostic_event::meaning::maybe_get_noun_str): Likewise. + (diagnostic_event::meaning::maybe_get_property_str): Likewise. + (diagnostic_path::get_first_event_in_a_function): Likewise. + (diagnostic_path::interprocedural_p): Likewise. + (debug): Likewise for diagnostic_path * overload. + +2024-06-21 Jeff Law + + * config/stormy16/stormy16.md (swpn_zext): New pattern. + +2024-06-21 Richard Sandiford + + * config/stormy16/predicates.md (xs_hi_nonmemory_operand): Handle + symbol_ref and label_ref. + +2024-06-21 Richard Sandiford + + * config/iq2000/iq2000.cc (iq2000_print_operand): Make %p handle 1<<31. + * config/iq2000/iq2000.md: Remove "I" constraints on + power_of_2_operands. + +2024-06-21 Richard Sandiford + + * rtl-ssa/changes.cc (rtl_ssa::changes_are_worthwhile): Don't + cost no-op moves. + * rtl-ssa/insns.cc (insn_info::calculate_cost): Likewise. + +2024-06-21 Andrew MacLeod + + * gimple-range.cc (gimple_ranger::register_inferred_ranges): Do not + dump global range info after set_range_info. + (gimple_ranger::register_transitive_inferred_ranges): Likewise. + (dom_ranger::range_of_stmt): Likewise. + * tree-ssanames.cc (set_range_info): If global range info + changes, maybe print new range to dump_file. + * tree-vrp.cc (remove_unreachable::handle_early): Do not + dump global range info after set_range_info. + (remove_unreachable::remove): Likewise. + (remove_unreachable::remove_and_update_globals): Likewise. + (pass_assumptions::execute): Likewise. + +2024-06-21 Andrew MacLeod + + * gimple-range.cc (dom_ranger::dom_ranger): Create a block + vector. + (dom_ranger::~dom_ranger): Dispose of the block vector. + (dom_ranger::edge_range): Delete. + (dom_ranger::range_on_edge): Combine range in src BB with any + range gori_nme_on_edge returns. + (dom_ranger::range_in_bb): Combine global range with any active + contextual range for an ssa-name. + (dom_ranger::range_of_stmt): Fix non-ssa LHS case, use + fur_depend for folding so relations can be registered. + (dom_ranger::maybe_push_edge): Delete. + (dom_ranger::pre_bb): Create incoming contextual range vector. + (dom_ranger::post_bb): Free contextual range vector. + * gimple-range.h (dom_ranger::edge_range): Delete. + (dom_ranger::m_e0): Delete. + (dom_ranger::m_e1): Delete. + (dom_ranger::m_bb): New. + (dom_ranger::m_pop_list): Delete. + * tree-vrp.cc (execute_fast_vrp): Enable relation oracle. + +2024-06-21 Andrew MacLeod + + * tree-vrp.cc (remove_unreachable::remove): Export global range + if builtin_unreachable dominates all uses. + (remove_unreachable::remove_and_update_globals): Do not reset SCEV. + (execute_ranger_vrp): Reset SCEV here instead. + (fvrp_folder::fvrp_folder): Take final pass flag + and create a remove_unreachable object when specified. + (fvrp_folder::pre_fold_stmt): Register GIMPLE_CONDs with + the remove_unreachcable object. + (fvrp_folder::m_unreachable): New. + (execute_fast_vrp): Process remove_unreachable object. + (pass_vrp::execute): Add final_p flag to execute_fast_vrp. + +2024-06-21 David Malcolm + + PR testsuite/109360 + * doc/install.texi: Mention optional usage of "jsonschema" tool. + +2024-06-21 David Malcolm + + PR testsuite/109360 + * diagnostic-format-sarif.cc + (sarif_builder::make_location_object): Pass any column override + from rich_loc to maybe_make_physical_location_object. + (sarif_builder::maybe_make_physical_location_object): Add + "column_override" param and pass it to maybe_make_region_object. + (sarif_builder::maybe_make_region_object): Add "column_override" + param and use it when the location has 0 for a column. Don't + add "startLine", "startColumn", "endLine", or "endColumn" if + the values aren't positive. + (sarif_builder::maybe_make_region_object_for_context): Don't + add "startLine" or "endLine" if the values aren't positive. + +2024-06-21 Richard Sandiford + + * config/sh/sh.md (*minus_plus_one): Add constraints. + +2024-06-21 Andrew Pinski + + PR tree-optimization/68855 + * tree-complex.cc (init_dont_simulate_again): Handle PAREN_EXPR + like NEGATE_EXPR. + (complex_propagate::visit_stmt): Likewise. + (expand_complex_move): Don't handle PAREN_EXPR. + (expand_complex_paren): New function. + (expand_complex_operations_1): Handle PAREN_EXPR like + NEGATE_EXPR. And call expand_complex_paren for PAREN_EXPR. + +2024-06-21 Richard Biener + + * doc/passes.texi: Remove references to no longer existing + passes. + +2024-06-21 YunQiang Su + + * configure.ac: Set gcc_cv_as_mips_explicit_relocs if + gcc_cv_as_mips_explicit_relocs_pcrel. + * configure: Regenerate. + +2024-06-21 YunQiang Su + + * config/mips/mips.cc(mips_rtx_costs): Set condmove cost. + * config/mips/mips.md(mov_on_, + mov_on__mips16e2, + mov_on__ne + mov_on__ne_mips16e2): Define name by + remove starting *, so that we can use CODE_FOR_. + +2024-06-21 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * config/rs6000/altivec.md (altivec_vmrghw_direct_): Rename + to ... + (altivec_vmrghw_direct__be): ... this. Add the condition + BYTES_BIG_ENDIAN. + (altivec_vmrghw_direct__le): New define_insn. + (altivec_vmrglw_direct_): Rename to ... + (altivec_vmrglw_direct__be): ... this. Add the condition + BYTES_BIG_ENDIAN. + (altivec_vmrglw_direct__le): New define_insn. + (altivec_vmrghw): Adjust by calling gen_altivec_vmrghw_direct_v4si_be + for BE and gen_altivec_vmrglw_direct_v4si_le for LE. + (altivec_vmrglw): Adjust by calling gen_altivec_vmrglw_direct_v4si_be + for BE and gen_altivec_vmrghw_direct_v4si_le for LE. + (vec_widen_umult_hi_v8hi): Adjust the call to + gen_altivec_vmrghw_direct_v4si by gen_altivec_vmrghw for BE + and by gen_altivec_vmrglw for LE. + (vec_widen_smult_hi_v8hi): Likewise. + (vec_widen_umult_lo_v8hi): Adjust the call to + gen_altivec_vmrglw_direct_v4si by gen_altivec_vmrglw for BE + and by gen_altivec_vmrghw for LE + (vec_widen_smult_lo_v8hi): Likewise. + * config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace + CODE_FOR_altivec_vmrghw_direct_v4si by + CODE_FOR_altivec_vmrghw_direct_v4si_be for BE and + CODE_FOR_altivec_vmrghw_direct_v4si_le for LE. And replace + CODE_FOR_altivec_vmrglw_direct_v4si by + CODE_FOR_altivec_vmrglw_direct_v4si_be for BE and + CODE_FOR_altivec_vmrglw_direct_v4si_le for LE. + * config/rs6000/vsx.md (vsx_xxmrghw_): Adjust by calling + gen_altivec_vmrghw_direct_v4si_be for BE and + gen_altivec_vmrglw_direct_v4si_le for LE. + (vsx_xxmrglw_): Adjust by calling + gen_altivec_vmrglw_direct_v4si_be for BE and + gen_altivec_vmrghw_direct_v4si_le for LE. + 2024-06-20 Roger Sayle * config/i386/i386-expand.cc (ix86_ternlog_idx): Allow any SUBREG diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index e778c427d11fc..d4f60539db570 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240621 +20240622 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 9e835405a8227..61f32cd9f6e2e 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,169 @@ +2024-06-21 Eric Botcazou + + * gcc-interface/trans.cc (Subprogram_Body_to_gnu): Also return early + for a protected subprogram in -gnatc mode. + +2024-06-21 Eric Botcazou + + * gcc-interface/decl.cc (gnat_to_gnu_entity) : Set + the TYPE_JUSTIFIED_MODULAR_P flag earlier. + * gcc-interface/misc.cc (gnat_unit_size_without_reusable_padding): + New function. + (LANG_HOOKS_UNIT_SIZE_WITHOUT_REUSABLE_PADDING): Redefine to above + function. + +2024-06-21 Eric Botcazou + + * gcc-interface/utils.cc (clear_decl_bit_field): New function. + (finish_record_type): Call clear_decl_bit_field instead of clearing + DECL_BIT_FIELD manually. + +2024-06-21 Eric Botcazou + + * gcc-interface/trans.cc (gnat_to_gnu) : Fix formatting. + * gcc-interface/utils2.cc: Include optabs-query.h. + (fast_modulo_reduction): Call can_mult_highpart_p on the TYPE_MODE + before generating a high-part multiply. Fix formatting. + +2024-06-21 Eric Botcazou + + * gcc-interface/gigi.h (fast_modulo_reduction): Declare. + * gcc-interface/trans.cc (gnat_to_gnu) : In the unsigned + case, call fast_modulo_reduction for {FLOOR,TRUNC}_MOD_EXPR if the + RHS is a constant and not a power of two, and the precision is not + larger than the word size. + * gcc-interface/utils2.cc: Include expmed.h. + (fast_modulo_reduction): New function. + (nonbinary_modular_operation): Call fast_modulo_reduction for the + multiplication if the precision is not larger than the word size. + +2024-06-21 Javier Miranda + + * sem_ch2.adb (Analyze_Interpolated_String_Literal): Reject + ambiguous function calls. + +2024-06-21 Ronan Desplanques + + * sem_util.adb (Examine_Array_Bounds): Add missing return + statements. Fix criterion for a string literal being empty. + +2024-06-21 Eric Botcazou + + * bcheck.adb (Check_Consistency_Of_Sdep): Guard against path to ALI + file not found. + +2024-06-21 Javier Miranda + + * sem_ch13.adb (Analyze_One_Aspect): Fix code locating the entity + of the parent type. + +2024-06-21 Marc Poulhiès + + * make.adb (Scan_Make_Arg): Adjust error message. + * gnatls.adb (Search_RTS): Likewise. + * switch-b.adb (Scan_Debug_Switches): Likewise. + +2024-06-21 Eric Botcazou + + * einfo.ads (Direct_Primitive_Operations): Mention concurrent types + as well as GNAT extensions instead of implementation details. + (Primitive_Operations): Document that Direct_Primitive_Operations is + also used for concurrent types as a fallback. + * einfo-utils.adb (Primitive_Operations): Tweak formatting. + * exp_util.ads (Find_Prim_Op): Adjust description. + * exp_util.adb (Make_Subtype_From_Expr): In the private case with + unknown discriminants, always copy Direct_Primitive_Operations and + do not overwrite the Class_Wide_Type of the expression's base type. + * sem_ch3.adb (Analyze_Incomplete_Type_Decl): Tweak comment. + (Analyze_Subtype_Declaration): Remove older and now dead calls to + Set_Direct_Primitive_Operations. Tweak comment. + (Build_Derived_Private_Type): Likewise. + (Build_Derived_Record_Type): Likewise. + (Build_Discriminated_Subtype): Set Direct_Primitive_Operations in + all cases instead of just for tagged types. + (Complete_Private_Subtype): Likewise. + (Derived_Type_Declaration): Tweak comment. + * sem_ch4.ads (Try_Object_Operation): Adjust description. + +2024-06-21 Doug Rupp + + * init.c [vxworks] (__gnat_install_handler): Revert to + installing signal handlers without regard to interrupt_state. + +2024-06-21 Javier Miranda + + * sem_disp.adb (Find_Hidden_Overridden_Primitive): Check + public dispatching primitives of ancestors; previously, + only immediately-visible primitives were checked. + +2024-06-21 Eric Botcazou + + * checks.adb (Generate_Index_Checks): Add specific treatment for + index expressions that are N_Expression_With_Actions nodes. + +2024-06-21 Eric Botcazou + + * sem_ch4.adb (Analyze_Selected_Component): Rename Name into Pref + and use Sel local variable consistently. + (Is_Simple_Indexed_Component): New predicate. + Call Is_Simple_Indexed_Component to determine whether to build an + actual subtype for the component. + +2024-06-21 Eric Botcazou + + * freeze.adb (Freeze_Array_Type): Decouple the handling of the + interaction between packing and aliased/atomic components from + that of the interaction between a component clause and aliased/ + atomic components, and retrofit the processing of the interaction + between the two characteristics and independent components into + the common processing. + +2024-06-21 Bob Duff + + * gen_il-gen-gen_nodes.adb + (N_Generic_Package_Declaration): Remove Activation_Chain_Entity. + * sinfo.ads: Comment improvements. Add missing doc. + Remove obsolete comment about Activation_Chain_Entity. + * einfo.ads: Comment improvements. Add missing doc. + * einfo-utils.adb (Base_Type): Add Assert (disabled for now). + (Next_Index): Minor cleanup. + * aspects.ads: Minor comment fix. + * exp_ch6.adb: Likewise. + * sem_ch3.adb: Likewise. + +2024-06-21 Piotr Trojanek + + * sem_ch3.adb (Add_Interface_Tag_Components): Simplify with No. + +2024-06-21 Steve Baird + + * sem_ch4.adb (Is_Effectively_Visible_Operator): A new function. + (Check_Arithmetic_Pair): In paths where Add_One_Interp was + previously called unconditionally, instead call only if + Is_Effectively_Visible_Operator returns True. + (Check_Boolean_Pair): Likewise. + (Find_Unary_Types): Likewise. + +2024-06-21 Eric Botcazou + + * accessibility.adb (Accessibility_Level): Apply the processing to + Expr when its Original_Node is an unanalyzed identifier. + +2024-06-21 Piotr Trojanek + + * sem_attr.adb (In_Aspect_Specification): Use the standard + condition that works correctly with declare expressions. + * sem_ch13.adb (Analyze_Aspects_At_Freeze_Point): Replace + ordinary analysis with preanalysis of spec expressions. + +2024-06-21 Justin Squirek + + * csets.ads (Identifier_Char): New function - replacing table. + * csets.adb (Identifier_Char): Rename and move table for static values. + (Initialize): Remove dynamic calculations. + (Identifier_Char): New function to calculate dynamic values. + * opt.adb (Set_Config_Switches): Remove setting of Identifier_Char. + 2024-06-20 Steve Baird * sem_attr.adb (Resolve_Attribute.Proper_Op): When resolving the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57e6fcb34d818..b1cd4be87b501 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,40 @@ +2024-06-21 David Malcolm + + PR testsuite/109360 + * lib/sarif-schema-2.1.0.json: New file, downloaded from + https://docs.oasis-open.org/sarif/sarif/v2.1.0/os/schemas/sarif-schema-2.1.0.json + Licensing information can be seen at + https://github.com/oasis-tcs/sarif-spec/issues/583 + which states "They are free to incorporate it into their + implementation. No need for special permission or paperwork from + OASIS." + * lib/scansarif.exp (verify-sarif-file): If "jsonschema" is + available, use it to verify that the .sarif file complies with the + SARIF schema. + * lib/target-supports.exp (check_effective_target_jsonschema): + New. + +2024-06-21 Eric Botcazou + + * gnat.dg/atomic10.adb: Adjust. + +2024-06-21 Andrew Pinski + + * gcc.dg/vect/pr68855.c: New test. + * gfortran.dg/vect/pr68855.f90: New test. + +2024-06-21 YunQiang Su + + * gcc.target/mips/movcc-2.c: Add k?100:1000 test. + +2024-06-21 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * g++.target/powerpc/pr106069.C: New test. + * gcc.target/powerpc/pr115355.c: New test. + 2024-06-20 Hongyu Wang * gcc.target/i386/apx-ccmp-2.c: Remove -mno-apxf in option. diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index c631ace4380ef..dd09402ed1eac 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2024-06-21 David Malcolm + + PR testsuite/109360 + * include/rich-location.h (rich_location::get_column_override): + New accessor. + 2024-06-11 Joseph Myers * include/cpplib.h (CLK_GNUC2Y, CLK_STDC2Y): New. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4881fbe36e791..6124324d4ccd6 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,118 @@ +2024-06-21 Jonathan Wakely + + PR libstdc++/115497 + * include/bits/cpp_type_traits.h (__is_pointer, __is_scalar): + Remove. + (__is_arithmetic): Do not use __is_pointer in the primary + template. Add partial specialization for pointers. + +2024-06-21 Jonathan Wakely + + PR libstdc++/115497 + * include/bits/cpp_type_traits.h (__is_void): Remove. + * include/debug/helper_functions.h (_Distance_traits): + Adjust partial specialization to match void directly, instead of + using __is_void::__type and matching __true_type. + +2024-06-21 Jonathan Wakely + + PR libstdc++/115497 + * include/bits/deque.tcc (__lex_cmp_dit): Replace __is_pointer + class template with __is_pointer(T) built-in. + (__lexicographical_compare_aux1): Likewise. + * include/bits/stl_algobase.h (__equal_aux1): Likewise. + (__lexicographical_compare_aux1): Likewise. + +2024-06-21 Jonathan Wakely + + PR libstdc++/115497 + * include/bits/valarray_array.h (__valarray_default_construct): + Use __is_trivial(_Tp). instead of __is_scalar<_Tp>. + +2024-06-21 Jonathan Wakely + + PR libstdc++/109150 + * include/bits/stl_algobase.h (__fill_a1): Combine the + !__is_scalar and __is_scalar overloads into one and rewrite the + condition used to decide whether to perform the load outside the + loop. + * testsuite/25_algorithms/fill/109150.cc: New test. + * testsuite/25_algorithms/fill_n/109150.cc: New test. + +2024-06-21 Matthias Kretz + + PR libstdc++/115575 + * testsuite/experimental/simd/pr115454_find_last_set.cc: Require + avx512f_runtime. Don't memcpy fixed_size masks. + +2024-06-21 Jonathan Wakely + + * include/bits/stl_uninitialized.h (uninitialized_default_construct) + (uninitialized_default_construct_n, uninitialized_value_construct) + (uninitialized_value_construct_n): Qualify calls to prevent ADL. + +2024-06-21 Jonathan Wakely + + * include/std/any (any_cast(any*), any_cast(const any*)): Add + static assertion to reject void types, as per LWG 3305. + * testsuite/20_util/any/misc/lwg3305.cc: New test. + +2024-06-21 Jonathan Wakely + + * include/bits/memory_resource.h (polymorphic_allocator::destroy): + Remove deprecated attribute. + +2024-06-21 Jonathan Wakely + + * include/backward/backward_warning.h: Adjust comments to + suggest as another alternative to . + * include/backward/strstream (strstreambuf, istrstream) + (ostrstream, strstream): Add deprecated attribute. + +2024-06-21 Jonathan Wakely + + * include/bits/locale_conv.h (wstring_convert): Add deprecated + attribute for C++17 and later. + (wbuffer_convert): Likewise. + * testsuite/22_locale/codecvt/codecvt_utf16/79980.cc: Disable + deprecated warnings. + * testsuite/22_locale/codecvt/codecvt_utf8/79980.cc: Likewise. + * testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc: + Likewise. + * testsuite/22_locale/conversions/buffer/1.cc: Add dg-warning. + * testsuite/22_locale/conversions/buffer/2.cc: Likewise. + * testsuite/22_locale/conversions/buffer/3.cc: Likewise. + * testsuite/22_locale/conversions/buffer/requirements/typedefs.cc: + Likewise. + * testsuite/22_locale/conversions/string/1.cc: Likewise. + * testsuite/22_locale/conversions/string/2.cc: Likewise. + * testsuite/22_locale/conversions/string/3.cc: Likewise. + * testsuite/22_locale/conversions/string/66441.cc: Likewise. + * testsuite/22_locale/conversions/string/requirements/typedefs-2.cc: + Likewise. + * testsuite/22_locale/conversions/string/requirements/typedefs.cc: + Likewise. + +2024-06-21 Jonathan Wakely + + * include/bits/version.def (chrono): Add cxx11abi = yes. + * include/bits/version.h: Regenerate. + * testsuite/std/time/syn_c++20.cc: Adjust expected value for + the feature test macro. + +2024-06-21 Jonathan Wakely + + PR libstdc++/115522 + * include/std/array (to_array): Workaround the fact that + std::is_trivial is not sufficient to check that a type is + trivially default constructible and assignable. + * testsuite/23_containers/array/creation/115522.cc: New test. + +2024-06-21 Jonathan Wakely + + * testsuite/util/testsuite_allocator.h (tracker_allocator): + Initialize base class in copy constructor. + 2024-06-20 Matthias Kretz PR libstdc++/115454 From be0f7701caf473012acf35b0a0b3a2e576235253 Mon Sep 17 00:00:00 2001 From: Anatolii Hryhorzhevskyi Date: Fri, 21 Jun 2024 21:24:17 -0400 Subject: [PATCH 112/114] Added test file to Makefile.in for diagnostic output --- gcc/Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 638ea6b2307b6..d071b3f19005f 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1372,6 +1372,7 @@ OBJS = \ insn-automata.o \ insn-dfatab.o \ $(INSNEMIT_SEQ_O) \ + test-dump-pass.o \ insn-extract.o \ insn-latencytab.o \ insn-modes.o \ @@ -1813,6 +1814,7 @@ OBJS = \ web.o \ wide-int.o \ wide-int-print.o \ + test-dump-pass.o \ $(out_object_file) \ $(ANALYZER_OBJS) \ $(EXTRA_OBJS) \ From 340185475ae402d1ee87a5c9b7802bba8e734fe0 Mon Sep 17 00:00:00 2001 From: Anatolii Hryhorzhevskyi Date: Fri, 21 Jun 2024 21:26:50 -0400 Subject: [PATCH 113/114] Added test file to Makefile.in for diagnostic output --- gcc/passes.def | 6 +++-- gcc/test-dump-pass.cc | 42 +++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/prune_clones.c | 11 ++++++++ gcc/tree-pass.h | 5 ++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 gcc/test-dump-pass.cc create mode 100644 gcc/testsuite/gcc.dg/prune_clones.c diff --git a/gcc/passes.def b/gcc/passes.def index 041229e47a68e..e80ac5234015e 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -45,8 +45,8 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_warn_function_return); NEXT_PASS (pass_coroutine_early_expand_ifns); NEXT_PASS (pass_expand_omp); - NEXT_PASS (pass_build_cgraph_edges); - TERMINATE_PASS_LIST (all_lowering_passes) + NEXT_PASS (pass_build_cgraph_edges); + TERMINATE_PASS_LIST (all_lowering_passes) /* Interprocedural optimization passes. */ INSERT_PASSES_AFTER (all_small_ipa_passes) @@ -447,6 +447,8 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_lower_resx); NEXT_PASS (pass_nrv); NEXT_PASS (pass_gimple_isel); + NEXT_PASS (pass_test_dump) + NEXT_PASS (pass_prune_clones);; NEXT_PASS (pass_harden_conditional_branches); NEXT_PASS (pass_harden_compares); NEXT_PASS (pass_warn_access, /*early=*/false); diff --git a/gcc/test-dump-pass.cc b/gcc/test-dump-pass.cc new file mode 100644 index 0000000000000..9235d76558b78 --- /dev/null +++ b/gcc/test-dump-pass.cc @@ -0,0 +1,42 @@ +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "backend.h" +#include "tree-pass.h" +#include "gimple.h" +#include "tree.h" +#include "tree-inline.h" + +namespace { + const pass_data pass_data_prune_clones = { + GIMPLE_PASS, + "prune_clones", + OPTGROUP_NONE, + TV_NONE, + 0, + 0, + 0, + 0, + 0 + }; + + class pass_prune_clones : public gimple_opt_pass { + public: pass_prune_clones(gcc::context * ctxt) : gimple_opt_pass(pass_data_prune_clones, ctxt) {} + + unsigned int execute(function *fun) override { + if (flag_dump_passes) { + fprintf(dump_file, "Executing pass_prune_clones\n"); + } + // Pruning logic here + return 0; + } + + bool gate(function *fun) override { + return true; + } + }; +} + +gimple_opt_pass * make_pass_prune_clones(gcc::context * ctxt) { + return new pass_prune_clones(ctxt); +} diff --git a/gcc/testsuite/gcc.dg/prune_clones.c b/gcc/testsuite/gcc.dg/prune_clones.c new file mode 100644 index 0000000000000..0172b1c0ef03b --- /dev/null +++ b/gcc/testsuite/gcc.dg/prune_clones.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-all" } */ + +int main() { + int a = 5; + int b = 10; + int c = a + b; + return c; +} + +/* { dg-final { scan-tree-dump "Executing pass_prune_clones" "gimple" } } */ diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index edebb2be245d9..3053d3e86caf3 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -510,6 +510,9 @@ extern gimple_opt_pass *make_pass_coroutine_lower_builtins (gcc::context *ctxt); extern gimple_opt_pass *make_pass_coroutine_early_expand_ifns (gcc::context *ctxt); extern gimple_opt_pass *make_pass_adjust_alignment (gcc::context *ctxt); +/* Custom diagnostic pass */ + + /* IPA Passes */ extern simple_ipa_opt_pass *make_pass_ipa_lower_emutls (gcc::context *ctxt); extern simple_ipa_opt_pass *make_pass_ipa_function_and_variable_visibility (gcc::context *ctxt); @@ -659,6 +662,8 @@ extern gimple_opt_pass *make_pass_update_address_taken (gcc::context *ctxt); extern gimple_opt_pass *make_pass_convert_switch (gcc::context *ctxt); extern gimple_opt_pass *make_pass_lower_vaarg (gcc::context *ctxt); extern gimple_opt_pass *make_pass_gimple_isel (gcc::context *ctxt); +extern gimple_opt_pass *make_pass_test_dump(gcc::context *ctxt); +extern gimple_opt_pass *make_pass_prune_clones (gcc::context *ctxt); extern gimple_opt_pass *make_pass_harden_compares (gcc::context *ctxt); extern gimple_opt_pass *make_pass_harden_conditional_branches (gcc::context *ctxt); From a3d3dbcb724c4eeaaa7a6e759026845b702b0f80 Mon Sep 17 00:00:00 2001 From: Anatolii Hryhorzhevskyi Date: Fri, 21 Jun 2024 21:58:17 -0400 Subject: [PATCH 114/114] Added test file to Makefile.in for diagnostic output --- Makefile | 29185 +++++++++++++++++++++++++++++++ gcc/Make-hooks | 31 + gcc/Makefile | 4609 +++++ gcc/ada/Makefile | 5 + gcc/ada/gcc-interface/Makefile | 978 ++ gcc/afmv_diagnostic_pass.cc | 69 + gcc/as | 116 + gcc/auto-host.h | 2791 +++ gcc/collect-ld | 116 + gcc/configargs.h | 7 + gcc/cstamp-h | 1 + gcc/dsymutil | 116 + gcc/gcc-driver-name.h | 1 + gcc/m2/Make-maintainer | 1443 ++ gcc/m2/config-make | 10 + gcc/nm | 116 + gcc/option-includes.mk | 1 + gcc/passes.defnano tree-pass.h | 565 + gcc/plugin-version.h | 18 + 19 files changed, 40178 insertions(+) create mode 100644 Makefile create mode 100644 gcc/Make-hooks create mode 100644 gcc/Makefile create mode 100644 gcc/ada/Makefile create mode 100644 gcc/ada/gcc-interface/Makefile create mode 100644 gcc/afmv_diagnostic_pass.cc create mode 100755 gcc/as create mode 100644 gcc/auto-host.h create mode 100755 gcc/collect-ld create mode 100644 gcc/configargs.h create mode 100644 gcc/cstamp-h create mode 100755 gcc/dsymutil create mode 100644 gcc/gcc-driver-name.h create mode 100644 gcc/m2/Make-maintainer create mode 100644 gcc/m2/config-make create mode 100755 gcc/nm create mode 100644 gcc/option-includes.mk create mode 100644 gcc/passes.defnano tree-pass.h create mode 100644 gcc/plugin-version.h diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000..a2a36db8c9ed1 --- /dev/null +++ b/Makefile @@ -0,0 +1,29185 @@ + +# Makefile.in is generated from Makefile.tpl by 'autogen Makefile.def'. +# +# Makefile for directory with subdirs to build. +# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2023 +# Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# . +# + +# First, test for a proper version of make, but only where one is required. + +ifeq (,$(.VARIABLES)) # The variable .VARIABLES, new with 3.80, is never empty. +$(error GNU make version 3.80 or newer is required.) +endif + +# ------------------------------- +# Standard Autoconf-set variables +# ------------------------------- + + +build_alias=x86_64-pc-linux-gnu +build_vendor=pc +build_os=linux-gnu +build=x86_64-pc-linux-gnu +host_alias=x86_64-pc-linux-gnu +host_vendor=pc +host_os=linux-gnu +host=x86_64-pc-linux-gnu +target_alias=x86_64-pc-linux-gnu +target_vendor=pc +target_os=linux-gnu +target=x86_64-pc-linux-gnu + +program_transform_name = s,y,y, + +prefix = /usr/local +exec_prefix = ${prefix} + +srcdir = . + +bindir = ${exec_prefix}/bin +sbindir = ${exec_prefix}/sbin +libexecdir = ${exec_prefix}/libexec +datadir = ${datarootdir} +sysconfdir = ${prefix}/etc +sharedstatedir = ${prefix}/com +localstatedir = ${prefix}/var +libdir = ${exec_prefix}/lib +includedir = ${prefix}/include +oldincludedir = /usr/include +infodir = ${datarootdir}/info +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE} +pdfdir = ${docdir} +htmldir = ${docdir} +mandir = ${datarootdir}/man +man1dir = $(mandir)/man1 +man2dir = $(mandir)/man2 +man3dir = $(mandir)/man3 +man4dir = $(mandir)/man4 +man5dir = $(mandir)/man5 +man6dir = $(mandir)/man6 +man7dir = $(mandir)/man7 +man8dir = $(mandir)/man8 +man9dir = $(mandir)/man9 + +INSTALL = /usr/bin/install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 +LN = ln +LN_S = ln -s +MAINT = # +MAINTAINER_MODE_FALSE = +MAINTAINER_MODE_TRUE = # + +# ------------------------------------------------- +# Miscellaneous non-standard autoconf-set variables +# ------------------------------------------------- + +# The gcc driver likes to know the arguments it was configured with. +TOPLEVEL_CONFIGURE_ARGUMENTS=./configure + +tooldir = ${exec_prefix}/x86_64-pc-linux-gnu +build_tooldir = ${exec_prefix}/x86_64-pc-linux-gnu + +# This is the name of the environment variable used for the path to +# the libraries. +RPATH_ENVVAR = LD_LIBRARY_PATH + +# On targets where RPATH_ENVVAR is PATH, a subdirectory of the GCC build path +# is used instead of the directory itself to avoid including built +# executables in PATH. +GCC_SHLIB_SUBDIR = + +# If the build should make suitable code for shared host resources. +host_shared = no + +# Build programs are put under this directory. +BUILD_SUBDIR = build-x86_64-pc-linux-gnu +# This is set by the configure script to the arguments to use when configuring +# directories built for the build system. +BUILD_CONFIGARGS = --cache-file=./config.cache '--enable-languages=c,c++,fortran,lto,objc' --program-transform-name='s,y,y,' --disable-option-checking --with-build-subdir="$(BUILD_SUBDIR)" + +# Linker flags to use on the host, for stage1 or when not +# bootstrapping. +STAGE1_LDFLAGS = + +# Libraries to use on the host, for stage1 or when not bootstrapping. +STAGE1_LIBS = + +# Linker flags to use for stage2 and later. +POSTSTAGE1_LDFLAGS = -static-libstdc++ -static-libgcc + +# Libraries to use for stage2 and later. +POSTSTAGE1_LIBS = + +# This is the list of variables to export in the environment when +# configuring any subdirectory. It must also be exported whenever +# recursing into a build directory in case that directory's Makefile +# re-runs configure. +BASE_EXPORTS = \ + FLEX="$(FLEX)"; export FLEX; \ + LEX="$(LEX)"; export LEX; \ + BISON="$(BISON)"; export BISON; \ + YACC="$(YACC)"; export YACC; \ + M4="$(M4)"; export M4; \ + SED="$(SED)"; export SED; \ + AWK="$(AWK)"; export AWK; \ + MAKEINFO="$(MAKEINFO)"; export MAKEINFO; \ + GUILE="$(GUILE)"; export GUILE; + +# This is the list of variables to export in the environment when +# configuring subdirectories for the build system. +BUILD_EXPORTS = \ + $(BASE_EXPORTS) \ + AR="$(AR_FOR_BUILD)"; export AR; \ + AS="$(AS_FOR_BUILD)"; export AS; \ + CC="$(CC_FOR_BUILD)"; export CC; \ + CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \ + CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ + CPP="$(CPP_FOR_BUILD)"; export CPP; \ + CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \ + CXX="$(CXX_FOR_BUILD)"; export CXX; \ + CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \ + GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \ + GOC="$(GOC_FOR_BUILD)"; export GOC; \ + GOCFLAGS="$(GOCFLAGS_FOR_BUILD)"; export GOCFLAGS; \ + GDC="$(GDC_FOR_BUILD)"; export GDC; \ + GDCFLAGS="$(GDCFLAGS_FOR_BUILD)"; export GDCFLAGS; \ + GM2="$(GM2_FOR_BUILD)"; export GM2; \ + GM2FLAGS="$(GM2FLAGS_FOR_BUILD)"; export GM2FLAGS; \ + DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \ + DSYMUTIL="$(DSYMUTIL_FOR_BUILD)"; export DSYMUTIL; \ + LD="$(LD_FOR_BUILD)"; export LD; \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \ + NM="$(NM_FOR_BUILD)"; export NM; \ + RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \ + WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \ + WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC; + +# These variables must be set on the make command line for directories +# built for the build system to override those in BASE_FLAGS_TO_PASS. +EXTRA_BUILD_FLAGS = \ + CFLAGS="$(CFLAGS_FOR_BUILD)" \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)" + +# This is the list of directories to built for the host system. +SUBDIRS = libiberty zlib libbacktrace libcpp libcody libdecnumber fixincludes gcc libcc1 c++tools lto-plugin +TARGET_CONFIGDIRS = libgcc libbacktrace libgomp libatomic libitm libstdc++-v3 libsanitizer libvtv libssp libquadmath libgfortran libobjc +# This is set by the configure script to the arguments to use when configuring +# directories built for the host system. +HOST_CONFIGARGS = --cache-file=./config.cache '--enable-languages=c,c++,fortran,lto,objc' --program-transform-name='s,y,y,' --disable-option-checking +# Host programs are put under this directory, which is . except if building +# with srcdir=.. +HOST_SUBDIR = host-x86_64-pc-linux-gnu +# This is the list of variables to export in the environment when +# configuring subdirectories for the host system. We need to pass +# some to the GCC configure because of its hybrid host/target nature. +HOST_EXPORTS = \ + $(BASE_EXPORTS) \ + CC="$(CC)"; export CC; \ + ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \ + CRAB1_LIBS="$(CRAB1_LIBS)"; export CRAB1_LIBS; \ + CFLAGS="$(CFLAGS)"; export CFLAGS; \ + CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ + CXX="$(CXX)"; export CXX; \ + CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \ + GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \ + GOC="$(GOC)"; export GOC; \ + GDC="$(GDC)"; export GDC; \ + GM2="$(GM2)"; export GM2; \ + AR="$(AR)"; export AR; \ + AS="$(AS)"; export AS; \ + CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \ + CPP_FOR_BUILD="$(CPP_FOR_BUILD)"; export CPP_FOR_BUILD; \ + CPPFLAGS_FOR_BUILD="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS_FOR_BUILD; \ + CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \ + DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \ + DSYMUTIL="$(DSYMUTIL)"; export DSYMUTIL; \ + LD="$(LD)"; export LD; \ + LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \ + NM="$(NM)"; export NM; \ + RANLIB="$(RANLIB)"; export RANLIB; \ + WINDRES="$(WINDRES)"; export WINDRES; \ + WINDMC="$(WINDMC)"; export WINDMC; \ + OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \ + OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \ + OTOOL="$(OTOOL)"; export OTOOL; \ + PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)"; export PKG_CONFIG_PATH; \ + READELF="$(READELF)"; export READELF; \ + AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \ + AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \ + DSYMUTIL_FOR_TARGET="$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL_FOR_TARGET; \ + GCC_FOR_TARGET="$(GCC_FOR_TARGET) $$TFLAGS"; export GCC_FOR_TARGET; \ + LD_FOR_TARGET="$(LD_FOR_TARGET)"; export LD_FOR_TARGET; \ + NM_FOR_TARGET="$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \ + OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \ + OBJCOPY_FOR_TARGET="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY_FOR_TARGET; \ + OTOOL_FOR_TARGET="$(OTOOL_FOR_TARGET)"; export OTOOL_FOR_TARGET; \ + RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \ + READELF_FOR_TARGET="$(READELF_FOR_TARGET)"; export READELF_FOR_TARGET; \ + TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \ + HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \ + GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \ + GMPINC="$(HOST_GMPINC)"; export GMPINC; \ + ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ + ISLINC="$(HOST_ISLINC)"; export ISLINC; \ + XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \ + $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ + $(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); + +POSTSTAGE1_CXX_EXPORT = \ + CXX='$(CXX)'; export CXX; \ + CXX_FOR_BUILD='$(CXX_FOR_BUILD)'; export CXX_FOR_BUILD; +# Override the above if we're bootstrapping C++. +POSTSTAGE1_CXX_EXPORT = \ + CXX="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xg++$(exeext) \ + -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \ + -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \ + -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs \ + `if $(LEAN); then echo ' -isystem '; else echo ' -I'; fi`$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include/$(TARGET_SUBDIR) \ + `if $(LEAN); then echo ' -isystem '; else echo ' -I'; fi`$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include \ + `if $(LEAN); then echo ' -isystem '; else echo ' -I'; fi`$$s/libstdc++-v3/libsupc++ \ + -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \ + -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs"; \ + export CXX; \ + CXX_FOR_BUILD="$$CXX"; export CXX_FOR_BUILD; + +# Similar, for later GCC stages. +POSTSTAGE1_HOST_EXPORTS = \ + $(HOST_EXPORTS) \ + CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \ + -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ \ + $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \ + CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \ + $(POSTSTAGE1_CXX_EXPORT) \ + $(LTO_EXPORTS) \ + GDC="$$r/$(HOST_SUBDIR)/prev-gcc/gdc$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ \ + -B$(build_tooldir)/bin/ $(GDCFLAGS_FOR_TARGET) \ + -B$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime/gcc \ + -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src \ + -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \ + -I$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime -I$$s/libphobos/libdruntime \ + -L$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \ + -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \ + -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs"; \ + export GDC; \ + GDC_FOR_BUILD="$$GDC"; export GDC_FOR_BUILD; \ + GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \ + LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \ + HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS; + +# Target libraries are put under this directory: +TARGET_SUBDIR = x86_64-pc-linux-gnu +# This is set by the configure script to the arguments to use when configuring +# directories built for the target. +TARGET_CONFIGARGS = --cache-file=./config.cache --enable-multilib '--enable-languages=c,c++,fortran,lto,objc' --program-transform-name='s,y,y,' --disable-option-checking --disable-year2038 --with-target-subdir="$(TARGET_SUBDIR)" +# This is the list of variables to export in the environment when +# configuring subdirectories for the target system. +BASE_TARGET_EXPORTS = \ + $(BASE_EXPORTS) \ + AR="$(AR_FOR_TARGET)"; export AR; \ + AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \ + CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ + CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \ + GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \ + GDC="$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GDC; \ + GM2="$(GM2_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GM2; \ + DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \ + DSYMUTIL="$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL; \ + LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \ + LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \ + LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \ + NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \ + OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \ + OBJCOPY="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY; \ + OTOOL="$(OTOOL_FOR_TARGET)"; export OTOOL; \ + RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \ + READELF="$(READELF_FOR_TARGET)"; export READELF; \ + STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \ + SYSROOT_CFLAGS_FOR_TARGET="$(SYSROOT_CFLAGS_FOR_TARGET)"; export SYSROOT_CFLAGS_FOR_TARGET; \ + WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \ + WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \ + $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ + $(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ + TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS; + +RAW_CXX_TARGET_EXPORTS = \ + $(BASE_TARGET_EXPORTS) \ + CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \ + CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; + +NORMAL_TARGET_EXPORTS = \ + $(BASE_TARGET_EXPORTS) \ + CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; + +# Where to find GMP +HOST_GMPLIBS = -lmpc -lmpfr -lgmp +HOST_GMPINC = + +# Where to find isl +HOST_ISLLIBS = +HOST_ISLINC = + +# ---------------------------------------------- +# Programs producing files for the BUILD machine +# ---------------------------------------------- + +SHELL = /bin/sh + +# pwd command to use. Allow user to override default by setting PWDCMD in +# the environment to account for automounters. The make variable must not +# be called PWDCMD, otherwise the value set here is passed to make +# subprocesses and overrides the setting from the user's environment. +# Don't use PWD since it is a common shell environment variable and we +# don't want to corrupt it. +PWD_COMMAND = $${PWDCMD-pwd} + +# compilers to use to create programs which must be run in the build +# environment. +AR_FOR_BUILD = $(AR) +AS_FOR_BUILD = $(AS) +CC_FOR_BUILD = $(CC) +CFLAGS_FOR_BUILD = -g -O2 +CPP_FOR_BUILD = +CPPFLAGS_FOR_BUILD = +CXXFLAGS_FOR_BUILD = -g -O2 +CXX_FOR_BUILD = $(CXX) +DLLTOOL_FOR_BUILD = $(DLLTOOL) +DSYMUTIL_FOR_BUILD = $(DSYMUTIL) +GFORTRAN_FOR_BUILD = $(GFORTRAN) +GOC_FOR_BUILD = $(GOC) +GDC_FOR_BUILD = $(GDC) +GM2_FOR_BUILD = @GM2_FOR_BUILD@ +LDFLAGS_FOR_BUILD = +LD_FOR_BUILD = $(LD) +NM_FOR_BUILD = $(NM) +RANLIB_FOR_BUILD = $(RANLIB) +WINDMC_FOR_BUILD = $(WINDMC) +WINDRES_FOR_BUILD = $(WINDRES) + +# Special variables passed down in EXTRA_GCC_FLAGS. They are defined +# here so that they can be overridden by Makefile fragments. +BUILD_PREFIX = @BUILD_PREFIX@ +BUILD_PREFIX_1 = @BUILD_PREFIX_1@ + +# Flags to pass to stage2 and later makes. They are defined +# here so that they can be overridden by Makefile fragments. +BOOT_CFLAGS= -g -O2 +BOOT_LDFLAGS= +BOOT_ADAFLAGS= -gnatpg + +AWK = gawk +SED = /usr/bin/sed +BISON = bison +YACC = bison -y +FLEX = flex +LEX = flex +M4 = m4 +MAKEINFO = /home/ahryhorzhevskyi/gcc/missing makeinfo +EXPECT = expect +RUNTEST = runtest + +AUTO_PROFILE = gcc-auto-profile --all -c 10000000 + +# This just becomes part of the MAKEINFO definition passed down to +# sub-makes. It lets flags be given on the command line while still +# using the makeinfo from the object tree. +# (Default to avoid splitting info files by setting the threshold high.) +MAKEINFOFLAGS = --split-size=5000000 + +# --------------------------------------------- +# Programs producing files for the HOST machine +# --------------------------------------------- + +AS = as +AR = ar --plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so +AR_FLAGS = rc +CC = gcc +CXX = g++ -std=c++11 +DLLTOOL = dlltool +DSYMUTIL = dsymutil +LD = ld +LIPO = lipo +NM = nm +OBJDUMP = objdump +OTOOL = otool +RANLIB = ranlib --plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so +READELF = readelf +STRIP = strip +WINDRES = windres +WINDMC = windmc + +GDC = no +GNATBIND = no +GNATMAKE = no + +CFLAGS = -g -O2 +LDFLAGS = +LIBCFLAGS = $(CFLAGS) +CXXFLAGS = -g -O2 +LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates +GOCFLAGS = $(CFLAGS) +GDCFLAGS = -g -O2 +GM2FLAGS = $(CFLAGS) + +CRAB1_LIBS = + +PKG_CONFIG_PATH = + +GUILE = guile + +# Pass additional PGO and LTO compiler options to the PGO build. +BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) +override CFLAGS += $(BUILD_CFLAGS) +override CXXFLAGS += $(BUILD_CFLAGS) + +# Additional PGO and LTO compiler options to generate profiling data +# for the PGO build. +PGO_BUILD_GEN_FLAGS_TO_PASS = \ + PGO_BUILD_CFLAGS="" \ + PGO_BUILD_LTO_CFLAGS="" + +# NB: Filter out any compiler options which may fail PGO training runs. +PGO_BUILD_TRAINING_CFLAGS:= \ + $(filter-out -Werror=%,$(CFLAGS)) +PGO_BUILD_TRAINING_CXXFLAGS:=\ + $(filter-out -Werror=%,$(CXXFLAGS)) +PGO_BUILD_TRAINING_CFLAGS:= \ + $(filter-out -Wall,$(PGO_BUILD_TRAINING_CFLAGS)) +PGO_BUILD_TRAINING_CXXFLAGS:= \ + $(filter-out -Wall,$(PGO_BUILD_TRAINING_CXXFLAGS)) +PGO_BUILD_TRAINING_CFLAGS:= \ + $(filter-out -specs=%,$(PGO_BUILD_TRAINING_CFLAGS)) +PGO_BUILD_TRAINING_CXXFLAGS:= \ + $(filter-out -specs=%,$(PGO_BUILD_TRAINING_CXXFLAGS)) +PGO_BUILD_TRAINING_FLAGS_TO_PASS = \ + PGO_BUILD_TRAINING=yes \ + CFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CFLAGS)" \ + CXXFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CXXFLAGS)" + +# Ignore "make check" errors in PGO training runs. +PGO_BUILD_TRAINING_MFLAGS = -i + +# Additional PGO and LTO compiler options to use profiling data for the +# PGO build. +PGO_BUILD_USE_FLAGS_TO_PASS = \ + PGO_BUILD_CFLAGS="" \ + PGO_BUILD_LTO_CFLAGS="" + +# PGO training targets for the PGO build. FIXME: Add gold tests to +# training. +PGO-TRAINING-TARGETS = binutils gas gdb ld sim +PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS)) + +CREATE_GCOV = create_gcov +PROFILE_MERGER = profile_merger + +TFLAGS = + +# Defaults for all stages; some are overridden below. + +STAGE_CFLAGS = $(BOOT_CFLAGS) +STAGE_TFLAGS = $(TFLAGS) +STAGE_CONFIGURE_FLAGS=--enable-werror-always + + +# Defaults for stage 1; some are overridden below. +STAGE1_CFLAGS = $(STAGE_CFLAGS) +STAGE1_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGE1_CXXFLAGS = $(STAGE1_CFLAGS) +STAGE1_TFLAGS = $(STAGE_TFLAGS) +STAGE1_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage 2; some are overridden below. +STAGE2_CFLAGS = $(STAGE_CFLAGS) +STAGE2_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGE2_CXXFLAGS = $(STAGE2_CFLAGS) +STAGE2_TFLAGS = $(STAGE_TFLAGS) +STAGE2_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage 3; some are overridden below. +STAGE3_CFLAGS = $(STAGE_CFLAGS) +STAGE3_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGE3_CXXFLAGS = $(STAGE3_CFLAGS) +STAGE3_TFLAGS = $(STAGE_TFLAGS) +STAGE3_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage 4; some are overridden below. +STAGE4_CFLAGS = $(STAGE_CFLAGS) +STAGE4_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGE4_CXXFLAGS = $(STAGE4_CFLAGS) +STAGE4_TFLAGS = $(STAGE_TFLAGS) +STAGE4_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage profile; some are overridden below. +STAGEprofile_CFLAGS = $(STAGE_CFLAGS) +STAGEprofile_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGEprofile_CXXFLAGS = $(STAGEprofile_CFLAGS) +STAGEprofile_TFLAGS = $(STAGE_TFLAGS) +STAGEprofile_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage train; some are overridden below. +STAGEtrain_CFLAGS = $(STAGE_CFLAGS) +STAGEtrain_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGEtrain_CXXFLAGS = $(STAGEtrain_CFLAGS) +STAGEtrain_TFLAGS = $(STAGE_TFLAGS) +STAGEtrain_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage feedback; some are overridden below. +STAGEfeedback_CFLAGS = $(STAGE_CFLAGS) +STAGEfeedback_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGEfeedback_CXXFLAGS = $(STAGEfeedback_CFLAGS) +STAGEfeedback_TFLAGS = $(STAGE_TFLAGS) +STAGEfeedback_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage autoprofile; some are overridden below. +STAGEautoprofile_CFLAGS = $(STAGE_CFLAGS) +STAGEautoprofile_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGEautoprofile_CXXFLAGS = $(STAGEautoprofile_CFLAGS) +STAGEautoprofile_TFLAGS = $(STAGE_TFLAGS) +STAGEautoprofile_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage autofeedback; some are overridden below. +STAGEautofeedback_CFLAGS = $(STAGE_CFLAGS) +STAGEautofeedback_CXXFLAGS = $(CXXFLAGS) +# Override the above if we're bootstrapping C++. +STAGEautofeedback_CXXFLAGS = $(STAGEautofeedback_CFLAGS) +STAGEautofeedback_TFLAGS = $(STAGE_TFLAGS) +STAGEautofeedback_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + + +# By default, C and C++ are the only stage1 languages, because they are the +# only ones we require to build with the bootstrap compiler, and also the +# only ones useful for building stage2. + +STAGE1_CFLAGS = -g +STAGE1_CHECKING = --enable-checking=yes,types,extra +STAGE1_LANGUAGES = c,c++,lto +# * We force-disable intermodule optimizations, even if +# --enable-intermodule was passed, since the installed compiler +# probably can't handle them. Luckily, autoconf always respects +# the last argument when conflicting --enable arguments are passed. +# * Likewise, we force-disable coverage flags, since the installed +# compiler probably has never heard of them. +# * We also disable -Wformat, since older GCCs don't understand newer %s. +STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ + --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \ + --disable-build-format-warnings + + +# When using the slow stage1 compiler disable IL verification and forcefully +# enable it when using the stage2 compiler instead. As we later compare +# stage2 and stage3 we are merely avoid doing redundant work, plus we apply +# checking when building all target libraries for release builds. +STAGE1_TFLAGS += -fno-checking +STAGE2_CFLAGS += -fno-checking +STAGE2_TFLAGS += -fno-checking +STAGE3_CFLAGS += -fchecking=1 +STAGE3_TFLAGS += -fchecking=1 + +STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate +STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) + +STAGEtrain_CFLAGS = $(filter-out -fchecking=1,$(STAGE3_CFLAGS)) +STAGEtrain_TFLAGS = $(filter-out -fchecking=1,$(STAGE3_TFLAGS)) + +STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use -fprofile-reproducible=parallel-runs +STAGEfeedback_TFLAGS = $(STAGE4_TFLAGS) +# Disable warnings as errors for a few reasons: +# - sources for gen* binaries do not have .gcda files available +# - inlining decisions generate extra warnings +STAGEfeedback_CONFIGURE_FLAGS = $(filter-out --enable-werror-always,$(STAGE_CONFIGURE_FLAGS)) + +STAGEautoprofile_CFLAGS = $(filter-out -gtoggle,$(STAGE2_CFLAGS)) -g +STAGEautoprofile_TFLAGS = $(STAGE2_TFLAGS) + +STAGEautofeedback_CFLAGS = $(STAGE3_CFLAGS) +STAGEautofeedback_TFLAGS = $(STAGE3_TFLAGS) +# Disable warnings as errors since inlining decisions with -fauto-profile +# may result in additional warnings. +STAGEautofeedback_CONFIGURE_FLAGS = $(filter-out --enable-werror-always,$(STAGE_CONFIGURE_FLAGS)) + +do-compare = cmp --ignore-initial=16 $$f1 $$f2 +do-compare3 = $(do-compare) + +# ----------------------------------------------- +# Programs producing files for the TARGET machine +# ----------------------------------------------- + +AR_FOR_TARGET=$(AR) +AS_FOR_TARGET=$(AS) +CC_FOR_TARGET=$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/ + +# If GCC_FOR_TARGET is not overriden on the command line, then this +# variable is passed down to the gcc Makefile, where it is used to +# build libgcc2.a. We define it here so that it can itself be +# overridden on the command line. +GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/ +CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/gcc/xg++ -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ `if test -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags; then $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes; else echo -funconfigured-libstdc++-v3 ; fi` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs +RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs +GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/ +GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) $(GOC) +GDC_FOR_TARGET=$(STAGE_CC_WRAPPER) $(GDC) +GM2_FOR_TARGET=$(STAGE_CC_WRAPPER) $(GM2) +DLLTOOL_FOR_TARGET=$(DLLTOOL) +DSYMUTIL_FOR_TARGET=$(DSYMUTIL) +LD_FOR_TARGET=$(LD) + +LIPO_FOR_TARGET=$(LIPO) +NM_FOR_TARGET=$(NM) +OBJDUMP_FOR_TARGET=$(OBJDUMP) +OBJCOPY_FOR_TARGET=$(OBJCOPY) +OTOOL_FOR_TARGET=$(OTOOL) +RANLIB_FOR_TARGET=$(RANLIB) +READELF_FOR_TARGET=$(READELF) +STRIP_FOR_TARGET=$(STRIP) +WINDRES_FOR_TARGET=$(WINDRES) +WINDMC_FOR_TARGET=$(WINDMC) + +COMPILER_AS_FOR_TARGET=$$r/$(HOST_SUBDIR)/gcc/as +COMPILER_LD_FOR_TARGET=$$r/$(HOST_SUBDIR)/gcc/collect-ld +COMPILER_NM_FOR_TARGET=$$r/$(HOST_SUBDIR)/gcc/nm + +CFLAGS_FOR_TARGET = -g -O2 +CXXFLAGS_FOR_TARGET = -g -O2 + +LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) +LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates +LDFLAGS_FOR_TARGET = +GM2FLAGS_FOR_TARGET = -O2 -g +GOCFLAGS_FOR_TARGET = -O2 -g +GDCFLAGS_FOR_TARGET = -O2 -g + +FLAGS_FOR_TARGET = -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include +SYSROOT_CFLAGS_FOR_TARGET = +DEBUG_PREFIX_CFLAGS_FOR_TARGET = + +XGCC_FLAGS_FOR_TARGET = $(FLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET) + +# ------------------------------------ +# Miscellaneous targets and flag lists +# ------------------------------------ + +# The first rule in the file had better be this one. Don't put any above it. +# This lives here to allow makefile fragments to contain dependencies. +all: + +#### host and target specific makefile fragments come in here. +CXXFLAGS_FOR_TARGET += -D_GNU_SOURCE +### + +# This is the list of directories that may be needed in RPATH_ENVVAR +# so that programs built for the target machine work. +TARGET_LIB_PATH = $(TARGET_LIB_PATH_libstdc++-v3)$(TARGET_LIB_PATH_libsanitizer)$(TARGET_LIB_PATH_libvtv)$(TARGET_LIB_PATH_libssp)$(TARGET_LIB_PATH_libphobos)$(TARGET_LIB_PATH_libgm2)$(TARGET_LIB_PATH_libgomp)$(TARGET_LIB_PATH_libitm)$(TARGET_LIB_PATH_libatomic)$(HOST_LIB_PATH_gcc) + +TARGET_LIB_PATH_libstdc++-v3 = $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs: + +TARGET_LIB_PATH_libsanitizer = $$r/$(TARGET_SUBDIR)/libsanitizer/.libs: + +TARGET_LIB_PATH_libvtv = $$r/$(TARGET_SUBDIR)/libvtv/.libs: + +TARGET_LIB_PATH_libssp = $$r/$(TARGET_SUBDIR)/libssp/.libs: + + + +TARGET_LIB_PATH_libgomp = $$r/$(TARGET_SUBDIR)/libgomp/.libs: + +TARGET_LIB_PATH_libitm = $$r/$(TARGET_SUBDIR)/libitm/.libs: + +TARGET_LIB_PATH_libatomic = $$r/$(TARGET_SUBDIR)/libatomic/.libs: + + + +# This is the list of directories that may be needed in RPATH_ENVVAR +# so that programs built for the host machine work. +HOST_LIB_PATH = $(HOST_LIB_PATH_gmp)$(HOST_LIB_PATH_mpfr)$(HOST_LIB_PATH_mpc)$(HOST_LIB_PATH_isl) + +# Define HOST_LIB_PATH_gcc here, for the sake of TARGET_LIB_PATH, ouch +HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR): + + + + + + + +CXX_FOR_TARGET_FLAG_TO_PASS = \ + "CXX_FOR_TARGET=$(CXX_FOR_TARGET)" +# CXX_FOR_TARGET is tricky to get right for target libs that require a +# functional C++ compiler. When we recurse, if we expand +# CXX_FOR_TARGET before configuring libstdc++-v3, we won't get +# libstdc++ include flags from the script. Instead, we get an +# -funconfigured-* word, so that we'll get errors if this invalid C++ +# command line is used for anything, but also so that we can use the +# word to decide whether or not to pass on this CXX_FOR_TARGET. If we +# don't pass it on, sub-make will use the default definition, that +# re-expands it at the time of use, so we'll get it right when we need +# it. One potential exception is the expansion of CXX_FOR_TARGET +# passed down as part of CXX within TARGET_FLAGS, but this wouldn't +# really work, for C++ host programs can't depend on the current-stage +# C++ target library. +CXX_FOR_TARGET_FLAG_TO_PASS = \ + $(shell if echo "$(CXX_FOR_TARGET)" | grep " -funconfigured-" > /dev/null; then :; else echo '"CXX_FOR_TARGET=$(CXX_FOR_TARGET)"'; fi) + +# Flags to pass down to all sub-makes. STAGE*FLAGS, +# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them +# overrideable (for a bootstrap build stage1 also builds gcc.info). +BASE_FLAGS_TO_PASS = \ + "DESTDIR=$(DESTDIR)" \ + "RPATH_ENVVAR=$(RPATH_ENVVAR)" \ + "TARGET_SUBDIR=$(TARGET_SUBDIR)" \ + "bindir=$(bindir)" \ + "datadir=$(datadir)" \ + "exec_prefix=$(exec_prefix)" \ + "includedir=$(includedir)" \ + "datarootdir=$(datarootdir)" \ + "docdir=$(docdir)" \ + "infodir=$(infodir)" \ + "pdfdir=$(pdfdir)" \ + "htmldir=$(htmldir)" \ + "libdir=$(libdir)" \ + "libexecdir=$(libexecdir)" \ + "lispdir=$(lispdir)" \ + "localstatedir=$(localstatedir)" \ + "mandir=$(mandir)" \ + "oldincludedir=$(oldincludedir)" \ + "prefix=$(prefix)" \ + "sbindir=$(sbindir)" \ + "sharedstatedir=$(sharedstatedir)" \ + "sysconfdir=$(sysconfdir)" \ + "tooldir=$(tooldir)" \ + "build_tooldir=$(build_tooldir)" \ + "target_alias=$(target_alias)" \ + "AWK=$(AWK)" \ + "BISON=$(BISON)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \ + "EXPECT=$(EXPECT)" \ + "FLEX=$(FLEX)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LDFLAGS_FOR_BUILD=$(LDFLAGS_FOR_BUILD)" \ + "LEX=$(LEX)" \ + "M4=$(M4)" \ + "MAKE=$(MAKE)" \ + "RUNTEST=$(RUNTEST)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "SED=$(SED)" \ + "SHELL=$(SHELL)" \ + "YACC=$(YACC)" \ + "`echo 'ADAFLAGS=$(ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \ + "ADA_CFLAGS=$(ADA_CFLAGS)" \ + "AR_FLAGS=$(AR_FLAGS)" \ + "`echo 'BOOT_ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \ + "BOOT_CFLAGS=$(BOOT_CFLAGS)" \ + "BOOT_LDFLAGS=$(BOOT_LDFLAGS)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "LDFLAGS=$(LDFLAGS)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "LIBCXXFLAGS=$(LIBCXXFLAGS)" \ + "STAGE1_CHECKING=$(STAGE1_CHECKING)" \ + "STAGE1_LANGUAGES=$(STAGE1_LANGUAGES)" \ + "GNATBIND=$(GNATBIND)" \ + "GNATMAKE=$(GNATMAKE)" \ + "GDC=$(GDC)" \ + "GDCFLAGS=$(GDCFLAGS)" \ + "GUILE=$(GUILE)" \ + "AR_FOR_TARGET=$(AR_FOR_TARGET)" \ + "AS_FOR_TARGET=$(AS_FOR_TARGET)" \ + "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "CPPFLAGS_FOR_TARGET=$(CPPFLAGS_FOR_TARGET)" \ + "CXXFLAGS_FOR_TARGET=$(CXXFLAGS_FOR_TARGET)" \ + "DLLTOOL_FOR_TARGET=$(DLLTOOL_FOR_TARGET)" \ + "DSYMUTIL_FOR_TARGET=$(DSYMUTIL_FOR_TARGET)" \ + "FLAGS_FOR_TARGET=$(FLAGS_FOR_TARGET)" \ + "GFORTRAN_FOR_TARGET=$(GFORTRAN_FOR_TARGET)" \ + "GOC_FOR_TARGET=$(GOC_FOR_TARGET)" \ + "GOCFLAGS_FOR_TARGET=$(GOCFLAGS_FOR_TARGET)" \ + "GDC_FOR_TARGET=$(GDC_FOR_TARGET)" \ + "GDCFLAGS_FOR_TARGET=$(GDCFLAGS_FOR_TARGET)" \ + "GM2_FOR_TARGET=$(GM2_FOR_TARGET)" \ + "GM2FLAGS_FOR_TARGET=$(GM2FLAGS_FOR_TARGET)" \ + "LD_FOR_TARGET=$(LD_FOR_TARGET)" \ + "LIPO_FOR_TARGET=$(LIPO_FOR_TARGET)" \ + "LDFLAGS_FOR_TARGET=$(LDFLAGS_FOR_TARGET)" \ + "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ + "LIBCXXFLAGS_FOR_TARGET=$(LIBCXXFLAGS_FOR_TARGET)" \ + "NM_FOR_TARGET=$(NM_FOR_TARGET)" \ + "OBJDUMP_FOR_TARGET=$(OBJDUMP_FOR_TARGET)" \ + "OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET)" \ + "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \ + "READELF_FOR_TARGET=$(READELF_FOR_TARGET)" \ + "STRIP_FOR_TARGET=$(STRIP_FOR_TARGET)" \ + "WINDRES_FOR_TARGET=$(WINDRES_FOR_TARGET)" \ + "WINDMC_FOR_TARGET=$(WINDMC_FOR_TARGET)" \ + "BUILD_CONFIG=$(BUILD_CONFIG)" \ + "`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \ + "LEAN=$(LEAN)" \ + "STAGE1_CFLAGS=$(STAGE1_CFLAGS)" \ + "STAGE1_CXXFLAGS=$(STAGE1_CXXFLAGS)" \ + "STAGE1_GENERATOR_CFLAGS=$(STAGE1_GENERATOR_CFLAGS)" \ + "STAGE1_TFLAGS=$(STAGE1_TFLAGS)" \ + "STAGE2_CFLAGS=$(STAGE2_CFLAGS)" \ + "STAGE2_CXXFLAGS=$(STAGE2_CXXFLAGS)" \ + "STAGE2_GENERATOR_CFLAGS=$(STAGE2_GENERATOR_CFLAGS)" \ + "STAGE2_TFLAGS=$(STAGE2_TFLAGS)" \ + "STAGE3_CFLAGS=$(STAGE3_CFLAGS)" \ + "STAGE3_CXXFLAGS=$(STAGE3_CXXFLAGS)" \ + "STAGE3_GENERATOR_CFLAGS=$(STAGE3_GENERATOR_CFLAGS)" \ + "STAGE3_TFLAGS=$(STAGE3_TFLAGS)" \ + "STAGE4_CFLAGS=$(STAGE4_CFLAGS)" \ + "STAGE4_CXXFLAGS=$(STAGE4_CXXFLAGS)" \ + "STAGE4_GENERATOR_CFLAGS=$(STAGE4_GENERATOR_CFLAGS)" \ + "STAGE4_TFLAGS=$(STAGE4_TFLAGS)" \ + "STAGEprofile_CFLAGS=$(STAGEprofile_CFLAGS)" \ + "STAGEprofile_CXXFLAGS=$(STAGEprofile_CXXFLAGS)" \ + "STAGEprofile_GENERATOR_CFLAGS=$(STAGEprofile_GENERATOR_CFLAGS)" \ + "STAGEprofile_TFLAGS=$(STAGEprofile_TFLAGS)" \ + "STAGEtrain_CFLAGS=$(STAGEtrain_CFLAGS)" \ + "STAGEtrain_CXXFLAGS=$(STAGEtrain_CXXFLAGS)" \ + "STAGEtrain_GENERATOR_CFLAGS=$(STAGEtrain_GENERATOR_CFLAGS)" \ + "STAGEtrain_TFLAGS=$(STAGEtrain_TFLAGS)" \ + "STAGEfeedback_CFLAGS=$(STAGEfeedback_CFLAGS)" \ + "STAGEfeedback_CXXFLAGS=$(STAGEfeedback_CXXFLAGS)" \ + "STAGEfeedback_GENERATOR_CFLAGS=$(STAGEfeedback_GENERATOR_CFLAGS)" \ + "STAGEfeedback_TFLAGS=$(STAGEfeedback_TFLAGS)" \ + "STAGEautoprofile_CFLAGS=$(STAGEautoprofile_CFLAGS)" \ + "STAGEautoprofile_CXXFLAGS=$(STAGEautoprofile_CXXFLAGS)" \ + "STAGEautoprofile_GENERATOR_CFLAGS=$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + "STAGEautoprofile_TFLAGS=$(STAGEautoprofile_TFLAGS)" \ + "STAGEautofeedback_CFLAGS=$(STAGEautofeedback_CFLAGS)" \ + "STAGEautofeedback_CXXFLAGS=$(STAGEautofeedback_CXXFLAGS)" \ + "STAGEautofeedback_GENERATOR_CFLAGS=$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + "STAGEautofeedback_TFLAGS=$(STAGEautofeedback_TFLAGS)" \ + $(CXX_FOR_TARGET_FLAG_TO_PASS) \ + "TFLAGS=$(TFLAGS)" \ + "CONFIG_SHELL=$(SHELL)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + $(if $(LSAN_OPTIONS),"LSAN_OPTIONS=$(LSAN_OPTIONS)") + +# We leave this in just in case, but it is not needed anymore. +RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) + +# Flags to pass down to most sub-makes, in which we're building with +# the host environment. +EXTRA_HOST_FLAGS = \ + 'AR=$(AR)' \ + 'AS=$(AS)' \ + 'CC=$(CC)' \ + 'CXX=$(CXX)' \ + 'DLLTOOL=$(DLLTOOL)' \ + 'DSYMUTIL=$(DSYMUTIL)' \ + 'GFORTRAN=$(GFORTRAN)' \ + 'GOC=$(GOC)' \ + 'GDC=$(GDC)' \ + 'GM2=$(GM2)' \ + 'LD=$(LD)' \ + 'LIPO=$(LIPO)' \ + 'NM=$(NM)' \ + 'OBJDUMP=$(OBJDUMP)' \ + 'OTOOL=$(OTOOL)' \ + 'RANLIB=$(RANLIB)' \ + 'READELF=$(READELF)' \ + 'STRIP=$(STRIP)' \ + 'WINDRES=$(WINDRES)' \ + 'WINDMC=$(WINDMC)' \ + 'CREATE_GCOV=$(CREATE_GCOV)' \ + 'PROFILE_MERGER=$(PROFILE_MERGER)' + +FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) + +# Flags to pass to stage1 or when not bootstrapping. + +STAGE1_FLAGS_TO_PASS = \ + LDFLAGS="$${LDFLAGS}" \ + HOST_LIBS="$${HOST_LIBS}" + +# Flags to pass to stage2 and later makes. + +POSTSTAGE1_FLAGS_TO_PASS = \ + CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \ + CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \ + GDC="$${GDC}" GDC_FOR_BUILD="$${GDC_FOR_BUILD}" \ + GM2="$${GM2}" GM2_FOR_BUILD="$${GM2_FOR_BUILD}" \ + GNATBIND="$${GNATBIND}" \ + LDFLAGS="$${LDFLAGS}" \ + HOST_LIBS="$${HOST_LIBS}" \ + $(LTO_FLAGS_TO_PASS) \ + "`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" + +EXTRA_HOST_EXPORTS = if [ $(current_stage) != stage1 ]; then \ + $(POSTSTAGE1_HOST_EXPORTS) \ + fi; + +EXTRA_BOOTSTRAP_FLAGS = CC="$$CC" CXX="$$CXX" LDFLAGS="$$LDFLAGS" + +# Flags to pass down to makes which are built with the target environment. +# The double $ decreases the length of the command line; those variables +# are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them. The +# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty, +# so we expand them here. +EXTRA_TARGET_FLAGS = \ + 'AR=$$(AR_FOR_TARGET)' \ + 'AS=$(COMPILER_AS_FOR_TARGET)' \ + 'CC=$$(CC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'CFLAGS=$$(CFLAGS_FOR_TARGET)' \ + 'CXX=$$(CXX_FOR_TARGET) -B$$r/$$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \ + -B$$r/$$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs \ + $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \ + 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \ + 'DSYMUTIL=$$(DSYMUTIL_FOR_TARGET)' \ + 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)' \ + 'GDC=$$(GDC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GDCFLAGS=$$(GDCFLAGS_FOR_TARGET)' \ + 'GM2=$$(GM2_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GM2FLAGS=$$(GM2FLAGS_FOR_TARGET)' \ + 'LD=$(COMPILER_LD_FOR_TARGET)' \ + 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \ + 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \ + 'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \ + 'NM=$(COMPILER_NM_FOR_TARGET)' \ + 'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \ + 'OBJCOPY=$$(OBJCOPY_FOR_TARGET)' \ + 'RANLIB=$$(RANLIB_FOR_TARGET)' \ + 'READELF=$$(READELF_FOR_TARGET)' \ + 'WINDRES=$$(WINDRES_FOR_TARGET)' \ + 'WINDMC=$$(WINDMC_FOR_TARGET)' \ + 'XGCC_FLAGS_FOR_TARGET=$(XGCC_FLAGS_FOR_TARGET)' \ + 'STAGE1_LDFLAGS=$$(POSTSTAGE1_LDFLAGS)' \ + 'STAGE1_LIBS=$$(POSTSTAGE1_LIBS)' \ + "TFLAGS=$$TFLAGS" + +TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) + +# Flags to pass down to gcc. gcc builds a library, libgcc.a, so it +# unfortunately needs the native compiler and the target ar and +# ranlib. +# If any variables are added here, they must be added to do-*, below. +# The BUILD_* variables are a special case, which are used for the gcc +# cross-building scheme. +EXTRA_GCC_FLAGS = \ + "GCC_FOR_TARGET=$(GCC_FOR_TARGET) $$TFLAGS" \ + "GM2_FOR_TARGET=$(GM2_FOR_TARGET) $$TFLAGS" \ + "`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \ + "`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" + +GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS) + +BUILD_CONFIG = bootstrap-debug +ifneq ($(BUILD_CONFIG),) +include $(foreach CONFIG, $(BUILD_CONFIG), $(srcdir)/config/$(CONFIG).mk) +endif + +.PHONY: configure-host +configure-host: \ + maybe-configure-bfd \ + maybe-configure-opcodes \ + maybe-configure-binutils \ + maybe-configure-bison \ + maybe-configure-cgen \ + maybe-configure-dejagnu \ + maybe-configure-etc \ + maybe-configure-fastjar \ + maybe-configure-fixincludes \ + maybe-configure-flex \ + maybe-configure-gas \ + maybe-configure-gcc \ + maybe-configure-gmp \ + maybe-configure-mpfr \ + maybe-configure-mpc \ + maybe-configure-isl \ + maybe-configure-gold \ + maybe-configure-gprof \ + maybe-configure-gprofng \ + maybe-configure-gettext \ + maybe-configure-tcl \ + maybe-configure-itcl \ + maybe-configure-ld \ + maybe-configure-libbacktrace \ + maybe-configure-libcpp \ + maybe-configure-libcody \ + maybe-configure-libdecnumber \ + maybe-configure-libgui \ + maybe-configure-libiberty \ + maybe-configure-libiberty-linker-plugin \ + maybe-configure-libiconv \ + maybe-configure-m4 \ + maybe-configure-readline \ + maybe-configure-sid \ + maybe-configure-sim \ + maybe-configure-texinfo \ + maybe-configure-zlib \ + maybe-configure-gnulib \ + maybe-configure-gdbsupport \ + maybe-configure-gdbserver \ + maybe-configure-gdb \ + maybe-configure-expect \ + maybe-configure-guile \ + maybe-configure-tk \ + maybe-configure-libtermcap \ + maybe-configure-utils \ + maybe-configure-c++tools \ + maybe-configure-gnattools \ + maybe-configure-lto-plugin \ + maybe-configure-libcc1 \ + maybe-configure-gotools \ + maybe-configure-libctf \ + maybe-configure-libsframe \ + maybe-configure-libgrust +.PHONY: configure-target +configure-target: \ + maybe-configure-target-libstdc++-v3 \ + maybe-configure-target-libsanitizer \ + maybe-configure-target-libvtv \ + maybe-configure-target-libssp \ + maybe-configure-target-newlib \ + maybe-configure-target-libgcc \ + maybe-configure-target-libbacktrace \ + maybe-configure-target-libquadmath \ + maybe-configure-target-libgfortran \ + maybe-configure-target-libobjc \ + maybe-configure-target-libgo \ + maybe-configure-target-libphobos \ + maybe-configure-target-libtermcap \ + maybe-configure-target-winsup \ + maybe-configure-target-libgloss \ + maybe-configure-target-libffi \ + maybe-configure-target-zlib \ + maybe-configure-target-rda \ + maybe-configure-target-libada \ + maybe-configure-target-libgm2 \ + maybe-configure-target-libgomp \ + maybe-configure-target-libitm \ + maybe-configure-target-libatomic \ + maybe-configure-target-libgrust + +# The target built for a native non-bootstrap build. +.PHONY: all + +# --enable-pgo-build enables the PGO build. +# 1. First build with -fprofile-generate. +# 2. Use "make maybe-check-*" to generate profiling data. +# 3. Use "make clean" to remove the previous build. +# 4. Rebuild with -fprofile-use. +all: + [ -f stage_final ] || echo stage3 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble + @: $(MAKE); $(unstage) + +@r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if [ -f stage_last ]; then \ + TFLAGS="$(STAGE$(shell test ! -f stage_last || sed s,^stage,, stage_last)_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \ + else \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) \ + $(PGO_BUILD_GEN_FLAGS_TO_PASS) all-host all-target \ + ; \ + fi \ + && : + +.PHONY: all-build + +all-build: maybe-all-build-libiberty +all-build: maybe-all-build-bison +all-build: maybe-all-build-flex +all-build: maybe-all-build-m4 +all-build: maybe-all-build-texinfo +all-build: maybe-all-build-fixincludes +all-build: maybe-all-build-libcpp + +.PHONY: all-host + +all-host: maybe-all-bison +all-host: maybe-all-cgen +all-host: maybe-all-dejagnu +all-host: maybe-all-etc +all-host: maybe-all-fastjar +all-host: maybe-all-fixincludes +all-host: maybe-all-flex +all-host: maybe-all-gprof +all-host: maybe-all-gprofng +all-host: maybe-all-tcl +all-host: maybe-all-itcl +all-host: maybe-all-libgui +all-host: maybe-all-m4 +all-host: maybe-all-readline +all-host: maybe-all-sid +all-host: maybe-all-sim +all-host: maybe-all-texinfo +all-host: maybe-all-gnulib +all-host: maybe-all-gdbsupport +all-host: maybe-all-gdbserver +all-host: maybe-all-gdb +all-host: maybe-all-expect +all-host: maybe-all-guile +all-host: maybe-all-tk +all-host: maybe-all-libtermcap +all-host: maybe-all-utils +all-host: maybe-all-c++tools +all-host: maybe-all-gnattools +all-host: maybe-all-libcc1 +all-host: maybe-all-gotools + +.PHONY: all-target + +all-target: maybe-all-target-libsanitizer +all-target: maybe-all-target-libvtv +all-target: maybe-all-target-libssp +all-target: maybe-all-target-newlib +all-target: maybe-all-target-libbacktrace +all-target: maybe-all-target-libquadmath +all-target: maybe-all-target-libgfortran +all-target: maybe-all-target-libobjc +all-target: maybe-all-target-libgo +all-target: maybe-all-target-libtermcap +all-target: maybe-all-target-winsup +all-target: maybe-all-target-libgloss +all-target: maybe-all-target-libffi +all-target: maybe-all-target-rda +all-target: maybe-all-target-libada +all-target: maybe-all-target-libgm2 +all-target: maybe-all-target-libitm +all-target: maybe-all-target-libatomic +all-target: maybe-all-target-libgrust + +# Do a target for all the subdirectories. A ``make do-X'' will do a +# ``make X'' in all subdirectories (because, in general, there is a +# dependency (below) of X upon do-X, a ``make X'' will also do this, +# but it may do additional work as well). + +.PHONY: do-info +do-info: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) info-host \ + info-target + + +.PHONY: info-host + +info-host: maybe-info-bfd +info-host: maybe-info-opcodes +info-host: maybe-info-binutils +info-host: maybe-info-bison +info-host: maybe-info-cgen +info-host: maybe-info-dejagnu +info-host: maybe-info-etc +info-host: maybe-info-fastjar +info-host: maybe-info-fixincludes +info-host: maybe-info-flex +info-host: maybe-info-gas +info-host: maybe-info-gcc +info-host: maybe-info-gmp +info-host: maybe-info-mpfr +info-host: maybe-info-mpc +info-host: maybe-info-isl +info-host: maybe-info-gold +info-host: maybe-info-gprof +info-host: maybe-info-gprofng +info-host: maybe-info-gettext +info-host: maybe-info-tcl +info-host: maybe-info-itcl +info-host: maybe-info-ld +info-host: maybe-info-libbacktrace +info-host: maybe-info-libcpp +info-host: maybe-info-libcody +info-host: maybe-info-libdecnumber +info-host: maybe-info-libgui +info-host: maybe-info-libiberty +info-host: maybe-info-libiberty-linker-plugin +info-host: maybe-info-libiconv +info-host: maybe-info-m4 +info-host: maybe-info-readline +info-host: maybe-info-sid +info-host: maybe-info-sim +info-host: maybe-info-texinfo +info-host: maybe-info-zlib +info-host: maybe-info-gnulib +info-host: maybe-info-gdbsupport +info-host: maybe-info-gdbserver +info-host: maybe-info-gdb +info-host: maybe-info-expect +info-host: maybe-info-guile +info-host: maybe-info-tk +info-host: maybe-info-libtermcap +info-host: maybe-info-utils +info-host: maybe-info-c++tools +info-host: maybe-info-gnattools +info-host: maybe-info-lto-plugin +info-host: maybe-info-libcc1 +info-host: maybe-info-gotools +info-host: maybe-info-libctf +info-host: maybe-info-libsframe +info-host: maybe-info-libgrust + +.PHONY: info-target + +info-target: maybe-info-target-libstdc++-v3 +info-target: maybe-info-target-libsanitizer +info-target: maybe-info-target-libvtv +info-target: maybe-info-target-libssp +info-target: maybe-info-target-newlib +info-target: maybe-info-target-libgcc +info-target: maybe-info-target-libbacktrace +info-target: maybe-info-target-libquadmath +info-target: maybe-info-target-libgfortran +info-target: maybe-info-target-libobjc +info-target: maybe-info-target-libgo +info-target: maybe-info-target-libphobos +info-target: maybe-info-target-libtermcap +info-target: maybe-info-target-winsup +info-target: maybe-info-target-libgloss +info-target: maybe-info-target-libffi +info-target: maybe-info-target-zlib +info-target: maybe-info-target-rda +info-target: maybe-info-target-libada +info-target: maybe-info-target-libgm2 +info-target: maybe-info-target-libgomp +info-target: maybe-info-target-libitm +info-target: maybe-info-target-libatomic +info-target: maybe-info-target-libgrust + +.PHONY: do-dvi +do-dvi: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) dvi-host \ + dvi-target + + +.PHONY: dvi-host + +dvi-host: maybe-dvi-bfd +dvi-host: maybe-dvi-opcodes +dvi-host: maybe-dvi-binutils +dvi-host: maybe-dvi-bison +dvi-host: maybe-dvi-cgen +dvi-host: maybe-dvi-dejagnu +dvi-host: maybe-dvi-etc +dvi-host: maybe-dvi-fastjar +dvi-host: maybe-dvi-fixincludes +dvi-host: maybe-dvi-flex +dvi-host: maybe-dvi-gas +dvi-host: maybe-dvi-gcc +dvi-host: maybe-dvi-gmp +dvi-host: maybe-dvi-mpfr +dvi-host: maybe-dvi-mpc +dvi-host: maybe-dvi-isl +dvi-host: maybe-dvi-gold +dvi-host: maybe-dvi-gprof +dvi-host: maybe-dvi-gprofng +dvi-host: maybe-dvi-gettext +dvi-host: maybe-dvi-tcl +dvi-host: maybe-dvi-itcl +dvi-host: maybe-dvi-ld +dvi-host: maybe-dvi-libbacktrace +dvi-host: maybe-dvi-libcpp +dvi-host: maybe-dvi-libcody +dvi-host: maybe-dvi-libdecnumber +dvi-host: maybe-dvi-libgui +dvi-host: maybe-dvi-libiberty +dvi-host: maybe-dvi-libiberty-linker-plugin +dvi-host: maybe-dvi-libiconv +dvi-host: maybe-dvi-m4 +dvi-host: maybe-dvi-readline +dvi-host: maybe-dvi-sid +dvi-host: maybe-dvi-sim +dvi-host: maybe-dvi-texinfo +dvi-host: maybe-dvi-zlib +dvi-host: maybe-dvi-gnulib +dvi-host: maybe-dvi-gdbsupport +dvi-host: maybe-dvi-gdbserver +dvi-host: maybe-dvi-gdb +dvi-host: maybe-dvi-expect +dvi-host: maybe-dvi-guile +dvi-host: maybe-dvi-tk +dvi-host: maybe-dvi-libtermcap +dvi-host: maybe-dvi-utils +dvi-host: maybe-dvi-c++tools +dvi-host: maybe-dvi-gnattools +dvi-host: maybe-dvi-lto-plugin +dvi-host: maybe-dvi-libcc1 +dvi-host: maybe-dvi-gotools +dvi-host: maybe-dvi-libctf +dvi-host: maybe-dvi-libsframe +dvi-host: maybe-dvi-libgrust + +.PHONY: dvi-target + +dvi-target: maybe-dvi-target-libstdc++-v3 +dvi-target: maybe-dvi-target-libsanitizer +dvi-target: maybe-dvi-target-libvtv +dvi-target: maybe-dvi-target-libssp +dvi-target: maybe-dvi-target-newlib +dvi-target: maybe-dvi-target-libgcc +dvi-target: maybe-dvi-target-libbacktrace +dvi-target: maybe-dvi-target-libquadmath +dvi-target: maybe-dvi-target-libgfortran +dvi-target: maybe-dvi-target-libobjc +dvi-target: maybe-dvi-target-libgo +dvi-target: maybe-dvi-target-libphobos +dvi-target: maybe-dvi-target-libtermcap +dvi-target: maybe-dvi-target-winsup +dvi-target: maybe-dvi-target-libgloss +dvi-target: maybe-dvi-target-libffi +dvi-target: maybe-dvi-target-zlib +dvi-target: maybe-dvi-target-rda +dvi-target: maybe-dvi-target-libada +dvi-target: maybe-dvi-target-libgm2 +dvi-target: maybe-dvi-target-libgomp +dvi-target: maybe-dvi-target-libitm +dvi-target: maybe-dvi-target-libatomic +dvi-target: maybe-dvi-target-libgrust + +.PHONY: do-pdf +do-pdf: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) pdf-host \ + pdf-target + + +.PHONY: pdf-host + +pdf-host: maybe-pdf-bfd +pdf-host: maybe-pdf-opcodes +pdf-host: maybe-pdf-binutils +pdf-host: maybe-pdf-bison +pdf-host: maybe-pdf-cgen +pdf-host: maybe-pdf-dejagnu +pdf-host: maybe-pdf-etc +pdf-host: maybe-pdf-fastjar +pdf-host: maybe-pdf-fixincludes +pdf-host: maybe-pdf-flex +pdf-host: maybe-pdf-gas +pdf-host: maybe-pdf-gcc +pdf-host: maybe-pdf-gmp +pdf-host: maybe-pdf-mpfr +pdf-host: maybe-pdf-mpc +pdf-host: maybe-pdf-isl +pdf-host: maybe-pdf-gold +pdf-host: maybe-pdf-gprof +pdf-host: maybe-pdf-gprofng +pdf-host: maybe-pdf-gettext +pdf-host: maybe-pdf-tcl +pdf-host: maybe-pdf-itcl +pdf-host: maybe-pdf-ld +pdf-host: maybe-pdf-libbacktrace +pdf-host: maybe-pdf-libcpp +pdf-host: maybe-pdf-libcody +pdf-host: maybe-pdf-libdecnumber +pdf-host: maybe-pdf-libgui +pdf-host: maybe-pdf-libiberty +pdf-host: maybe-pdf-libiberty-linker-plugin +pdf-host: maybe-pdf-libiconv +pdf-host: maybe-pdf-m4 +pdf-host: maybe-pdf-readline +pdf-host: maybe-pdf-sid +pdf-host: maybe-pdf-sim +pdf-host: maybe-pdf-texinfo +pdf-host: maybe-pdf-zlib +pdf-host: maybe-pdf-gnulib +pdf-host: maybe-pdf-gdbsupport +pdf-host: maybe-pdf-gdbserver +pdf-host: maybe-pdf-gdb +pdf-host: maybe-pdf-expect +pdf-host: maybe-pdf-guile +pdf-host: maybe-pdf-tk +pdf-host: maybe-pdf-libtermcap +pdf-host: maybe-pdf-utils +pdf-host: maybe-pdf-c++tools +pdf-host: maybe-pdf-gnattools +pdf-host: maybe-pdf-lto-plugin +pdf-host: maybe-pdf-libcc1 +pdf-host: maybe-pdf-gotools +pdf-host: maybe-pdf-libctf +pdf-host: maybe-pdf-libsframe +pdf-host: maybe-pdf-libgrust + +.PHONY: pdf-target + +pdf-target: maybe-pdf-target-libstdc++-v3 +pdf-target: maybe-pdf-target-libsanitizer +pdf-target: maybe-pdf-target-libvtv +pdf-target: maybe-pdf-target-libssp +pdf-target: maybe-pdf-target-newlib +pdf-target: maybe-pdf-target-libgcc +pdf-target: maybe-pdf-target-libbacktrace +pdf-target: maybe-pdf-target-libquadmath +pdf-target: maybe-pdf-target-libgfortran +pdf-target: maybe-pdf-target-libobjc +pdf-target: maybe-pdf-target-libgo +pdf-target: maybe-pdf-target-libphobos +pdf-target: maybe-pdf-target-libtermcap +pdf-target: maybe-pdf-target-winsup +pdf-target: maybe-pdf-target-libgloss +pdf-target: maybe-pdf-target-libffi +pdf-target: maybe-pdf-target-zlib +pdf-target: maybe-pdf-target-rda +pdf-target: maybe-pdf-target-libada +pdf-target: maybe-pdf-target-libgm2 +pdf-target: maybe-pdf-target-libgomp +pdf-target: maybe-pdf-target-libitm +pdf-target: maybe-pdf-target-libatomic +pdf-target: maybe-pdf-target-libgrust + +.PHONY: do-html +do-html: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) html-host \ + html-target + + +.PHONY: html-host + +html-host: maybe-html-bfd +html-host: maybe-html-opcodes +html-host: maybe-html-binutils +html-host: maybe-html-bison +html-host: maybe-html-cgen +html-host: maybe-html-dejagnu +html-host: maybe-html-etc +html-host: maybe-html-fastjar +html-host: maybe-html-fixincludes +html-host: maybe-html-flex +html-host: maybe-html-gas +html-host: maybe-html-gcc +html-host: maybe-html-gmp +html-host: maybe-html-mpfr +html-host: maybe-html-mpc +html-host: maybe-html-isl +html-host: maybe-html-gold +html-host: maybe-html-gprof +html-host: maybe-html-gprofng +html-host: maybe-html-gettext +html-host: maybe-html-tcl +html-host: maybe-html-itcl +html-host: maybe-html-ld +html-host: maybe-html-libbacktrace +html-host: maybe-html-libcpp +html-host: maybe-html-libcody +html-host: maybe-html-libdecnumber +html-host: maybe-html-libgui +html-host: maybe-html-libiberty +html-host: maybe-html-libiberty-linker-plugin +html-host: maybe-html-libiconv +html-host: maybe-html-m4 +html-host: maybe-html-readline +html-host: maybe-html-sid +html-host: maybe-html-sim +html-host: maybe-html-texinfo +html-host: maybe-html-zlib +html-host: maybe-html-gnulib +html-host: maybe-html-gdbsupport +html-host: maybe-html-gdbserver +html-host: maybe-html-gdb +html-host: maybe-html-expect +html-host: maybe-html-guile +html-host: maybe-html-tk +html-host: maybe-html-libtermcap +html-host: maybe-html-utils +html-host: maybe-html-c++tools +html-host: maybe-html-gnattools +html-host: maybe-html-lto-plugin +html-host: maybe-html-libcc1 +html-host: maybe-html-gotools +html-host: maybe-html-libctf +html-host: maybe-html-libsframe +html-host: maybe-html-libgrust + +.PHONY: html-target + +html-target: maybe-html-target-libstdc++-v3 +html-target: maybe-html-target-libsanitizer +html-target: maybe-html-target-libvtv +html-target: maybe-html-target-libssp +html-target: maybe-html-target-newlib +html-target: maybe-html-target-libgcc +html-target: maybe-html-target-libbacktrace +html-target: maybe-html-target-libquadmath +html-target: maybe-html-target-libgfortran +html-target: maybe-html-target-libobjc +html-target: maybe-html-target-libgo +html-target: maybe-html-target-libphobos +html-target: maybe-html-target-libtermcap +html-target: maybe-html-target-winsup +html-target: maybe-html-target-libgloss +html-target: maybe-html-target-libffi +html-target: maybe-html-target-zlib +html-target: maybe-html-target-rda +html-target: maybe-html-target-libada +html-target: maybe-html-target-libgm2 +html-target: maybe-html-target-libgomp +html-target: maybe-html-target-libitm +html-target: maybe-html-target-libatomic +html-target: maybe-html-target-libgrust + +.PHONY: do-TAGS +do-TAGS: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) TAGS-host \ + TAGS-target + + +.PHONY: TAGS-host + +TAGS-host: maybe-TAGS-bfd +TAGS-host: maybe-TAGS-opcodes +TAGS-host: maybe-TAGS-binutils +TAGS-host: maybe-TAGS-bison +TAGS-host: maybe-TAGS-cgen +TAGS-host: maybe-TAGS-dejagnu +TAGS-host: maybe-TAGS-etc +TAGS-host: maybe-TAGS-fastjar +TAGS-host: maybe-TAGS-fixincludes +TAGS-host: maybe-TAGS-flex +TAGS-host: maybe-TAGS-gas +TAGS-host: maybe-TAGS-gcc +TAGS-host: maybe-TAGS-gmp +TAGS-host: maybe-TAGS-mpfr +TAGS-host: maybe-TAGS-mpc +TAGS-host: maybe-TAGS-isl +TAGS-host: maybe-TAGS-gold +TAGS-host: maybe-TAGS-gprof +TAGS-host: maybe-TAGS-gprofng +TAGS-host: maybe-TAGS-gettext +TAGS-host: maybe-TAGS-tcl +TAGS-host: maybe-TAGS-itcl +TAGS-host: maybe-TAGS-ld +TAGS-host: maybe-TAGS-libbacktrace +TAGS-host: maybe-TAGS-libcpp +TAGS-host: maybe-TAGS-libcody +TAGS-host: maybe-TAGS-libdecnumber +TAGS-host: maybe-TAGS-libgui +TAGS-host: maybe-TAGS-libiberty +TAGS-host: maybe-TAGS-libiberty-linker-plugin +TAGS-host: maybe-TAGS-libiconv +TAGS-host: maybe-TAGS-m4 +TAGS-host: maybe-TAGS-readline +TAGS-host: maybe-TAGS-sid +TAGS-host: maybe-TAGS-sim +TAGS-host: maybe-TAGS-texinfo +TAGS-host: maybe-TAGS-zlib +TAGS-host: maybe-TAGS-gnulib +TAGS-host: maybe-TAGS-gdbsupport +TAGS-host: maybe-TAGS-gdbserver +TAGS-host: maybe-TAGS-gdb +TAGS-host: maybe-TAGS-expect +TAGS-host: maybe-TAGS-guile +TAGS-host: maybe-TAGS-tk +TAGS-host: maybe-TAGS-libtermcap +TAGS-host: maybe-TAGS-utils +TAGS-host: maybe-TAGS-c++tools +TAGS-host: maybe-TAGS-gnattools +TAGS-host: maybe-TAGS-lto-plugin +TAGS-host: maybe-TAGS-libcc1 +TAGS-host: maybe-TAGS-gotools +TAGS-host: maybe-TAGS-libctf +TAGS-host: maybe-TAGS-libsframe +TAGS-host: maybe-TAGS-libgrust + +.PHONY: TAGS-target + +TAGS-target: maybe-TAGS-target-libstdc++-v3 +TAGS-target: maybe-TAGS-target-libsanitizer +TAGS-target: maybe-TAGS-target-libvtv +TAGS-target: maybe-TAGS-target-libssp +TAGS-target: maybe-TAGS-target-newlib +TAGS-target: maybe-TAGS-target-libgcc +TAGS-target: maybe-TAGS-target-libbacktrace +TAGS-target: maybe-TAGS-target-libquadmath +TAGS-target: maybe-TAGS-target-libgfortran +TAGS-target: maybe-TAGS-target-libobjc +TAGS-target: maybe-TAGS-target-libgo +TAGS-target: maybe-TAGS-target-libphobos +TAGS-target: maybe-TAGS-target-libtermcap +TAGS-target: maybe-TAGS-target-winsup +TAGS-target: maybe-TAGS-target-libgloss +TAGS-target: maybe-TAGS-target-libffi +TAGS-target: maybe-TAGS-target-zlib +TAGS-target: maybe-TAGS-target-rda +TAGS-target: maybe-TAGS-target-libada +TAGS-target: maybe-TAGS-target-libgm2 +TAGS-target: maybe-TAGS-target-libgomp +TAGS-target: maybe-TAGS-target-libitm +TAGS-target: maybe-TAGS-target-libatomic +TAGS-target: maybe-TAGS-target-libgrust + +.PHONY: do-install-info +do-install-info: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) install-info-host \ + install-info-target + + +.PHONY: install-info-host + +install-info-host: maybe-install-info-bfd +install-info-host: maybe-install-info-opcodes +install-info-host: maybe-install-info-binutils +install-info-host: maybe-install-info-bison +install-info-host: maybe-install-info-cgen +install-info-host: maybe-install-info-dejagnu +install-info-host: maybe-install-info-etc +install-info-host: maybe-install-info-fastjar +install-info-host: maybe-install-info-fixincludes +install-info-host: maybe-install-info-flex +install-info-host: maybe-install-info-gas +install-info-host: maybe-install-info-gcc +install-info-host: maybe-install-info-gmp +install-info-host: maybe-install-info-mpfr +install-info-host: maybe-install-info-mpc +install-info-host: maybe-install-info-isl +install-info-host: maybe-install-info-gold +install-info-host: maybe-install-info-gprof +install-info-host: maybe-install-info-gprofng +install-info-host: maybe-install-info-gettext +install-info-host: maybe-install-info-tcl +install-info-host: maybe-install-info-itcl +install-info-host: maybe-install-info-ld +install-info-host: maybe-install-info-libbacktrace +install-info-host: maybe-install-info-libcpp +install-info-host: maybe-install-info-libcody +install-info-host: maybe-install-info-libdecnumber +install-info-host: maybe-install-info-libgui +install-info-host: maybe-install-info-libiberty +install-info-host: maybe-install-info-libiberty-linker-plugin +install-info-host: maybe-install-info-libiconv +install-info-host: maybe-install-info-m4 +install-info-host: maybe-install-info-readline +install-info-host: maybe-install-info-sid +install-info-host: maybe-install-info-sim +install-info-host: maybe-install-info-texinfo +install-info-host: maybe-install-info-zlib +install-info-host: maybe-install-info-gnulib +install-info-host: maybe-install-info-gdbsupport +install-info-host: maybe-install-info-gdbserver +install-info-host: maybe-install-info-gdb +install-info-host: maybe-install-info-expect +install-info-host: maybe-install-info-guile +install-info-host: maybe-install-info-tk +install-info-host: maybe-install-info-libtermcap +install-info-host: maybe-install-info-utils +install-info-host: maybe-install-info-c++tools +install-info-host: maybe-install-info-gnattools +install-info-host: maybe-install-info-lto-plugin +install-info-host: maybe-install-info-libcc1 +install-info-host: maybe-install-info-gotools +install-info-host: maybe-install-info-libctf +install-info-host: maybe-install-info-libsframe +install-info-host: maybe-install-info-libgrust + +.PHONY: install-info-target + +install-info-target: maybe-install-info-target-libstdc++-v3 +install-info-target: maybe-install-info-target-libsanitizer +install-info-target: maybe-install-info-target-libvtv +install-info-target: maybe-install-info-target-libssp +install-info-target: maybe-install-info-target-newlib +install-info-target: maybe-install-info-target-libgcc +install-info-target: maybe-install-info-target-libbacktrace +install-info-target: maybe-install-info-target-libquadmath +install-info-target: maybe-install-info-target-libgfortran +install-info-target: maybe-install-info-target-libobjc +install-info-target: maybe-install-info-target-libgo +install-info-target: maybe-install-info-target-libphobos +install-info-target: maybe-install-info-target-libtermcap +install-info-target: maybe-install-info-target-winsup +install-info-target: maybe-install-info-target-libgloss +install-info-target: maybe-install-info-target-libffi +install-info-target: maybe-install-info-target-zlib +install-info-target: maybe-install-info-target-rda +install-info-target: maybe-install-info-target-libada +install-info-target: maybe-install-info-target-libgm2 +install-info-target: maybe-install-info-target-libgomp +install-info-target: maybe-install-info-target-libitm +install-info-target: maybe-install-info-target-libatomic +install-info-target: maybe-install-info-target-libgrust + +.PHONY: do-install-dvi +do-install-dvi: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) install-dvi-host \ + install-dvi-target + + +.PHONY: install-dvi-host + +install-dvi-host: maybe-install-dvi-bfd +install-dvi-host: maybe-install-dvi-opcodes +install-dvi-host: maybe-install-dvi-binutils +install-dvi-host: maybe-install-dvi-bison +install-dvi-host: maybe-install-dvi-cgen +install-dvi-host: maybe-install-dvi-dejagnu +install-dvi-host: maybe-install-dvi-etc +install-dvi-host: maybe-install-dvi-fastjar +install-dvi-host: maybe-install-dvi-fixincludes +install-dvi-host: maybe-install-dvi-flex +install-dvi-host: maybe-install-dvi-gas +install-dvi-host: maybe-install-dvi-gcc +install-dvi-host: maybe-install-dvi-gmp +install-dvi-host: maybe-install-dvi-mpfr +install-dvi-host: maybe-install-dvi-mpc +install-dvi-host: maybe-install-dvi-isl +install-dvi-host: maybe-install-dvi-gold +install-dvi-host: maybe-install-dvi-gprof +install-dvi-host: maybe-install-dvi-gprofng +install-dvi-host: maybe-install-dvi-gettext +install-dvi-host: maybe-install-dvi-tcl +install-dvi-host: maybe-install-dvi-itcl +install-dvi-host: maybe-install-dvi-ld +install-dvi-host: maybe-install-dvi-libbacktrace +install-dvi-host: maybe-install-dvi-libcpp +install-dvi-host: maybe-install-dvi-libcody +install-dvi-host: maybe-install-dvi-libdecnumber +install-dvi-host: maybe-install-dvi-libgui +install-dvi-host: maybe-install-dvi-libiberty +install-dvi-host: maybe-install-dvi-libiberty-linker-plugin +install-dvi-host: maybe-install-dvi-libiconv +install-dvi-host: maybe-install-dvi-m4 +install-dvi-host: maybe-install-dvi-readline +install-dvi-host: maybe-install-dvi-sid +install-dvi-host: maybe-install-dvi-sim +install-dvi-host: maybe-install-dvi-texinfo +install-dvi-host: maybe-install-dvi-zlib +install-dvi-host: maybe-install-dvi-gnulib +install-dvi-host: maybe-install-dvi-gdbsupport +install-dvi-host: maybe-install-dvi-gdbserver +install-dvi-host: maybe-install-dvi-gdb +install-dvi-host: maybe-install-dvi-expect +install-dvi-host: maybe-install-dvi-guile +install-dvi-host: maybe-install-dvi-tk +install-dvi-host: maybe-install-dvi-libtermcap +install-dvi-host: maybe-install-dvi-utils +install-dvi-host: maybe-install-dvi-c++tools +install-dvi-host: maybe-install-dvi-gnattools +install-dvi-host: maybe-install-dvi-lto-plugin +install-dvi-host: maybe-install-dvi-libcc1 +install-dvi-host: maybe-install-dvi-gotools +install-dvi-host: maybe-install-dvi-libctf +install-dvi-host: maybe-install-dvi-libsframe +install-dvi-host: maybe-install-dvi-libgrust + +.PHONY: install-dvi-target + +install-dvi-target: maybe-install-dvi-target-libstdc++-v3 +install-dvi-target: maybe-install-dvi-target-libsanitizer +install-dvi-target: maybe-install-dvi-target-libvtv +install-dvi-target: maybe-install-dvi-target-libssp +install-dvi-target: maybe-install-dvi-target-newlib +install-dvi-target: maybe-install-dvi-target-libgcc +install-dvi-target: maybe-install-dvi-target-libbacktrace +install-dvi-target: maybe-install-dvi-target-libquadmath +install-dvi-target: maybe-install-dvi-target-libgfortran +install-dvi-target: maybe-install-dvi-target-libobjc +install-dvi-target: maybe-install-dvi-target-libgo +install-dvi-target: maybe-install-dvi-target-libphobos +install-dvi-target: maybe-install-dvi-target-libtermcap +install-dvi-target: maybe-install-dvi-target-winsup +install-dvi-target: maybe-install-dvi-target-libgloss +install-dvi-target: maybe-install-dvi-target-libffi +install-dvi-target: maybe-install-dvi-target-zlib +install-dvi-target: maybe-install-dvi-target-rda +install-dvi-target: maybe-install-dvi-target-libada +install-dvi-target: maybe-install-dvi-target-libgm2 +install-dvi-target: maybe-install-dvi-target-libgomp +install-dvi-target: maybe-install-dvi-target-libitm +install-dvi-target: maybe-install-dvi-target-libatomic +install-dvi-target: maybe-install-dvi-target-libgrust + +.PHONY: do-install-pdf +do-install-pdf: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) install-pdf-host \ + install-pdf-target + + +.PHONY: install-pdf-host + +install-pdf-host: maybe-install-pdf-bfd +install-pdf-host: maybe-install-pdf-opcodes +install-pdf-host: maybe-install-pdf-binutils +install-pdf-host: maybe-install-pdf-bison +install-pdf-host: maybe-install-pdf-cgen +install-pdf-host: maybe-install-pdf-dejagnu +install-pdf-host: maybe-install-pdf-etc +install-pdf-host: maybe-install-pdf-fastjar +install-pdf-host: maybe-install-pdf-fixincludes +install-pdf-host: maybe-install-pdf-flex +install-pdf-host: maybe-install-pdf-gas +install-pdf-host: maybe-install-pdf-gcc +install-pdf-host: maybe-install-pdf-gmp +install-pdf-host: maybe-install-pdf-mpfr +install-pdf-host: maybe-install-pdf-mpc +install-pdf-host: maybe-install-pdf-isl +install-pdf-host: maybe-install-pdf-gold +install-pdf-host: maybe-install-pdf-gprof +install-pdf-host: maybe-install-pdf-gprofng +install-pdf-host: maybe-install-pdf-gettext +install-pdf-host: maybe-install-pdf-tcl +install-pdf-host: maybe-install-pdf-itcl +install-pdf-host: maybe-install-pdf-ld +install-pdf-host: maybe-install-pdf-libbacktrace +install-pdf-host: maybe-install-pdf-libcpp +install-pdf-host: maybe-install-pdf-libcody +install-pdf-host: maybe-install-pdf-libdecnumber +install-pdf-host: maybe-install-pdf-libgui +install-pdf-host: maybe-install-pdf-libiberty +install-pdf-host: maybe-install-pdf-libiberty-linker-plugin +install-pdf-host: maybe-install-pdf-libiconv +install-pdf-host: maybe-install-pdf-m4 +install-pdf-host: maybe-install-pdf-readline +install-pdf-host: maybe-install-pdf-sid +install-pdf-host: maybe-install-pdf-sim +install-pdf-host: maybe-install-pdf-texinfo +install-pdf-host: maybe-install-pdf-zlib +install-pdf-host: maybe-install-pdf-gnulib +install-pdf-host: maybe-install-pdf-gdbsupport +install-pdf-host: maybe-install-pdf-gdbserver +install-pdf-host: maybe-install-pdf-gdb +install-pdf-host: maybe-install-pdf-expect +install-pdf-host: maybe-install-pdf-guile +install-pdf-host: maybe-install-pdf-tk +install-pdf-host: maybe-install-pdf-libtermcap +install-pdf-host: maybe-install-pdf-utils +install-pdf-host: maybe-install-pdf-c++tools +install-pdf-host: maybe-install-pdf-gnattools +install-pdf-host: maybe-install-pdf-lto-plugin +install-pdf-host: maybe-install-pdf-libcc1 +install-pdf-host: maybe-install-pdf-gotools +install-pdf-host: maybe-install-pdf-libctf +install-pdf-host: maybe-install-pdf-libsframe +install-pdf-host: maybe-install-pdf-libgrust + +.PHONY: install-pdf-target + +install-pdf-target: maybe-install-pdf-target-libstdc++-v3 +install-pdf-target: maybe-install-pdf-target-libsanitizer +install-pdf-target: maybe-install-pdf-target-libvtv +install-pdf-target: maybe-install-pdf-target-libssp +install-pdf-target: maybe-install-pdf-target-newlib +install-pdf-target: maybe-install-pdf-target-libgcc +install-pdf-target: maybe-install-pdf-target-libbacktrace +install-pdf-target: maybe-install-pdf-target-libquadmath +install-pdf-target: maybe-install-pdf-target-libgfortran +install-pdf-target: maybe-install-pdf-target-libobjc +install-pdf-target: maybe-install-pdf-target-libgo +install-pdf-target: maybe-install-pdf-target-libphobos +install-pdf-target: maybe-install-pdf-target-libtermcap +install-pdf-target: maybe-install-pdf-target-winsup +install-pdf-target: maybe-install-pdf-target-libgloss +install-pdf-target: maybe-install-pdf-target-libffi +install-pdf-target: maybe-install-pdf-target-zlib +install-pdf-target: maybe-install-pdf-target-rda +install-pdf-target: maybe-install-pdf-target-libada +install-pdf-target: maybe-install-pdf-target-libgm2 +install-pdf-target: maybe-install-pdf-target-libgomp +install-pdf-target: maybe-install-pdf-target-libitm +install-pdf-target: maybe-install-pdf-target-libatomic +install-pdf-target: maybe-install-pdf-target-libgrust + +.PHONY: do-install-html +do-install-html: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) install-html-host \ + install-html-target + + +.PHONY: install-html-host + +install-html-host: maybe-install-html-bfd +install-html-host: maybe-install-html-opcodes +install-html-host: maybe-install-html-binutils +install-html-host: maybe-install-html-bison +install-html-host: maybe-install-html-cgen +install-html-host: maybe-install-html-dejagnu +install-html-host: maybe-install-html-etc +install-html-host: maybe-install-html-fastjar +install-html-host: maybe-install-html-fixincludes +install-html-host: maybe-install-html-flex +install-html-host: maybe-install-html-gas +install-html-host: maybe-install-html-gcc +install-html-host: maybe-install-html-gmp +install-html-host: maybe-install-html-mpfr +install-html-host: maybe-install-html-mpc +install-html-host: maybe-install-html-isl +install-html-host: maybe-install-html-gold +install-html-host: maybe-install-html-gprof +install-html-host: maybe-install-html-gprofng +install-html-host: maybe-install-html-gettext +install-html-host: maybe-install-html-tcl +install-html-host: maybe-install-html-itcl +install-html-host: maybe-install-html-ld +install-html-host: maybe-install-html-libbacktrace +install-html-host: maybe-install-html-libcpp +install-html-host: maybe-install-html-libcody +install-html-host: maybe-install-html-libdecnumber +install-html-host: maybe-install-html-libgui +install-html-host: maybe-install-html-libiberty +install-html-host: maybe-install-html-libiberty-linker-plugin +install-html-host: maybe-install-html-libiconv +install-html-host: maybe-install-html-m4 +install-html-host: maybe-install-html-readline +install-html-host: maybe-install-html-sid +install-html-host: maybe-install-html-sim +install-html-host: maybe-install-html-texinfo +install-html-host: maybe-install-html-zlib +install-html-host: maybe-install-html-gnulib +install-html-host: maybe-install-html-gdbsupport +install-html-host: maybe-install-html-gdbserver +install-html-host: maybe-install-html-gdb +install-html-host: maybe-install-html-expect +install-html-host: maybe-install-html-guile +install-html-host: maybe-install-html-tk +install-html-host: maybe-install-html-libtermcap +install-html-host: maybe-install-html-utils +install-html-host: maybe-install-html-c++tools +install-html-host: maybe-install-html-gnattools +install-html-host: maybe-install-html-lto-plugin +install-html-host: maybe-install-html-libcc1 +install-html-host: maybe-install-html-gotools +install-html-host: maybe-install-html-libctf +install-html-host: maybe-install-html-libsframe +install-html-host: maybe-install-html-libgrust + +.PHONY: install-html-target + +install-html-target: maybe-install-html-target-libstdc++-v3 +install-html-target: maybe-install-html-target-libsanitizer +install-html-target: maybe-install-html-target-libvtv +install-html-target: maybe-install-html-target-libssp +install-html-target: maybe-install-html-target-newlib +install-html-target: maybe-install-html-target-libgcc +install-html-target: maybe-install-html-target-libbacktrace +install-html-target: maybe-install-html-target-libquadmath +install-html-target: maybe-install-html-target-libgfortran +install-html-target: maybe-install-html-target-libobjc +install-html-target: maybe-install-html-target-libgo +install-html-target: maybe-install-html-target-libphobos +install-html-target: maybe-install-html-target-libtermcap +install-html-target: maybe-install-html-target-winsup +install-html-target: maybe-install-html-target-libgloss +install-html-target: maybe-install-html-target-libffi +install-html-target: maybe-install-html-target-zlib +install-html-target: maybe-install-html-target-rda +install-html-target: maybe-install-html-target-libada +install-html-target: maybe-install-html-target-libgm2 +install-html-target: maybe-install-html-target-libgomp +install-html-target: maybe-install-html-target-libitm +install-html-target: maybe-install-html-target-libatomic +install-html-target: maybe-install-html-target-libgrust + +.PHONY: do-installcheck +do-installcheck: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) installcheck-host \ + installcheck-target + + +.PHONY: installcheck-host + +installcheck-host: maybe-installcheck-bfd +installcheck-host: maybe-installcheck-opcodes +installcheck-host: maybe-installcheck-binutils +installcheck-host: maybe-installcheck-bison +installcheck-host: maybe-installcheck-cgen +installcheck-host: maybe-installcheck-dejagnu +installcheck-host: maybe-installcheck-etc +installcheck-host: maybe-installcheck-fastjar +installcheck-host: maybe-installcheck-fixincludes +installcheck-host: maybe-installcheck-flex +installcheck-host: maybe-installcheck-gas +installcheck-host: maybe-installcheck-gcc +installcheck-host: maybe-installcheck-gmp +installcheck-host: maybe-installcheck-mpfr +installcheck-host: maybe-installcheck-mpc +installcheck-host: maybe-installcheck-isl +installcheck-host: maybe-installcheck-gold +installcheck-host: maybe-installcheck-gprof +installcheck-host: maybe-installcheck-gprofng +installcheck-host: maybe-installcheck-gettext +installcheck-host: maybe-installcheck-tcl +installcheck-host: maybe-installcheck-itcl +installcheck-host: maybe-installcheck-ld +installcheck-host: maybe-installcheck-libbacktrace +installcheck-host: maybe-installcheck-libcpp +installcheck-host: maybe-installcheck-libcody +installcheck-host: maybe-installcheck-libdecnumber +installcheck-host: maybe-installcheck-libgui +installcheck-host: maybe-installcheck-libiberty +installcheck-host: maybe-installcheck-libiberty-linker-plugin +installcheck-host: maybe-installcheck-libiconv +installcheck-host: maybe-installcheck-m4 +installcheck-host: maybe-installcheck-readline +installcheck-host: maybe-installcheck-sid +installcheck-host: maybe-installcheck-sim +installcheck-host: maybe-installcheck-texinfo +installcheck-host: maybe-installcheck-zlib +installcheck-host: maybe-installcheck-gnulib +installcheck-host: maybe-installcheck-gdbsupport +installcheck-host: maybe-installcheck-gdbserver +installcheck-host: maybe-installcheck-gdb +installcheck-host: maybe-installcheck-expect +installcheck-host: maybe-installcheck-guile +installcheck-host: maybe-installcheck-tk +installcheck-host: maybe-installcheck-libtermcap +installcheck-host: maybe-installcheck-utils +installcheck-host: maybe-installcheck-c++tools +installcheck-host: maybe-installcheck-gnattools +installcheck-host: maybe-installcheck-lto-plugin +installcheck-host: maybe-installcheck-libcc1 +installcheck-host: maybe-installcheck-gotools +installcheck-host: maybe-installcheck-libctf +installcheck-host: maybe-installcheck-libsframe +installcheck-host: maybe-installcheck-libgrust + +.PHONY: installcheck-target + +installcheck-target: maybe-installcheck-target-libstdc++-v3 +installcheck-target: maybe-installcheck-target-libsanitizer +installcheck-target: maybe-installcheck-target-libvtv +installcheck-target: maybe-installcheck-target-libssp +installcheck-target: maybe-installcheck-target-newlib +installcheck-target: maybe-installcheck-target-libgcc +installcheck-target: maybe-installcheck-target-libbacktrace +installcheck-target: maybe-installcheck-target-libquadmath +installcheck-target: maybe-installcheck-target-libgfortran +installcheck-target: maybe-installcheck-target-libobjc +installcheck-target: maybe-installcheck-target-libgo +installcheck-target: maybe-installcheck-target-libphobos +installcheck-target: maybe-installcheck-target-libtermcap +installcheck-target: maybe-installcheck-target-winsup +installcheck-target: maybe-installcheck-target-libgloss +installcheck-target: maybe-installcheck-target-libffi +installcheck-target: maybe-installcheck-target-zlib +installcheck-target: maybe-installcheck-target-rda +installcheck-target: maybe-installcheck-target-libada +installcheck-target: maybe-installcheck-target-libgm2 +installcheck-target: maybe-installcheck-target-libgomp +installcheck-target: maybe-installcheck-target-libitm +installcheck-target: maybe-installcheck-target-libatomic +installcheck-target: maybe-installcheck-target-libgrust + +.PHONY: do-mostlyclean +do-mostlyclean: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) mostlyclean-host \ + mostlyclean-target + + +.PHONY: mostlyclean-host + +mostlyclean-host: maybe-mostlyclean-bfd +mostlyclean-host: maybe-mostlyclean-opcodes +mostlyclean-host: maybe-mostlyclean-binutils +mostlyclean-host: maybe-mostlyclean-bison +mostlyclean-host: maybe-mostlyclean-cgen +mostlyclean-host: maybe-mostlyclean-dejagnu +mostlyclean-host: maybe-mostlyclean-etc +mostlyclean-host: maybe-mostlyclean-fastjar +mostlyclean-host: maybe-mostlyclean-fixincludes +mostlyclean-host: maybe-mostlyclean-flex +mostlyclean-host: maybe-mostlyclean-gas +mostlyclean-host: maybe-mostlyclean-gcc +mostlyclean-host: maybe-mostlyclean-gmp +mostlyclean-host: maybe-mostlyclean-mpfr +mostlyclean-host: maybe-mostlyclean-mpc +mostlyclean-host: maybe-mostlyclean-isl +mostlyclean-host: maybe-mostlyclean-gold +mostlyclean-host: maybe-mostlyclean-gprof +mostlyclean-host: maybe-mostlyclean-gprofng +mostlyclean-host: maybe-mostlyclean-gettext +mostlyclean-host: maybe-mostlyclean-tcl +mostlyclean-host: maybe-mostlyclean-itcl +mostlyclean-host: maybe-mostlyclean-ld +mostlyclean-host: maybe-mostlyclean-libbacktrace +mostlyclean-host: maybe-mostlyclean-libcpp +mostlyclean-host: maybe-mostlyclean-libcody +mostlyclean-host: maybe-mostlyclean-libdecnumber +mostlyclean-host: maybe-mostlyclean-libgui +mostlyclean-host: maybe-mostlyclean-libiberty +mostlyclean-host: maybe-mostlyclean-libiberty-linker-plugin +mostlyclean-host: maybe-mostlyclean-libiconv +mostlyclean-host: maybe-mostlyclean-m4 +mostlyclean-host: maybe-mostlyclean-readline +mostlyclean-host: maybe-mostlyclean-sid +mostlyclean-host: maybe-mostlyclean-sim +mostlyclean-host: maybe-mostlyclean-texinfo +mostlyclean-host: maybe-mostlyclean-zlib +mostlyclean-host: maybe-mostlyclean-gnulib +mostlyclean-host: maybe-mostlyclean-gdbsupport +mostlyclean-host: maybe-mostlyclean-gdbserver +mostlyclean-host: maybe-mostlyclean-gdb +mostlyclean-host: maybe-mostlyclean-expect +mostlyclean-host: maybe-mostlyclean-guile +mostlyclean-host: maybe-mostlyclean-tk +mostlyclean-host: maybe-mostlyclean-libtermcap +mostlyclean-host: maybe-mostlyclean-utils +mostlyclean-host: maybe-mostlyclean-c++tools +mostlyclean-host: maybe-mostlyclean-gnattools +mostlyclean-host: maybe-mostlyclean-lto-plugin +mostlyclean-host: maybe-mostlyclean-libcc1 +mostlyclean-host: maybe-mostlyclean-gotools +mostlyclean-host: maybe-mostlyclean-libctf +mostlyclean-host: maybe-mostlyclean-libsframe +mostlyclean-host: maybe-mostlyclean-libgrust + +.PHONY: mostlyclean-target + +mostlyclean-target: maybe-mostlyclean-target-libstdc++-v3 +mostlyclean-target: maybe-mostlyclean-target-libsanitizer +mostlyclean-target: maybe-mostlyclean-target-libvtv +mostlyclean-target: maybe-mostlyclean-target-libssp +mostlyclean-target: maybe-mostlyclean-target-newlib +mostlyclean-target: maybe-mostlyclean-target-libgcc +mostlyclean-target: maybe-mostlyclean-target-libbacktrace +mostlyclean-target: maybe-mostlyclean-target-libquadmath +mostlyclean-target: maybe-mostlyclean-target-libgfortran +mostlyclean-target: maybe-mostlyclean-target-libobjc +mostlyclean-target: maybe-mostlyclean-target-libgo +mostlyclean-target: maybe-mostlyclean-target-libphobos +mostlyclean-target: maybe-mostlyclean-target-libtermcap +mostlyclean-target: maybe-mostlyclean-target-winsup +mostlyclean-target: maybe-mostlyclean-target-libgloss +mostlyclean-target: maybe-mostlyclean-target-libffi +mostlyclean-target: maybe-mostlyclean-target-zlib +mostlyclean-target: maybe-mostlyclean-target-rda +mostlyclean-target: maybe-mostlyclean-target-libada +mostlyclean-target: maybe-mostlyclean-target-libgm2 +mostlyclean-target: maybe-mostlyclean-target-libgomp +mostlyclean-target: maybe-mostlyclean-target-libitm +mostlyclean-target: maybe-mostlyclean-target-libatomic +mostlyclean-target: maybe-mostlyclean-target-libgrust + +.PHONY: do-clean +do-clean: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) clean-host \ + clean-target + + +.PHONY: clean-host + +clean-host: maybe-clean-bfd +clean-host: maybe-clean-opcodes +clean-host: maybe-clean-binutils +clean-host: maybe-clean-bison +clean-host: maybe-clean-cgen +clean-host: maybe-clean-dejagnu +clean-host: maybe-clean-etc +clean-host: maybe-clean-fastjar +clean-host: maybe-clean-fixincludes +clean-host: maybe-clean-flex +clean-host: maybe-clean-gas +clean-host: maybe-clean-gcc +clean-host: maybe-clean-gmp +clean-host: maybe-clean-mpfr +clean-host: maybe-clean-mpc +clean-host: maybe-clean-isl +clean-host: maybe-clean-gold +clean-host: maybe-clean-gprof +clean-host: maybe-clean-gprofng +clean-host: maybe-clean-gettext +clean-host: maybe-clean-tcl +clean-host: maybe-clean-itcl +clean-host: maybe-clean-ld +clean-host: maybe-clean-libbacktrace +clean-host: maybe-clean-libcpp +clean-host: maybe-clean-libcody +clean-host: maybe-clean-libdecnumber +clean-host: maybe-clean-libgui +clean-host: maybe-clean-libiberty +clean-host: maybe-clean-libiberty-linker-plugin +clean-host: maybe-clean-libiconv +clean-host: maybe-clean-m4 +clean-host: maybe-clean-readline +clean-host: maybe-clean-sid +clean-host: maybe-clean-sim +clean-host: maybe-clean-texinfo +clean-host: maybe-clean-zlib +clean-host: maybe-clean-gnulib +clean-host: maybe-clean-gdbsupport +clean-host: maybe-clean-gdbserver +clean-host: maybe-clean-gdb +clean-host: maybe-clean-expect +clean-host: maybe-clean-guile +clean-host: maybe-clean-tk +clean-host: maybe-clean-libtermcap +clean-host: maybe-clean-utils +clean-host: maybe-clean-c++tools +clean-host: maybe-clean-gnattools +clean-host: maybe-clean-lto-plugin +clean-host: maybe-clean-libcc1 +clean-host: maybe-clean-gotools +clean-host: maybe-clean-libctf +clean-host: maybe-clean-libsframe +clean-host: maybe-clean-libgrust + +.PHONY: clean-target + +clean-target: maybe-clean-target-libstdc++-v3 +clean-target: maybe-clean-target-libsanitizer +clean-target: maybe-clean-target-libvtv +clean-target: maybe-clean-target-libssp +clean-target: maybe-clean-target-newlib +clean-target: maybe-clean-target-libgcc +clean-target: maybe-clean-target-libbacktrace +clean-target: maybe-clean-target-libquadmath +clean-target: maybe-clean-target-libgfortran +clean-target: maybe-clean-target-libobjc +clean-target: maybe-clean-target-libgo +clean-target: maybe-clean-target-libphobos +clean-target: maybe-clean-target-libtermcap +clean-target: maybe-clean-target-winsup +clean-target: maybe-clean-target-libgloss +clean-target: maybe-clean-target-libffi +clean-target: maybe-clean-target-zlib +clean-target: maybe-clean-target-rda +clean-target: maybe-clean-target-libada +clean-target: maybe-clean-target-libgm2 +clean-target: maybe-clean-target-libgomp +clean-target: maybe-clean-target-libitm +clean-target: maybe-clean-target-libatomic +clean-target: maybe-clean-target-libgrust + +.PHONY: do-distclean +do-distclean: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) distclean-host \ + distclean-target + + +.PHONY: distclean-host + +distclean-host: maybe-distclean-bfd +distclean-host: maybe-distclean-opcodes +distclean-host: maybe-distclean-binutils +distclean-host: maybe-distclean-bison +distclean-host: maybe-distclean-cgen +distclean-host: maybe-distclean-dejagnu +distclean-host: maybe-distclean-etc +distclean-host: maybe-distclean-fastjar +distclean-host: maybe-distclean-fixincludes +distclean-host: maybe-distclean-flex +distclean-host: maybe-distclean-gas +distclean-host: maybe-distclean-gcc +distclean-host: maybe-distclean-gmp +distclean-host: maybe-distclean-mpfr +distclean-host: maybe-distclean-mpc +distclean-host: maybe-distclean-isl +distclean-host: maybe-distclean-gold +distclean-host: maybe-distclean-gprof +distclean-host: maybe-distclean-gprofng +distclean-host: maybe-distclean-gettext +distclean-host: maybe-distclean-tcl +distclean-host: maybe-distclean-itcl +distclean-host: maybe-distclean-ld +distclean-host: maybe-distclean-libbacktrace +distclean-host: maybe-distclean-libcpp +distclean-host: maybe-distclean-libcody +distclean-host: maybe-distclean-libdecnumber +distclean-host: maybe-distclean-libgui +distclean-host: maybe-distclean-libiberty +distclean-host: maybe-distclean-libiberty-linker-plugin +distclean-host: maybe-distclean-libiconv +distclean-host: maybe-distclean-m4 +distclean-host: maybe-distclean-readline +distclean-host: maybe-distclean-sid +distclean-host: maybe-distclean-sim +distclean-host: maybe-distclean-texinfo +distclean-host: maybe-distclean-zlib +distclean-host: maybe-distclean-gnulib +distclean-host: maybe-distclean-gdbsupport +distclean-host: maybe-distclean-gdbserver +distclean-host: maybe-distclean-gdb +distclean-host: maybe-distclean-expect +distclean-host: maybe-distclean-guile +distclean-host: maybe-distclean-tk +distclean-host: maybe-distclean-libtermcap +distclean-host: maybe-distclean-utils +distclean-host: maybe-distclean-c++tools +distclean-host: maybe-distclean-gnattools +distclean-host: maybe-distclean-lto-plugin +distclean-host: maybe-distclean-libcc1 +distclean-host: maybe-distclean-gotools +distclean-host: maybe-distclean-libctf +distclean-host: maybe-distclean-libsframe +distclean-host: maybe-distclean-libgrust + +.PHONY: distclean-target + +distclean-target: maybe-distclean-target-libstdc++-v3 +distclean-target: maybe-distclean-target-libsanitizer +distclean-target: maybe-distclean-target-libvtv +distclean-target: maybe-distclean-target-libssp +distclean-target: maybe-distclean-target-newlib +distclean-target: maybe-distclean-target-libgcc +distclean-target: maybe-distclean-target-libbacktrace +distclean-target: maybe-distclean-target-libquadmath +distclean-target: maybe-distclean-target-libgfortran +distclean-target: maybe-distclean-target-libobjc +distclean-target: maybe-distclean-target-libgo +distclean-target: maybe-distclean-target-libphobos +distclean-target: maybe-distclean-target-libtermcap +distclean-target: maybe-distclean-target-winsup +distclean-target: maybe-distclean-target-libgloss +distclean-target: maybe-distclean-target-libffi +distclean-target: maybe-distclean-target-zlib +distclean-target: maybe-distclean-target-rda +distclean-target: maybe-distclean-target-libada +distclean-target: maybe-distclean-target-libgm2 +distclean-target: maybe-distclean-target-libgomp +distclean-target: maybe-distclean-target-libitm +distclean-target: maybe-distclean-target-libatomic +distclean-target: maybe-distclean-target-libgrust + +.PHONY: do-maintainer-clean +do-maintainer-clean: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) maintainer-clean-host \ + maintainer-clean-target + + +.PHONY: maintainer-clean-host + +maintainer-clean-host: maybe-maintainer-clean-bfd +maintainer-clean-host: maybe-maintainer-clean-opcodes +maintainer-clean-host: maybe-maintainer-clean-binutils +maintainer-clean-host: maybe-maintainer-clean-bison +maintainer-clean-host: maybe-maintainer-clean-cgen +maintainer-clean-host: maybe-maintainer-clean-dejagnu +maintainer-clean-host: maybe-maintainer-clean-etc +maintainer-clean-host: maybe-maintainer-clean-fastjar +maintainer-clean-host: maybe-maintainer-clean-fixincludes +maintainer-clean-host: maybe-maintainer-clean-flex +maintainer-clean-host: maybe-maintainer-clean-gas +maintainer-clean-host: maybe-maintainer-clean-gcc +maintainer-clean-host: maybe-maintainer-clean-gmp +maintainer-clean-host: maybe-maintainer-clean-mpfr +maintainer-clean-host: maybe-maintainer-clean-mpc +maintainer-clean-host: maybe-maintainer-clean-isl +maintainer-clean-host: maybe-maintainer-clean-gold +maintainer-clean-host: maybe-maintainer-clean-gprof +maintainer-clean-host: maybe-maintainer-clean-gprofng +maintainer-clean-host: maybe-maintainer-clean-gettext +maintainer-clean-host: maybe-maintainer-clean-tcl +maintainer-clean-host: maybe-maintainer-clean-itcl +maintainer-clean-host: maybe-maintainer-clean-ld +maintainer-clean-host: maybe-maintainer-clean-libbacktrace +maintainer-clean-host: maybe-maintainer-clean-libcpp +maintainer-clean-host: maybe-maintainer-clean-libcody +maintainer-clean-host: maybe-maintainer-clean-libdecnumber +maintainer-clean-host: maybe-maintainer-clean-libgui +maintainer-clean-host: maybe-maintainer-clean-libiberty +maintainer-clean-host: maybe-maintainer-clean-libiberty-linker-plugin +maintainer-clean-host: maybe-maintainer-clean-libiconv +maintainer-clean-host: maybe-maintainer-clean-m4 +maintainer-clean-host: maybe-maintainer-clean-readline +maintainer-clean-host: maybe-maintainer-clean-sid +maintainer-clean-host: maybe-maintainer-clean-sim +maintainer-clean-host: maybe-maintainer-clean-texinfo +maintainer-clean-host: maybe-maintainer-clean-zlib +maintainer-clean-host: maybe-maintainer-clean-gnulib +maintainer-clean-host: maybe-maintainer-clean-gdbsupport +maintainer-clean-host: maybe-maintainer-clean-gdbserver +maintainer-clean-host: maybe-maintainer-clean-gdb +maintainer-clean-host: maybe-maintainer-clean-expect +maintainer-clean-host: maybe-maintainer-clean-guile +maintainer-clean-host: maybe-maintainer-clean-tk +maintainer-clean-host: maybe-maintainer-clean-libtermcap +maintainer-clean-host: maybe-maintainer-clean-utils +maintainer-clean-host: maybe-maintainer-clean-c++tools +maintainer-clean-host: maybe-maintainer-clean-gnattools +maintainer-clean-host: maybe-maintainer-clean-lto-plugin +maintainer-clean-host: maybe-maintainer-clean-libcc1 +maintainer-clean-host: maybe-maintainer-clean-gotools +maintainer-clean-host: maybe-maintainer-clean-libctf +maintainer-clean-host: maybe-maintainer-clean-libsframe +maintainer-clean-host: maybe-maintainer-clean-libgrust + +.PHONY: maintainer-clean-target + +maintainer-clean-target: maybe-maintainer-clean-target-libstdc++-v3 +maintainer-clean-target: maybe-maintainer-clean-target-libsanitizer +maintainer-clean-target: maybe-maintainer-clean-target-libvtv +maintainer-clean-target: maybe-maintainer-clean-target-libssp +maintainer-clean-target: maybe-maintainer-clean-target-newlib +maintainer-clean-target: maybe-maintainer-clean-target-libgcc +maintainer-clean-target: maybe-maintainer-clean-target-libbacktrace +maintainer-clean-target: maybe-maintainer-clean-target-libquadmath +maintainer-clean-target: maybe-maintainer-clean-target-libgfortran +maintainer-clean-target: maybe-maintainer-clean-target-libobjc +maintainer-clean-target: maybe-maintainer-clean-target-libgo +maintainer-clean-target: maybe-maintainer-clean-target-libphobos +maintainer-clean-target: maybe-maintainer-clean-target-libtermcap +maintainer-clean-target: maybe-maintainer-clean-target-winsup +maintainer-clean-target: maybe-maintainer-clean-target-libgloss +maintainer-clean-target: maybe-maintainer-clean-target-libffi +maintainer-clean-target: maybe-maintainer-clean-target-zlib +maintainer-clean-target: maybe-maintainer-clean-target-rda +maintainer-clean-target: maybe-maintainer-clean-target-libada +maintainer-clean-target: maybe-maintainer-clean-target-libgm2 +maintainer-clean-target: maybe-maintainer-clean-target-libgomp +maintainer-clean-target: maybe-maintainer-clean-target-libitm +maintainer-clean-target: maybe-maintainer-clean-target-libatomic +maintainer-clean-target: maybe-maintainer-clean-target-libgrust + + +# Here are the targets which correspond to the do-X targets. + +.PHONY: info installcheck dvi pdf html +.PHONY: install-info install-dvi install-pdf install-html +.PHONY: clean distclean mostlyclean maintainer-clean realclean +.PHONY: local-clean local-distclean local-maintainer-clean +info: do-info +installcheck: do-installcheck +dvi: do-dvi +pdf: do-pdf +html: do-html + +# Make sure makeinfo is built before we do a `make info', if we're +# in fact building texinfo. +do-info: maybe-all-texinfo + +install-info: do-install-info dir.info + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if [ -f dir.info ]; then \ + $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info; \ + else true; fi + +install-dvi: do-install-dvi + +install-pdf: do-install-pdf + +install-html: do-install-html + +local-clean: + -rm -f *.a TEMP errs core *.o *~ \#* TAGS *.E *.log + +local-distclean: + -rm -f Makefile config.status config.cache mh-frag mt-frag + -rm -f maybedep.tmp serdep.tmp stage_final + -if [ "$(TARGET_SUBDIR)" != "." ]; then \ + rm -rf $(TARGET_SUBDIR); \ + else true; fi + -rm -rf $(BUILD_SUBDIR) + -if [ "$(HOST_SUBDIR)" != "." ]; then \ + rm -rf $(HOST_SUBDIR); \ + else true; fi + -rm -f texinfo/po/Makefile texinfo/po/Makefile.in texinfo/info/Makefile + -rm -f texinfo/doc/Makefile texinfo/po/POTFILES + -rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null + -rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null + -rmdir c++tools fastjar gcc gnattools gotools 2>/dev/null + -rmdir libcc1 libiberty texinfo zlib 2>/dev/null + -find . -name config.cache -exec rm -f {} \; \; 2>/dev/null + +local-maintainer-clean: + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +clean: do-clean local-clean +mostlyclean: do-mostlyclean local-clean +distclean: do-distclean local-clean local-distclean +maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean +maintainer-clean: local-distclean +realclean: maintainer-clean + +# Check target. + +.PHONY: check do-check +check: do-check + +# Only include modules actually being configured and built. +.PHONY: check-host +check-host: \ + maybe-check-bfd \ + maybe-check-opcodes \ + maybe-check-binutils \ + maybe-check-bison \ + maybe-check-cgen \ + maybe-check-dejagnu \ + maybe-check-etc \ + maybe-check-fastjar \ + maybe-check-fixincludes \ + maybe-check-flex \ + maybe-check-gas \ + maybe-check-gcc \ + maybe-check-gmp \ + maybe-check-mpfr \ + maybe-check-mpc \ + maybe-check-isl \ + maybe-check-gold \ + maybe-check-gprof \ + maybe-check-gprofng \ + maybe-check-gettext \ + maybe-check-tcl \ + maybe-check-itcl \ + maybe-check-ld \ + maybe-check-libbacktrace \ + maybe-check-libcpp \ + maybe-check-libcody \ + maybe-check-libdecnumber \ + maybe-check-libgui \ + maybe-check-libiberty \ + maybe-check-libiberty-linker-plugin \ + maybe-check-libiconv \ + maybe-check-m4 \ + maybe-check-readline \ + maybe-check-sid \ + maybe-check-sim \ + maybe-check-texinfo \ + maybe-check-zlib \ + maybe-check-gnulib \ + maybe-check-gdbsupport \ + maybe-check-gdbserver \ + maybe-check-gdb \ + maybe-check-expect \ + maybe-check-guile \ + maybe-check-tk \ + maybe-check-libtermcap \ + maybe-check-utils \ + maybe-check-c++tools \ + maybe-check-gnattools \ + maybe-check-lto-plugin \ + maybe-check-libcc1 \ + maybe-check-gotools \ + maybe-check-libctf \ + maybe-check-libsframe \ + maybe-check-libgrust + +.PHONY: check-target +check-target: \ + maybe-check-target-libstdc++-v3 \ + maybe-check-target-libsanitizer \ + maybe-check-target-libvtv \ + maybe-check-target-libssp \ + maybe-check-target-newlib \ + maybe-check-target-libgcc \ + maybe-check-target-libbacktrace \ + maybe-check-target-libquadmath \ + maybe-check-target-libgfortran \ + maybe-check-target-libobjc \ + maybe-check-target-libgo \ + maybe-check-target-libphobos \ + maybe-check-target-libtermcap \ + maybe-check-target-winsup \ + maybe-check-target-libgloss \ + maybe-check-target-libffi \ + maybe-check-target-zlib \ + maybe-check-target-rda \ + maybe-check-target-libada \ + maybe-check-target-libgm2 \ + maybe-check-target-libgomp \ + maybe-check-target-libitm \ + maybe-check-target-libatomic \ + maybe-check-target-libgrust + +do-check: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) check-host check-target + +# Automated reporting of test results. + +warning.log: build.log + $(srcdir)/contrib/warn_summary build.log > $@ + +mail-report.log: + if test x'$(BOOT_CFLAGS)' != x''; then \ + BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \ + fi; \ + $(srcdir)/contrib/test_summary -t >$@ + chmod +x $@ + echo If you really want to send e-mail, run ./$@ now + +mail-report-with-warnings.log: warning.log + if test x'$(BOOT_CFLAGS)' != x''; then \ + BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \ + fi; \ + $(srcdir)/contrib/test_summary -t -i warning.log >$@ + chmod +x $@ + echo If you really want to send e-mail, run ./$@ now + +# Local Vim config + +$(srcdir)/.local.vimrc: + $(LN_S) contrib/vimrc $@ + +$(srcdir)/.lvimrc: + $(LN_S) contrib/vimrc $@ + +vimrc: $(srcdir)/.local.vimrc $(srcdir)/.lvimrc + +.PHONY: vimrc + +# clang-format config + +$(srcdir)/.clang-format: + $(LN_S) contrib/clang-format $@ + +clang-format: $(srcdir)/.clang-format + +.PHONY: clang-format + +# Installation targets. + +.PHONY: install uninstall +install: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) installdirs install-host install-target + +.PHONY: install-host-nogcc +install-host-nogcc: \ + maybe-install-bfd \ + maybe-install-opcodes \ + maybe-install-binutils \ + maybe-install-bison \ + maybe-install-cgen \ + maybe-install-dejagnu \ + maybe-install-etc \ + maybe-install-fastjar \ + maybe-install-fixincludes \ + maybe-install-flex \ + maybe-install-gas \ + maybe-install-gmp \ + maybe-install-mpfr \ + maybe-install-mpc \ + maybe-install-isl \ + maybe-install-gold \ + maybe-install-gprof \ + maybe-install-gprofng \ + maybe-install-gettext \ + maybe-install-tcl \ + maybe-install-itcl \ + maybe-install-ld \ + maybe-install-libbacktrace \ + maybe-install-libcpp \ + maybe-install-libcody \ + maybe-install-libdecnumber \ + maybe-install-libgui \ + maybe-install-libiberty \ + maybe-install-libiberty-linker-plugin \ + maybe-install-libiconv \ + maybe-install-m4 \ + maybe-install-readline \ + maybe-install-sid \ + maybe-install-sim \ + maybe-install-texinfo \ + maybe-install-zlib \ + maybe-install-gnulib \ + maybe-install-gdbsupport \ + maybe-install-gdbserver \ + maybe-install-gdb \ + maybe-install-expect \ + maybe-install-guile \ + maybe-install-tk \ + maybe-install-libtermcap \ + maybe-install-utils \ + maybe-install-c++tools \ + maybe-install-gnattools \ + maybe-install-lto-plugin \ + maybe-install-libcc1 \ + maybe-install-gotools \ + maybe-install-libctf \ + maybe-install-libsframe \ + maybe-install-libgrust + +.PHONY: install-host +install-host: \ + maybe-install-bfd \ + maybe-install-opcodes \ + maybe-install-binutils \ + maybe-install-bison \ + maybe-install-cgen \ + maybe-install-dejagnu \ + maybe-install-etc \ + maybe-install-fastjar \ + maybe-install-fixincludes \ + maybe-install-flex \ + maybe-install-gas \ + maybe-install-gcc \ + maybe-install-gmp \ + maybe-install-mpfr \ + maybe-install-mpc \ + maybe-install-isl \ + maybe-install-gold \ + maybe-install-gprof \ + maybe-install-gprofng \ + maybe-install-gettext \ + maybe-install-tcl \ + maybe-install-itcl \ + maybe-install-ld \ + maybe-install-libbacktrace \ + maybe-install-libcpp \ + maybe-install-libcody \ + maybe-install-libdecnumber \ + maybe-install-libgui \ + maybe-install-libiberty \ + maybe-install-libiberty-linker-plugin \ + maybe-install-libiconv \ + maybe-install-m4 \ + maybe-install-readline \ + maybe-install-sid \ + maybe-install-sim \ + maybe-install-texinfo \ + maybe-install-zlib \ + maybe-install-gnulib \ + maybe-install-gdbsupport \ + maybe-install-gdbserver \ + maybe-install-gdb \ + maybe-install-expect \ + maybe-install-guile \ + maybe-install-tk \ + maybe-install-libtermcap \ + maybe-install-utils \ + maybe-install-c++tools \ + maybe-install-gnattools \ + maybe-install-lto-plugin \ + maybe-install-libcc1 \ + maybe-install-gotools \ + maybe-install-libctf \ + maybe-install-libsframe \ + maybe-install-libgrust + +.PHONY: install-target +install-target: \ + maybe-install-target-libstdc++-v3 \ + maybe-install-target-libsanitizer \ + maybe-install-target-libvtv \ + maybe-install-target-libssp \ + maybe-install-target-newlib \ + maybe-install-target-libgcc \ + maybe-install-target-libbacktrace \ + maybe-install-target-libquadmath \ + maybe-install-target-libgfortran \ + maybe-install-target-libobjc \ + maybe-install-target-libgo \ + maybe-install-target-libphobos \ + maybe-install-target-libtermcap \ + maybe-install-target-winsup \ + maybe-install-target-libgloss \ + maybe-install-target-libffi \ + maybe-install-target-zlib \ + maybe-install-target-rda \ + maybe-install-target-libada \ + maybe-install-target-libgm2 \ + maybe-install-target-libgomp \ + maybe-install-target-libitm \ + maybe-install-target-libatomic \ + maybe-install-target-libgrust + +uninstall: + @echo "the uninstall target is not supported in this tree" + +.PHONY: install.all +install.all: install-no-fixedincludes + @if [ -f ./gcc/Makefile ]; then \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd ./gcc && \ + $(MAKE) $(FLAGS_TO_PASS) install-headers); \ + else \ + true; \ + fi + +# install-no-fixedincludes is used to allow the elaboration of binary packages +# suitable for distribution, where we cannot include the fixed system header +# files. +.PHONY: install-no-fixedincludes +install-no-fixedincludes: installdirs install-host-nogcc \ + install-target gcc-install-no-fixedincludes + +.PHONY: install-strip +install-strip: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) installdirs install-strip-host install-strip-target + +.PHONY: install-strip-host +install-strip-host: \ + maybe-install-strip-bfd \ + maybe-install-strip-opcodes \ + maybe-install-strip-binutils \ + maybe-install-strip-bison \ + maybe-install-strip-cgen \ + maybe-install-strip-dejagnu \ + maybe-install-strip-etc \ + maybe-install-strip-fastjar \ + maybe-install-strip-fixincludes \ + maybe-install-strip-flex \ + maybe-install-strip-gas \ + maybe-install-strip-gcc \ + maybe-install-strip-gmp \ + maybe-install-strip-mpfr \ + maybe-install-strip-mpc \ + maybe-install-strip-isl \ + maybe-install-strip-gold \ + maybe-install-strip-gprof \ + maybe-install-strip-gprofng \ + maybe-install-strip-gettext \ + maybe-install-strip-tcl \ + maybe-install-strip-itcl \ + maybe-install-strip-ld \ + maybe-install-strip-libbacktrace \ + maybe-install-strip-libcpp \ + maybe-install-strip-libcody \ + maybe-install-strip-libdecnumber \ + maybe-install-strip-libgui \ + maybe-install-strip-libiberty \ + maybe-install-strip-libiberty-linker-plugin \ + maybe-install-strip-libiconv \ + maybe-install-strip-m4 \ + maybe-install-strip-readline \ + maybe-install-strip-sid \ + maybe-install-strip-sim \ + maybe-install-strip-texinfo \ + maybe-install-strip-zlib \ + maybe-install-strip-gnulib \ + maybe-install-strip-gdbsupport \ + maybe-install-strip-gdbserver \ + maybe-install-strip-gdb \ + maybe-install-strip-expect \ + maybe-install-strip-guile \ + maybe-install-strip-tk \ + maybe-install-strip-libtermcap \ + maybe-install-strip-utils \ + maybe-install-strip-c++tools \ + maybe-install-strip-gnattools \ + maybe-install-strip-lto-plugin \ + maybe-install-strip-libcc1 \ + maybe-install-strip-gotools \ + maybe-install-strip-libctf \ + maybe-install-strip-libsframe \ + maybe-install-strip-libgrust + +.PHONY: install-strip-target +install-strip-target: \ + maybe-install-strip-target-libstdc++-v3 \ + maybe-install-strip-target-libsanitizer \ + maybe-install-strip-target-libvtv \ + maybe-install-strip-target-libssp \ + maybe-install-strip-target-newlib \ + maybe-install-strip-target-libgcc \ + maybe-install-strip-target-libbacktrace \ + maybe-install-strip-target-libquadmath \ + maybe-install-strip-target-libgfortran \ + maybe-install-strip-target-libobjc \ + maybe-install-strip-target-libgo \ + maybe-install-strip-target-libphobos \ + maybe-install-strip-target-libtermcap \ + maybe-install-strip-target-winsup \ + maybe-install-strip-target-libgloss \ + maybe-install-strip-target-libffi \ + maybe-install-strip-target-zlib \ + maybe-install-strip-target-rda \ + maybe-install-strip-target-libada \ + maybe-install-strip-target-libgm2 \ + maybe-install-strip-target-libgomp \ + maybe-install-strip-target-libitm \ + maybe-install-strip-target-libatomic \ + maybe-install-strip-target-libgrust + + +### other supporting targets + +MAKEDIRS= \ + $(DESTDIR)$(prefix) \ + $(DESTDIR)$(exec_prefix) +.PHONY: installdirs +installdirs: mkinstalldirs + $(SHELL) $(srcdir)/mkinstalldirs $(MAKEDIRS) + +dir.info: do-install-info + if [ -f $(srcdir)/texinfo/gen-info-dir ]; then \ + $(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new; \ + mv -f dir.info.new dir.info; \ + else true; \ + fi + +dist: + @echo "Building a full distribution of this tree isn't done" + @echo "via 'make dist'. Check out the etc/ subdirectory" + +etags tags: TAGS + +# Right now this just builds TAGS in each subdirectory. emacs19 has the +# ability to use several tags files at once, so there is probably no need +# to combine them into one big TAGS file (like CVS 1.3 does). We could +# (if we felt like it) have this Makefile write a piece of elisp which +# the user could load to tell emacs19 where all the TAGS files we just +# built are. +TAGS: do-TAGS + +# ------------------------------------ +# Macros for configure and all targets +# ------------------------------------ + + + + + +# -------------------------------------- +# Modules which run on the build machine +# -------------------------------------- + + +.PHONY: configure-build-libiberty maybe-configure-build-libiberty +maybe-configure-build-libiberty: +configure-build-libiberty: stage_current +maybe-configure-build-libiberty: configure-build-libiberty +configure-build-libiberty: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(BUILD_SUBDIR)/libiberty/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/libiberty; \ + $(BUILD_EXPORTS) \ + echo Configuring in $(BUILD_SUBDIR)/libiberty; \ + cd "$(BUILD_SUBDIR)/libiberty" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(BUILD_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-build-libiberty maybe-all-build-libiberty +maybe-all-build-libiberty: +all-build-libiberty: stage_current +TARGET-build-libiberty=all +maybe-all-build-libiberty: all-build-libiberty +all-build-libiberty: configure-build-libiberty + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(BUILD_EXPORTS) \ + (cd $(BUILD_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-libiberty)) + + + + + +.PHONY: configure-build-bison maybe-configure-build-bison +maybe-configure-build-bison: +configure-build-bison: stage_current + + + + + +.PHONY: all-build-bison maybe-all-build-bison +maybe-all-build-bison: +all-build-bison: stage_current + + + + + +.PHONY: configure-build-flex maybe-configure-build-flex +maybe-configure-build-flex: +configure-build-flex: stage_current + + + + + +.PHONY: all-build-flex maybe-all-build-flex +maybe-all-build-flex: +all-build-flex: stage_current + + + + + +.PHONY: configure-build-m4 maybe-configure-build-m4 +maybe-configure-build-m4: +configure-build-m4: stage_current + + + + + +.PHONY: all-build-m4 maybe-all-build-m4 +maybe-all-build-m4: +all-build-m4: stage_current + + + + + +.PHONY: configure-build-texinfo maybe-configure-build-texinfo +maybe-configure-build-texinfo: +configure-build-texinfo: stage_current + + + + + +.PHONY: all-build-texinfo maybe-all-build-texinfo +maybe-all-build-texinfo: +all-build-texinfo: stage_current + + + + + +.PHONY: configure-build-fixincludes maybe-configure-build-fixincludes +maybe-configure-build-fixincludes: +configure-build-fixincludes: stage_current +maybe-configure-build-fixincludes: configure-build-fixincludes +configure-build-fixincludes: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(BUILD_SUBDIR)/fixincludes/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/fixincludes; \ + $(BUILD_EXPORTS) \ + echo Configuring in $(BUILD_SUBDIR)/fixincludes; \ + cd "$(BUILD_SUBDIR)/fixincludes" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(BUILD_SUBDIR)/fixincludes/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=fixincludes; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-build-fixincludes maybe-all-build-fixincludes +maybe-all-build-fixincludes: +all-build-fixincludes: stage_current +TARGET-build-fixincludes=all +maybe-all-build-fixincludes: all-build-fixincludes +all-build-fixincludes: configure-build-fixincludes + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(BUILD_EXPORTS) \ + (cd $(BUILD_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-fixincludes)) + + + + + +.PHONY: configure-build-libcpp maybe-configure-build-libcpp +maybe-configure-build-libcpp: +configure-build-libcpp: stage_current +maybe-configure-build-libcpp: configure-build-libcpp +configure-build-libcpp: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(BUILD_SUBDIR)/libcpp/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(BUILD_SUBDIR)/libcpp; \ + $(BUILD_EXPORTS) \ + echo Configuring in $(BUILD_SUBDIR)/libcpp; \ + cd "$(BUILD_SUBDIR)/libcpp" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(BUILD_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \ + --target=${target_alias} --disable-nls am_cv_func_iconv=no \ + || exit 1 + + + + + +.PHONY: all-build-libcpp maybe-all-build-libcpp +maybe-all-build-libcpp: +all-build-libcpp: stage_current +TARGET-build-libcpp=all +maybe-all-build-libcpp: all-build-libcpp +all-build-libcpp: configure-build-libcpp + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(BUILD_EXPORTS) \ + (cd $(BUILD_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-libcpp)) + + + + + +# -------------------------------------- +# Modules which run on the host machine +# -------------------------------------- + + +.PHONY: configure-bfd maybe-configure-bfd +maybe-configure-bfd: +configure-bfd: stage_current + + + +.PHONY: configure-stage1-bfd maybe-configure-stage1-bfd +maybe-configure-stage1-bfd: + +.PHONY: configure-stage2-bfd maybe-configure-stage2-bfd +maybe-configure-stage2-bfd: + +.PHONY: configure-stage3-bfd maybe-configure-stage3-bfd +maybe-configure-stage3-bfd: + +.PHONY: configure-stage4-bfd maybe-configure-stage4-bfd +maybe-configure-stage4-bfd: + +.PHONY: configure-stageprofile-bfd maybe-configure-stageprofile-bfd +maybe-configure-stageprofile-bfd: + +.PHONY: configure-stagetrain-bfd maybe-configure-stagetrain-bfd +maybe-configure-stagetrain-bfd: + +.PHONY: configure-stagefeedback-bfd maybe-configure-stagefeedback-bfd +maybe-configure-stagefeedback-bfd: + +.PHONY: configure-stageautoprofile-bfd maybe-configure-stageautoprofile-bfd +maybe-configure-stageautoprofile-bfd: + +.PHONY: configure-stageautofeedback-bfd maybe-configure-stageautofeedback-bfd +maybe-configure-stageautofeedback-bfd: + + + + + +.PHONY: all-bfd maybe-all-bfd +maybe-all-bfd: +all-bfd: stage_current + + + +.PHONY: all-stage1-bfd maybe-all-stage1-bfd +.PHONY: clean-stage1-bfd maybe-clean-stage1-bfd +maybe-all-stage1-bfd: +maybe-clean-stage1-bfd: + + +.PHONY: all-stage2-bfd maybe-all-stage2-bfd +.PHONY: clean-stage2-bfd maybe-clean-stage2-bfd +maybe-all-stage2-bfd: +maybe-clean-stage2-bfd: + + +.PHONY: all-stage3-bfd maybe-all-stage3-bfd +.PHONY: clean-stage3-bfd maybe-clean-stage3-bfd +maybe-all-stage3-bfd: +maybe-clean-stage3-bfd: + + +.PHONY: all-stage4-bfd maybe-all-stage4-bfd +.PHONY: clean-stage4-bfd maybe-clean-stage4-bfd +maybe-all-stage4-bfd: +maybe-clean-stage4-bfd: + + +.PHONY: all-stageprofile-bfd maybe-all-stageprofile-bfd +.PHONY: clean-stageprofile-bfd maybe-clean-stageprofile-bfd +maybe-all-stageprofile-bfd: +maybe-clean-stageprofile-bfd: + + +.PHONY: all-stagetrain-bfd maybe-all-stagetrain-bfd +.PHONY: clean-stagetrain-bfd maybe-clean-stagetrain-bfd +maybe-all-stagetrain-bfd: +maybe-clean-stagetrain-bfd: + + +.PHONY: all-stagefeedback-bfd maybe-all-stagefeedback-bfd +.PHONY: clean-stagefeedback-bfd maybe-clean-stagefeedback-bfd +maybe-all-stagefeedback-bfd: +maybe-clean-stagefeedback-bfd: + + +.PHONY: all-stageautoprofile-bfd maybe-all-stageautoprofile-bfd +.PHONY: clean-stageautoprofile-bfd maybe-clean-stageautoprofile-bfd +maybe-all-stageautoprofile-bfd: +maybe-clean-stageautoprofile-bfd: + + +.PHONY: all-stageautofeedback-bfd maybe-all-stageautofeedback-bfd +.PHONY: clean-stageautofeedback-bfd maybe-clean-stageautofeedback-bfd +maybe-all-stageautofeedback-bfd: +maybe-clean-stageautofeedback-bfd: + + + + + +.PHONY: check-bfd maybe-check-bfd +maybe-check-bfd: + +.PHONY: install-bfd maybe-install-bfd +maybe-install-bfd: + +.PHONY: install-strip-bfd maybe-install-strip-bfd +maybe-install-strip-bfd: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-bfd info-bfd +maybe-info-bfd: + +.PHONY: maybe-dvi-bfd dvi-bfd +maybe-dvi-bfd: + +.PHONY: maybe-pdf-bfd pdf-bfd +maybe-pdf-bfd: + +.PHONY: maybe-html-bfd html-bfd +maybe-html-bfd: + +.PHONY: maybe-TAGS-bfd TAGS-bfd +maybe-TAGS-bfd: + +.PHONY: maybe-install-info-bfd install-info-bfd +maybe-install-info-bfd: + +.PHONY: maybe-install-dvi-bfd install-dvi-bfd +maybe-install-dvi-bfd: + +.PHONY: maybe-install-pdf-bfd install-pdf-bfd +maybe-install-pdf-bfd: + +.PHONY: maybe-install-html-bfd install-html-bfd +maybe-install-html-bfd: + +.PHONY: maybe-installcheck-bfd installcheck-bfd +maybe-installcheck-bfd: + +.PHONY: maybe-mostlyclean-bfd mostlyclean-bfd +maybe-mostlyclean-bfd: + +.PHONY: maybe-clean-bfd clean-bfd +maybe-clean-bfd: + +.PHONY: maybe-distclean-bfd distclean-bfd +maybe-distclean-bfd: + +.PHONY: maybe-maintainer-clean-bfd maintainer-clean-bfd +maybe-maintainer-clean-bfd: + + + +.PHONY: configure-opcodes maybe-configure-opcodes +maybe-configure-opcodes: +configure-opcodes: stage_current + + + +.PHONY: configure-stage1-opcodes maybe-configure-stage1-opcodes +maybe-configure-stage1-opcodes: + +.PHONY: configure-stage2-opcodes maybe-configure-stage2-opcodes +maybe-configure-stage2-opcodes: + +.PHONY: configure-stage3-opcodes maybe-configure-stage3-opcodes +maybe-configure-stage3-opcodes: + +.PHONY: configure-stage4-opcodes maybe-configure-stage4-opcodes +maybe-configure-stage4-opcodes: + +.PHONY: configure-stageprofile-opcodes maybe-configure-stageprofile-opcodes +maybe-configure-stageprofile-opcodes: + +.PHONY: configure-stagetrain-opcodes maybe-configure-stagetrain-opcodes +maybe-configure-stagetrain-opcodes: + +.PHONY: configure-stagefeedback-opcodes maybe-configure-stagefeedback-opcodes +maybe-configure-stagefeedback-opcodes: + +.PHONY: configure-stageautoprofile-opcodes maybe-configure-stageautoprofile-opcodes +maybe-configure-stageautoprofile-opcodes: + +.PHONY: configure-stageautofeedback-opcodes maybe-configure-stageautofeedback-opcodes +maybe-configure-stageautofeedback-opcodes: + + + + + +.PHONY: all-opcodes maybe-all-opcodes +maybe-all-opcodes: +all-opcodes: stage_current + + + +.PHONY: all-stage1-opcodes maybe-all-stage1-opcodes +.PHONY: clean-stage1-opcodes maybe-clean-stage1-opcodes +maybe-all-stage1-opcodes: +maybe-clean-stage1-opcodes: + + +.PHONY: all-stage2-opcodes maybe-all-stage2-opcodes +.PHONY: clean-stage2-opcodes maybe-clean-stage2-opcodes +maybe-all-stage2-opcodes: +maybe-clean-stage2-opcodes: + + +.PHONY: all-stage3-opcodes maybe-all-stage3-opcodes +.PHONY: clean-stage3-opcodes maybe-clean-stage3-opcodes +maybe-all-stage3-opcodes: +maybe-clean-stage3-opcodes: + + +.PHONY: all-stage4-opcodes maybe-all-stage4-opcodes +.PHONY: clean-stage4-opcodes maybe-clean-stage4-opcodes +maybe-all-stage4-opcodes: +maybe-clean-stage4-opcodes: + + +.PHONY: all-stageprofile-opcodes maybe-all-stageprofile-opcodes +.PHONY: clean-stageprofile-opcodes maybe-clean-stageprofile-opcodes +maybe-all-stageprofile-opcodes: +maybe-clean-stageprofile-opcodes: + + +.PHONY: all-stagetrain-opcodes maybe-all-stagetrain-opcodes +.PHONY: clean-stagetrain-opcodes maybe-clean-stagetrain-opcodes +maybe-all-stagetrain-opcodes: +maybe-clean-stagetrain-opcodes: + + +.PHONY: all-stagefeedback-opcodes maybe-all-stagefeedback-opcodes +.PHONY: clean-stagefeedback-opcodes maybe-clean-stagefeedback-opcodes +maybe-all-stagefeedback-opcodes: +maybe-clean-stagefeedback-opcodes: + + +.PHONY: all-stageautoprofile-opcodes maybe-all-stageautoprofile-opcodes +.PHONY: clean-stageautoprofile-opcodes maybe-clean-stageautoprofile-opcodes +maybe-all-stageautoprofile-opcodes: +maybe-clean-stageautoprofile-opcodes: + + +.PHONY: all-stageautofeedback-opcodes maybe-all-stageautofeedback-opcodes +.PHONY: clean-stageautofeedback-opcodes maybe-clean-stageautofeedback-opcodes +maybe-all-stageautofeedback-opcodes: +maybe-clean-stageautofeedback-opcodes: + + + + + +.PHONY: check-opcodes maybe-check-opcodes +maybe-check-opcodes: + +.PHONY: install-opcodes maybe-install-opcodes +maybe-install-opcodes: + +.PHONY: install-strip-opcodes maybe-install-strip-opcodes +maybe-install-strip-opcodes: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-opcodes info-opcodes +maybe-info-opcodes: + +.PHONY: maybe-dvi-opcodes dvi-opcodes +maybe-dvi-opcodes: + +.PHONY: maybe-pdf-opcodes pdf-opcodes +maybe-pdf-opcodes: + +.PHONY: maybe-html-opcodes html-opcodes +maybe-html-opcodes: + +.PHONY: maybe-TAGS-opcodes TAGS-opcodes +maybe-TAGS-opcodes: + +.PHONY: maybe-install-info-opcodes install-info-opcodes +maybe-install-info-opcodes: + +.PHONY: maybe-install-dvi-opcodes install-dvi-opcodes +maybe-install-dvi-opcodes: + +.PHONY: maybe-install-pdf-opcodes install-pdf-opcodes +maybe-install-pdf-opcodes: + +.PHONY: maybe-install-html-opcodes install-html-opcodes +maybe-install-html-opcodes: + +.PHONY: maybe-installcheck-opcodes installcheck-opcodes +maybe-installcheck-opcodes: + +.PHONY: maybe-mostlyclean-opcodes mostlyclean-opcodes +maybe-mostlyclean-opcodes: + +.PHONY: maybe-clean-opcodes clean-opcodes +maybe-clean-opcodes: + +.PHONY: maybe-distclean-opcodes distclean-opcodes +maybe-distclean-opcodes: + +.PHONY: maybe-maintainer-clean-opcodes maintainer-clean-opcodes +maybe-maintainer-clean-opcodes: + + + +.PHONY: configure-binutils maybe-configure-binutils +maybe-configure-binutils: +configure-binutils: stage_current + + + +.PHONY: configure-stage1-binutils maybe-configure-stage1-binutils +maybe-configure-stage1-binutils: + +.PHONY: configure-stage2-binutils maybe-configure-stage2-binutils +maybe-configure-stage2-binutils: + +.PHONY: configure-stage3-binutils maybe-configure-stage3-binutils +maybe-configure-stage3-binutils: + +.PHONY: configure-stage4-binutils maybe-configure-stage4-binutils +maybe-configure-stage4-binutils: + +.PHONY: configure-stageprofile-binutils maybe-configure-stageprofile-binutils +maybe-configure-stageprofile-binutils: + +.PHONY: configure-stagetrain-binutils maybe-configure-stagetrain-binutils +maybe-configure-stagetrain-binutils: + +.PHONY: configure-stagefeedback-binutils maybe-configure-stagefeedback-binutils +maybe-configure-stagefeedback-binutils: + +.PHONY: configure-stageautoprofile-binutils maybe-configure-stageautoprofile-binutils +maybe-configure-stageautoprofile-binutils: + +.PHONY: configure-stageautofeedback-binutils maybe-configure-stageautofeedback-binutils +maybe-configure-stageautofeedback-binutils: + + + + + +.PHONY: all-binutils maybe-all-binutils +maybe-all-binutils: +all-binutils: stage_current + + + +.PHONY: all-stage1-binutils maybe-all-stage1-binutils +.PHONY: clean-stage1-binutils maybe-clean-stage1-binutils +maybe-all-stage1-binutils: +maybe-clean-stage1-binutils: + + +.PHONY: all-stage2-binutils maybe-all-stage2-binutils +.PHONY: clean-stage2-binutils maybe-clean-stage2-binutils +maybe-all-stage2-binutils: +maybe-clean-stage2-binutils: + + +.PHONY: all-stage3-binutils maybe-all-stage3-binutils +.PHONY: clean-stage3-binutils maybe-clean-stage3-binutils +maybe-all-stage3-binutils: +maybe-clean-stage3-binutils: + + +.PHONY: all-stage4-binutils maybe-all-stage4-binutils +.PHONY: clean-stage4-binutils maybe-clean-stage4-binutils +maybe-all-stage4-binutils: +maybe-clean-stage4-binutils: + + +.PHONY: all-stageprofile-binutils maybe-all-stageprofile-binutils +.PHONY: clean-stageprofile-binutils maybe-clean-stageprofile-binutils +maybe-all-stageprofile-binutils: +maybe-clean-stageprofile-binutils: + + +.PHONY: all-stagetrain-binutils maybe-all-stagetrain-binutils +.PHONY: clean-stagetrain-binutils maybe-clean-stagetrain-binutils +maybe-all-stagetrain-binutils: +maybe-clean-stagetrain-binutils: + + +.PHONY: all-stagefeedback-binutils maybe-all-stagefeedback-binutils +.PHONY: clean-stagefeedback-binutils maybe-clean-stagefeedback-binutils +maybe-all-stagefeedback-binutils: +maybe-clean-stagefeedback-binutils: + + +.PHONY: all-stageautoprofile-binutils maybe-all-stageautoprofile-binutils +.PHONY: clean-stageautoprofile-binutils maybe-clean-stageautoprofile-binutils +maybe-all-stageautoprofile-binutils: +maybe-clean-stageautoprofile-binutils: + + +.PHONY: all-stageautofeedback-binutils maybe-all-stageautofeedback-binutils +.PHONY: clean-stageautofeedback-binutils maybe-clean-stageautofeedback-binutils +maybe-all-stageautofeedback-binutils: +maybe-clean-stageautofeedback-binutils: + + + + + +.PHONY: check-binutils maybe-check-binutils +maybe-check-binutils: + +.PHONY: install-binutils maybe-install-binutils +maybe-install-binutils: + +.PHONY: install-strip-binutils maybe-install-strip-binutils +maybe-install-strip-binutils: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-binutils info-binutils +maybe-info-binutils: + +.PHONY: maybe-dvi-binutils dvi-binutils +maybe-dvi-binutils: + +.PHONY: maybe-pdf-binutils pdf-binutils +maybe-pdf-binutils: + +.PHONY: maybe-html-binutils html-binutils +maybe-html-binutils: + +.PHONY: maybe-TAGS-binutils TAGS-binutils +maybe-TAGS-binutils: + +.PHONY: maybe-install-info-binutils install-info-binutils +maybe-install-info-binutils: + +.PHONY: maybe-install-dvi-binutils install-dvi-binutils +maybe-install-dvi-binutils: + +.PHONY: maybe-install-pdf-binutils install-pdf-binutils +maybe-install-pdf-binutils: + +.PHONY: maybe-install-html-binutils install-html-binutils +maybe-install-html-binutils: + +.PHONY: maybe-installcheck-binutils installcheck-binutils +maybe-installcheck-binutils: + +.PHONY: maybe-mostlyclean-binutils mostlyclean-binutils +maybe-mostlyclean-binutils: + +.PHONY: maybe-clean-binutils clean-binutils +maybe-clean-binutils: + +.PHONY: maybe-distclean-binutils distclean-binutils +maybe-distclean-binutils: + +.PHONY: maybe-maintainer-clean-binutils maintainer-clean-binutils +maybe-maintainer-clean-binutils: + + + +.PHONY: configure-bison maybe-configure-bison +maybe-configure-bison: +configure-bison: stage_current + + + + + +.PHONY: all-bison maybe-all-bison +maybe-all-bison: +all-bison: stage_current + + + + +.PHONY: check-bison maybe-check-bison +maybe-check-bison: + +.PHONY: install-bison maybe-install-bison +maybe-install-bison: + +.PHONY: install-strip-bison maybe-install-strip-bison +maybe-install-strip-bison: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-bison info-bison +maybe-info-bison: + +.PHONY: maybe-dvi-bison dvi-bison +maybe-dvi-bison: + +.PHONY: maybe-pdf-bison pdf-bison +maybe-pdf-bison: + +.PHONY: maybe-html-bison html-bison +maybe-html-bison: + +.PHONY: maybe-TAGS-bison TAGS-bison +maybe-TAGS-bison: + +.PHONY: maybe-install-info-bison install-info-bison +maybe-install-info-bison: + +.PHONY: maybe-install-dvi-bison install-dvi-bison +maybe-install-dvi-bison: + +.PHONY: maybe-install-pdf-bison install-pdf-bison +maybe-install-pdf-bison: + +.PHONY: maybe-install-html-bison install-html-bison +maybe-install-html-bison: + +.PHONY: maybe-installcheck-bison installcheck-bison +maybe-installcheck-bison: + +.PHONY: maybe-mostlyclean-bison mostlyclean-bison +maybe-mostlyclean-bison: + +.PHONY: maybe-clean-bison clean-bison +maybe-clean-bison: + +.PHONY: maybe-distclean-bison distclean-bison +maybe-distclean-bison: + +.PHONY: maybe-maintainer-clean-bison maintainer-clean-bison +maybe-maintainer-clean-bison: + + + +.PHONY: configure-cgen maybe-configure-cgen +maybe-configure-cgen: +configure-cgen: stage_current + + + + + +.PHONY: all-cgen maybe-all-cgen +maybe-all-cgen: +all-cgen: stage_current + + + + +.PHONY: check-cgen maybe-check-cgen +maybe-check-cgen: + +.PHONY: install-cgen maybe-install-cgen +maybe-install-cgen: + +.PHONY: install-strip-cgen maybe-install-strip-cgen +maybe-install-strip-cgen: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-cgen info-cgen +maybe-info-cgen: + +.PHONY: maybe-dvi-cgen dvi-cgen +maybe-dvi-cgen: + +.PHONY: maybe-pdf-cgen pdf-cgen +maybe-pdf-cgen: + +.PHONY: maybe-html-cgen html-cgen +maybe-html-cgen: + +.PHONY: maybe-TAGS-cgen TAGS-cgen +maybe-TAGS-cgen: + +.PHONY: maybe-install-info-cgen install-info-cgen +maybe-install-info-cgen: + +.PHONY: maybe-install-dvi-cgen install-dvi-cgen +maybe-install-dvi-cgen: + +.PHONY: maybe-install-pdf-cgen install-pdf-cgen +maybe-install-pdf-cgen: + +.PHONY: maybe-install-html-cgen install-html-cgen +maybe-install-html-cgen: + +.PHONY: maybe-installcheck-cgen installcheck-cgen +maybe-installcheck-cgen: + +.PHONY: maybe-mostlyclean-cgen mostlyclean-cgen +maybe-mostlyclean-cgen: + +.PHONY: maybe-clean-cgen clean-cgen +maybe-clean-cgen: + +.PHONY: maybe-distclean-cgen distclean-cgen +maybe-distclean-cgen: + +.PHONY: maybe-maintainer-clean-cgen maintainer-clean-cgen +maybe-maintainer-clean-cgen: + + + +.PHONY: configure-dejagnu maybe-configure-dejagnu +maybe-configure-dejagnu: +configure-dejagnu: stage_current + + + + + +.PHONY: all-dejagnu maybe-all-dejagnu +maybe-all-dejagnu: +all-dejagnu: stage_current + + + + +.PHONY: check-dejagnu maybe-check-dejagnu +maybe-check-dejagnu: + +.PHONY: install-dejagnu maybe-install-dejagnu +maybe-install-dejagnu: + +.PHONY: install-strip-dejagnu maybe-install-strip-dejagnu +maybe-install-strip-dejagnu: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-dejagnu info-dejagnu +maybe-info-dejagnu: + +.PHONY: maybe-dvi-dejagnu dvi-dejagnu +maybe-dvi-dejagnu: + +.PHONY: maybe-pdf-dejagnu pdf-dejagnu +maybe-pdf-dejagnu: + +.PHONY: maybe-html-dejagnu html-dejagnu +maybe-html-dejagnu: + +.PHONY: maybe-TAGS-dejagnu TAGS-dejagnu +maybe-TAGS-dejagnu: + +.PHONY: maybe-install-info-dejagnu install-info-dejagnu +maybe-install-info-dejagnu: + +.PHONY: maybe-install-dvi-dejagnu install-dvi-dejagnu +maybe-install-dvi-dejagnu: + +.PHONY: maybe-install-pdf-dejagnu install-pdf-dejagnu +maybe-install-pdf-dejagnu: + +.PHONY: maybe-install-html-dejagnu install-html-dejagnu +maybe-install-html-dejagnu: + +.PHONY: maybe-installcheck-dejagnu installcheck-dejagnu +maybe-installcheck-dejagnu: + +.PHONY: maybe-mostlyclean-dejagnu mostlyclean-dejagnu +maybe-mostlyclean-dejagnu: + +.PHONY: maybe-clean-dejagnu clean-dejagnu +maybe-clean-dejagnu: + +.PHONY: maybe-distclean-dejagnu distclean-dejagnu +maybe-distclean-dejagnu: + +.PHONY: maybe-maintainer-clean-dejagnu maintainer-clean-dejagnu +maybe-maintainer-clean-dejagnu: + + + +.PHONY: configure-etc maybe-configure-etc +maybe-configure-etc: +configure-etc: stage_current + + + + + +.PHONY: all-etc maybe-all-etc +maybe-all-etc: +all-etc: stage_current + + + + +.PHONY: check-etc maybe-check-etc +maybe-check-etc: + +.PHONY: install-etc maybe-install-etc +maybe-install-etc: + +.PHONY: install-strip-etc maybe-install-strip-etc +maybe-install-strip-etc: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-etc info-etc +maybe-info-etc: + +.PHONY: maybe-dvi-etc dvi-etc +maybe-dvi-etc: + +.PHONY: maybe-pdf-etc pdf-etc +maybe-pdf-etc: + +.PHONY: maybe-html-etc html-etc +maybe-html-etc: + +.PHONY: maybe-TAGS-etc TAGS-etc +maybe-TAGS-etc: + +.PHONY: maybe-install-info-etc install-info-etc +maybe-install-info-etc: + +.PHONY: maybe-install-dvi-etc install-dvi-etc +maybe-install-dvi-etc: + +.PHONY: maybe-install-pdf-etc install-pdf-etc +maybe-install-pdf-etc: + +.PHONY: maybe-install-html-etc install-html-etc +maybe-install-html-etc: + +.PHONY: maybe-installcheck-etc installcheck-etc +maybe-installcheck-etc: + +.PHONY: maybe-mostlyclean-etc mostlyclean-etc +maybe-mostlyclean-etc: + +.PHONY: maybe-clean-etc clean-etc +maybe-clean-etc: + +.PHONY: maybe-distclean-etc distclean-etc +maybe-distclean-etc: + +.PHONY: maybe-maintainer-clean-etc maintainer-clean-etc +maybe-maintainer-clean-etc: + + + +.PHONY: configure-fastjar maybe-configure-fastjar +maybe-configure-fastjar: +configure-fastjar: stage_current + + + + + +.PHONY: all-fastjar maybe-all-fastjar +maybe-all-fastjar: +all-fastjar: stage_current + + + + +.PHONY: check-fastjar maybe-check-fastjar +maybe-check-fastjar: + +.PHONY: install-fastjar maybe-install-fastjar +maybe-install-fastjar: + +.PHONY: install-strip-fastjar maybe-install-strip-fastjar +maybe-install-strip-fastjar: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-fastjar info-fastjar +maybe-info-fastjar: + +.PHONY: maybe-dvi-fastjar dvi-fastjar +maybe-dvi-fastjar: + +.PHONY: maybe-pdf-fastjar pdf-fastjar +maybe-pdf-fastjar: + +.PHONY: maybe-html-fastjar html-fastjar +maybe-html-fastjar: + +.PHONY: maybe-TAGS-fastjar TAGS-fastjar +maybe-TAGS-fastjar: + +.PHONY: maybe-install-info-fastjar install-info-fastjar +maybe-install-info-fastjar: + +.PHONY: maybe-install-dvi-fastjar install-dvi-fastjar +maybe-install-dvi-fastjar: + +.PHONY: maybe-install-pdf-fastjar install-pdf-fastjar +maybe-install-pdf-fastjar: + +.PHONY: maybe-install-html-fastjar install-html-fastjar +maybe-install-html-fastjar: + +.PHONY: maybe-installcheck-fastjar installcheck-fastjar +maybe-installcheck-fastjar: + +.PHONY: maybe-mostlyclean-fastjar mostlyclean-fastjar +maybe-mostlyclean-fastjar: + +.PHONY: maybe-clean-fastjar clean-fastjar +maybe-clean-fastjar: + +.PHONY: maybe-distclean-fastjar distclean-fastjar +maybe-distclean-fastjar: + +.PHONY: maybe-maintainer-clean-fastjar maintainer-clean-fastjar +maybe-maintainer-clean-fastjar: + + + +.PHONY: configure-fixincludes maybe-configure-fixincludes +maybe-configure-fixincludes: +configure-fixincludes: stage_current +maybe-configure-fixincludes: configure-fixincludes +configure-fixincludes: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/fixincludes/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/fixincludes; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/fixincludes; \ + cd "$(HOST_SUBDIR)/fixincludes" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/fixincludes/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=fixincludes; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-fixincludes maybe-configure-stage1-fixincludes +maybe-configure-stage1-fixincludes: + +.PHONY: configure-stage2-fixincludes maybe-configure-stage2-fixincludes +maybe-configure-stage2-fixincludes: + +.PHONY: configure-stage3-fixincludes maybe-configure-stage3-fixincludes +maybe-configure-stage3-fixincludes: + +.PHONY: configure-stage4-fixincludes maybe-configure-stage4-fixincludes +maybe-configure-stage4-fixincludes: + +.PHONY: configure-stageprofile-fixincludes maybe-configure-stageprofile-fixincludes +maybe-configure-stageprofile-fixincludes: + +.PHONY: configure-stagetrain-fixincludes maybe-configure-stagetrain-fixincludes +maybe-configure-stagetrain-fixincludes: + +.PHONY: configure-stagefeedback-fixincludes maybe-configure-stagefeedback-fixincludes +maybe-configure-stagefeedback-fixincludes: + +.PHONY: configure-stageautoprofile-fixincludes maybe-configure-stageautoprofile-fixincludes +maybe-configure-stageautoprofile-fixincludes: + +.PHONY: configure-stageautofeedback-fixincludes maybe-configure-stageautofeedback-fixincludes +maybe-configure-stageautofeedback-fixincludes: + + + + + +.PHONY: all-fixincludes maybe-all-fixincludes +maybe-all-fixincludes: +all-fixincludes: stage_current +TARGET-fixincludes=all +maybe-all-fixincludes: all-fixincludes +all-fixincludes: configure-fixincludes + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-fixincludes)) + + + +.PHONY: all-stage1-fixincludes maybe-all-stage1-fixincludes +.PHONY: clean-stage1-fixincludes maybe-clean-stage1-fixincludes +maybe-all-stage1-fixincludes: +maybe-clean-stage1-fixincludes: + + +.PHONY: all-stage2-fixincludes maybe-all-stage2-fixincludes +.PHONY: clean-stage2-fixincludes maybe-clean-stage2-fixincludes +maybe-all-stage2-fixincludes: +maybe-clean-stage2-fixincludes: + + +.PHONY: all-stage3-fixincludes maybe-all-stage3-fixincludes +.PHONY: clean-stage3-fixincludes maybe-clean-stage3-fixincludes +maybe-all-stage3-fixincludes: +maybe-clean-stage3-fixincludes: + + +.PHONY: all-stage4-fixincludes maybe-all-stage4-fixincludes +.PHONY: clean-stage4-fixincludes maybe-clean-stage4-fixincludes +maybe-all-stage4-fixincludes: +maybe-clean-stage4-fixincludes: + + +.PHONY: all-stageprofile-fixincludes maybe-all-stageprofile-fixincludes +.PHONY: clean-stageprofile-fixincludes maybe-clean-stageprofile-fixincludes +maybe-all-stageprofile-fixincludes: +maybe-clean-stageprofile-fixincludes: + + +.PHONY: all-stagetrain-fixincludes maybe-all-stagetrain-fixincludes +.PHONY: clean-stagetrain-fixincludes maybe-clean-stagetrain-fixincludes +maybe-all-stagetrain-fixincludes: +maybe-clean-stagetrain-fixincludes: + + +.PHONY: all-stagefeedback-fixincludes maybe-all-stagefeedback-fixincludes +.PHONY: clean-stagefeedback-fixincludes maybe-clean-stagefeedback-fixincludes +maybe-all-stagefeedback-fixincludes: +maybe-clean-stagefeedback-fixincludes: + + +.PHONY: all-stageautoprofile-fixincludes maybe-all-stageautoprofile-fixincludes +.PHONY: clean-stageautoprofile-fixincludes maybe-clean-stageautoprofile-fixincludes +maybe-all-stageautoprofile-fixincludes: +maybe-clean-stageautoprofile-fixincludes: + + +.PHONY: all-stageautofeedback-fixincludes maybe-all-stageautofeedback-fixincludes +.PHONY: clean-stageautofeedback-fixincludes maybe-clean-stageautofeedback-fixincludes +maybe-all-stageautofeedback-fixincludes: +maybe-clean-stageautofeedback-fixincludes: + + + + + +.PHONY: check-fixincludes maybe-check-fixincludes +maybe-check-fixincludes: +maybe-check-fixincludes: check-fixincludes + +check-fixincludes: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-fixincludes maybe-install-fixincludes +maybe-install-fixincludes: +maybe-install-fixincludes: install-fixincludes + +install-fixincludes: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-fixincludes maybe-install-strip-fixincludes +maybe-install-strip-fixincludes: +maybe-install-strip-fixincludes: install-strip-fixincludes + +install-strip-fixincludes: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-fixincludes info-fixincludes +maybe-info-fixincludes: +maybe-info-fixincludes: info-fixincludes + +info-fixincludes: \ + configure-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-fixincludes dvi-fixincludes +maybe-dvi-fixincludes: +maybe-dvi-fixincludes: dvi-fixincludes + +dvi-fixincludes: \ + configure-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-fixincludes pdf-fixincludes +maybe-pdf-fixincludes: +maybe-pdf-fixincludes: pdf-fixincludes + +pdf-fixincludes: \ + configure-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-fixincludes html-fixincludes +maybe-html-fixincludes: +maybe-html-fixincludes: html-fixincludes + +html-fixincludes: \ + configure-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-fixincludes TAGS-fixincludes +maybe-TAGS-fixincludes: +maybe-TAGS-fixincludes: TAGS-fixincludes + +# fixincludes doesn't support TAGS. +TAGS-fixincludes: + + +.PHONY: maybe-install-info-fixincludes install-info-fixincludes +maybe-install-info-fixincludes: +maybe-install-info-fixincludes: install-info-fixincludes + +install-info-fixincludes: \ + configure-fixincludes \ + info-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-fixincludes install-dvi-fixincludes +maybe-install-dvi-fixincludes: +maybe-install-dvi-fixincludes: install-dvi-fixincludes + +# fixincludes doesn't support install-dvi. +install-dvi-fixincludes: + + +.PHONY: maybe-install-pdf-fixincludes install-pdf-fixincludes +maybe-install-pdf-fixincludes: +maybe-install-pdf-fixincludes: install-pdf-fixincludes + +install-pdf-fixincludes: \ + configure-fixincludes \ + pdf-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-fixincludes install-html-fixincludes +maybe-install-html-fixincludes: +maybe-install-html-fixincludes: install-html-fixincludes + +install-html-fixincludes: \ + configure-fixincludes \ + html-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-fixincludes installcheck-fixincludes +maybe-installcheck-fixincludes: +maybe-installcheck-fixincludes: installcheck-fixincludes + +installcheck-fixincludes: \ + configure-fixincludes + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-fixincludes mostlyclean-fixincludes +maybe-mostlyclean-fixincludes: +maybe-mostlyclean-fixincludes: mostlyclean-fixincludes + +mostlyclean-fixincludes: + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-fixincludes clean-fixincludes +maybe-clean-fixincludes: +maybe-clean-fixincludes: clean-fixincludes + +clean-fixincludes: + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-fixincludes distclean-fixincludes +maybe-distclean-fixincludes: +maybe-distclean-fixincludes: distclean-fixincludes + +distclean-fixincludes: + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-fixincludes maintainer-clean-fixincludes +maybe-maintainer-clean-fixincludes: +maybe-maintainer-clean-fixincludes: maintainer-clean-fixincludes + +maintainer-clean-fixincludes: + @[ -f ./fixincludes/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in fixincludes"; \ + (cd $(HOST_SUBDIR)/fixincludes && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-flex maybe-configure-flex +maybe-configure-flex: +configure-flex: stage_current + + + + + +.PHONY: all-flex maybe-all-flex +maybe-all-flex: +all-flex: stage_current + + + + +.PHONY: check-flex maybe-check-flex +maybe-check-flex: + +.PHONY: install-flex maybe-install-flex +maybe-install-flex: + +.PHONY: install-strip-flex maybe-install-strip-flex +maybe-install-strip-flex: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-flex info-flex +maybe-info-flex: + +.PHONY: maybe-dvi-flex dvi-flex +maybe-dvi-flex: + +.PHONY: maybe-pdf-flex pdf-flex +maybe-pdf-flex: + +.PHONY: maybe-html-flex html-flex +maybe-html-flex: + +.PHONY: maybe-TAGS-flex TAGS-flex +maybe-TAGS-flex: + +.PHONY: maybe-install-info-flex install-info-flex +maybe-install-info-flex: + +.PHONY: maybe-install-dvi-flex install-dvi-flex +maybe-install-dvi-flex: + +.PHONY: maybe-install-pdf-flex install-pdf-flex +maybe-install-pdf-flex: + +.PHONY: maybe-install-html-flex install-html-flex +maybe-install-html-flex: + +.PHONY: maybe-installcheck-flex installcheck-flex +maybe-installcheck-flex: + +.PHONY: maybe-mostlyclean-flex mostlyclean-flex +maybe-mostlyclean-flex: + +.PHONY: maybe-clean-flex clean-flex +maybe-clean-flex: + +.PHONY: maybe-distclean-flex distclean-flex +maybe-distclean-flex: + +.PHONY: maybe-maintainer-clean-flex maintainer-clean-flex +maybe-maintainer-clean-flex: + + + +.PHONY: configure-gas maybe-configure-gas +maybe-configure-gas: +configure-gas: stage_current + + + +.PHONY: configure-stage1-gas maybe-configure-stage1-gas +maybe-configure-stage1-gas: + +.PHONY: configure-stage2-gas maybe-configure-stage2-gas +maybe-configure-stage2-gas: + +.PHONY: configure-stage3-gas maybe-configure-stage3-gas +maybe-configure-stage3-gas: + +.PHONY: configure-stage4-gas maybe-configure-stage4-gas +maybe-configure-stage4-gas: + +.PHONY: configure-stageprofile-gas maybe-configure-stageprofile-gas +maybe-configure-stageprofile-gas: + +.PHONY: configure-stagetrain-gas maybe-configure-stagetrain-gas +maybe-configure-stagetrain-gas: + +.PHONY: configure-stagefeedback-gas maybe-configure-stagefeedback-gas +maybe-configure-stagefeedback-gas: + +.PHONY: configure-stageautoprofile-gas maybe-configure-stageautoprofile-gas +maybe-configure-stageautoprofile-gas: + +.PHONY: configure-stageautofeedback-gas maybe-configure-stageautofeedback-gas +maybe-configure-stageautofeedback-gas: + + + + + +.PHONY: all-gas maybe-all-gas +maybe-all-gas: +all-gas: stage_current + + + +.PHONY: all-stage1-gas maybe-all-stage1-gas +.PHONY: clean-stage1-gas maybe-clean-stage1-gas +maybe-all-stage1-gas: +maybe-clean-stage1-gas: + + +.PHONY: all-stage2-gas maybe-all-stage2-gas +.PHONY: clean-stage2-gas maybe-clean-stage2-gas +maybe-all-stage2-gas: +maybe-clean-stage2-gas: + + +.PHONY: all-stage3-gas maybe-all-stage3-gas +.PHONY: clean-stage3-gas maybe-clean-stage3-gas +maybe-all-stage3-gas: +maybe-clean-stage3-gas: + + +.PHONY: all-stage4-gas maybe-all-stage4-gas +.PHONY: clean-stage4-gas maybe-clean-stage4-gas +maybe-all-stage4-gas: +maybe-clean-stage4-gas: + + +.PHONY: all-stageprofile-gas maybe-all-stageprofile-gas +.PHONY: clean-stageprofile-gas maybe-clean-stageprofile-gas +maybe-all-stageprofile-gas: +maybe-clean-stageprofile-gas: + + +.PHONY: all-stagetrain-gas maybe-all-stagetrain-gas +.PHONY: clean-stagetrain-gas maybe-clean-stagetrain-gas +maybe-all-stagetrain-gas: +maybe-clean-stagetrain-gas: + + +.PHONY: all-stagefeedback-gas maybe-all-stagefeedback-gas +.PHONY: clean-stagefeedback-gas maybe-clean-stagefeedback-gas +maybe-all-stagefeedback-gas: +maybe-clean-stagefeedback-gas: + + +.PHONY: all-stageautoprofile-gas maybe-all-stageautoprofile-gas +.PHONY: clean-stageautoprofile-gas maybe-clean-stageautoprofile-gas +maybe-all-stageautoprofile-gas: +maybe-clean-stageautoprofile-gas: + + +.PHONY: all-stageautofeedback-gas maybe-all-stageautofeedback-gas +.PHONY: clean-stageautofeedback-gas maybe-clean-stageautofeedback-gas +maybe-all-stageautofeedback-gas: +maybe-clean-stageautofeedback-gas: + + + + + +.PHONY: check-gas maybe-check-gas +maybe-check-gas: + +.PHONY: install-gas maybe-install-gas +maybe-install-gas: + +.PHONY: install-strip-gas maybe-install-strip-gas +maybe-install-strip-gas: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gas info-gas +maybe-info-gas: + +.PHONY: maybe-dvi-gas dvi-gas +maybe-dvi-gas: + +.PHONY: maybe-pdf-gas pdf-gas +maybe-pdf-gas: + +.PHONY: maybe-html-gas html-gas +maybe-html-gas: + +.PHONY: maybe-TAGS-gas TAGS-gas +maybe-TAGS-gas: + +.PHONY: maybe-install-info-gas install-info-gas +maybe-install-info-gas: + +.PHONY: maybe-install-dvi-gas install-dvi-gas +maybe-install-dvi-gas: + +.PHONY: maybe-install-pdf-gas install-pdf-gas +maybe-install-pdf-gas: + +.PHONY: maybe-install-html-gas install-html-gas +maybe-install-html-gas: + +.PHONY: maybe-installcheck-gas installcheck-gas +maybe-installcheck-gas: + +.PHONY: maybe-mostlyclean-gas mostlyclean-gas +maybe-mostlyclean-gas: + +.PHONY: maybe-clean-gas clean-gas +maybe-clean-gas: + +.PHONY: maybe-distclean-gas distclean-gas +maybe-distclean-gas: + +.PHONY: maybe-maintainer-clean-gas maintainer-clean-gas +maybe-maintainer-clean-gas: + + + +.PHONY: configure-gcc maybe-configure-gcc +maybe-configure-gcc: +configure-gcc: stage_current +maybe-configure-gcc: configure-gcc +configure-gcc: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/gcc; \ + cd "$(HOST_SUBDIR)/gcc" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-gcc maybe-configure-stage1-gcc +maybe-configure-stage1-gcc: +maybe-configure-stage1-gcc: configure-stage1-gcc +configure-stage1-gcc: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stage2-gcc maybe-configure-stage2-gcc +maybe-configure-stage2-gcc: +maybe-configure-stage2-gcc: configure-stage2-gcc +configure-stage2-gcc: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stage3-gcc maybe-configure-stage3-gcc +maybe-configure-stage3-gcc: +maybe-configure-stage3-gcc: configure-stage3-gcc +configure-stage3-gcc: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stage4-gcc maybe-configure-stage4-gcc +maybe-configure-stage4-gcc: +maybe-configure-stage4-gcc: configure-stage4-gcc +configure-stage4-gcc: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stageprofile-gcc maybe-configure-stageprofile-gcc +maybe-configure-stageprofile-gcc: +maybe-configure-stageprofile-gcc: configure-stageprofile-gcc +configure-stageprofile-gcc: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stagetrain-gcc maybe-configure-stagetrain-gcc +maybe-configure-stagetrain-gcc: +maybe-configure-stagetrain-gcc: configure-stagetrain-gcc +configure-stagetrain-gcc: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stagefeedback-gcc maybe-configure-stagefeedback-gcc +maybe-configure-stagefeedback-gcc: +maybe-configure-stagefeedback-gcc: configure-stagefeedback-gcc +configure-stagefeedback-gcc: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stageautoprofile-gcc maybe-configure-stageautoprofile-gcc +maybe-configure-stageautoprofile-gcc: +maybe-configure-stageautoprofile-gcc: configure-stageautoprofile-gcc +configure-stageautoprofile-gcc: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stageautofeedback-gcc maybe-configure-stageautofeedback-gcc +maybe-configure-stageautofeedback-gcc: +maybe-configure-stageautofeedback-gcc: configure-stageautofeedback-gcc +configure-stageautofeedback-gcc: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/gcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \ + cd $(HOST_SUBDIR)/gcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) \ + + + + + + +.PHONY: all-gcc maybe-all-gcc +maybe-all-gcc: +all-gcc: stage_current +TARGET-gcc=all +maybe-all-gcc: all-gcc +all-gcc: configure-gcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + $(TARGET-gcc)) + + + +.PHONY: all-stage1-gcc maybe-all-stage1-gcc +.PHONY: clean-stage1-gcc maybe-clean-stage1-gcc +maybe-all-stage1-gcc: +maybe-clean-stage1-gcc: +maybe-all-stage1-gcc: all-stage1-gcc +all-stage1: all-stage1-gcc +TARGET-stage1-gcc = $(TARGET-gcc) +all-stage1-gcc: configure-stage1-gcc + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-gcc) + +maybe-clean-stage1-gcc: clean-stage1-gcc +clean-stage1: clean-stage1-gcc +clean-stage1-gcc: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-gcc/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stage2-gcc maybe-all-stage2-gcc +.PHONY: clean-stage2-gcc maybe-clean-stage2-gcc +maybe-all-stage2-gcc: +maybe-clean-stage2-gcc: +maybe-all-stage2-gcc: all-stage2-gcc +all-stage2: all-stage2-gcc +TARGET-stage2-gcc = $(TARGET-gcc) +all-stage2-gcc: configure-stage2-gcc + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-gcc) + +maybe-clean-stage2-gcc: clean-stage2-gcc +clean-stage2: clean-stage2-gcc +clean-stage2-gcc: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-gcc/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stage3-gcc maybe-all-stage3-gcc +.PHONY: clean-stage3-gcc maybe-clean-stage3-gcc +maybe-all-stage3-gcc: +maybe-clean-stage3-gcc: +maybe-all-stage3-gcc: all-stage3-gcc +all-stage3: all-stage3-gcc +TARGET-stage3-gcc = $(TARGET-gcc) +all-stage3-gcc: configure-stage3-gcc + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-gcc) + +maybe-clean-stage3-gcc: clean-stage3-gcc +clean-stage3: clean-stage3-gcc +clean-stage3-gcc: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-gcc/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stage4-gcc maybe-all-stage4-gcc +.PHONY: clean-stage4-gcc maybe-clean-stage4-gcc +maybe-all-stage4-gcc: +maybe-clean-stage4-gcc: +maybe-all-stage4-gcc: all-stage4-gcc +all-stage4: all-stage4-gcc +TARGET-stage4-gcc = $(TARGET-gcc) +all-stage4-gcc: configure-stage4-gcc + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-gcc) + +maybe-clean-stage4-gcc: clean-stage4-gcc +clean-stage4: clean-stage4-gcc +clean-stage4-gcc: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-gcc/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stageprofile-gcc maybe-all-stageprofile-gcc +.PHONY: clean-stageprofile-gcc maybe-clean-stageprofile-gcc +maybe-all-stageprofile-gcc: +maybe-clean-stageprofile-gcc: +maybe-all-stageprofile-gcc: all-stageprofile-gcc +all-stageprofile: all-stageprofile-gcc +TARGET-stageprofile-gcc = $(TARGET-gcc) +all-stageprofile-gcc: configure-stageprofile-gcc + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-gcc) + +maybe-clean-stageprofile-gcc: clean-stageprofile-gcc +clean-stageprofile: clean-stageprofile-gcc +clean-stageprofile-gcc: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-gcc/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stagetrain-gcc maybe-all-stagetrain-gcc +.PHONY: clean-stagetrain-gcc maybe-clean-stagetrain-gcc +maybe-all-stagetrain-gcc: +maybe-clean-stagetrain-gcc: +maybe-all-stagetrain-gcc: all-stagetrain-gcc +all-stagetrain: all-stagetrain-gcc +TARGET-stagetrain-gcc = $(TARGET-gcc) +all-stagetrain-gcc: configure-stagetrain-gcc + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-gcc) + +maybe-clean-stagetrain-gcc: clean-stagetrain-gcc +clean-stagetrain: clean-stagetrain-gcc +clean-stagetrain-gcc: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-gcc/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stagefeedback-gcc maybe-all-stagefeedback-gcc +.PHONY: clean-stagefeedback-gcc maybe-clean-stagefeedback-gcc +maybe-all-stagefeedback-gcc: +maybe-clean-stagefeedback-gcc: +maybe-all-stagefeedback-gcc: all-stagefeedback-gcc +all-stagefeedback: all-stagefeedback-gcc +TARGET-stagefeedback-gcc = $(TARGET-gcc) +all-stagefeedback-gcc: configure-stagefeedback-gcc + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-gcc) + +maybe-clean-stagefeedback-gcc: clean-stagefeedback-gcc +clean-stagefeedback: clean-stagefeedback-gcc +clean-stagefeedback-gcc: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-gcc/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stageautoprofile-gcc maybe-all-stageautoprofile-gcc +.PHONY: clean-stageautoprofile-gcc maybe-clean-stageautoprofile-gcc +maybe-all-stageautoprofile-gcc: +maybe-clean-stageautoprofile-gcc: +maybe-all-stageautoprofile-gcc: all-stageautoprofile-gcc +all-stageautoprofile: all-stageautoprofile-gcc +TARGET-stageautoprofile-gcc = $(TARGET-gcc) +all-stageautoprofile-gcc: configure-stageautoprofile-gcc + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-gcc) + +maybe-clean-stageautoprofile-gcc: clean-stageautoprofile-gcc +clean-stageautoprofile: clean-stageautoprofile-gcc +clean-stageautoprofile-gcc: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-gcc/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + +.PHONY: all-stageautofeedback-gcc maybe-all-stageautofeedback-gcc +.PHONY: clean-stageautofeedback-gcc maybe-clean-stageautofeedback-gcc +maybe-all-stageautofeedback-gcc: +maybe-clean-stageautofeedback-gcc: +maybe-all-stageautofeedback-gcc: all-stageautofeedback-gcc +all-stageautofeedback: all-stageautofeedback-gcc +TARGET-stageautofeedback-gcc = $(TARGET-gcc) +all-stageautofeedback-gcc: configure-stageautofeedback-gcc + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-gcc) + +maybe-clean-stageautofeedback-gcc: clean-stageautofeedback-gcc +clean-stageautofeedback: clean-stageautofeedback-gcc +clean-stageautofeedback-gcc: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-gcc/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) clean + + + + + +.PHONY: check-gcc maybe-check-gcc +maybe-check-gcc: +maybe-check-gcc: check-gcc + +check-gcc: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-gcc maybe-install-gcc +maybe-install-gcc: +maybe-install-gcc: install-gcc + +install-gcc: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) install) + + +.PHONY: install-strip-gcc maybe-install-strip-gcc +maybe-install-strip-gcc: +maybe-install-strip-gcc: install-strip-gcc + +install-strip-gcc: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gcc info-gcc +maybe-info-gcc: +maybe-info-gcc: info-gcc + +info-gcc: \ + configure-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-gcc dvi-gcc +maybe-dvi-gcc: +maybe-dvi-gcc: dvi-gcc + +dvi-gcc: \ + configure-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-gcc pdf-gcc +maybe-pdf-gcc: +maybe-pdf-gcc: pdf-gcc + +pdf-gcc: \ + configure-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-gcc html-gcc +maybe-html-gcc: +maybe-html-gcc: html-gcc + +html-gcc: \ + configure-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-gcc TAGS-gcc +maybe-TAGS-gcc: +maybe-TAGS-gcc: TAGS-gcc + +TAGS-gcc: \ + configure-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-gcc install-info-gcc +maybe-install-info-gcc: +maybe-install-info-gcc: install-info-gcc + +install-info-gcc: \ + configure-gcc \ + info-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-gcc install-dvi-gcc +maybe-install-dvi-gcc: +maybe-install-dvi-gcc: install-dvi-gcc + +install-dvi-gcc: \ + configure-gcc \ + dvi-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-gcc install-pdf-gcc +maybe-install-pdf-gcc: +maybe-install-pdf-gcc: install-pdf-gcc + +install-pdf-gcc: \ + configure-gcc \ + pdf-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-gcc install-html-gcc +maybe-install-html-gcc: +maybe-install-html-gcc: install-html-gcc + +install-html-gcc: \ + configure-gcc \ + html-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-gcc installcheck-gcc +maybe-installcheck-gcc: +maybe-installcheck-gcc: installcheck-gcc + +installcheck-gcc: \ + configure-gcc + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-gcc mostlyclean-gcc +maybe-mostlyclean-gcc: +maybe-mostlyclean-gcc: mostlyclean-gcc + +mostlyclean-gcc: + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-gcc clean-gcc +maybe-clean-gcc: +maybe-clean-gcc: clean-gcc + +clean-gcc: + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-gcc distclean-gcc +maybe-distclean-gcc: +maybe-distclean-gcc: distclean-gcc + +distclean-gcc: + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-gcc maintainer-clean-gcc +maybe-maintainer-clean-gcc: +maybe-maintainer-clean-gcc: maintainer-clean-gcc + +maintainer-clean-gcc: + @[ -f ./gcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in gcc"; \ + (cd $(HOST_SUBDIR)/gcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-gmp maybe-configure-gmp +maybe-configure-gmp: +configure-gmp: stage_current + + + +.PHONY: configure-stage1-gmp maybe-configure-stage1-gmp +maybe-configure-stage1-gmp: + +.PHONY: configure-stage2-gmp maybe-configure-stage2-gmp +maybe-configure-stage2-gmp: + +.PHONY: configure-stage3-gmp maybe-configure-stage3-gmp +maybe-configure-stage3-gmp: + +.PHONY: configure-stage4-gmp maybe-configure-stage4-gmp +maybe-configure-stage4-gmp: + +.PHONY: configure-stageprofile-gmp maybe-configure-stageprofile-gmp +maybe-configure-stageprofile-gmp: + +.PHONY: configure-stagetrain-gmp maybe-configure-stagetrain-gmp +maybe-configure-stagetrain-gmp: + +.PHONY: configure-stagefeedback-gmp maybe-configure-stagefeedback-gmp +maybe-configure-stagefeedback-gmp: + +.PHONY: configure-stageautoprofile-gmp maybe-configure-stageautoprofile-gmp +maybe-configure-stageautoprofile-gmp: + +.PHONY: configure-stageautofeedback-gmp maybe-configure-stageautofeedback-gmp +maybe-configure-stageautofeedback-gmp: + + + + + +.PHONY: all-gmp maybe-all-gmp +maybe-all-gmp: +all-gmp: stage_current + + + +.PHONY: all-stage1-gmp maybe-all-stage1-gmp +.PHONY: clean-stage1-gmp maybe-clean-stage1-gmp +maybe-all-stage1-gmp: +maybe-clean-stage1-gmp: + + +.PHONY: all-stage2-gmp maybe-all-stage2-gmp +.PHONY: clean-stage2-gmp maybe-clean-stage2-gmp +maybe-all-stage2-gmp: +maybe-clean-stage2-gmp: + + +.PHONY: all-stage3-gmp maybe-all-stage3-gmp +.PHONY: clean-stage3-gmp maybe-clean-stage3-gmp +maybe-all-stage3-gmp: +maybe-clean-stage3-gmp: + + +.PHONY: all-stage4-gmp maybe-all-stage4-gmp +.PHONY: clean-stage4-gmp maybe-clean-stage4-gmp +maybe-all-stage4-gmp: +maybe-clean-stage4-gmp: + + +.PHONY: all-stageprofile-gmp maybe-all-stageprofile-gmp +.PHONY: clean-stageprofile-gmp maybe-clean-stageprofile-gmp +maybe-all-stageprofile-gmp: +maybe-clean-stageprofile-gmp: + + +.PHONY: all-stagetrain-gmp maybe-all-stagetrain-gmp +.PHONY: clean-stagetrain-gmp maybe-clean-stagetrain-gmp +maybe-all-stagetrain-gmp: +maybe-clean-stagetrain-gmp: + + +.PHONY: all-stagefeedback-gmp maybe-all-stagefeedback-gmp +.PHONY: clean-stagefeedback-gmp maybe-clean-stagefeedback-gmp +maybe-all-stagefeedback-gmp: +maybe-clean-stagefeedback-gmp: + + +.PHONY: all-stageautoprofile-gmp maybe-all-stageautoprofile-gmp +.PHONY: clean-stageautoprofile-gmp maybe-clean-stageautoprofile-gmp +maybe-all-stageautoprofile-gmp: +maybe-clean-stageautoprofile-gmp: + + +.PHONY: all-stageautofeedback-gmp maybe-all-stageautofeedback-gmp +.PHONY: clean-stageautofeedback-gmp maybe-clean-stageautofeedback-gmp +maybe-all-stageautofeedback-gmp: +maybe-clean-stageautofeedback-gmp: + + + + + +.PHONY: check-gmp maybe-check-gmp +maybe-check-gmp: + +.PHONY: install-gmp maybe-install-gmp +maybe-install-gmp: + +.PHONY: install-strip-gmp maybe-install-strip-gmp +maybe-install-strip-gmp: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gmp info-gmp +maybe-info-gmp: + +.PHONY: maybe-dvi-gmp dvi-gmp +maybe-dvi-gmp: + +.PHONY: maybe-pdf-gmp pdf-gmp +maybe-pdf-gmp: + +.PHONY: maybe-html-gmp html-gmp +maybe-html-gmp: + +.PHONY: maybe-TAGS-gmp TAGS-gmp +maybe-TAGS-gmp: + +.PHONY: maybe-install-info-gmp install-info-gmp +maybe-install-info-gmp: + +.PHONY: maybe-install-dvi-gmp install-dvi-gmp +maybe-install-dvi-gmp: + +.PHONY: maybe-install-pdf-gmp install-pdf-gmp +maybe-install-pdf-gmp: + +.PHONY: maybe-install-html-gmp install-html-gmp +maybe-install-html-gmp: + +.PHONY: maybe-installcheck-gmp installcheck-gmp +maybe-installcheck-gmp: + +.PHONY: maybe-mostlyclean-gmp mostlyclean-gmp +maybe-mostlyclean-gmp: + +.PHONY: maybe-clean-gmp clean-gmp +maybe-clean-gmp: + +.PHONY: maybe-distclean-gmp distclean-gmp +maybe-distclean-gmp: + +.PHONY: maybe-maintainer-clean-gmp maintainer-clean-gmp +maybe-maintainer-clean-gmp: + + + +.PHONY: configure-mpfr maybe-configure-mpfr +maybe-configure-mpfr: +configure-mpfr: stage_current + + + +.PHONY: configure-stage1-mpfr maybe-configure-stage1-mpfr +maybe-configure-stage1-mpfr: + +.PHONY: configure-stage2-mpfr maybe-configure-stage2-mpfr +maybe-configure-stage2-mpfr: + +.PHONY: configure-stage3-mpfr maybe-configure-stage3-mpfr +maybe-configure-stage3-mpfr: + +.PHONY: configure-stage4-mpfr maybe-configure-stage4-mpfr +maybe-configure-stage4-mpfr: + +.PHONY: configure-stageprofile-mpfr maybe-configure-stageprofile-mpfr +maybe-configure-stageprofile-mpfr: + +.PHONY: configure-stagetrain-mpfr maybe-configure-stagetrain-mpfr +maybe-configure-stagetrain-mpfr: + +.PHONY: configure-stagefeedback-mpfr maybe-configure-stagefeedback-mpfr +maybe-configure-stagefeedback-mpfr: + +.PHONY: configure-stageautoprofile-mpfr maybe-configure-stageautoprofile-mpfr +maybe-configure-stageautoprofile-mpfr: + +.PHONY: configure-stageautofeedback-mpfr maybe-configure-stageautofeedback-mpfr +maybe-configure-stageautofeedback-mpfr: + + + + + +.PHONY: all-mpfr maybe-all-mpfr +maybe-all-mpfr: +all-mpfr: stage_current + + + +.PHONY: all-stage1-mpfr maybe-all-stage1-mpfr +.PHONY: clean-stage1-mpfr maybe-clean-stage1-mpfr +maybe-all-stage1-mpfr: +maybe-clean-stage1-mpfr: + + +.PHONY: all-stage2-mpfr maybe-all-stage2-mpfr +.PHONY: clean-stage2-mpfr maybe-clean-stage2-mpfr +maybe-all-stage2-mpfr: +maybe-clean-stage2-mpfr: + + +.PHONY: all-stage3-mpfr maybe-all-stage3-mpfr +.PHONY: clean-stage3-mpfr maybe-clean-stage3-mpfr +maybe-all-stage3-mpfr: +maybe-clean-stage3-mpfr: + + +.PHONY: all-stage4-mpfr maybe-all-stage4-mpfr +.PHONY: clean-stage4-mpfr maybe-clean-stage4-mpfr +maybe-all-stage4-mpfr: +maybe-clean-stage4-mpfr: + + +.PHONY: all-stageprofile-mpfr maybe-all-stageprofile-mpfr +.PHONY: clean-stageprofile-mpfr maybe-clean-stageprofile-mpfr +maybe-all-stageprofile-mpfr: +maybe-clean-stageprofile-mpfr: + + +.PHONY: all-stagetrain-mpfr maybe-all-stagetrain-mpfr +.PHONY: clean-stagetrain-mpfr maybe-clean-stagetrain-mpfr +maybe-all-stagetrain-mpfr: +maybe-clean-stagetrain-mpfr: + + +.PHONY: all-stagefeedback-mpfr maybe-all-stagefeedback-mpfr +.PHONY: clean-stagefeedback-mpfr maybe-clean-stagefeedback-mpfr +maybe-all-stagefeedback-mpfr: +maybe-clean-stagefeedback-mpfr: + + +.PHONY: all-stageautoprofile-mpfr maybe-all-stageautoprofile-mpfr +.PHONY: clean-stageautoprofile-mpfr maybe-clean-stageautoprofile-mpfr +maybe-all-stageautoprofile-mpfr: +maybe-clean-stageautoprofile-mpfr: + + +.PHONY: all-stageautofeedback-mpfr maybe-all-stageautofeedback-mpfr +.PHONY: clean-stageautofeedback-mpfr maybe-clean-stageautofeedback-mpfr +maybe-all-stageautofeedback-mpfr: +maybe-clean-stageautofeedback-mpfr: + + + + + +.PHONY: check-mpfr maybe-check-mpfr +maybe-check-mpfr: + +.PHONY: install-mpfr maybe-install-mpfr +maybe-install-mpfr: + +.PHONY: install-strip-mpfr maybe-install-strip-mpfr +maybe-install-strip-mpfr: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-mpfr info-mpfr +maybe-info-mpfr: + +.PHONY: maybe-dvi-mpfr dvi-mpfr +maybe-dvi-mpfr: + +.PHONY: maybe-pdf-mpfr pdf-mpfr +maybe-pdf-mpfr: + +.PHONY: maybe-html-mpfr html-mpfr +maybe-html-mpfr: + +.PHONY: maybe-TAGS-mpfr TAGS-mpfr +maybe-TAGS-mpfr: + +.PHONY: maybe-install-info-mpfr install-info-mpfr +maybe-install-info-mpfr: + +.PHONY: maybe-install-dvi-mpfr install-dvi-mpfr +maybe-install-dvi-mpfr: + +.PHONY: maybe-install-pdf-mpfr install-pdf-mpfr +maybe-install-pdf-mpfr: + +.PHONY: maybe-install-html-mpfr install-html-mpfr +maybe-install-html-mpfr: + +.PHONY: maybe-installcheck-mpfr installcheck-mpfr +maybe-installcheck-mpfr: + +.PHONY: maybe-mostlyclean-mpfr mostlyclean-mpfr +maybe-mostlyclean-mpfr: + +.PHONY: maybe-clean-mpfr clean-mpfr +maybe-clean-mpfr: + +.PHONY: maybe-distclean-mpfr distclean-mpfr +maybe-distclean-mpfr: + +.PHONY: maybe-maintainer-clean-mpfr maintainer-clean-mpfr +maybe-maintainer-clean-mpfr: + + + +.PHONY: configure-mpc maybe-configure-mpc +maybe-configure-mpc: +configure-mpc: stage_current + + + +.PHONY: configure-stage1-mpc maybe-configure-stage1-mpc +maybe-configure-stage1-mpc: + +.PHONY: configure-stage2-mpc maybe-configure-stage2-mpc +maybe-configure-stage2-mpc: + +.PHONY: configure-stage3-mpc maybe-configure-stage3-mpc +maybe-configure-stage3-mpc: + +.PHONY: configure-stage4-mpc maybe-configure-stage4-mpc +maybe-configure-stage4-mpc: + +.PHONY: configure-stageprofile-mpc maybe-configure-stageprofile-mpc +maybe-configure-stageprofile-mpc: + +.PHONY: configure-stagetrain-mpc maybe-configure-stagetrain-mpc +maybe-configure-stagetrain-mpc: + +.PHONY: configure-stagefeedback-mpc maybe-configure-stagefeedback-mpc +maybe-configure-stagefeedback-mpc: + +.PHONY: configure-stageautoprofile-mpc maybe-configure-stageautoprofile-mpc +maybe-configure-stageautoprofile-mpc: + +.PHONY: configure-stageautofeedback-mpc maybe-configure-stageautofeedback-mpc +maybe-configure-stageautofeedback-mpc: + + + + + +.PHONY: all-mpc maybe-all-mpc +maybe-all-mpc: +all-mpc: stage_current + + + +.PHONY: all-stage1-mpc maybe-all-stage1-mpc +.PHONY: clean-stage1-mpc maybe-clean-stage1-mpc +maybe-all-stage1-mpc: +maybe-clean-stage1-mpc: + + +.PHONY: all-stage2-mpc maybe-all-stage2-mpc +.PHONY: clean-stage2-mpc maybe-clean-stage2-mpc +maybe-all-stage2-mpc: +maybe-clean-stage2-mpc: + + +.PHONY: all-stage3-mpc maybe-all-stage3-mpc +.PHONY: clean-stage3-mpc maybe-clean-stage3-mpc +maybe-all-stage3-mpc: +maybe-clean-stage3-mpc: + + +.PHONY: all-stage4-mpc maybe-all-stage4-mpc +.PHONY: clean-stage4-mpc maybe-clean-stage4-mpc +maybe-all-stage4-mpc: +maybe-clean-stage4-mpc: + + +.PHONY: all-stageprofile-mpc maybe-all-stageprofile-mpc +.PHONY: clean-stageprofile-mpc maybe-clean-stageprofile-mpc +maybe-all-stageprofile-mpc: +maybe-clean-stageprofile-mpc: + + +.PHONY: all-stagetrain-mpc maybe-all-stagetrain-mpc +.PHONY: clean-stagetrain-mpc maybe-clean-stagetrain-mpc +maybe-all-stagetrain-mpc: +maybe-clean-stagetrain-mpc: + + +.PHONY: all-stagefeedback-mpc maybe-all-stagefeedback-mpc +.PHONY: clean-stagefeedback-mpc maybe-clean-stagefeedback-mpc +maybe-all-stagefeedback-mpc: +maybe-clean-stagefeedback-mpc: + + +.PHONY: all-stageautoprofile-mpc maybe-all-stageautoprofile-mpc +.PHONY: clean-stageautoprofile-mpc maybe-clean-stageautoprofile-mpc +maybe-all-stageautoprofile-mpc: +maybe-clean-stageautoprofile-mpc: + + +.PHONY: all-stageautofeedback-mpc maybe-all-stageautofeedback-mpc +.PHONY: clean-stageautofeedback-mpc maybe-clean-stageautofeedback-mpc +maybe-all-stageautofeedback-mpc: +maybe-clean-stageautofeedback-mpc: + + + + + +.PHONY: check-mpc maybe-check-mpc +maybe-check-mpc: + +.PHONY: install-mpc maybe-install-mpc +maybe-install-mpc: + +.PHONY: install-strip-mpc maybe-install-strip-mpc +maybe-install-strip-mpc: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-mpc info-mpc +maybe-info-mpc: + +.PHONY: maybe-dvi-mpc dvi-mpc +maybe-dvi-mpc: + +.PHONY: maybe-pdf-mpc pdf-mpc +maybe-pdf-mpc: + +.PHONY: maybe-html-mpc html-mpc +maybe-html-mpc: + +.PHONY: maybe-TAGS-mpc TAGS-mpc +maybe-TAGS-mpc: + +.PHONY: maybe-install-info-mpc install-info-mpc +maybe-install-info-mpc: + +.PHONY: maybe-install-dvi-mpc install-dvi-mpc +maybe-install-dvi-mpc: + +.PHONY: maybe-install-pdf-mpc install-pdf-mpc +maybe-install-pdf-mpc: + +.PHONY: maybe-install-html-mpc install-html-mpc +maybe-install-html-mpc: + +.PHONY: maybe-installcheck-mpc installcheck-mpc +maybe-installcheck-mpc: + +.PHONY: maybe-mostlyclean-mpc mostlyclean-mpc +maybe-mostlyclean-mpc: + +.PHONY: maybe-clean-mpc clean-mpc +maybe-clean-mpc: + +.PHONY: maybe-distclean-mpc distclean-mpc +maybe-distclean-mpc: + +.PHONY: maybe-maintainer-clean-mpc maintainer-clean-mpc +maybe-maintainer-clean-mpc: + + + +.PHONY: configure-isl maybe-configure-isl +maybe-configure-isl: +configure-isl: stage_current + + + +.PHONY: configure-stage1-isl maybe-configure-stage1-isl +maybe-configure-stage1-isl: + +.PHONY: configure-stage2-isl maybe-configure-stage2-isl +maybe-configure-stage2-isl: + +.PHONY: configure-stage3-isl maybe-configure-stage3-isl +maybe-configure-stage3-isl: + +.PHONY: configure-stage4-isl maybe-configure-stage4-isl +maybe-configure-stage4-isl: + +.PHONY: configure-stageprofile-isl maybe-configure-stageprofile-isl +maybe-configure-stageprofile-isl: + +.PHONY: configure-stagetrain-isl maybe-configure-stagetrain-isl +maybe-configure-stagetrain-isl: + +.PHONY: configure-stagefeedback-isl maybe-configure-stagefeedback-isl +maybe-configure-stagefeedback-isl: + +.PHONY: configure-stageautoprofile-isl maybe-configure-stageautoprofile-isl +maybe-configure-stageautoprofile-isl: + +.PHONY: configure-stageautofeedback-isl maybe-configure-stageautofeedback-isl +maybe-configure-stageautofeedback-isl: + + + + + +.PHONY: all-isl maybe-all-isl +maybe-all-isl: +all-isl: stage_current + + + +.PHONY: all-stage1-isl maybe-all-stage1-isl +.PHONY: clean-stage1-isl maybe-clean-stage1-isl +maybe-all-stage1-isl: +maybe-clean-stage1-isl: + + +.PHONY: all-stage2-isl maybe-all-stage2-isl +.PHONY: clean-stage2-isl maybe-clean-stage2-isl +maybe-all-stage2-isl: +maybe-clean-stage2-isl: + + +.PHONY: all-stage3-isl maybe-all-stage3-isl +.PHONY: clean-stage3-isl maybe-clean-stage3-isl +maybe-all-stage3-isl: +maybe-clean-stage3-isl: + + +.PHONY: all-stage4-isl maybe-all-stage4-isl +.PHONY: clean-stage4-isl maybe-clean-stage4-isl +maybe-all-stage4-isl: +maybe-clean-stage4-isl: + + +.PHONY: all-stageprofile-isl maybe-all-stageprofile-isl +.PHONY: clean-stageprofile-isl maybe-clean-stageprofile-isl +maybe-all-stageprofile-isl: +maybe-clean-stageprofile-isl: + + +.PHONY: all-stagetrain-isl maybe-all-stagetrain-isl +.PHONY: clean-stagetrain-isl maybe-clean-stagetrain-isl +maybe-all-stagetrain-isl: +maybe-clean-stagetrain-isl: + + +.PHONY: all-stagefeedback-isl maybe-all-stagefeedback-isl +.PHONY: clean-stagefeedback-isl maybe-clean-stagefeedback-isl +maybe-all-stagefeedback-isl: +maybe-clean-stagefeedback-isl: + + +.PHONY: all-stageautoprofile-isl maybe-all-stageautoprofile-isl +.PHONY: clean-stageautoprofile-isl maybe-clean-stageautoprofile-isl +maybe-all-stageautoprofile-isl: +maybe-clean-stageautoprofile-isl: + + +.PHONY: all-stageautofeedback-isl maybe-all-stageautofeedback-isl +.PHONY: clean-stageautofeedback-isl maybe-clean-stageautofeedback-isl +maybe-all-stageautofeedback-isl: +maybe-clean-stageautofeedback-isl: + + + + + +.PHONY: check-isl maybe-check-isl +maybe-check-isl: + +.PHONY: install-isl maybe-install-isl +maybe-install-isl: + +.PHONY: install-strip-isl maybe-install-strip-isl +maybe-install-strip-isl: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-isl info-isl +maybe-info-isl: + +.PHONY: maybe-dvi-isl dvi-isl +maybe-dvi-isl: + +.PHONY: maybe-pdf-isl pdf-isl +maybe-pdf-isl: + +.PHONY: maybe-html-isl html-isl +maybe-html-isl: + +.PHONY: maybe-TAGS-isl TAGS-isl +maybe-TAGS-isl: + +.PHONY: maybe-install-info-isl install-info-isl +maybe-install-info-isl: + +.PHONY: maybe-install-dvi-isl install-dvi-isl +maybe-install-dvi-isl: + +.PHONY: maybe-install-pdf-isl install-pdf-isl +maybe-install-pdf-isl: + +.PHONY: maybe-install-html-isl install-html-isl +maybe-install-html-isl: + +.PHONY: maybe-installcheck-isl installcheck-isl +maybe-installcheck-isl: + +.PHONY: maybe-mostlyclean-isl mostlyclean-isl +maybe-mostlyclean-isl: + +.PHONY: maybe-clean-isl clean-isl +maybe-clean-isl: + +.PHONY: maybe-distclean-isl distclean-isl +maybe-distclean-isl: + +.PHONY: maybe-maintainer-clean-isl maintainer-clean-isl +maybe-maintainer-clean-isl: + + + +.PHONY: configure-gold maybe-configure-gold +maybe-configure-gold: +configure-gold: stage_current + + + +.PHONY: configure-stage1-gold maybe-configure-stage1-gold +maybe-configure-stage1-gold: + +.PHONY: configure-stage2-gold maybe-configure-stage2-gold +maybe-configure-stage2-gold: + +.PHONY: configure-stage3-gold maybe-configure-stage3-gold +maybe-configure-stage3-gold: + +.PHONY: configure-stage4-gold maybe-configure-stage4-gold +maybe-configure-stage4-gold: + +.PHONY: configure-stageprofile-gold maybe-configure-stageprofile-gold +maybe-configure-stageprofile-gold: + +.PHONY: configure-stagetrain-gold maybe-configure-stagetrain-gold +maybe-configure-stagetrain-gold: + +.PHONY: configure-stagefeedback-gold maybe-configure-stagefeedback-gold +maybe-configure-stagefeedback-gold: + +.PHONY: configure-stageautoprofile-gold maybe-configure-stageautoprofile-gold +maybe-configure-stageautoprofile-gold: + +.PHONY: configure-stageautofeedback-gold maybe-configure-stageautofeedback-gold +maybe-configure-stageautofeedback-gold: + + + + + +.PHONY: all-gold maybe-all-gold +maybe-all-gold: +all-gold: stage_current + + + +.PHONY: all-stage1-gold maybe-all-stage1-gold +.PHONY: clean-stage1-gold maybe-clean-stage1-gold +maybe-all-stage1-gold: +maybe-clean-stage1-gold: + + +.PHONY: all-stage2-gold maybe-all-stage2-gold +.PHONY: clean-stage2-gold maybe-clean-stage2-gold +maybe-all-stage2-gold: +maybe-clean-stage2-gold: + + +.PHONY: all-stage3-gold maybe-all-stage3-gold +.PHONY: clean-stage3-gold maybe-clean-stage3-gold +maybe-all-stage3-gold: +maybe-clean-stage3-gold: + + +.PHONY: all-stage4-gold maybe-all-stage4-gold +.PHONY: clean-stage4-gold maybe-clean-stage4-gold +maybe-all-stage4-gold: +maybe-clean-stage4-gold: + + +.PHONY: all-stageprofile-gold maybe-all-stageprofile-gold +.PHONY: clean-stageprofile-gold maybe-clean-stageprofile-gold +maybe-all-stageprofile-gold: +maybe-clean-stageprofile-gold: + + +.PHONY: all-stagetrain-gold maybe-all-stagetrain-gold +.PHONY: clean-stagetrain-gold maybe-clean-stagetrain-gold +maybe-all-stagetrain-gold: +maybe-clean-stagetrain-gold: + + +.PHONY: all-stagefeedback-gold maybe-all-stagefeedback-gold +.PHONY: clean-stagefeedback-gold maybe-clean-stagefeedback-gold +maybe-all-stagefeedback-gold: +maybe-clean-stagefeedback-gold: + + +.PHONY: all-stageautoprofile-gold maybe-all-stageautoprofile-gold +.PHONY: clean-stageautoprofile-gold maybe-clean-stageautoprofile-gold +maybe-all-stageautoprofile-gold: +maybe-clean-stageautoprofile-gold: + + +.PHONY: all-stageautofeedback-gold maybe-all-stageautofeedback-gold +.PHONY: clean-stageautofeedback-gold maybe-clean-stageautofeedback-gold +maybe-all-stageautofeedback-gold: +maybe-clean-stageautofeedback-gold: + + + + + +.PHONY: check-gold maybe-check-gold +maybe-check-gold: + +.PHONY: install-gold maybe-install-gold +maybe-install-gold: + +.PHONY: install-strip-gold maybe-install-strip-gold +maybe-install-strip-gold: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gold info-gold +maybe-info-gold: + +.PHONY: maybe-dvi-gold dvi-gold +maybe-dvi-gold: + +.PHONY: maybe-pdf-gold pdf-gold +maybe-pdf-gold: + +.PHONY: maybe-html-gold html-gold +maybe-html-gold: + +.PHONY: maybe-TAGS-gold TAGS-gold +maybe-TAGS-gold: + +.PHONY: maybe-install-info-gold install-info-gold +maybe-install-info-gold: + +.PHONY: maybe-install-dvi-gold install-dvi-gold +maybe-install-dvi-gold: + +.PHONY: maybe-install-pdf-gold install-pdf-gold +maybe-install-pdf-gold: + +.PHONY: maybe-install-html-gold install-html-gold +maybe-install-html-gold: + +.PHONY: maybe-installcheck-gold installcheck-gold +maybe-installcheck-gold: + +.PHONY: maybe-mostlyclean-gold mostlyclean-gold +maybe-mostlyclean-gold: + +.PHONY: maybe-clean-gold clean-gold +maybe-clean-gold: + +.PHONY: maybe-distclean-gold distclean-gold +maybe-distclean-gold: + +.PHONY: maybe-maintainer-clean-gold maintainer-clean-gold +maybe-maintainer-clean-gold: + + + +.PHONY: configure-gprof maybe-configure-gprof +maybe-configure-gprof: +configure-gprof: stage_current + + + + + +.PHONY: all-gprof maybe-all-gprof +maybe-all-gprof: +all-gprof: stage_current + + + + +.PHONY: check-gprof maybe-check-gprof +maybe-check-gprof: + +.PHONY: install-gprof maybe-install-gprof +maybe-install-gprof: + +.PHONY: install-strip-gprof maybe-install-strip-gprof +maybe-install-strip-gprof: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gprof info-gprof +maybe-info-gprof: + +.PHONY: maybe-dvi-gprof dvi-gprof +maybe-dvi-gprof: + +.PHONY: maybe-pdf-gprof pdf-gprof +maybe-pdf-gprof: + +.PHONY: maybe-html-gprof html-gprof +maybe-html-gprof: + +.PHONY: maybe-TAGS-gprof TAGS-gprof +maybe-TAGS-gprof: + +.PHONY: maybe-install-info-gprof install-info-gprof +maybe-install-info-gprof: + +.PHONY: maybe-install-dvi-gprof install-dvi-gprof +maybe-install-dvi-gprof: + +.PHONY: maybe-install-pdf-gprof install-pdf-gprof +maybe-install-pdf-gprof: + +.PHONY: maybe-install-html-gprof install-html-gprof +maybe-install-html-gprof: + +.PHONY: maybe-installcheck-gprof installcheck-gprof +maybe-installcheck-gprof: + +.PHONY: maybe-mostlyclean-gprof mostlyclean-gprof +maybe-mostlyclean-gprof: + +.PHONY: maybe-clean-gprof clean-gprof +maybe-clean-gprof: + +.PHONY: maybe-distclean-gprof distclean-gprof +maybe-distclean-gprof: + +.PHONY: maybe-maintainer-clean-gprof maintainer-clean-gprof +maybe-maintainer-clean-gprof: + + + +.PHONY: configure-gprofng maybe-configure-gprofng +maybe-configure-gprofng: +configure-gprofng: stage_current + + + + + +.PHONY: all-gprofng maybe-all-gprofng +maybe-all-gprofng: +all-gprofng: stage_current + + + + +.PHONY: check-gprofng maybe-check-gprofng +maybe-check-gprofng: + +.PHONY: install-gprofng maybe-install-gprofng +maybe-install-gprofng: + +.PHONY: install-strip-gprofng maybe-install-strip-gprofng +maybe-install-strip-gprofng: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gprofng info-gprofng +maybe-info-gprofng: + +.PHONY: maybe-dvi-gprofng dvi-gprofng +maybe-dvi-gprofng: + +.PHONY: maybe-pdf-gprofng pdf-gprofng +maybe-pdf-gprofng: + +.PHONY: maybe-html-gprofng html-gprofng +maybe-html-gprofng: + +.PHONY: maybe-TAGS-gprofng TAGS-gprofng +maybe-TAGS-gprofng: + +.PHONY: maybe-install-info-gprofng install-info-gprofng +maybe-install-info-gprofng: + +.PHONY: maybe-install-dvi-gprofng install-dvi-gprofng +maybe-install-dvi-gprofng: + +.PHONY: maybe-install-pdf-gprofng install-pdf-gprofng +maybe-install-pdf-gprofng: + +.PHONY: maybe-install-html-gprofng install-html-gprofng +maybe-install-html-gprofng: + +.PHONY: maybe-installcheck-gprofng installcheck-gprofng +maybe-installcheck-gprofng: + +.PHONY: maybe-mostlyclean-gprofng mostlyclean-gprofng +maybe-mostlyclean-gprofng: + +.PHONY: maybe-clean-gprofng clean-gprofng +maybe-clean-gprofng: + +.PHONY: maybe-distclean-gprofng distclean-gprofng +maybe-distclean-gprofng: + +.PHONY: maybe-maintainer-clean-gprofng maintainer-clean-gprofng +maybe-maintainer-clean-gprofng: + + + +.PHONY: configure-gettext maybe-configure-gettext +maybe-configure-gettext: +configure-gettext: stage_current + + + +.PHONY: configure-stage1-gettext maybe-configure-stage1-gettext +maybe-configure-stage1-gettext: + +.PHONY: configure-stage2-gettext maybe-configure-stage2-gettext +maybe-configure-stage2-gettext: + +.PHONY: configure-stage3-gettext maybe-configure-stage3-gettext +maybe-configure-stage3-gettext: + +.PHONY: configure-stage4-gettext maybe-configure-stage4-gettext +maybe-configure-stage4-gettext: + +.PHONY: configure-stageprofile-gettext maybe-configure-stageprofile-gettext +maybe-configure-stageprofile-gettext: + +.PHONY: configure-stagetrain-gettext maybe-configure-stagetrain-gettext +maybe-configure-stagetrain-gettext: + +.PHONY: configure-stagefeedback-gettext maybe-configure-stagefeedback-gettext +maybe-configure-stagefeedback-gettext: + +.PHONY: configure-stageautoprofile-gettext maybe-configure-stageautoprofile-gettext +maybe-configure-stageautoprofile-gettext: + +.PHONY: configure-stageautofeedback-gettext maybe-configure-stageautofeedback-gettext +maybe-configure-stageautofeedback-gettext: + + + + + +.PHONY: all-gettext maybe-all-gettext +maybe-all-gettext: +all-gettext: stage_current + + + +.PHONY: all-stage1-gettext maybe-all-stage1-gettext +.PHONY: clean-stage1-gettext maybe-clean-stage1-gettext +maybe-all-stage1-gettext: +maybe-clean-stage1-gettext: + + +.PHONY: all-stage2-gettext maybe-all-stage2-gettext +.PHONY: clean-stage2-gettext maybe-clean-stage2-gettext +maybe-all-stage2-gettext: +maybe-clean-stage2-gettext: + + +.PHONY: all-stage3-gettext maybe-all-stage3-gettext +.PHONY: clean-stage3-gettext maybe-clean-stage3-gettext +maybe-all-stage3-gettext: +maybe-clean-stage3-gettext: + + +.PHONY: all-stage4-gettext maybe-all-stage4-gettext +.PHONY: clean-stage4-gettext maybe-clean-stage4-gettext +maybe-all-stage4-gettext: +maybe-clean-stage4-gettext: + + +.PHONY: all-stageprofile-gettext maybe-all-stageprofile-gettext +.PHONY: clean-stageprofile-gettext maybe-clean-stageprofile-gettext +maybe-all-stageprofile-gettext: +maybe-clean-stageprofile-gettext: + + +.PHONY: all-stagetrain-gettext maybe-all-stagetrain-gettext +.PHONY: clean-stagetrain-gettext maybe-clean-stagetrain-gettext +maybe-all-stagetrain-gettext: +maybe-clean-stagetrain-gettext: + + +.PHONY: all-stagefeedback-gettext maybe-all-stagefeedback-gettext +.PHONY: clean-stagefeedback-gettext maybe-clean-stagefeedback-gettext +maybe-all-stagefeedback-gettext: +maybe-clean-stagefeedback-gettext: + + +.PHONY: all-stageautoprofile-gettext maybe-all-stageautoprofile-gettext +.PHONY: clean-stageautoprofile-gettext maybe-clean-stageautoprofile-gettext +maybe-all-stageautoprofile-gettext: +maybe-clean-stageautoprofile-gettext: + + +.PHONY: all-stageautofeedback-gettext maybe-all-stageautofeedback-gettext +.PHONY: clean-stageautofeedback-gettext maybe-clean-stageautofeedback-gettext +maybe-all-stageautofeedback-gettext: +maybe-clean-stageautofeedback-gettext: + + + + + +.PHONY: check-gettext maybe-check-gettext +maybe-check-gettext: + +.PHONY: install-gettext maybe-install-gettext +maybe-install-gettext: + +.PHONY: install-strip-gettext maybe-install-strip-gettext +maybe-install-strip-gettext: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gettext info-gettext +maybe-info-gettext: + +.PHONY: maybe-dvi-gettext dvi-gettext +maybe-dvi-gettext: + +.PHONY: maybe-pdf-gettext pdf-gettext +maybe-pdf-gettext: + +.PHONY: maybe-html-gettext html-gettext +maybe-html-gettext: + +.PHONY: maybe-TAGS-gettext TAGS-gettext +maybe-TAGS-gettext: + +.PHONY: maybe-install-info-gettext install-info-gettext +maybe-install-info-gettext: + +.PHONY: maybe-install-dvi-gettext install-dvi-gettext +maybe-install-dvi-gettext: + +.PHONY: maybe-install-pdf-gettext install-pdf-gettext +maybe-install-pdf-gettext: + +.PHONY: maybe-install-html-gettext install-html-gettext +maybe-install-html-gettext: + +.PHONY: maybe-installcheck-gettext installcheck-gettext +maybe-installcheck-gettext: + +.PHONY: maybe-mostlyclean-gettext mostlyclean-gettext +maybe-mostlyclean-gettext: + +.PHONY: maybe-clean-gettext clean-gettext +maybe-clean-gettext: + +.PHONY: maybe-distclean-gettext distclean-gettext +maybe-distclean-gettext: + +.PHONY: maybe-maintainer-clean-gettext maintainer-clean-gettext +maybe-maintainer-clean-gettext: + + + +.PHONY: configure-tcl maybe-configure-tcl +maybe-configure-tcl: +configure-tcl: stage_current + + + + + +.PHONY: all-tcl maybe-all-tcl +maybe-all-tcl: +all-tcl: stage_current + + + + +.PHONY: check-tcl maybe-check-tcl +maybe-check-tcl: + +.PHONY: install-tcl maybe-install-tcl +maybe-install-tcl: + +.PHONY: install-strip-tcl maybe-install-strip-tcl +maybe-install-strip-tcl: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-tcl info-tcl +maybe-info-tcl: + +.PHONY: maybe-dvi-tcl dvi-tcl +maybe-dvi-tcl: + +.PHONY: maybe-pdf-tcl pdf-tcl +maybe-pdf-tcl: + +.PHONY: maybe-html-tcl html-tcl +maybe-html-tcl: + +.PHONY: maybe-TAGS-tcl TAGS-tcl +maybe-TAGS-tcl: + +.PHONY: maybe-install-info-tcl install-info-tcl +maybe-install-info-tcl: + +.PHONY: maybe-install-dvi-tcl install-dvi-tcl +maybe-install-dvi-tcl: + +.PHONY: maybe-install-pdf-tcl install-pdf-tcl +maybe-install-pdf-tcl: + +.PHONY: maybe-install-html-tcl install-html-tcl +maybe-install-html-tcl: + +.PHONY: maybe-installcheck-tcl installcheck-tcl +maybe-installcheck-tcl: + +.PHONY: maybe-mostlyclean-tcl mostlyclean-tcl +maybe-mostlyclean-tcl: + +.PHONY: maybe-clean-tcl clean-tcl +maybe-clean-tcl: + +.PHONY: maybe-distclean-tcl distclean-tcl +maybe-distclean-tcl: + +.PHONY: maybe-maintainer-clean-tcl maintainer-clean-tcl +maybe-maintainer-clean-tcl: + + + +.PHONY: configure-itcl maybe-configure-itcl +maybe-configure-itcl: +configure-itcl: stage_current + + + + + +.PHONY: all-itcl maybe-all-itcl +maybe-all-itcl: +all-itcl: stage_current + + + + +.PHONY: check-itcl maybe-check-itcl +maybe-check-itcl: + +.PHONY: install-itcl maybe-install-itcl +maybe-install-itcl: + +.PHONY: install-strip-itcl maybe-install-strip-itcl +maybe-install-strip-itcl: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-itcl info-itcl +maybe-info-itcl: + +.PHONY: maybe-dvi-itcl dvi-itcl +maybe-dvi-itcl: + +.PHONY: maybe-pdf-itcl pdf-itcl +maybe-pdf-itcl: + +.PHONY: maybe-html-itcl html-itcl +maybe-html-itcl: + +.PHONY: maybe-TAGS-itcl TAGS-itcl +maybe-TAGS-itcl: + +.PHONY: maybe-install-info-itcl install-info-itcl +maybe-install-info-itcl: + +.PHONY: maybe-install-dvi-itcl install-dvi-itcl +maybe-install-dvi-itcl: + +.PHONY: maybe-install-pdf-itcl install-pdf-itcl +maybe-install-pdf-itcl: + +.PHONY: maybe-install-html-itcl install-html-itcl +maybe-install-html-itcl: + +.PHONY: maybe-installcheck-itcl installcheck-itcl +maybe-installcheck-itcl: + +.PHONY: maybe-mostlyclean-itcl mostlyclean-itcl +maybe-mostlyclean-itcl: + +.PHONY: maybe-clean-itcl clean-itcl +maybe-clean-itcl: + +.PHONY: maybe-distclean-itcl distclean-itcl +maybe-distclean-itcl: + +.PHONY: maybe-maintainer-clean-itcl maintainer-clean-itcl +maybe-maintainer-clean-itcl: + + + +.PHONY: configure-ld maybe-configure-ld +maybe-configure-ld: +configure-ld: stage_current + + + +.PHONY: configure-stage1-ld maybe-configure-stage1-ld +maybe-configure-stage1-ld: + +.PHONY: configure-stage2-ld maybe-configure-stage2-ld +maybe-configure-stage2-ld: + +.PHONY: configure-stage3-ld maybe-configure-stage3-ld +maybe-configure-stage3-ld: + +.PHONY: configure-stage4-ld maybe-configure-stage4-ld +maybe-configure-stage4-ld: + +.PHONY: configure-stageprofile-ld maybe-configure-stageprofile-ld +maybe-configure-stageprofile-ld: + +.PHONY: configure-stagetrain-ld maybe-configure-stagetrain-ld +maybe-configure-stagetrain-ld: + +.PHONY: configure-stagefeedback-ld maybe-configure-stagefeedback-ld +maybe-configure-stagefeedback-ld: + +.PHONY: configure-stageautoprofile-ld maybe-configure-stageautoprofile-ld +maybe-configure-stageautoprofile-ld: + +.PHONY: configure-stageautofeedback-ld maybe-configure-stageautofeedback-ld +maybe-configure-stageautofeedback-ld: + + + + + +.PHONY: all-ld maybe-all-ld +maybe-all-ld: +all-ld: stage_current + + + +.PHONY: all-stage1-ld maybe-all-stage1-ld +.PHONY: clean-stage1-ld maybe-clean-stage1-ld +maybe-all-stage1-ld: +maybe-clean-stage1-ld: + + +.PHONY: all-stage2-ld maybe-all-stage2-ld +.PHONY: clean-stage2-ld maybe-clean-stage2-ld +maybe-all-stage2-ld: +maybe-clean-stage2-ld: + + +.PHONY: all-stage3-ld maybe-all-stage3-ld +.PHONY: clean-stage3-ld maybe-clean-stage3-ld +maybe-all-stage3-ld: +maybe-clean-stage3-ld: + + +.PHONY: all-stage4-ld maybe-all-stage4-ld +.PHONY: clean-stage4-ld maybe-clean-stage4-ld +maybe-all-stage4-ld: +maybe-clean-stage4-ld: + + +.PHONY: all-stageprofile-ld maybe-all-stageprofile-ld +.PHONY: clean-stageprofile-ld maybe-clean-stageprofile-ld +maybe-all-stageprofile-ld: +maybe-clean-stageprofile-ld: + + +.PHONY: all-stagetrain-ld maybe-all-stagetrain-ld +.PHONY: clean-stagetrain-ld maybe-clean-stagetrain-ld +maybe-all-stagetrain-ld: +maybe-clean-stagetrain-ld: + + +.PHONY: all-stagefeedback-ld maybe-all-stagefeedback-ld +.PHONY: clean-stagefeedback-ld maybe-clean-stagefeedback-ld +maybe-all-stagefeedback-ld: +maybe-clean-stagefeedback-ld: + + +.PHONY: all-stageautoprofile-ld maybe-all-stageautoprofile-ld +.PHONY: clean-stageautoprofile-ld maybe-clean-stageautoprofile-ld +maybe-all-stageautoprofile-ld: +maybe-clean-stageautoprofile-ld: + + +.PHONY: all-stageautofeedback-ld maybe-all-stageautofeedback-ld +.PHONY: clean-stageautofeedback-ld maybe-clean-stageautofeedback-ld +maybe-all-stageautofeedback-ld: +maybe-clean-stageautofeedback-ld: + + + + + +.PHONY: check-ld maybe-check-ld +maybe-check-ld: + +.PHONY: install-ld maybe-install-ld +maybe-install-ld: + +.PHONY: install-strip-ld maybe-install-strip-ld +maybe-install-strip-ld: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-ld info-ld +maybe-info-ld: + +.PHONY: maybe-dvi-ld dvi-ld +maybe-dvi-ld: + +.PHONY: maybe-pdf-ld pdf-ld +maybe-pdf-ld: + +.PHONY: maybe-html-ld html-ld +maybe-html-ld: + +.PHONY: maybe-TAGS-ld TAGS-ld +maybe-TAGS-ld: + +.PHONY: maybe-install-info-ld install-info-ld +maybe-install-info-ld: + +.PHONY: maybe-install-dvi-ld install-dvi-ld +maybe-install-dvi-ld: + +.PHONY: maybe-install-pdf-ld install-pdf-ld +maybe-install-pdf-ld: + +.PHONY: maybe-install-html-ld install-html-ld +maybe-install-html-ld: + +.PHONY: maybe-installcheck-ld installcheck-ld +maybe-installcheck-ld: + +.PHONY: maybe-mostlyclean-ld mostlyclean-ld +maybe-mostlyclean-ld: + +.PHONY: maybe-clean-ld clean-ld +maybe-clean-ld: + +.PHONY: maybe-distclean-ld distclean-ld +maybe-distclean-ld: + +.PHONY: maybe-maintainer-clean-ld maintainer-clean-ld +maybe-maintainer-clean-ld: + + + +.PHONY: configure-libbacktrace maybe-configure-libbacktrace +maybe-configure-libbacktrace: +configure-libbacktrace: stage_current +maybe-configure-libbacktrace: configure-libbacktrace +configure-libbacktrace: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libbacktrace; \ + cd "$(HOST_SUBDIR)/libbacktrace" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-libbacktrace maybe-configure-stage1-libbacktrace +maybe-configure-stage1-libbacktrace: +maybe-configure-stage1-libbacktrace: configure-stage1-libbacktrace +configure-stage1-libbacktrace: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) + +.PHONY: configure-stage2-libbacktrace maybe-configure-stage2-libbacktrace +maybe-configure-stage2-libbacktrace: +maybe-configure-stage2-libbacktrace: configure-stage2-libbacktrace +configure-stage2-libbacktrace: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) + +.PHONY: configure-stage3-libbacktrace maybe-configure-stage3-libbacktrace +maybe-configure-stage3-libbacktrace: +maybe-configure-stage3-libbacktrace: configure-stage3-libbacktrace +configure-stage3-libbacktrace: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) + +.PHONY: configure-stage4-libbacktrace maybe-configure-stage4-libbacktrace +maybe-configure-stage4-libbacktrace: +maybe-configure-stage4-libbacktrace: configure-stage4-libbacktrace +configure-stage4-libbacktrace: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) + +.PHONY: configure-stageprofile-libbacktrace maybe-configure-stageprofile-libbacktrace +maybe-configure-stageprofile-libbacktrace: +maybe-configure-stageprofile-libbacktrace: configure-stageprofile-libbacktrace +configure-stageprofile-libbacktrace: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stagetrain-libbacktrace maybe-configure-stagetrain-libbacktrace +maybe-configure-stagetrain-libbacktrace: +maybe-configure-stagetrain-libbacktrace: configure-stagetrain-libbacktrace +configure-stagetrain-libbacktrace: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) + +.PHONY: configure-stagefeedback-libbacktrace maybe-configure-stagefeedback-libbacktrace +maybe-configure-stagefeedback-libbacktrace: +maybe-configure-stagefeedback-libbacktrace: configure-stagefeedback-libbacktrace +configure-stagefeedback-libbacktrace: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) + +.PHONY: configure-stageautoprofile-libbacktrace maybe-configure-stageautoprofile-libbacktrace +maybe-configure-stageautoprofile-libbacktrace: +maybe-configure-stageautoprofile-libbacktrace: configure-stageautoprofile-libbacktrace +configure-stageautoprofile-libbacktrace: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stageautofeedback-libbacktrace maybe-configure-stageautofeedback-libbacktrace +maybe-configure-stageautofeedback-libbacktrace: +maybe-configure-stageautofeedback-libbacktrace: configure-stageautofeedback-libbacktrace +configure-stageautofeedback-libbacktrace: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/libbacktrace; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libbacktrace; \ + cd $(HOST_SUBDIR)/libbacktrace || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) + + + + + +.PHONY: all-libbacktrace maybe-all-libbacktrace +maybe-all-libbacktrace: +all-libbacktrace: stage_current +TARGET-libbacktrace=all +maybe-all-libbacktrace: all-libbacktrace +all-libbacktrace: configure-libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-libbacktrace)) + + + +.PHONY: all-stage1-libbacktrace maybe-all-stage1-libbacktrace +.PHONY: clean-stage1-libbacktrace maybe-clean-stage1-libbacktrace +maybe-all-stage1-libbacktrace: +maybe-clean-stage1-libbacktrace: +maybe-all-stage1-libbacktrace: all-stage1-libbacktrace +all-stage1: all-stage1-libbacktrace +TARGET-stage1-libbacktrace = $(TARGET-libbacktrace) +all-stage1-libbacktrace: configure-stage1-libbacktrace + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-libbacktrace) + +maybe-clean-stage1-libbacktrace: clean-stage1-libbacktrace +clean-stage1: clean-stage1-libbacktrace +clean-stage1-libbacktrace: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage2-libbacktrace maybe-all-stage2-libbacktrace +.PHONY: clean-stage2-libbacktrace maybe-clean-stage2-libbacktrace +maybe-all-stage2-libbacktrace: +maybe-clean-stage2-libbacktrace: +maybe-all-stage2-libbacktrace: all-stage2-libbacktrace +all-stage2: all-stage2-libbacktrace +TARGET-stage2-libbacktrace = $(TARGET-libbacktrace) +all-stage2-libbacktrace: configure-stage2-libbacktrace + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-libbacktrace) + +maybe-clean-stage2-libbacktrace: clean-stage2-libbacktrace +clean-stage2: clean-stage2-libbacktrace +clean-stage2-libbacktrace: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage3-libbacktrace maybe-all-stage3-libbacktrace +.PHONY: clean-stage3-libbacktrace maybe-clean-stage3-libbacktrace +maybe-all-stage3-libbacktrace: +maybe-clean-stage3-libbacktrace: +maybe-all-stage3-libbacktrace: all-stage3-libbacktrace +all-stage3: all-stage3-libbacktrace +TARGET-stage3-libbacktrace = $(TARGET-libbacktrace) +all-stage3-libbacktrace: configure-stage3-libbacktrace + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-libbacktrace) + +maybe-clean-stage3-libbacktrace: clean-stage3-libbacktrace +clean-stage3: clean-stage3-libbacktrace +clean-stage3-libbacktrace: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage4-libbacktrace maybe-all-stage4-libbacktrace +.PHONY: clean-stage4-libbacktrace maybe-clean-stage4-libbacktrace +maybe-all-stage4-libbacktrace: +maybe-clean-stage4-libbacktrace: +maybe-all-stage4-libbacktrace: all-stage4-libbacktrace +all-stage4: all-stage4-libbacktrace +TARGET-stage4-libbacktrace = $(TARGET-libbacktrace) +all-stage4-libbacktrace: configure-stage4-libbacktrace + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-libbacktrace) + +maybe-clean-stage4-libbacktrace: clean-stage4-libbacktrace +clean-stage4: clean-stage4-libbacktrace +clean-stage4-libbacktrace: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageprofile-libbacktrace maybe-all-stageprofile-libbacktrace +.PHONY: clean-stageprofile-libbacktrace maybe-clean-stageprofile-libbacktrace +maybe-all-stageprofile-libbacktrace: +maybe-clean-stageprofile-libbacktrace: +maybe-all-stageprofile-libbacktrace: all-stageprofile-libbacktrace +all-stageprofile: all-stageprofile-libbacktrace +TARGET-stageprofile-libbacktrace = $(TARGET-libbacktrace) +all-stageprofile-libbacktrace: configure-stageprofile-libbacktrace + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-libbacktrace) + +maybe-clean-stageprofile-libbacktrace: clean-stageprofile-libbacktrace +clean-stageprofile: clean-stageprofile-libbacktrace +clean-stageprofile-libbacktrace: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagetrain-libbacktrace maybe-all-stagetrain-libbacktrace +.PHONY: clean-stagetrain-libbacktrace maybe-clean-stagetrain-libbacktrace +maybe-all-stagetrain-libbacktrace: +maybe-clean-stagetrain-libbacktrace: +maybe-all-stagetrain-libbacktrace: all-stagetrain-libbacktrace +all-stagetrain: all-stagetrain-libbacktrace +TARGET-stagetrain-libbacktrace = $(TARGET-libbacktrace) +all-stagetrain-libbacktrace: configure-stagetrain-libbacktrace + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-libbacktrace) + +maybe-clean-stagetrain-libbacktrace: clean-stagetrain-libbacktrace +clean-stagetrain: clean-stagetrain-libbacktrace +clean-stagetrain-libbacktrace: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagefeedback-libbacktrace maybe-all-stagefeedback-libbacktrace +.PHONY: clean-stagefeedback-libbacktrace maybe-clean-stagefeedback-libbacktrace +maybe-all-stagefeedback-libbacktrace: +maybe-clean-stagefeedback-libbacktrace: +maybe-all-stagefeedback-libbacktrace: all-stagefeedback-libbacktrace +all-stagefeedback: all-stagefeedback-libbacktrace +TARGET-stagefeedback-libbacktrace = $(TARGET-libbacktrace) +all-stagefeedback-libbacktrace: configure-stagefeedback-libbacktrace + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-libbacktrace) + +maybe-clean-stagefeedback-libbacktrace: clean-stagefeedback-libbacktrace +clean-stagefeedback: clean-stagefeedback-libbacktrace +clean-stagefeedback-libbacktrace: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautoprofile-libbacktrace maybe-all-stageautoprofile-libbacktrace +.PHONY: clean-stageautoprofile-libbacktrace maybe-clean-stageautoprofile-libbacktrace +maybe-all-stageautoprofile-libbacktrace: +maybe-clean-stageautoprofile-libbacktrace: +maybe-all-stageautoprofile-libbacktrace: all-stageautoprofile-libbacktrace +all-stageautoprofile: all-stageautoprofile-libbacktrace +TARGET-stageautoprofile-libbacktrace = $(TARGET-libbacktrace) +all-stageautoprofile-libbacktrace: configure-stageautoprofile-libbacktrace + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-libbacktrace) + +maybe-clean-stageautoprofile-libbacktrace: clean-stageautoprofile-libbacktrace +clean-stageautoprofile: clean-stageautoprofile-libbacktrace +clean-stageautoprofile-libbacktrace: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautofeedback-libbacktrace maybe-all-stageautofeedback-libbacktrace +.PHONY: clean-stageautofeedback-libbacktrace maybe-clean-stageautofeedback-libbacktrace +maybe-all-stageautofeedback-libbacktrace: +maybe-clean-stageautofeedback-libbacktrace: +maybe-all-stageautofeedback-libbacktrace: all-stageautofeedback-libbacktrace +all-stageautofeedback: all-stageautofeedback-libbacktrace +TARGET-stageautofeedback-libbacktrace = $(TARGET-libbacktrace) +all-stageautofeedback-libbacktrace: configure-stageautofeedback-libbacktrace + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libbacktrace && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-libbacktrace) + +maybe-clean-stageautofeedback-libbacktrace: clean-stageautofeedback-libbacktrace +clean-stageautofeedback: clean-stageautofeedback-libbacktrace +clean-stageautofeedback-libbacktrace: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-libbacktrace/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + + + + +.PHONY: check-libbacktrace maybe-check-libbacktrace +maybe-check-libbacktrace: +maybe-check-libbacktrace: check-libbacktrace + +check-libbacktrace: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-libbacktrace maybe-install-libbacktrace +maybe-install-libbacktrace: +maybe-install-libbacktrace: install-libbacktrace + +install-libbacktrace: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-libbacktrace maybe-install-strip-libbacktrace +maybe-install-strip-libbacktrace: +maybe-install-strip-libbacktrace: install-strip-libbacktrace + +install-strip-libbacktrace: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libbacktrace info-libbacktrace +maybe-info-libbacktrace: +maybe-info-libbacktrace: info-libbacktrace + +info-libbacktrace: \ + configure-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-libbacktrace dvi-libbacktrace +maybe-dvi-libbacktrace: +maybe-dvi-libbacktrace: dvi-libbacktrace + +dvi-libbacktrace: \ + configure-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-libbacktrace pdf-libbacktrace +maybe-pdf-libbacktrace: +maybe-pdf-libbacktrace: pdf-libbacktrace + +pdf-libbacktrace: \ + configure-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-libbacktrace html-libbacktrace +maybe-html-libbacktrace: +maybe-html-libbacktrace: html-libbacktrace + +html-libbacktrace: \ + configure-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-libbacktrace TAGS-libbacktrace +maybe-TAGS-libbacktrace: +maybe-TAGS-libbacktrace: TAGS-libbacktrace + +TAGS-libbacktrace: \ + configure-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-libbacktrace install-info-libbacktrace +maybe-install-info-libbacktrace: +maybe-install-info-libbacktrace: install-info-libbacktrace + +install-info-libbacktrace: \ + configure-libbacktrace \ + info-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-libbacktrace install-dvi-libbacktrace +maybe-install-dvi-libbacktrace: +maybe-install-dvi-libbacktrace: install-dvi-libbacktrace + +install-dvi-libbacktrace: \ + configure-libbacktrace \ + dvi-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-libbacktrace install-pdf-libbacktrace +maybe-install-pdf-libbacktrace: +maybe-install-pdf-libbacktrace: install-pdf-libbacktrace + +install-pdf-libbacktrace: \ + configure-libbacktrace \ + pdf-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-libbacktrace install-html-libbacktrace +maybe-install-html-libbacktrace: +maybe-install-html-libbacktrace: install-html-libbacktrace + +install-html-libbacktrace: \ + configure-libbacktrace \ + html-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-libbacktrace installcheck-libbacktrace +maybe-installcheck-libbacktrace: +maybe-installcheck-libbacktrace: installcheck-libbacktrace + +installcheck-libbacktrace: \ + configure-libbacktrace + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-libbacktrace mostlyclean-libbacktrace +maybe-mostlyclean-libbacktrace: +maybe-mostlyclean-libbacktrace: mostlyclean-libbacktrace + +mostlyclean-libbacktrace: + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-libbacktrace clean-libbacktrace +maybe-clean-libbacktrace: +maybe-clean-libbacktrace: clean-libbacktrace + +clean-libbacktrace: + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-libbacktrace distclean-libbacktrace +maybe-distclean-libbacktrace: +maybe-distclean-libbacktrace: distclean-libbacktrace + +distclean-libbacktrace: + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-libbacktrace maintainer-clean-libbacktrace +maybe-maintainer-clean-libbacktrace: +maybe-maintainer-clean-libbacktrace: maintainer-clean-libbacktrace + +maintainer-clean-libbacktrace: + @[ -f ./libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in libbacktrace"; \ + (cd $(HOST_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-libcpp maybe-configure-libcpp +maybe-configure-libcpp: +configure-libcpp: stage_current +maybe-configure-libcpp: configure-libcpp +configure-libcpp: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libcpp; \ + cd "$(HOST_SUBDIR)/libcpp" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-libcpp maybe-configure-stage1-libcpp +maybe-configure-stage1-libcpp: +maybe-configure-stage1-libcpp: configure-stage1-libcpp +configure-stage1-libcpp: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) + +.PHONY: configure-stage2-libcpp maybe-configure-stage2-libcpp +maybe-configure-stage2-libcpp: +maybe-configure-stage2-libcpp: configure-stage2-libcpp +configure-stage2-libcpp: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) + +.PHONY: configure-stage3-libcpp maybe-configure-stage3-libcpp +maybe-configure-stage3-libcpp: +maybe-configure-stage3-libcpp: configure-stage3-libcpp +configure-stage3-libcpp: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) + +.PHONY: configure-stage4-libcpp maybe-configure-stage4-libcpp +maybe-configure-stage4-libcpp: +maybe-configure-stage4-libcpp: configure-stage4-libcpp +configure-stage4-libcpp: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) + +.PHONY: configure-stageprofile-libcpp maybe-configure-stageprofile-libcpp +maybe-configure-stageprofile-libcpp: +maybe-configure-stageprofile-libcpp: configure-stageprofile-libcpp +configure-stageprofile-libcpp: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stagetrain-libcpp maybe-configure-stagetrain-libcpp +maybe-configure-stagetrain-libcpp: +maybe-configure-stagetrain-libcpp: configure-stagetrain-libcpp +configure-stagetrain-libcpp: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) + +.PHONY: configure-stagefeedback-libcpp maybe-configure-stagefeedback-libcpp +maybe-configure-stagefeedback-libcpp: +maybe-configure-stagefeedback-libcpp: configure-stagefeedback-libcpp +configure-stagefeedback-libcpp: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) + +.PHONY: configure-stageautoprofile-libcpp maybe-configure-stageautoprofile-libcpp +maybe-configure-stageautoprofile-libcpp: +maybe-configure-stageautoprofile-libcpp: configure-stageautoprofile-libcpp +configure-stageautoprofile-libcpp: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stageautofeedback-libcpp maybe-configure-stageautofeedback-libcpp +maybe-configure-stageautofeedback-libcpp: +maybe-configure-stageautofeedback-libcpp: configure-stageautofeedback-libcpp +configure-stageautofeedback-libcpp: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/libcpp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp; \ + cd $(HOST_SUBDIR)/libcpp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcpp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcpp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) + + + + + +.PHONY: all-libcpp maybe-all-libcpp +maybe-all-libcpp: +all-libcpp: stage_current +TARGET-libcpp=all +maybe-all-libcpp: all-libcpp +all-libcpp: configure-libcpp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-libcpp)) + + + +.PHONY: all-stage1-libcpp maybe-all-stage1-libcpp +.PHONY: clean-stage1-libcpp maybe-clean-stage1-libcpp +maybe-all-stage1-libcpp: +maybe-clean-stage1-libcpp: +maybe-all-stage1-libcpp: all-stage1-libcpp +all-stage1: all-stage1-libcpp +TARGET-stage1-libcpp = $(TARGET-libcpp) +all-stage1-libcpp: configure-stage1-libcpp + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-libcpp) + +maybe-clean-stage1-libcpp: clean-stage1-libcpp +clean-stage1: clean-stage1-libcpp +clean-stage1-libcpp: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-libcpp/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage2-libcpp maybe-all-stage2-libcpp +.PHONY: clean-stage2-libcpp maybe-clean-stage2-libcpp +maybe-all-stage2-libcpp: +maybe-clean-stage2-libcpp: +maybe-all-stage2-libcpp: all-stage2-libcpp +all-stage2: all-stage2-libcpp +TARGET-stage2-libcpp = $(TARGET-libcpp) +all-stage2-libcpp: configure-stage2-libcpp + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-libcpp) + +maybe-clean-stage2-libcpp: clean-stage2-libcpp +clean-stage2: clean-stage2-libcpp +clean-stage2-libcpp: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-libcpp/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage3-libcpp maybe-all-stage3-libcpp +.PHONY: clean-stage3-libcpp maybe-clean-stage3-libcpp +maybe-all-stage3-libcpp: +maybe-clean-stage3-libcpp: +maybe-all-stage3-libcpp: all-stage3-libcpp +all-stage3: all-stage3-libcpp +TARGET-stage3-libcpp = $(TARGET-libcpp) +all-stage3-libcpp: configure-stage3-libcpp + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-libcpp) + +maybe-clean-stage3-libcpp: clean-stage3-libcpp +clean-stage3: clean-stage3-libcpp +clean-stage3-libcpp: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-libcpp/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage4-libcpp maybe-all-stage4-libcpp +.PHONY: clean-stage4-libcpp maybe-clean-stage4-libcpp +maybe-all-stage4-libcpp: +maybe-clean-stage4-libcpp: +maybe-all-stage4-libcpp: all-stage4-libcpp +all-stage4: all-stage4-libcpp +TARGET-stage4-libcpp = $(TARGET-libcpp) +all-stage4-libcpp: configure-stage4-libcpp + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-libcpp) + +maybe-clean-stage4-libcpp: clean-stage4-libcpp +clean-stage4: clean-stage4-libcpp +clean-stage4-libcpp: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-libcpp/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageprofile-libcpp maybe-all-stageprofile-libcpp +.PHONY: clean-stageprofile-libcpp maybe-clean-stageprofile-libcpp +maybe-all-stageprofile-libcpp: +maybe-clean-stageprofile-libcpp: +maybe-all-stageprofile-libcpp: all-stageprofile-libcpp +all-stageprofile: all-stageprofile-libcpp +TARGET-stageprofile-libcpp = $(TARGET-libcpp) +all-stageprofile-libcpp: configure-stageprofile-libcpp + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-libcpp) + +maybe-clean-stageprofile-libcpp: clean-stageprofile-libcpp +clean-stageprofile: clean-stageprofile-libcpp +clean-stageprofile-libcpp: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-libcpp/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagetrain-libcpp maybe-all-stagetrain-libcpp +.PHONY: clean-stagetrain-libcpp maybe-clean-stagetrain-libcpp +maybe-all-stagetrain-libcpp: +maybe-clean-stagetrain-libcpp: +maybe-all-stagetrain-libcpp: all-stagetrain-libcpp +all-stagetrain: all-stagetrain-libcpp +TARGET-stagetrain-libcpp = $(TARGET-libcpp) +all-stagetrain-libcpp: configure-stagetrain-libcpp + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-libcpp) + +maybe-clean-stagetrain-libcpp: clean-stagetrain-libcpp +clean-stagetrain: clean-stagetrain-libcpp +clean-stagetrain-libcpp: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-libcpp/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagefeedback-libcpp maybe-all-stagefeedback-libcpp +.PHONY: clean-stagefeedback-libcpp maybe-clean-stagefeedback-libcpp +maybe-all-stagefeedback-libcpp: +maybe-clean-stagefeedback-libcpp: +maybe-all-stagefeedback-libcpp: all-stagefeedback-libcpp +all-stagefeedback: all-stagefeedback-libcpp +TARGET-stagefeedback-libcpp = $(TARGET-libcpp) +all-stagefeedback-libcpp: configure-stagefeedback-libcpp + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-libcpp) + +maybe-clean-stagefeedback-libcpp: clean-stagefeedback-libcpp +clean-stagefeedback: clean-stagefeedback-libcpp +clean-stagefeedback-libcpp: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-libcpp/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautoprofile-libcpp maybe-all-stageautoprofile-libcpp +.PHONY: clean-stageautoprofile-libcpp maybe-clean-stageautoprofile-libcpp +maybe-all-stageautoprofile-libcpp: +maybe-clean-stageautoprofile-libcpp: +maybe-all-stageautoprofile-libcpp: all-stageautoprofile-libcpp +all-stageautoprofile: all-stageautoprofile-libcpp +TARGET-stageautoprofile-libcpp = $(TARGET-libcpp) +all-stageautoprofile-libcpp: configure-stageautoprofile-libcpp + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-libcpp) + +maybe-clean-stageautoprofile-libcpp: clean-stageautoprofile-libcpp +clean-stageautoprofile: clean-stageautoprofile-libcpp +clean-stageautoprofile-libcpp: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-libcpp/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautofeedback-libcpp maybe-all-stageautofeedback-libcpp +.PHONY: clean-stageautofeedback-libcpp maybe-clean-stageautofeedback-libcpp +maybe-all-stageautofeedback-libcpp: +maybe-clean-stageautofeedback-libcpp: +maybe-all-stageautofeedback-libcpp: all-stageautofeedback-libcpp +all-stageautofeedback: all-stageautofeedback-libcpp +TARGET-stageautofeedback-libcpp = $(TARGET-libcpp) +all-stageautofeedback-libcpp: configure-stageautofeedback-libcpp + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcpp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-libcpp) + +maybe-clean-stageautofeedback-libcpp: clean-stageautofeedback-libcpp +clean-stageautofeedback: clean-stageautofeedback-libcpp +clean-stageautofeedback-libcpp: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-libcpp/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + + + + +.PHONY: check-libcpp maybe-check-libcpp +maybe-check-libcpp: +maybe-check-libcpp: check-libcpp + +check-libcpp: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-libcpp maybe-install-libcpp +maybe-install-libcpp: +maybe-install-libcpp: install-libcpp + +install-libcpp: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-libcpp maybe-install-strip-libcpp +maybe-install-strip-libcpp: +maybe-install-strip-libcpp: install-strip-libcpp + +install-strip-libcpp: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libcpp info-libcpp +maybe-info-libcpp: +maybe-info-libcpp: info-libcpp + +info-libcpp: \ + configure-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-libcpp dvi-libcpp +maybe-dvi-libcpp: +maybe-dvi-libcpp: dvi-libcpp + +dvi-libcpp: \ + configure-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-libcpp pdf-libcpp +maybe-pdf-libcpp: +maybe-pdf-libcpp: pdf-libcpp + +pdf-libcpp: \ + configure-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-libcpp html-libcpp +maybe-html-libcpp: +maybe-html-libcpp: html-libcpp + +html-libcpp: \ + configure-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-libcpp TAGS-libcpp +maybe-TAGS-libcpp: +maybe-TAGS-libcpp: TAGS-libcpp + +TAGS-libcpp: \ + configure-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-libcpp install-info-libcpp +maybe-install-info-libcpp: +maybe-install-info-libcpp: install-info-libcpp + +install-info-libcpp: \ + configure-libcpp \ + info-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-libcpp install-dvi-libcpp +maybe-install-dvi-libcpp: +maybe-install-dvi-libcpp: install-dvi-libcpp + +install-dvi-libcpp: \ + configure-libcpp \ + dvi-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-libcpp install-pdf-libcpp +maybe-install-pdf-libcpp: +maybe-install-pdf-libcpp: install-pdf-libcpp + +install-pdf-libcpp: \ + configure-libcpp \ + pdf-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-libcpp install-html-libcpp +maybe-install-html-libcpp: +maybe-install-html-libcpp: install-html-libcpp + +install-html-libcpp: \ + configure-libcpp \ + html-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-libcpp installcheck-libcpp +maybe-installcheck-libcpp: +maybe-installcheck-libcpp: installcheck-libcpp + +installcheck-libcpp: \ + configure-libcpp + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-libcpp mostlyclean-libcpp +maybe-mostlyclean-libcpp: +maybe-mostlyclean-libcpp: mostlyclean-libcpp + +mostlyclean-libcpp: + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-libcpp clean-libcpp +maybe-clean-libcpp: +maybe-clean-libcpp: clean-libcpp + +clean-libcpp: + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-libcpp distclean-libcpp +maybe-distclean-libcpp: +maybe-distclean-libcpp: distclean-libcpp + +distclean-libcpp: + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-libcpp maintainer-clean-libcpp +maybe-maintainer-clean-libcpp: +maybe-maintainer-clean-libcpp: maintainer-clean-libcpp + +maintainer-clean-libcpp: + @[ -f ./libcpp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in libcpp"; \ + (cd $(HOST_SUBDIR)/libcpp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-libcody maybe-configure-libcody +maybe-configure-libcody: +configure-libcody: stage_current +maybe-configure-libcody: configure-libcody +configure-libcody: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libcody; \ + cd "$(HOST_SUBDIR)/libcody" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-libcody maybe-configure-stage1-libcody +maybe-configure-stage1-libcody: +maybe-configure-stage1-libcody: configure-stage1-libcody +configure-stage1-libcody: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) + +.PHONY: configure-stage2-libcody maybe-configure-stage2-libcody +maybe-configure-stage2-libcody: +maybe-configure-stage2-libcody: configure-stage2-libcody +configure-stage2-libcody: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) + +.PHONY: configure-stage3-libcody maybe-configure-stage3-libcody +maybe-configure-stage3-libcody: +maybe-configure-stage3-libcody: configure-stage3-libcody +configure-stage3-libcody: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) + +.PHONY: configure-stage4-libcody maybe-configure-stage4-libcody +maybe-configure-stage4-libcody: +maybe-configure-stage4-libcody: configure-stage4-libcody +configure-stage4-libcody: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) + +.PHONY: configure-stageprofile-libcody maybe-configure-stageprofile-libcody +maybe-configure-stageprofile-libcody: +maybe-configure-stageprofile-libcody: configure-stageprofile-libcody +configure-stageprofile-libcody: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stagetrain-libcody maybe-configure-stagetrain-libcody +maybe-configure-stagetrain-libcody: +maybe-configure-stagetrain-libcody: configure-stagetrain-libcody +configure-stagetrain-libcody: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) + +.PHONY: configure-stagefeedback-libcody maybe-configure-stagefeedback-libcody +maybe-configure-stagefeedback-libcody: +maybe-configure-stagefeedback-libcody: configure-stagefeedback-libcody +configure-stagefeedback-libcody: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) + +.PHONY: configure-stageautoprofile-libcody maybe-configure-stageautoprofile-libcody +maybe-configure-stageautoprofile-libcody: +maybe-configure-stageautoprofile-libcody: configure-stageautoprofile-libcody +configure-stageautoprofile-libcody: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stageautofeedback-libcody maybe-configure-stageautofeedback-libcody +maybe-configure-stageautofeedback-libcody: +maybe-configure-stageautofeedback-libcody: configure-stageautofeedback-libcody +configure-stageautofeedback-libcody: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libcody/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/libcody; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcody; \ + cd $(HOST_SUBDIR)/libcody || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcody/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcody; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) + + + + + +.PHONY: all-libcody maybe-all-libcody +maybe-all-libcody: +all-libcody: stage_current +TARGET-libcody=all +maybe-all-libcody: all-libcody +all-libcody: configure-libcody + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-libcody)) + + + +.PHONY: all-stage1-libcody maybe-all-stage1-libcody +.PHONY: clean-stage1-libcody maybe-clean-stage1-libcody +maybe-all-stage1-libcody: +maybe-clean-stage1-libcody: +maybe-all-stage1-libcody: all-stage1-libcody +all-stage1: all-stage1-libcody +TARGET-stage1-libcody = $(TARGET-libcody) +all-stage1-libcody: configure-stage1-libcody + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-libcody) + +maybe-clean-stage1-libcody: clean-stage1-libcody +clean-stage1: clean-stage1-libcody +clean-stage1-libcody: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-libcody/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage2-libcody maybe-all-stage2-libcody +.PHONY: clean-stage2-libcody maybe-clean-stage2-libcody +maybe-all-stage2-libcody: +maybe-clean-stage2-libcody: +maybe-all-stage2-libcody: all-stage2-libcody +all-stage2: all-stage2-libcody +TARGET-stage2-libcody = $(TARGET-libcody) +all-stage2-libcody: configure-stage2-libcody + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-libcody) + +maybe-clean-stage2-libcody: clean-stage2-libcody +clean-stage2: clean-stage2-libcody +clean-stage2-libcody: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-libcody/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage3-libcody maybe-all-stage3-libcody +.PHONY: clean-stage3-libcody maybe-clean-stage3-libcody +maybe-all-stage3-libcody: +maybe-clean-stage3-libcody: +maybe-all-stage3-libcody: all-stage3-libcody +all-stage3: all-stage3-libcody +TARGET-stage3-libcody = $(TARGET-libcody) +all-stage3-libcody: configure-stage3-libcody + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-libcody) + +maybe-clean-stage3-libcody: clean-stage3-libcody +clean-stage3: clean-stage3-libcody +clean-stage3-libcody: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-libcody/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage4-libcody maybe-all-stage4-libcody +.PHONY: clean-stage4-libcody maybe-clean-stage4-libcody +maybe-all-stage4-libcody: +maybe-clean-stage4-libcody: +maybe-all-stage4-libcody: all-stage4-libcody +all-stage4: all-stage4-libcody +TARGET-stage4-libcody = $(TARGET-libcody) +all-stage4-libcody: configure-stage4-libcody + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-libcody) + +maybe-clean-stage4-libcody: clean-stage4-libcody +clean-stage4: clean-stage4-libcody +clean-stage4-libcody: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-libcody/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageprofile-libcody maybe-all-stageprofile-libcody +.PHONY: clean-stageprofile-libcody maybe-clean-stageprofile-libcody +maybe-all-stageprofile-libcody: +maybe-clean-stageprofile-libcody: +maybe-all-stageprofile-libcody: all-stageprofile-libcody +all-stageprofile: all-stageprofile-libcody +TARGET-stageprofile-libcody = $(TARGET-libcody) +all-stageprofile-libcody: configure-stageprofile-libcody + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-libcody) + +maybe-clean-stageprofile-libcody: clean-stageprofile-libcody +clean-stageprofile: clean-stageprofile-libcody +clean-stageprofile-libcody: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-libcody/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagetrain-libcody maybe-all-stagetrain-libcody +.PHONY: clean-stagetrain-libcody maybe-clean-stagetrain-libcody +maybe-all-stagetrain-libcody: +maybe-clean-stagetrain-libcody: +maybe-all-stagetrain-libcody: all-stagetrain-libcody +all-stagetrain: all-stagetrain-libcody +TARGET-stagetrain-libcody = $(TARGET-libcody) +all-stagetrain-libcody: configure-stagetrain-libcody + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-libcody) + +maybe-clean-stagetrain-libcody: clean-stagetrain-libcody +clean-stagetrain: clean-stagetrain-libcody +clean-stagetrain-libcody: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-libcody/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagefeedback-libcody maybe-all-stagefeedback-libcody +.PHONY: clean-stagefeedback-libcody maybe-clean-stagefeedback-libcody +maybe-all-stagefeedback-libcody: +maybe-clean-stagefeedback-libcody: +maybe-all-stagefeedback-libcody: all-stagefeedback-libcody +all-stagefeedback: all-stagefeedback-libcody +TARGET-stagefeedback-libcody = $(TARGET-libcody) +all-stagefeedback-libcody: configure-stagefeedback-libcody + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-libcody) + +maybe-clean-stagefeedback-libcody: clean-stagefeedback-libcody +clean-stagefeedback: clean-stagefeedback-libcody +clean-stagefeedback-libcody: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-libcody/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautoprofile-libcody maybe-all-stageautoprofile-libcody +.PHONY: clean-stageautoprofile-libcody maybe-clean-stageautoprofile-libcody +maybe-all-stageautoprofile-libcody: +maybe-clean-stageautoprofile-libcody: +maybe-all-stageautoprofile-libcody: all-stageautoprofile-libcody +all-stageautoprofile: all-stageautoprofile-libcody +TARGET-stageautoprofile-libcody = $(TARGET-libcody) +all-stageautoprofile-libcody: configure-stageautoprofile-libcody + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-libcody) + +maybe-clean-stageautoprofile-libcody: clean-stageautoprofile-libcody +clean-stageautoprofile: clean-stageautoprofile-libcody +clean-stageautoprofile-libcody: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-libcody/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautofeedback-libcody maybe-all-stageautofeedback-libcody +.PHONY: clean-stageautofeedback-libcody maybe-clean-stageautofeedback-libcody +maybe-all-stageautofeedback-libcody: +maybe-clean-stageautofeedback-libcody: +maybe-all-stageautofeedback-libcody: all-stageautofeedback-libcody +all-stageautofeedback: all-stageautofeedback-libcody +TARGET-stageautofeedback-libcody = $(TARGET-libcody) +all-stageautofeedback-libcody: configure-stageautofeedback-libcody + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libcody && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-libcody) + +maybe-clean-stageautofeedback-libcody: clean-stageautofeedback-libcody +clean-stageautofeedback: clean-stageautofeedback-libcody +clean-stageautofeedback-libcody: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/libcody/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-libcody/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + + + + +.PHONY: check-libcody maybe-check-libcody +maybe-check-libcody: +maybe-check-libcody: check-libcody + +check-libcody: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-libcody maybe-install-libcody +maybe-install-libcody: +maybe-install-libcody: install-libcody + +install-libcody: + + +.PHONY: install-strip-libcody maybe-install-strip-libcody +maybe-install-strip-libcody: +maybe-install-strip-libcody: install-strip-libcody + +install-strip-libcody: + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libcody info-libcody +maybe-info-libcody: +maybe-info-libcody: info-libcody + +# libcody doesn't support info. +info-libcody: + + +.PHONY: maybe-dvi-libcody dvi-libcody +maybe-dvi-libcody: +maybe-dvi-libcody: dvi-libcody + +# libcody doesn't support dvi. +dvi-libcody: + + +.PHONY: maybe-pdf-libcody pdf-libcody +maybe-pdf-libcody: +maybe-pdf-libcody: pdf-libcody + +# libcody doesn't support pdf. +pdf-libcody: + + +.PHONY: maybe-html-libcody html-libcody +maybe-html-libcody: +maybe-html-libcody: html-libcody + +# libcody doesn't support html. +html-libcody: + + +.PHONY: maybe-TAGS-libcody TAGS-libcody +maybe-TAGS-libcody: +maybe-TAGS-libcody: TAGS-libcody + +# libcody doesn't support TAGS. +TAGS-libcody: + + +.PHONY: maybe-install-info-libcody install-info-libcody +maybe-install-info-libcody: +maybe-install-info-libcody: install-info-libcody + +# libcody doesn't support install-info. +install-info-libcody: + + +.PHONY: maybe-install-dvi-libcody install-dvi-libcody +maybe-install-dvi-libcody: +maybe-install-dvi-libcody: install-dvi-libcody + +# libcody doesn't support install-dvi. +install-dvi-libcody: + + +.PHONY: maybe-install-pdf-libcody install-pdf-libcody +maybe-install-pdf-libcody: +maybe-install-pdf-libcody: install-pdf-libcody + +# libcody doesn't support install-pdf. +install-pdf-libcody: + + +.PHONY: maybe-install-html-libcody install-html-libcody +maybe-install-html-libcody: +maybe-install-html-libcody: install-html-libcody + +# libcody doesn't support install-html. +install-html-libcody: + + +.PHONY: maybe-installcheck-libcody installcheck-libcody +maybe-installcheck-libcody: +maybe-installcheck-libcody: installcheck-libcody + +installcheck-libcody: \ + configure-libcody + @[ -f ./libcody/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in libcody"; \ + (cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-libcody mostlyclean-libcody +maybe-mostlyclean-libcody: +maybe-mostlyclean-libcody: mostlyclean-libcody + +mostlyclean-libcody: + @[ -f ./libcody/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in libcody"; \ + (cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-libcody clean-libcody +maybe-clean-libcody: +maybe-clean-libcody: clean-libcody + +clean-libcody: + @[ -f ./libcody/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in libcody"; \ + (cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-libcody distclean-libcody +maybe-distclean-libcody: +maybe-distclean-libcody: distclean-libcody + +distclean-libcody: + @[ -f ./libcody/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in libcody"; \ + (cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-libcody maintainer-clean-libcody +maybe-maintainer-clean-libcody: +maybe-maintainer-clean-libcody: maintainer-clean-libcody + +maintainer-clean-libcody: + @[ -f ./libcody/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in libcody"; \ + (cd $(HOST_SUBDIR)/libcody && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-libdecnumber maybe-configure-libdecnumber +maybe-configure-libdecnumber: +configure-libdecnumber: stage_current +maybe-configure-libdecnumber: configure-libdecnumber +configure-libdecnumber: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libdecnumber; \ + cd "$(HOST_SUBDIR)/libdecnumber" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-libdecnumber maybe-configure-stage1-libdecnumber +maybe-configure-stage1-libdecnumber: +maybe-configure-stage1-libdecnumber: configure-stage1-libdecnumber +configure-stage1-libdecnumber: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) + +.PHONY: configure-stage2-libdecnumber maybe-configure-stage2-libdecnumber +maybe-configure-stage2-libdecnumber: +maybe-configure-stage2-libdecnumber: configure-stage2-libdecnumber +configure-stage2-libdecnumber: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) + +.PHONY: configure-stage3-libdecnumber maybe-configure-stage3-libdecnumber +maybe-configure-stage3-libdecnumber: +maybe-configure-stage3-libdecnumber: configure-stage3-libdecnumber +configure-stage3-libdecnumber: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) + +.PHONY: configure-stage4-libdecnumber maybe-configure-stage4-libdecnumber +maybe-configure-stage4-libdecnumber: +maybe-configure-stage4-libdecnumber: configure-stage4-libdecnumber +configure-stage4-libdecnumber: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) + +.PHONY: configure-stageprofile-libdecnumber maybe-configure-stageprofile-libdecnumber +maybe-configure-stageprofile-libdecnumber: +maybe-configure-stageprofile-libdecnumber: configure-stageprofile-libdecnumber +configure-stageprofile-libdecnumber: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stagetrain-libdecnumber maybe-configure-stagetrain-libdecnumber +maybe-configure-stagetrain-libdecnumber: +maybe-configure-stagetrain-libdecnumber: configure-stagetrain-libdecnumber +configure-stagetrain-libdecnumber: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) + +.PHONY: configure-stagefeedback-libdecnumber maybe-configure-stagefeedback-libdecnumber +maybe-configure-stagefeedback-libdecnumber: +maybe-configure-stagefeedback-libdecnumber: configure-stagefeedback-libdecnumber +configure-stagefeedback-libdecnumber: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) + +.PHONY: configure-stageautoprofile-libdecnumber maybe-configure-stageautoprofile-libdecnumber +maybe-configure-stageautoprofile-libdecnumber: +maybe-configure-stageautoprofile-libdecnumber: configure-stageautoprofile-libdecnumber +configure-stageautoprofile-libdecnumber: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stageautofeedback-libdecnumber maybe-configure-stageautofeedback-libdecnumber +maybe-configure-stageautofeedback-libdecnumber: +maybe-configure-stageautofeedback-libdecnumber: configure-stageautofeedback-libdecnumber +configure-stageautofeedback-libdecnumber: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/libdecnumber; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber; \ + cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libdecnumber/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libdecnumber; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) + + + + + +.PHONY: all-libdecnumber maybe-all-libdecnumber +maybe-all-libdecnumber: +all-libdecnumber: stage_current +TARGET-libdecnumber=all +maybe-all-libdecnumber: all-libdecnumber +all-libdecnumber: configure-libdecnumber + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-libdecnumber)) + + + +.PHONY: all-stage1-libdecnumber maybe-all-stage1-libdecnumber +.PHONY: clean-stage1-libdecnumber maybe-clean-stage1-libdecnumber +maybe-all-stage1-libdecnumber: +maybe-clean-stage1-libdecnumber: +maybe-all-stage1-libdecnumber: all-stage1-libdecnumber +all-stage1: all-stage1-libdecnumber +TARGET-stage1-libdecnumber = $(TARGET-libdecnumber) +all-stage1-libdecnumber: configure-stage1-libdecnumber + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-libdecnumber) + +maybe-clean-stage1-libdecnumber: clean-stage1-libdecnumber +clean-stage1: clean-stage1-libdecnumber +clean-stage1-libdecnumber: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage2-libdecnumber maybe-all-stage2-libdecnumber +.PHONY: clean-stage2-libdecnumber maybe-clean-stage2-libdecnumber +maybe-all-stage2-libdecnumber: +maybe-clean-stage2-libdecnumber: +maybe-all-stage2-libdecnumber: all-stage2-libdecnumber +all-stage2: all-stage2-libdecnumber +TARGET-stage2-libdecnumber = $(TARGET-libdecnumber) +all-stage2-libdecnumber: configure-stage2-libdecnumber + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-libdecnumber) + +maybe-clean-stage2-libdecnumber: clean-stage2-libdecnumber +clean-stage2: clean-stage2-libdecnumber +clean-stage2-libdecnumber: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage3-libdecnumber maybe-all-stage3-libdecnumber +.PHONY: clean-stage3-libdecnumber maybe-clean-stage3-libdecnumber +maybe-all-stage3-libdecnumber: +maybe-clean-stage3-libdecnumber: +maybe-all-stage3-libdecnumber: all-stage3-libdecnumber +all-stage3: all-stage3-libdecnumber +TARGET-stage3-libdecnumber = $(TARGET-libdecnumber) +all-stage3-libdecnumber: configure-stage3-libdecnumber + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-libdecnumber) + +maybe-clean-stage3-libdecnumber: clean-stage3-libdecnumber +clean-stage3: clean-stage3-libdecnumber +clean-stage3-libdecnumber: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage4-libdecnumber maybe-all-stage4-libdecnumber +.PHONY: clean-stage4-libdecnumber maybe-clean-stage4-libdecnumber +maybe-all-stage4-libdecnumber: +maybe-clean-stage4-libdecnumber: +maybe-all-stage4-libdecnumber: all-stage4-libdecnumber +all-stage4: all-stage4-libdecnumber +TARGET-stage4-libdecnumber = $(TARGET-libdecnumber) +all-stage4-libdecnumber: configure-stage4-libdecnumber + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-libdecnumber) + +maybe-clean-stage4-libdecnumber: clean-stage4-libdecnumber +clean-stage4: clean-stage4-libdecnumber +clean-stage4-libdecnumber: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageprofile-libdecnumber maybe-all-stageprofile-libdecnumber +.PHONY: clean-stageprofile-libdecnumber maybe-clean-stageprofile-libdecnumber +maybe-all-stageprofile-libdecnumber: +maybe-clean-stageprofile-libdecnumber: +maybe-all-stageprofile-libdecnumber: all-stageprofile-libdecnumber +all-stageprofile: all-stageprofile-libdecnumber +TARGET-stageprofile-libdecnumber = $(TARGET-libdecnumber) +all-stageprofile-libdecnumber: configure-stageprofile-libdecnumber + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-libdecnumber) + +maybe-clean-stageprofile-libdecnumber: clean-stageprofile-libdecnumber +clean-stageprofile: clean-stageprofile-libdecnumber +clean-stageprofile-libdecnumber: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagetrain-libdecnumber maybe-all-stagetrain-libdecnumber +.PHONY: clean-stagetrain-libdecnumber maybe-clean-stagetrain-libdecnumber +maybe-all-stagetrain-libdecnumber: +maybe-clean-stagetrain-libdecnumber: +maybe-all-stagetrain-libdecnumber: all-stagetrain-libdecnumber +all-stagetrain: all-stagetrain-libdecnumber +TARGET-stagetrain-libdecnumber = $(TARGET-libdecnumber) +all-stagetrain-libdecnumber: configure-stagetrain-libdecnumber + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-libdecnumber) + +maybe-clean-stagetrain-libdecnumber: clean-stagetrain-libdecnumber +clean-stagetrain: clean-stagetrain-libdecnumber +clean-stagetrain-libdecnumber: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagefeedback-libdecnumber maybe-all-stagefeedback-libdecnumber +.PHONY: clean-stagefeedback-libdecnumber maybe-clean-stagefeedback-libdecnumber +maybe-all-stagefeedback-libdecnumber: +maybe-clean-stagefeedback-libdecnumber: +maybe-all-stagefeedback-libdecnumber: all-stagefeedback-libdecnumber +all-stagefeedback: all-stagefeedback-libdecnumber +TARGET-stagefeedback-libdecnumber = $(TARGET-libdecnumber) +all-stagefeedback-libdecnumber: configure-stagefeedback-libdecnumber + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-libdecnumber) + +maybe-clean-stagefeedback-libdecnumber: clean-stagefeedback-libdecnumber +clean-stagefeedback: clean-stagefeedback-libdecnumber +clean-stagefeedback-libdecnumber: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautoprofile-libdecnumber maybe-all-stageautoprofile-libdecnumber +.PHONY: clean-stageautoprofile-libdecnumber maybe-clean-stageautoprofile-libdecnumber +maybe-all-stageautoprofile-libdecnumber: +maybe-clean-stageautoprofile-libdecnumber: +maybe-all-stageautoprofile-libdecnumber: all-stageautoprofile-libdecnumber +all-stageautoprofile: all-stageautoprofile-libdecnumber +TARGET-stageautoprofile-libdecnumber = $(TARGET-libdecnumber) +all-stageautoprofile-libdecnumber: configure-stageautoprofile-libdecnumber + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-libdecnumber) + +maybe-clean-stageautoprofile-libdecnumber: clean-stageautoprofile-libdecnumber +clean-stageautoprofile: clean-stageautoprofile-libdecnumber +clean-stageautoprofile-libdecnumber: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautofeedback-libdecnumber maybe-all-stageautofeedback-libdecnumber +.PHONY: clean-stageautofeedback-libdecnumber maybe-clean-stageautofeedback-libdecnumber +maybe-all-stageautofeedback-libdecnumber: +maybe-clean-stageautofeedback-libdecnumber: +maybe-all-stageautofeedback-libdecnumber: all-stageautofeedback-libdecnumber +all-stageautofeedback: all-stageautofeedback-libdecnumber +TARGET-stageautofeedback-libdecnumber = $(TARGET-libdecnumber) +all-stageautofeedback-libdecnumber: configure-stageautofeedback-libdecnumber + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libdecnumber && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-libdecnumber) + +maybe-clean-stageautofeedback-libdecnumber: clean-stageautofeedback-libdecnumber +clean-stageautofeedback: clean-stageautofeedback-libdecnumber +clean-stageautofeedback-libdecnumber: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-libdecnumber/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + + + + +.PHONY: check-libdecnumber maybe-check-libdecnumber +maybe-check-libdecnumber: +maybe-check-libdecnumber: check-libdecnumber + +check-libdecnumber: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-libdecnumber maybe-install-libdecnumber +maybe-install-libdecnumber: +maybe-install-libdecnumber: install-libdecnumber + +install-libdecnumber: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-libdecnumber maybe-install-strip-libdecnumber +maybe-install-strip-libdecnumber: +maybe-install-strip-libdecnumber: install-strip-libdecnumber + +install-strip-libdecnumber: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libdecnumber info-libdecnumber +maybe-info-libdecnumber: +maybe-info-libdecnumber: info-libdecnumber + +info-libdecnumber: \ + configure-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-libdecnumber dvi-libdecnumber +maybe-dvi-libdecnumber: +maybe-dvi-libdecnumber: dvi-libdecnumber + +dvi-libdecnumber: \ + configure-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-libdecnumber pdf-libdecnumber +maybe-pdf-libdecnumber: +maybe-pdf-libdecnumber: pdf-libdecnumber + +pdf-libdecnumber: \ + configure-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-libdecnumber html-libdecnumber +maybe-html-libdecnumber: +maybe-html-libdecnumber: html-libdecnumber + +html-libdecnumber: \ + configure-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-libdecnumber TAGS-libdecnumber +maybe-TAGS-libdecnumber: +maybe-TAGS-libdecnumber: TAGS-libdecnumber + +# libdecnumber doesn't support TAGS. +TAGS-libdecnumber: + + +.PHONY: maybe-install-info-libdecnumber install-info-libdecnumber +maybe-install-info-libdecnumber: +maybe-install-info-libdecnumber: install-info-libdecnumber + +install-info-libdecnumber: \ + configure-libdecnumber \ + info-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-libdecnumber install-dvi-libdecnumber +maybe-install-dvi-libdecnumber: +maybe-install-dvi-libdecnumber: install-dvi-libdecnumber + +install-dvi-libdecnumber: \ + configure-libdecnumber \ + dvi-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-libdecnumber install-pdf-libdecnumber +maybe-install-pdf-libdecnumber: +maybe-install-pdf-libdecnumber: install-pdf-libdecnumber + +install-pdf-libdecnumber: \ + configure-libdecnumber \ + pdf-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-libdecnumber install-html-libdecnumber +maybe-install-html-libdecnumber: +maybe-install-html-libdecnumber: install-html-libdecnumber + +install-html-libdecnumber: \ + configure-libdecnumber \ + html-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-libdecnumber installcheck-libdecnumber +maybe-installcheck-libdecnumber: +maybe-installcheck-libdecnumber: installcheck-libdecnumber + +installcheck-libdecnumber: \ + configure-libdecnumber + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-libdecnumber mostlyclean-libdecnumber +maybe-mostlyclean-libdecnumber: +maybe-mostlyclean-libdecnumber: mostlyclean-libdecnumber + +mostlyclean-libdecnumber: + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-libdecnumber clean-libdecnumber +maybe-clean-libdecnumber: +maybe-clean-libdecnumber: clean-libdecnumber + +clean-libdecnumber: + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-libdecnumber distclean-libdecnumber +maybe-distclean-libdecnumber: +maybe-distclean-libdecnumber: distclean-libdecnumber + +distclean-libdecnumber: + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-libdecnumber maintainer-clean-libdecnumber +maybe-maintainer-clean-libdecnumber: +maybe-maintainer-clean-libdecnumber: maintainer-clean-libdecnumber + +maintainer-clean-libdecnumber: + @[ -f ./libdecnumber/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in libdecnumber"; \ + (cd $(HOST_SUBDIR)/libdecnumber && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-libgui maybe-configure-libgui +maybe-configure-libgui: +configure-libgui: stage_current + + + + + +.PHONY: all-libgui maybe-all-libgui +maybe-all-libgui: +all-libgui: stage_current + + + + +.PHONY: check-libgui maybe-check-libgui +maybe-check-libgui: + +.PHONY: install-libgui maybe-install-libgui +maybe-install-libgui: + +.PHONY: install-strip-libgui maybe-install-strip-libgui +maybe-install-strip-libgui: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libgui info-libgui +maybe-info-libgui: + +.PHONY: maybe-dvi-libgui dvi-libgui +maybe-dvi-libgui: + +.PHONY: maybe-pdf-libgui pdf-libgui +maybe-pdf-libgui: + +.PHONY: maybe-html-libgui html-libgui +maybe-html-libgui: + +.PHONY: maybe-TAGS-libgui TAGS-libgui +maybe-TAGS-libgui: + +.PHONY: maybe-install-info-libgui install-info-libgui +maybe-install-info-libgui: + +.PHONY: maybe-install-dvi-libgui install-dvi-libgui +maybe-install-dvi-libgui: + +.PHONY: maybe-install-pdf-libgui install-pdf-libgui +maybe-install-pdf-libgui: + +.PHONY: maybe-install-html-libgui install-html-libgui +maybe-install-html-libgui: + +.PHONY: maybe-installcheck-libgui installcheck-libgui +maybe-installcheck-libgui: + +.PHONY: maybe-mostlyclean-libgui mostlyclean-libgui +maybe-mostlyclean-libgui: + +.PHONY: maybe-clean-libgui clean-libgui +maybe-clean-libgui: + +.PHONY: maybe-distclean-libgui distclean-libgui +maybe-distclean-libgui: + +.PHONY: maybe-maintainer-clean-libgui maintainer-clean-libgui +maybe-maintainer-clean-libgui: + + + +.PHONY: configure-libiberty maybe-configure-libiberty +maybe-configure-libiberty: +configure-libiberty: stage_current +maybe-configure-libiberty: configure-libiberty +configure-libiberty: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libiberty; \ + cd "$(HOST_SUBDIR)/libiberty" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} --enable-shared \ + || exit 1 + + + +.PHONY: configure-stage1-libiberty maybe-configure-stage1-libiberty +maybe-configure-stage1-libiberty: +maybe-configure-stage1-libiberty: configure-stage1-libiberty +configure-stage1-libiberty: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stage2-libiberty maybe-configure-stage2-libiberty +maybe-configure-stage2-libiberty: +maybe-configure-stage2-libiberty: configure-stage2-libiberty +configure-stage2-libiberty: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stage3-libiberty maybe-configure-stage3-libiberty +maybe-configure-stage3-libiberty: +maybe-configure-stage3-libiberty: configure-stage3-libiberty +configure-stage3-libiberty: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stage4-libiberty maybe-configure-stage4-libiberty +maybe-configure-stage4-libiberty: +maybe-configure-stage4-libiberty: configure-stage4-libiberty +configure-stage4-libiberty: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stageprofile-libiberty maybe-configure-stageprofile-libiberty +maybe-configure-stageprofile-libiberty: +maybe-configure-stageprofile-libiberty: configure-stageprofile-libiberty +configure-stageprofile-libiberty: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stagetrain-libiberty maybe-configure-stagetrain-libiberty +maybe-configure-stagetrain-libiberty: +maybe-configure-stagetrain-libiberty: configure-stagetrain-libiberty +configure-stagetrain-libiberty: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stagefeedback-libiberty maybe-configure-stagefeedback-libiberty +maybe-configure-stagefeedback-libiberty: +maybe-configure-stagefeedback-libiberty: configure-stagefeedback-libiberty +configure-stagefeedback-libiberty: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stageautoprofile-libiberty maybe-configure-stageautoprofile-libiberty +maybe-configure-stageautoprofile-libiberty: +maybe-configure-stageautoprofile-libiberty: configure-stageautoprofile-libiberty +configure-stageautoprofile-libiberty: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stageautofeedback-libiberty maybe-configure-stageautofeedback-libiberty +maybe-configure-stageautofeedback-libiberty: +maybe-configure-stageautofeedback-libiberty: configure-stageautofeedback-libiberty +configure-stageautofeedback-libiberty: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/libiberty; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty; \ + cd $(HOST_SUBDIR)/libiberty || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiberty/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libiberty; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) \ + --enable-shared + + + + + +.PHONY: all-libiberty maybe-all-libiberty +maybe-all-libiberty: +all-libiberty: stage_current +TARGET-libiberty=all +maybe-all-libiberty: all-libiberty +all-libiberty: configure-libiberty + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-libiberty)) + + + +.PHONY: all-stage1-libiberty maybe-all-stage1-libiberty +.PHONY: clean-stage1-libiberty maybe-clean-stage1-libiberty +maybe-all-stage1-libiberty: +maybe-clean-stage1-libiberty: +maybe-all-stage1-libiberty: all-stage1-libiberty +all-stage1: all-stage1-libiberty +TARGET-stage1-libiberty = $(TARGET-libiberty) +all-stage1-libiberty: configure-stage1-libiberty + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-libiberty) + +maybe-clean-stage1-libiberty: clean-stage1-libiberty +clean-stage1: clean-stage1-libiberty +clean-stage1-libiberty: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-libiberty/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage2-libiberty maybe-all-stage2-libiberty +.PHONY: clean-stage2-libiberty maybe-clean-stage2-libiberty +maybe-all-stage2-libiberty: +maybe-clean-stage2-libiberty: +maybe-all-stage2-libiberty: all-stage2-libiberty +all-stage2: all-stage2-libiberty +TARGET-stage2-libiberty = $(TARGET-libiberty) +all-stage2-libiberty: configure-stage2-libiberty + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-libiberty) + +maybe-clean-stage2-libiberty: clean-stage2-libiberty +clean-stage2: clean-stage2-libiberty +clean-stage2-libiberty: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-libiberty/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage3-libiberty maybe-all-stage3-libiberty +.PHONY: clean-stage3-libiberty maybe-clean-stage3-libiberty +maybe-all-stage3-libiberty: +maybe-clean-stage3-libiberty: +maybe-all-stage3-libiberty: all-stage3-libiberty +all-stage3: all-stage3-libiberty +TARGET-stage3-libiberty = $(TARGET-libiberty) +all-stage3-libiberty: configure-stage3-libiberty + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-libiberty) + +maybe-clean-stage3-libiberty: clean-stage3-libiberty +clean-stage3: clean-stage3-libiberty +clean-stage3-libiberty: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-libiberty/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage4-libiberty maybe-all-stage4-libiberty +.PHONY: clean-stage4-libiberty maybe-clean-stage4-libiberty +maybe-all-stage4-libiberty: +maybe-clean-stage4-libiberty: +maybe-all-stage4-libiberty: all-stage4-libiberty +all-stage4: all-stage4-libiberty +TARGET-stage4-libiberty = $(TARGET-libiberty) +all-stage4-libiberty: configure-stage4-libiberty + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-libiberty) + +maybe-clean-stage4-libiberty: clean-stage4-libiberty +clean-stage4: clean-stage4-libiberty +clean-stage4-libiberty: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-libiberty/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageprofile-libiberty maybe-all-stageprofile-libiberty +.PHONY: clean-stageprofile-libiberty maybe-clean-stageprofile-libiberty +maybe-all-stageprofile-libiberty: +maybe-clean-stageprofile-libiberty: +maybe-all-stageprofile-libiberty: all-stageprofile-libiberty +all-stageprofile: all-stageprofile-libiberty +TARGET-stageprofile-libiberty = $(TARGET-libiberty) +all-stageprofile-libiberty: configure-stageprofile-libiberty + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-libiberty) + +maybe-clean-stageprofile-libiberty: clean-stageprofile-libiberty +clean-stageprofile: clean-stageprofile-libiberty +clean-stageprofile-libiberty: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-libiberty/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagetrain-libiberty maybe-all-stagetrain-libiberty +.PHONY: clean-stagetrain-libiberty maybe-clean-stagetrain-libiberty +maybe-all-stagetrain-libiberty: +maybe-clean-stagetrain-libiberty: +maybe-all-stagetrain-libiberty: all-stagetrain-libiberty +all-stagetrain: all-stagetrain-libiberty +TARGET-stagetrain-libiberty = $(TARGET-libiberty) +all-stagetrain-libiberty: configure-stagetrain-libiberty + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-libiberty) + +maybe-clean-stagetrain-libiberty: clean-stagetrain-libiberty +clean-stagetrain: clean-stagetrain-libiberty +clean-stagetrain-libiberty: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-libiberty/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagefeedback-libiberty maybe-all-stagefeedback-libiberty +.PHONY: clean-stagefeedback-libiberty maybe-clean-stagefeedback-libiberty +maybe-all-stagefeedback-libiberty: +maybe-clean-stagefeedback-libiberty: +maybe-all-stagefeedback-libiberty: all-stagefeedback-libiberty +all-stagefeedback: all-stagefeedback-libiberty +TARGET-stagefeedback-libiberty = $(TARGET-libiberty) +all-stagefeedback-libiberty: configure-stagefeedback-libiberty + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-libiberty) + +maybe-clean-stagefeedback-libiberty: clean-stagefeedback-libiberty +clean-stagefeedback: clean-stagefeedback-libiberty +clean-stagefeedback-libiberty: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-libiberty/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautoprofile-libiberty maybe-all-stageautoprofile-libiberty +.PHONY: clean-stageautoprofile-libiberty maybe-clean-stageautoprofile-libiberty +maybe-all-stageautoprofile-libiberty: +maybe-clean-stageautoprofile-libiberty: +maybe-all-stageautoprofile-libiberty: all-stageautoprofile-libiberty +all-stageautoprofile: all-stageautoprofile-libiberty +TARGET-stageautoprofile-libiberty = $(TARGET-libiberty) +all-stageautoprofile-libiberty: configure-stageautoprofile-libiberty + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-libiberty) + +maybe-clean-stageautoprofile-libiberty: clean-stageautoprofile-libiberty +clean-stageautoprofile: clean-stageautoprofile-libiberty +clean-stageautoprofile-libiberty: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-libiberty/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautofeedback-libiberty maybe-all-stageautofeedback-libiberty +.PHONY: clean-stageautofeedback-libiberty maybe-clean-stageautofeedback-libiberty +maybe-all-stageautofeedback-libiberty: +maybe-clean-stageautofeedback-libiberty: +maybe-all-stageautofeedback-libiberty: all-stageautofeedback-libiberty +all-stageautofeedback: all-stageautofeedback-libiberty +TARGET-stageautofeedback-libiberty = $(TARGET-libiberty) +all-stageautofeedback-libiberty: configure-stageautofeedback-libiberty + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libiberty && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-libiberty) + +maybe-clean-stageautofeedback-libiberty: clean-stageautofeedback-libiberty +clean-stageautofeedback: clean-stageautofeedback-libiberty +clean-stageautofeedback-libiberty: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-libiberty/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + + + + +.PHONY: check-libiberty maybe-check-libiberty +maybe-check-libiberty: +maybe-check-libiberty: check-libiberty + +check-libiberty: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-libiberty maybe-install-libiberty +maybe-install-libiberty: +maybe-install-libiberty: install-libiberty + +install-libiberty: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-libiberty maybe-install-strip-libiberty +maybe-install-strip-libiberty: +maybe-install-strip-libiberty: install-strip-libiberty + +install-strip-libiberty: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libiberty info-libiberty +maybe-info-libiberty: +maybe-info-libiberty: info-libiberty + +info-libiberty: \ + configure-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-libiberty dvi-libiberty +maybe-dvi-libiberty: +maybe-dvi-libiberty: dvi-libiberty + +dvi-libiberty: \ + configure-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-libiberty pdf-libiberty +maybe-pdf-libiberty: +maybe-pdf-libiberty: pdf-libiberty + +pdf-libiberty: \ + configure-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-libiberty html-libiberty +maybe-html-libiberty: +maybe-html-libiberty: html-libiberty + +html-libiberty: \ + configure-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-libiberty TAGS-libiberty +maybe-TAGS-libiberty: +maybe-TAGS-libiberty: TAGS-libiberty + +TAGS-libiberty: \ + configure-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-libiberty install-info-libiberty +maybe-install-info-libiberty: +maybe-install-info-libiberty: install-info-libiberty + +install-info-libiberty: \ + configure-libiberty \ + info-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-libiberty install-dvi-libiberty +maybe-install-dvi-libiberty: +maybe-install-dvi-libiberty: install-dvi-libiberty + +install-dvi-libiberty: \ + configure-libiberty \ + dvi-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-libiberty install-pdf-libiberty +maybe-install-pdf-libiberty: +maybe-install-pdf-libiberty: install-pdf-libiberty + +install-pdf-libiberty: \ + configure-libiberty \ + pdf-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-libiberty install-html-libiberty +maybe-install-html-libiberty: +maybe-install-html-libiberty: install-html-libiberty + +install-html-libiberty: \ + configure-libiberty \ + html-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-libiberty installcheck-libiberty +maybe-installcheck-libiberty: +maybe-installcheck-libiberty: installcheck-libiberty + +installcheck-libiberty: \ + configure-libiberty + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-libiberty mostlyclean-libiberty +maybe-mostlyclean-libiberty: +maybe-mostlyclean-libiberty: mostlyclean-libiberty + +mostlyclean-libiberty: + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-libiberty clean-libiberty +maybe-clean-libiberty: +maybe-clean-libiberty: clean-libiberty + +clean-libiberty: + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-libiberty distclean-libiberty +maybe-distclean-libiberty: +maybe-distclean-libiberty: distclean-libiberty + +distclean-libiberty: + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-libiberty maintainer-clean-libiberty +maybe-maintainer-clean-libiberty: +maybe-maintainer-clean-libiberty: maintainer-clean-libiberty + +maintainer-clean-libiberty: + @[ -f ./libiberty/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in libiberty"; \ + (cd $(HOST_SUBDIR)/libiberty && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-libiberty-linker-plugin maybe-configure-libiberty-linker-plugin +maybe-configure-libiberty-linker-plugin: +configure-libiberty-linker-plugin: stage_current + + + +.PHONY: configure-stage1-libiberty-linker-plugin maybe-configure-stage1-libiberty-linker-plugin +maybe-configure-stage1-libiberty-linker-plugin: + +.PHONY: configure-stage2-libiberty-linker-plugin maybe-configure-stage2-libiberty-linker-plugin +maybe-configure-stage2-libiberty-linker-plugin: + +.PHONY: configure-stage3-libiberty-linker-plugin maybe-configure-stage3-libiberty-linker-plugin +maybe-configure-stage3-libiberty-linker-plugin: + +.PHONY: configure-stage4-libiberty-linker-plugin maybe-configure-stage4-libiberty-linker-plugin +maybe-configure-stage4-libiberty-linker-plugin: + +.PHONY: configure-stageprofile-libiberty-linker-plugin maybe-configure-stageprofile-libiberty-linker-plugin +maybe-configure-stageprofile-libiberty-linker-plugin: + +.PHONY: configure-stagetrain-libiberty-linker-plugin maybe-configure-stagetrain-libiberty-linker-plugin +maybe-configure-stagetrain-libiberty-linker-plugin: + +.PHONY: configure-stagefeedback-libiberty-linker-plugin maybe-configure-stagefeedback-libiberty-linker-plugin +maybe-configure-stagefeedback-libiberty-linker-plugin: + +.PHONY: configure-stageautoprofile-libiberty-linker-plugin maybe-configure-stageautoprofile-libiberty-linker-plugin +maybe-configure-stageautoprofile-libiberty-linker-plugin: + +.PHONY: configure-stageautofeedback-libiberty-linker-plugin maybe-configure-stageautofeedback-libiberty-linker-plugin +maybe-configure-stageautofeedback-libiberty-linker-plugin: + + + + + +.PHONY: all-libiberty-linker-plugin maybe-all-libiberty-linker-plugin +maybe-all-libiberty-linker-plugin: +all-libiberty-linker-plugin: stage_current + + + +.PHONY: all-stage1-libiberty-linker-plugin maybe-all-stage1-libiberty-linker-plugin +.PHONY: clean-stage1-libiberty-linker-plugin maybe-clean-stage1-libiberty-linker-plugin +maybe-all-stage1-libiberty-linker-plugin: +maybe-clean-stage1-libiberty-linker-plugin: + + +.PHONY: all-stage2-libiberty-linker-plugin maybe-all-stage2-libiberty-linker-plugin +.PHONY: clean-stage2-libiberty-linker-plugin maybe-clean-stage2-libiberty-linker-plugin +maybe-all-stage2-libiberty-linker-plugin: +maybe-clean-stage2-libiberty-linker-plugin: + + +.PHONY: all-stage3-libiberty-linker-plugin maybe-all-stage3-libiberty-linker-plugin +.PHONY: clean-stage3-libiberty-linker-plugin maybe-clean-stage3-libiberty-linker-plugin +maybe-all-stage3-libiberty-linker-plugin: +maybe-clean-stage3-libiberty-linker-plugin: + + +.PHONY: all-stage4-libiberty-linker-plugin maybe-all-stage4-libiberty-linker-plugin +.PHONY: clean-stage4-libiberty-linker-plugin maybe-clean-stage4-libiberty-linker-plugin +maybe-all-stage4-libiberty-linker-plugin: +maybe-clean-stage4-libiberty-linker-plugin: + + +.PHONY: all-stageprofile-libiberty-linker-plugin maybe-all-stageprofile-libiberty-linker-plugin +.PHONY: clean-stageprofile-libiberty-linker-plugin maybe-clean-stageprofile-libiberty-linker-plugin +maybe-all-stageprofile-libiberty-linker-plugin: +maybe-clean-stageprofile-libiberty-linker-plugin: + + +.PHONY: all-stagetrain-libiberty-linker-plugin maybe-all-stagetrain-libiberty-linker-plugin +.PHONY: clean-stagetrain-libiberty-linker-plugin maybe-clean-stagetrain-libiberty-linker-plugin +maybe-all-stagetrain-libiberty-linker-plugin: +maybe-clean-stagetrain-libiberty-linker-plugin: + + +.PHONY: all-stagefeedback-libiberty-linker-plugin maybe-all-stagefeedback-libiberty-linker-plugin +.PHONY: clean-stagefeedback-libiberty-linker-plugin maybe-clean-stagefeedback-libiberty-linker-plugin +maybe-all-stagefeedback-libiberty-linker-plugin: +maybe-clean-stagefeedback-libiberty-linker-plugin: + + +.PHONY: all-stageautoprofile-libiberty-linker-plugin maybe-all-stageautoprofile-libiberty-linker-plugin +.PHONY: clean-stageautoprofile-libiberty-linker-plugin maybe-clean-stageautoprofile-libiberty-linker-plugin +maybe-all-stageautoprofile-libiberty-linker-plugin: +maybe-clean-stageautoprofile-libiberty-linker-plugin: + + +.PHONY: all-stageautofeedback-libiberty-linker-plugin maybe-all-stageautofeedback-libiberty-linker-plugin +.PHONY: clean-stageautofeedback-libiberty-linker-plugin maybe-clean-stageautofeedback-libiberty-linker-plugin +maybe-all-stageautofeedback-libiberty-linker-plugin: +maybe-clean-stageautofeedback-libiberty-linker-plugin: + + + + + +.PHONY: check-libiberty-linker-plugin maybe-check-libiberty-linker-plugin +maybe-check-libiberty-linker-plugin: + +.PHONY: install-libiberty-linker-plugin maybe-install-libiberty-linker-plugin +maybe-install-libiberty-linker-plugin: + +.PHONY: install-strip-libiberty-linker-plugin maybe-install-strip-libiberty-linker-plugin +maybe-install-strip-libiberty-linker-plugin: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libiberty-linker-plugin info-libiberty-linker-plugin +maybe-info-libiberty-linker-plugin: + +.PHONY: maybe-dvi-libiberty-linker-plugin dvi-libiberty-linker-plugin +maybe-dvi-libiberty-linker-plugin: + +.PHONY: maybe-pdf-libiberty-linker-plugin pdf-libiberty-linker-plugin +maybe-pdf-libiberty-linker-plugin: + +.PHONY: maybe-html-libiberty-linker-plugin html-libiberty-linker-plugin +maybe-html-libiberty-linker-plugin: + +.PHONY: maybe-TAGS-libiberty-linker-plugin TAGS-libiberty-linker-plugin +maybe-TAGS-libiberty-linker-plugin: + +.PHONY: maybe-install-info-libiberty-linker-plugin install-info-libiberty-linker-plugin +maybe-install-info-libiberty-linker-plugin: + +.PHONY: maybe-install-dvi-libiberty-linker-plugin install-dvi-libiberty-linker-plugin +maybe-install-dvi-libiberty-linker-plugin: + +.PHONY: maybe-install-pdf-libiberty-linker-plugin install-pdf-libiberty-linker-plugin +maybe-install-pdf-libiberty-linker-plugin: + +.PHONY: maybe-install-html-libiberty-linker-plugin install-html-libiberty-linker-plugin +maybe-install-html-libiberty-linker-plugin: + +.PHONY: maybe-installcheck-libiberty-linker-plugin installcheck-libiberty-linker-plugin +maybe-installcheck-libiberty-linker-plugin: + +.PHONY: maybe-mostlyclean-libiberty-linker-plugin mostlyclean-libiberty-linker-plugin +maybe-mostlyclean-libiberty-linker-plugin: + +.PHONY: maybe-clean-libiberty-linker-plugin clean-libiberty-linker-plugin +maybe-clean-libiberty-linker-plugin: + +.PHONY: maybe-distclean-libiberty-linker-plugin distclean-libiberty-linker-plugin +maybe-distclean-libiberty-linker-plugin: + +.PHONY: maybe-maintainer-clean-libiberty-linker-plugin maintainer-clean-libiberty-linker-plugin +maybe-maintainer-clean-libiberty-linker-plugin: + + + +.PHONY: configure-libiconv maybe-configure-libiconv +maybe-configure-libiconv: +configure-libiconv: stage_current + + + +.PHONY: configure-stage1-libiconv maybe-configure-stage1-libiconv +maybe-configure-stage1-libiconv: + +.PHONY: configure-stage2-libiconv maybe-configure-stage2-libiconv +maybe-configure-stage2-libiconv: + +.PHONY: configure-stage3-libiconv maybe-configure-stage3-libiconv +maybe-configure-stage3-libiconv: + +.PHONY: configure-stage4-libiconv maybe-configure-stage4-libiconv +maybe-configure-stage4-libiconv: + +.PHONY: configure-stageprofile-libiconv maybe-configure-stageprofile-libiconv +maybe-configure-stageprofile-libiconv: + +.PHONY: configure-stagetrain-libiconv maybe-configure-stagetrain-libiconv +maybe-configure-stagetrain-libiconv: + +.PHONY: configure-stagefeedback-libiconv maybe-configure-stagefeedback-libiconv +maybe-configure-stagefeedback-libiconv: + +.PHONY: configure-stageautoprofile-libiconv maybe-configure-stageautoprofile-libiconv +maybe-configure-stageautoprofile-libiconv: + +.PHONY: configure-stageautofeedback-libiconv maybe-configure-stageautofeedback-libiconv +maybe-configure-stageautofeedback-libiconv: + + + + + +.PHONY: all-libiconv maybe-all-libiconv +maybe-all-libiconv: +all-libiconv: stage_current + + + +.PHONY: all-stage1-libiconv maybe-all-stage1-libiconv +.PHONY: clean-stage1-libiconv maybe-clean-stage1-libiconv +maybe-all-stage1-libiconv: +maybe-clean-stage1-libiconv: + + +.PHONY: all-stage2-libiconv maybe-all-stage2-libiconv +.PHONY: clean-stage2-libiconv maybe-clean-stage2-libiconv +maybe-all-stage2-libiconv: +maybe-clean-stage2-libiconv: + + +.PHONY: all-stage3-libiconv maybe-all-stage3-libiconv +.PHONY: clean-stage3-libiconv maybe-clean-stage3-libiconv +maybe-all-stage3-libiconv: +maybe-clean-stage3-libiconv: + + +.PHONY: all-stage4-libiconv maybe-all-stage4-libiconv +.PHONY: clean-stage4-libiconv maybe-clean-stage4-libiconv +maybe-all-stage4-libiconv: +maybe-clean-stage4-libiconv: + + +.PHONY: all-stageprofile-libiconv maybe-all-stageprofile-libiconv +.PHONY: clean-stageprofile-libiconv maybe-clean-stageprofile-libiconv +maybe-all-stageprofile-libiconv: +maybe-clean-stageprofile-libiconv: + + +.PHONY: all-stagetrain-libiconv maybe-all-stagetrain-libiconv +.PHONY: clean-stagetrain-libiconv maybe-clean-stagetrain-libiconv +maybe-all-stagetrain-libiconv: +maybe-clean-stagetrain-libiconv: + + +.PHONY: all-stagefeedback-libiconv maybe-all-stagefeedback-libiconv +.PHONY: clean-stagefeedback-libiconv maybe-clean-stagefeedback-libiconv +maybe-all-stagefeedback-libiconv: +maybe-clean-stagefeedback-libiconv: + + +.PHONY: all-stageautoprofile-libiconv maybe-all-stageautoprofile-libiconv +.PHONY: clean-stageautoprofile-libiconv maybe-clean-stageautoprofile-libiconv +maybe-all-stageautoprofile-libiconv: +maybe-clean-stageautoprofile-libiconv: + + +.PHONY: all-stageautofeedback-libiconv maybe-all-stageautofeedback-libiconv +.PHONY: clean-stageautofeedback-libiconv maybe-clean-stageautofeedback-libiconv +maybe-all-stageautofeedback-libiconv: +maybe-clean-stageautofeedback-libiconv: + + + + + +.PHONY: check-libiconv maybe-check-libiconv +maybe-check-libiconv: + +.PHONY: install-libiconv maybe-install-libiconv +maybe-install-libiconv: + +.PHONY: install-strip-libiconv maybe-install-strip-libiconv +maybe-install-strip-libiconv: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libiconv info-libiconv +maybe-info-libiconv: + +.PHONY: maybe-dvi-libiconv dvi-libiconv +maybe-dvi-libiconv: + +.PHONY: maybe-pdf-libiconv pdf-libiconv +maybe-pdf-libiconv: + +.PHONY: maybe-html-libiconv html-libiconv +maybe-html-libiconv: + +.PHONY: maybe-TAGS-libiconv TAGS-libiconv +maybe-TAGS-libiconv: + +.PHONY: maybe-install-info-libiconv install-info-libiconv +maybe-install-info-libiconv: + +.PHONY: maybe-install-dvi-libiconv install-dvi-libiconv +maybe-install-dvi-libiconv: + +.PHONY: maybe-install-pdf-libiconv install-pdf-libiconv +maybe-install-pdf-libiconv: + +.PHONY: maybe-install-html-libiconv install-html-libiconv +maybe-install-html-libiconv: + +.PHONY: maybe-installcheck-libiconv installcheck-libiconv +maybe-installcheck-libiconv: + +.PHONY: maybe-mostlyclean-libiconv mostlyclean-libiconv +maybe-mostlyclean-libiconv: + +.PHONY: maybe-clean-libiconv clean-libiconv +maybe-clean-libiconv: + +.PHONY: maybe-distclean-libiconv distclean-libiconv +maybe-distclean-libiconv: + +.PHONY: maybe-maintainer-clean-libiconv maintainer-clean-libiconv +maybe-maintainer-clean-libiconv: + + + +.PHONY: configure-m4 maybe-configure-m4 +maybe-configure-m4: +configure-m4: stage_current + + + + + +.PHONY: all-m4 maybe-all-m4 +maybe-all-m4: +all-m4: stage_current + + + + +.PHONY: check-m4 maybe-check-m4 +maybe-check-m4: + +.PHONY: install-m4 maybe-install-m4 +maybe-install-m4: + +.PHONY: install-strip-m4 maybe-install-strip-m4 +maybe-install-strip-m4: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-m4 info-m4 +maybe-info-m4: + +.PHONY: maybe-dvi-m4 dvi-m4 +maybe-dvi-m4: + +.PHONY: maybe-pdf-m4 pdf-m4 +maybe-pdf-m4: + +.PHONY: maybe-html-m4 html-m4 +maybe-html-m4: + +.PHONY: maybe-TAGS-m4 TAGS-m4 +maybe-TAGS-m4: + +.PHONY: maybe-install-info-m4 install-info-m4 +maybe-install-info-m4: + +.PHONY: maybe-install-dvi-m4 install-dvi-m4 +maybe-install-dvi-m4: + +.PHONY: maybe-install-pdf-m4 install-pdf-m4 +maybe-install-pdf-m4: + +.PHONY: maybe-install-html-m4 install-html-m4 +maybe-install-html-m4: + +.PHONY: maybe-installcheck-m4 installcheck-m4 +maybe-installcheck-m4: + +.PHONY: maybe-mostlyclean-m4 mostlyclean-m4 +maybe-mostlyclean-m4: + +.PHONY: maybe-clean-m4 clean-m4 +maybe-clean-m4: + +.PHONY: maybe-distclean-m4 distclean-m4 +maybe-distclean-m4: + +.PHONY: maybe-maintainer-clean-m4 maintainer-clean-m4 +maybe-maintainer-clean-m4: + + + +.PHONY: configure-readline maybe-configure-readline +maybe-configure-readline: +configure-readline: stage_current + + + + + +.PHONY: all-readline maybe-all-readline +maybe-all-readline: +all-readline: stage_current + + + + +.PHONY: check-readline maybe-check-readline +maybe-check-readline: + +.PHONY: install-readline maybe-install-readline +maybe-install-readline: + +.PHONY: install-strip-readline maybe-install-strip-readline +maybe-install-strip-readline: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-readline info-readline +maybe-info-readline: + +.PHONY: maybe-dvi-readline dvi-readline +maybe-dvi-readline: + +.PHONY: maybe-pdf-readline pdf-readline +maybe-pdf-readline: + +.PHONY: maybe-html-readline html-readline +maybe-html-readline: + +.PHONY: maybe-TAGS-readline TAGS-readline +maybe-TAGS-readline: + +.PHONY: maybe-install-info-readline install-info-readline +maybe-install-info-readline: + +.PHONY: maybe-install-dvi-readline install-dvi-readline +maybe-install-dvi-readline: + +.PHONY: maybe-install-pdf-readline install-pdf-readline +maybe-install-pdf-readline: + +.PHONY: maybe-install-html-readline install-html-readline +maybe-install-html-readline: + +.PHONY: maybe-installcheck-readline installcheck-readline +maybe-installcheck-readline: + +.PHONY: maybe-mostlyclean-readline mostlyclean-readline +maybe-mostlyclean-readline: + +.PHONY: maybe-clean-readline clean-readline +maybe-clean-readline: + +.PHONY: maybe-distclean-readline distclean-readline +maybe-distclean-readline: + +.PHONY: maybe-maintainer-clean-readline maintainer-clean-readline +maybe-maintainer-clean-readline: + + + +.PHONY: configure-sid maybe-configure-sid +maybe-configure-sid: +configure-sid: stage_current + + + + + +.PHONY: all-sid maybe-all-sid +maybe-all-sid: +all-sid: stage_current + + + + +.PHONY: check-sid maybe-check-sid +maybe-check-sid: + +.PHONY: install-sid maybe-install-sid +maybe-install-sid: + +.PHONY: install-strip-sid maybe-install-strip-sid +maybe-install-strip-sid: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-sid info-sid +maybe-info-sid: + +.PHONY: maybe-dvi-sid dvi-sid +maybe-dvi-sid: + +.PHONY: maybe-pdf-sid pdf-sid +maybe-pdf-sid: + +.PHONY: maybe-html-sid html-sid +maybe-html-sid: + +.PHONY: maybe-TAGS-sid TAGS-sid +maybe-TAGS-sid: + +.PHONY: maybe-install-info-sid install-info-sid +maybe-install-info-sid: + +.PHONY: maybe-install-dvi-sid install-dvi-sid +maybe-install-dvi-sid: + +.PHONY: maybe-install-pdf-sid install-pdf-sid +maybe-install-pdf-sid: + +.PHONY: maybe-install-html-sid install-html-sid +maybe-install-html-sid: + +.PHONY: maybe-installcheck-sid installcheck-sid +maybe-installcheck-sid: + +.PHONY: maybe-mostlyclean-sid mostlyclean-sid +maybe-mostlyclean-sid: + +.PHONY: maybe-clean-sid clean-sid +maybe-clean-sid: + +.PHONY: maybe-distclean-sid distclean-sid +maybe-distclean-sid: + +.PHONY: maybe-maintainer-clean-sid maintainer-clean-sid +maybe-maintainer-clean-sid: + + + +.PHONY: configure-sim maybe-configure-sim +maybe-configure-sim: +configure-sim: stage_current + + + + + +.PHONY: all-sim maybe-all-sim +maybe-all-sim: +all-sim: stage_current + + + + +.PHONY: check-sim maybe-check-sim +maybe-check-sim: + +.PHONY: install-sim maybe-install-sim +maybe-install-sim: + +.PHONY: install-strip-sim maybe-install-strip-sim +maybe-install-strip-sim: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-sim info-sim +maybe-info-sim: + +.PHONY: maybe-dvi-sim dvi-sim +maybe-dvi-sim: + +.PHONY: maybe-pdf-sim pdf-sim +maybe-pdf-sim: + +.PHONY: maybe-html-sim html-sim +maybe-html-sim: + +.PHONY: maybe-TAGS-sim TAGS-sim +maybe-TAGS-sim: + +.PHONY: maybe-install-info-sim install-info-sim +maybe-install-info-sim: + +.PHONY: maybe-install-dvi-sim install-dvi-sim +maybe-install-dvi-sim: + +.PHONY: maybe-install-pdf-sim install-pdf-sim +maybe-install-pdf-sim: + +.PHONY: maybe-install-html-sim install-html-sim +maybe-install-html-sim: + +.PHONY: maybe-installcheck-sim installcheck-sim +maybe-installcheck-sim: + +.PHONY: maybe-mostlyclean-sim mostlyclean-sim +maybe-mostlyclean-sim: + +.PHONY: maybe-clean-sim clean-sim +maybe-clean-sim: + +.PHONY: maybe-distclean-sim distclean-sim +maybe-distclean-sim: + +.PHONY: maybe-maintainer-clean-sim maintainer-clean-sim +maybe-maintainer-clean-sim: + + + +.PHONY: configure-texinfo maybe-configure-texinfo +maybe-configure-texinfo: +configure-texinfo: stage_current + + + + + +.PHONY: all-texinfo maybe-all-texinfo +maybe-all-texinfo: +all-texinfo: stage_current + + + + +.PHONY: check-texinfo maybe-check-texinfo +maybe-check-texinfo: + +.PHONY: install-texinfo maybe-install-texinfo +maybe-install-texinfo: + +.PHONY: install-strip-texinfo maybe-install-strip-texinfo +maybe-install-strip-texinfo: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-texinfo info-texinfo +maybe-info-texinfo: + +.PHONY: maybe-dvi-texinfo dvi-texinfo +maybe-dvi-texinfo: + +.PHONY: maybe-pdf-texinfo pdf-texinfo +maybe-pdf-texinfo: + +.PHONY: maybe-html-texinfo html-texinfo +maybe-html-texinfo: + +.PHONY: maybe-TAGS-texinfo TAGS-texinfo +maybe-TAGS-texinfo: + +.PHONY: maybe-install-info-texinfo install-info-texinfo +maybe-install-info-texinfo: + +.PHONY: maybe-install-dvi-texinfo install-dvi-texinfo +maybe-install-dvi-texinfo: + +.PHONY: maybe-install-pdf-texinfo install-pdf-texinfo +maybe-install-pdf-texinfo: + +.PHONY: maybe-install-html-texinfo install-html-texinfo +maybe-install-html-texinfo: + +.PHONY: maybe-installcheck-texinfo installcheck-texinfo +maybe-installcheck-texinfo: + +.PHONY: maybe-mostlyclean-texinfo mostlyclean-texinfo +maybe-mostlyclean-texinfo: + +.PHONY: maybe-clean-texinfo clean-texinfo +maybe-clean-texinfo: + +.PHONY: maybe-distclean-texinfo distclean-texinfo +maybe-distclean-texinfo: + +.PHONY: maybe-maintainer-clean-texinfo maintainer-clean-texinfo +maybe-maintainer-clean-texinfo: + + + +.PHONY: configure-zlib maybe-configure-zlib +maybe-configure-zlib: +configure-zlib: stage_current +maybe-configure-zlib: configure-zlib +configure-zlib: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/zlib; \ + cd "$(HOST_SUBDIR)/zlib" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-zlib maybe-configure-stage1-zlib +maybe-configure-stage1-zlib: +maybe-configure-stage1-zlib: configure-stage1-zlib +configure-stage1-zlib: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stage2-zlib maybe-configure-stage2-zlib +maybe-configure-stage2-zlib: +maybe-configure-stage2-zlib: configure-stage2-zlib +configure-stage2-zlib: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stage3-zlib maybe-configure-stage3-zlib +maybe-configure-stage3-zlib: +maybe-configure-stage3-zlib: configure-stage3-zlib +configure-stage3-zlib: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stage4-zlib maybe-configure-stage4-zlib +maybe-configure-stage4-zlib: +maybe-configure-stage4-zlib: configure-stage4-zlib +configure-stage4-zlib: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stageprofile-zlib maybe-configure-stageprofile-zlib +maybe-configure-stageprofile-zlib: +maybe-configure-stageprofile-zlib: configure-stageprofile-zlib +configure-stageprofile-zlib: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stagetrain-zlib maybe-configure-stagetrain-zlib +maybe-configure-stagetrain-zlib: +maybe-configure-stagetrain-zlib: configure-stagetrain-zlib +configure-stagetrain-zlib: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stagefeedback-zlib maybe-configure-stagefeedback-zlib +maybe-configure-stagefeedback-zlib: +maybe-configure-stagefeedback-zlib: configure-stagefeedback-zlib +configure-stagefeedback-zlib: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stageautoprofile-zlib maybe-configure-stageautoprofile-zlib +maybe-configure-stageautoprofile-zlib: +maybe-configure-stageautoprofile-zlib: configure-stageautoprofile-zlib +configure-stageautoprofile-zlib: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) \ + + +.PHONY: configure-stageautofeedback-zlib maybe-configure-stageautofeedback-zlib +maybe-configure-stageautofeedback-zlib: +maybe-configure-stageautofeedback-zlib: configure-stageautofeedback-zlib +configure-stageautofeedback-zlib: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/zlib; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib; \ + cd $(HOST_SUBDIR)/zlib || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/zlib/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=zlib; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) \ + + + + + + +.PHONY: all-zlib maybe-all-zlib +maybe-all-zlib: +all-zlib: stage_current +TARGET-zlib=all +maybe-all-zlib: all-zlib +all-zlib: configure-zlib + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-zlib)) + + + +.PHONY: all-stage1-zlib maybe-all-stage1-zlib +.PHONY: clean-stage1-zlib maybe-clean-stage1-zlib +maybe-all-stage1-zlib: +maybe-clean-stage1-zlib: +maybe-all-stage1-zlib: all-stage1-zlib +all-stage1: all-stage1-zlib +TARGET-stage1-zlib = $(TARGET-zlib) +all-stage1-zlib: configure-stage1-zlib + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-zlib) + +maybe-clean-stage1-zlib: clean-stage1-zlib +clean-stage1: clean-stage1-zlib +clean-stage1-zlib: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-zlib/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage2-zlib maybe-all-stage2-zlib +.PHONY: clean-stage2-zlib maybe-clean-stage2-zlib +maybe-all-stage2-zlib: +maybe-clean-stage2-zlib: +maybe-all-stage2-zlib: all-stage2-zlib +all-stage2: all-stage2-zlib +TARGET-stage2-zlib = $(TARGET-zlib) +all-stage2-zlib: configure-stage2-zlib + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-zlib) + +maybe-clean-stage2-zlib: clean-stage2-zlib +clean-stage2: clean-stage2-zlib +clean-stage2-zlib: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-zlib/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage3-zlib maybe-all-stage3-zlib +.PHONY: clean-stage3-zlib maybe-clean-stage3-zlib +maybe-all-stage3-zlib: +maybe-clean-stage3-zlib: +maybe-all-stage3-zlib: all-stage3-zlib +all-stage3: all-stage3-zlib +TARGET-stage3-zlib = $(TARGET-zlib) +all-stage3-zlib: configure-stage3-zlib + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-zlib) + +maybe-clean-stage3-zlib: clean-stage3-zlib +clean-stage3: clean-stage3-zlib +clean-stage3-zlib: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-zlib/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage4-zlib maybe-all-stage4-zlib +.PHONY: clean-stage4-zlib maybe-clean-stage4-zlib +maybe-all-stage4-zlib: +maybe-clean-stage4-zlib: +maybe-all-stage4-zlib: all-stage4-zlib +all-stage4: all-stage4-zlib +TARGET-stage4-zlib = $(TARGET-zlib) +all-stage4-zlib: configure-stage4-zlib + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-zlib) + +maybe-clean-stage4-zlib: clean-stage4-zlib +clean-stage4: clean-stage4-zlib +clean-stage4-zlib: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-zlib/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageprofile-zlib maybe-all-stageprofile-zlib +.PHONY: clean-stageprofile-zlib maybe-clean-stageprofile-zlib +maybe-all-stageprofile-zlib: +maybe-clean-stageprofile-zlib: +maybe-all-stageprofile-zlib: all-stageprofile-zlib +all-stageprofile: all-stageprofile-zlib +TARGET-stageprofile-zlib = $(TARGET-zlib) +all-stageprofile-zlib: configure-stageprofile-zlib + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-zlib) + +maybe-clean-stageprofile-zlib: clean-stageprofile-zlib +clean-stageprofile: clean-stageprofile-zlib +clean-stageprofile-zlib: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-zlib/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagetrain-zlib maybe-all-stagetrain-zlib +.PHONY: clean-stagetrain-zlib maybe-clean-stagetrain-zlib +maybe-all-stagetrain-zlib: +maybe-clean-stagetrain-zlib: +maybe-all-stagetrain-zlib: all-stagetrain-zlib +all-stagetrain: all-stagetrain-zlib +TARGET-stagetrain-zlib = $(TARGET-zlib) +all-stagetrain-zlib: configure-stagetrain-zlib + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-zlib) + +maybe-clean-stagetrain-zlib: clean-stagetrain-zlib +clean-stagetrain: clean-stagetrain-zlib +clean-stagetrain-zlib: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-zlib/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagefeedback-zlib maybe-all-stagefeedback-zlib +.PHONY: clean-stagefeedback-zlib maybe-clean-stagefeedback-zlib +maybe-all-stagefeedback-zlib: +maybe-clean-stagefeedback-zlib: +maybe-all-stagefeedback-zlib: all-stagefeedback-zlib +all-stagefeedback: all-stagefeedback-zlib +TARGET-stagefeedback-zlib = $(TARGET-zlib) +all-stagefeedback-zlib: configure-stagefeedback-zlib + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-zlib) + +maybe-clean-stagefeedback-zlib: clean-stagefeedback-zlib +clean-stagefeedback: clean-stagefeedback-zlib +clean-stagefeedback-zlib: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-zlib/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautoprofile-zlib maybe-all-stageautoprofile-zlib +.PHONY: clean-stageautoprofile-zlib maybe-clean-stageautoprofile-zlib +maybe-all-stageautoprofile-zlib: +maybe-clean-stageautoprofile-zlib: +maybe-all-stageautoprofile-zlib: all-stageautoprofile-zlib +all-stageautoprofile: all-stageautoprofile-zlib +TARGET-stageautoprofile-zlib = $(TARGET-zlib) +all-stageautoprofile-zlib: configure-stageautoprofile-zlib + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-zlib) + +maybe-clean-stageautoprofile-zlib: clean-stageautoprofile-zlib +clean-stageautoprofile: clean-stageautoprofile-zlib +clean-stageautoprofile-zlib: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-zlib/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautofeedback-zlib maybe-all-stageautofeedback-zlib +.PHONY: clean-stageautofeedback-zlib maybe-clean-stageautofeedback-zlib +maybe-all-stageautofeedback-zlib: +maybe-clean-stageautofeedback-zlib: +maybe-all-stageautofeedback-zlib: all-stageautofeedback-zlib +all-stageautofeedback: all-stageautofeedback-zlib +TARGET-stageautofeedback-zlib = $(TARGET-zlib) +all-stageautofeedback-zlib: configure-stageautofeedback-zlib + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/zlib && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-zlib) + +maybe-clean-stageautofeedback-zlib: clean-stageautofeedback-zlib +clean-stageautofeedback: clean-stageautofeedback-zlib +clean-stageautofeedback-zlib: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-zlib/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + + + + +.PHONY: check-zlib maybe-check-zlib +maybe-check-zlib: +maybe-check-zlib: check-zlib + +check-zlib: + + +.PHONY: install-zlib maybe-install-zlib +maybe-install-zlib: +maybe-install-zlib: install-zlib + +install-zlib: + + +.PHONY: install-strip-zlib maybe-install-strip-zlib +maybe-install-strip-zlib: +maybe-install-strip-zlib: install-strip-zlib + +install-strip-zlib: + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-zlib info-zlib +maybe-info-zlib: +maybe-info-zlib: info-zlib + +info-zlib: \ + configure-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-zlib dvi-zlib +maybe-dvi-zlib: +maybe-dvi-zlib: dvi-zlib + +dvi-zlib: \ + configure-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-zlib pdf-zlib +maybe-pdf-zlib: +maybe-pdf-zlib: pdf-zlib + +pdf-zlib: \ + configure-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-zlib html-zlib +maybe-html-zlib: +maybe-html-zlib: html-zlib + +html-zlib: \ + configure-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-zlib TAGS-zlib +maybe-TAGS-zlib: +maybe-TAGS-zlib: TAGS-zlib + +TAGS-zlib: \ + configure-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-zlib install-info-zlib +maybe-install-info-zlib: +maybe-install-info-zlib: install-info-zlib + +install-info-zlib: \ + configure-zlib \ + info-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-zlib install-dvi-zlib +maybe-install-dvi-zlib: +maybe-install-dvi-zlib: install-dvi-zlib + +install-dvi-zlib: \ + configure-zlib \ + dvi-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-zlib install-pdf-zlib +maybe-install-pdf-zlib: +maybe-install-pdf-zlib: install-pdf-zlib + +install-pdf-zlib: \ + configure-zlib \ + pdf-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-zlib install-html-zlib +maybe-install-html-zlib: +maybe-install-html-zlib: install-html-zlib + +install-html-zlib: \ + configure-zlib \ + html-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-zlib installcheck-zlib +maybe-installcheck-zlib: +maybe-installcheck-zlib: installcheck-zlib + +installcheck-zlib: \ + configure-zlib + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-zlib mostlyclean-zlib +maybe-mostlyclean-zlib: +maybe-mostlyclean-zlib: mostlyclean-zlib + +mostlyclean-zlib: + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-zlib clean-zlib +maybe-clean-zlib: +maybe-clean-zlib: clean-zlib + +clean-zlib: + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-zlib distclean-zlib +maybe-distclean-zlib: +maybe-distclean-zlib: distclean-zlib + +distclean-zlib: + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-zlib maintainer-clean-zlib +maybe-maintainer-clean-zlib: +maybe-maintainer-clean-zlib: maintainer-clean-zlib + +maintainer-clean-zlib: + @[ -f ./zlib/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in zlib"; \ + (cd $(HOST_SUBDIR)/zlib && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-gnulib maybe-configure-gnulib +maybe-configure-gnulib: +configure-gnulib: stage_current + + + + + +.PHONY: all-gnulib maybe-all-gnulib +maybe-all-gnulib: +all-gnulib: stage_current + + + + +.PHONY: check-gnulib maybe-check-gnulib +maybe-check-gnulib: + +.PHONY: install-gnulib maybe-install-gnulib +maybe-install-gnulib: + +.PHONY: install-strip-gnulib maybe-install-strip-gnulib +maybe-install-strip-gnulib: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gnulib info-gnulib +maybe-info-gnulib: + +.PHONY: maybe-dvi-gnulib dvi-gnulib +maybe-dvi-gnulib: + +.PHONY: maybe-pdf-gnulib pdf-gnulib +maybe-pdf-gnulib: + +.PHONY: maybe-html-gnulib html-gnulib +maybe-html-gnulib: + +.PHONY: maybe-TAGS-gnulib TAGS-gnulib +maybe-TAGS-gnulib: + +.PHONY: maybe-install-info-gnulib install-info-gnulib +maybe-install-info-gnulib: + +.PHONY: maybe-install-dvi-gnulib install-dvi-gnulib +maybe-install-dvi-gnulib: + +.PHONY: maybe-install-pdf-gnulib install-pdf-gnulib +maybe-install-pdf-gnulib: + +.PHONY: maybe-install-html-gnulib install-html-gnulib +maybe-install-html-gnulib: + +.PHONY: maybe-installcheck-gnulib installcheck-gnulib +maybe-installcheck-gnulib: + +.PHONY: maybe-mostlyclean-gnulib mostlyclean-gnulib +maybe-mostlyclean-gnulib: + +.PHONY: maybe-clean-gnulib clean-gnulib +maybe-clean-gnulib: + +.PHONY: maybe-distclean-gnulib distclean-gnulib +maybe-distclean-gnulib: + +.PHONY: maybe-maintainer-clean-gnulib maintainer-clean-gnulib +maybe-maintainer-clean-gnulib: + + + +.PHONY: configure-gdbsupport maybe-configure-gdbsupport +maybe-configure-gdbsupport: +configure-gdbsupport: stage_current + + + + + +.PHONY: all-gdbsupport maybe-all-gdbsupport +maybe-all-gdbsupport: +all-gdbsupport: stage_current + + + + +.PHONY: check-gdbsupport maybe-check-gdbsupport +maybe-check-gdbsupport: + +.PHONY: install-gdbsupport maybe-install-gdbsupport +maybe-install-gdbsupport: + +.PHONY: install-strip-gdbsupport maybe-install-strip-gdbsupport +maybe-install-strip-gdbsupport: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gdbsupport info-gdbsupport +maybe-info-gdbsupport: + +.PHONY: maybe-dvi-gdbsupport dvi-gdbsupport +maybe-dvi-gdbsupport: + +.PHONY: maybe-pdf-gdbsupport pdf-gdbsupport +maybe-pdf-gdbsupport: + +.PHONY: maybe-html-gdbsupport html-gdbsupport +maybe-html-gdbsupport: + +.PHONY: maybe-TAGS-gdbsupport TAGS-gdbsupport +maybe-TAGS-gdbsupport: + +.PHONY: maybe-install-info-gdbsupport install-info-gdbsupport +maybe-install-info-gdbsupport: + +.PHONY: maybe-install-dvi-gdbsupport install-dvi-gdbsupport +maybe-install-dvi-gdbsupport: + +.PHONY: maybe-install-pdf-gdbsupport install-pdf-gdbsupport +maybe-install-pdf-gdbsupport: + +.PHONY: maybe-install-html-gdbsupport install-html-gdbsupport +maybe-install-html-gdbsupport: + +.PHONY: maybe-installcheck-gdbsupport installcheck-gdbsupport +maybe-installcheck-gdbsupport: + +.PHONY: maybe-mostlyclean-gdbsupport mostlyclean-gdbsupport +maybe-mostlyclean-gdbsupport: + +.PHONY: maybe-clean-gdbsupport clean-gdbsupport +maybe-clean-gdbsupport: + +.PHONY: maybe-distclean-gdbsupport distclean-gdbsupport +maybe-distclean-gdbsupport: + +.PHONY: maybe-maintainer-clean-gdbsupport maintainer-clean-gdbsupport +maybe-maintainer-clean-gdbsupport: + + + +.PHONY: configure-gdbserver maybe-configure-gdbserver +maybe-configure-gdbserver: +configure-gdbserver: stage_current + + + + + +.PHONY: all-gdbserver maybe-all-gdbserver +maybe-all-gdbserver: +all-gdbserver: stage_current + + + + +.PHONY: check-gdbserver maybe-check-gdbserver +maybe-check-gdbserver: + +.PHONY: install-gdbserver maybe-install-gdbserver +maybe-install-gdbserver: + +.PHONY: install-strip-gdbserver maybe-install-strip-gdbserver +maybe-install-strip-gdbserver: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gdbserver info-gdbserver +maybe-info-gdbserver: + +.PHONY: maybe-dvi-gdbserver dvi-gdbserver +maybe-dvi-gdbserver: + +.PHONY: maybe-pdf-gdbserver pdf-gdbserver +maybe-pdf-gdbserver: + +.PHONY: maybe-html-gdbserver html-gdbserver +maybe-html-gdbserver: + +.PHONY: maybe-TAGS-gdbserver TAGS-gdbserver +maybe-TAGS-gdbserver: + +.PHONY: maybe-install-info-gdbserver install-info-gdbserver +maybe-install-info-gdbserver: + +.PHONY: maybe-install-dvi-gdbserver install-dvi-gdbserver +maybe-install-dvi-gdbserver: + +.PHONY: maybe-install-pdf-gdbserver install-pdf-gdbserver +maybe-install-pdf-gdbserver: + +.PHONY: maybe-install-html-gdbserver install-html-gdbserver +maybe-install-html-gdbserver: + +.PHONY: maybe-installcheck-gdbserver installcheck-gdbserver +maybe-installcheck-gdbserver: + +.PHONY: maybe-mostlyclean-gdbserver mostlyclean-gdbserver +maybe-mostlyclean-gdbserver: + +.PHONY: maybe-clean-gdbserver clean-gdbserver +maybe-clean-gdbserver: + +.PHONY: maybe-distclean-gdbserver distclean-gdbserver +maybe-distclean-gdbserver: + +.PHONY: maybe-maintainer-clean-gdbserver maintainer-clean-gdbserver +maybe-maintainer-clean-gdbserver: + + + +.PHONY: configure-gdb maybe-configure-gdb +maybe-configure-gdb: +configure-gdb: stage_current + + + + + +.PHONY: all-gdb maybe-all-gdb +maybe-all-gdb: +all-gdb: stage_current + + + + +.PHONY: check-gdb maybe-check-gdb +maybe-check-gdb: + +.PHONY: install-gdb maybe-install-gdb +maybe-install-gdb: + +.PHONY: install-strip-gdb maybe-install-strip-gdb +maybe-install-strip-gdb: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gdb info-gdb +maybe-info-gdb: + +.PHONY: maybe-dvi-gdb dvi-gdb +maybe-dvi-gdb: + +.PHONY: maybe-pdf-gdb pdf-gdb +maybe-pdf-gdb: + +.PHONY: maybe-html-gdb html-gdb +maybe-html-gdb: + +.PHONY: maybe-TAGS-gdb TAGS-gdb +maybe-TAGS-gdb: + +.PHONY: maybe-install-info-gdb install-info-gdb +maybe-install-info-gdb: + +.PHONY: maybe-install-dvi-gdb install-dvi-gdb +maybe-install-dvi-gdb: + +.PHONY: maybe-install-pdf-gdb install-pdf-gdb +maybe-install-pdf-gdb: + +.PHONY: maybe-install-html-gdb install-html-gdb +maybe-install-html-gdb: + +.PHONY: maybe-installcheck-gdb installcheck-gdb +maybe-installcheck-gdb: + +.PHONY: maybe-mostlyclean-gdb mostlyclean-gdb +maybe-mostlyclean-gdb: + +.PHONY: maybe-clean-gdb clean-gdb +maybe-clean-gdb: + +.PHONY: maybe-distclean-gdb distclean-gdb +maybe-distclean-gdb: + +.PHONY: maybe-maintainer-clean-gdb maintainer-clean-gdb +maybe-maintainer-clean-gdb: + + + +.PHONY: configure-expect maybe-configure-expect +maybe-configure-expect: +configure-expect: stage_current + + + + + +.PHONY: all-expect maybe-all-expect +maybe-all-expect: +all-expect: stage_current + + + + +.PHONY: check-expect maybe-check-expect +maybe-check-expect: + +.PHONY: install-expect maybe-install-expect +maybe-install-expect: + +.PHONY: install-strip-expect maybe-install-strip-expect +maybe-install-strip-expect: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-expect info-expect +maybe-info-expect: + +.PHONY: maybe-dvi-expect dvi-expect +maybe-dvi-expect: + +.PHONY: maybe-pdf-expect pdf-expect +maybe-pdf-expect: + +.PHONY: maybe-html-expect html-expect +maybe-html-expect: + +.PHONY: maybe-TAGS-expect TAGS-expect +maybe-TAGS-expect: + +.PHONY: maybe-install-info-expect install-info-expect +maybe-install-info-expect: + +.PHONY: maybe-install-dvi-expect install-dvi-expect +maybe-install-dvi-expect: + +.PHONY: maybe-install-pdf-expect install-pdf-expect +maybe-install-pdf-expect: + +.PHONY: maybe-install-html-expect install-html-expect +maybe-install-html-expect: + +.PHONY: maybe-installcheck-expect installcheck-expect +maybe-installcheck-expect: + +.PHONY: maybe-mostlyclean-expect mostlyclean-expect +maybe-mostlyclean-expect: + +.PHONY: maybe-clean-expect clean-expect +maybe-clean-expect: + +.PHONY: maybe-distclean-expect distclean-expect +maybe-distclean-expect: + +.PHONY: maybe-maintainer-clean-expect maintainer-clean-expect +maybe-maintainer-clean-expect: + + + +.PHONY: configure-guile maybe-configure-guile +maybe-configure-guile: +configure-guile: stage_current + + + + + +.PHONY: all-guile maybe-all-guile +maybe-all-guile: +all-guile: stage_current + + + + +.PHONY: check-guile maybe-check-guile +maybe-check-guile: + +.PHONY: install-guile maybe-install-guile +maybe-install-guile: + +.PHONY: install-strip-guile maybe-install-strip-guile +maybe-install-strip-guile: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-guile info-guile +maybe-info-guile: + +.PHONY: maybe-dvi-guile dvi-guile +maybe-dvi-guile: + +.PHONY: maybe-pdf-guile pdf-guile +maybe-pdf-guile: + +.PHONY: maybe-html-guile html-guile +maybe-html-guile: + +.PHONY: maybe-TAGS-guile TAGS-guile +maybe-TAGS-guile: + +.PHONY: maybe-install-info-guile install-info-guile +maybe-install-info-guile: + +.PHONY: maybe-install-dvi-guile install-dvi-guile +maybe-install-dvi-guile: + +.PHONY: maybe-install-pdf-guile install-pdf-guile +maybe-install-pdf-guile: + +.PHONY: maybe-install-html-guile install-html-guile +maybe-install-html-guile: + +.PHONY: maybe-installcheck-guile installcheck-guile +maybe-installcheck-guile: + +.PHONY: maybe-mostlyclean-guile mostlyclean-guile +maybe-mostlyclean-guile: + +.PHONY: maybe-clean-guile clean-guile +maybe-clean-guile: + +.PHONY: maybe-distclean-guile distclean-guile +maybe-distclean-guile: + +.PHONY: maybe-maintainer-clean-guile maintainer-clean-guile +maybe-maintainer-clean-guile: + + + +.PHONY: configure-tk maybe-configure-tk +maybe-configure-tk: +configure-tk: stage_current + + + + + +.PHONY: all-tk maybe-all-tk +maybe-all-tk: +all-tk: stage_current + + + + +.PHONY: check-tk maybe-check-tk +maybe-check-tk: + +.PHONY: install-tk maybe-install-tk +maybe-install-tk: + +.PHONY: install-strip-tk maybe-install-strip-tk +maybe-install-strip-tk: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-tk info-tk +maybe-info-tk: + +.PHONY: maybe-dvi-tk dvi-tk +maybe-dvi-tk: + +.PHONY: maybe-pdf-tk pdf-tk +maybe-pdf-tk: + +.PHONY: maybe-html-tk html-tk +maybe-html-tk: + +.PHONY: maybe-TAGS-tk TAGS-tk +maybe-TAGS-tk: + +.PHONY: maybe-install-info-tk install-info-tk +maybe-install-info-tk: + +.PHONY: maybe-install-dvi-tk install-dvi-tk +maybe-install-dvi-tk: + +.PHONY: maybe-install-pdf-tk install-pdf-tk +maybe-install-pdf-tk: + +.PHONY: maybe-install-html-tk install-html-tk +maybe-install-html-tk: + +.PHONY: maybe-installcheck-tk installcheck-tk +maybe-installcheck-tk: + +.PHONY: maybe-mostlyclean-tk mostlyclean-tk +maybe-mostlyclean-tk: + +.PHONY: maybe-clean-tk clean-tk +maybe-clean-tk: + +.PHONY: maybe-distclean-tk distclean-tk +maybe-distclean-tk: + +.PHONY: maybe-maintainer-clean-tk maintainer-clean-tk +maybe-maintainer-clean-tk: + + + +.PHONY: configure-libtermcap maybe-configure-libtermcap +maybe-configure-libtermcap: +configure-libtermcap: stage_current + + + + + +.PHONY: all-libtermcap maybe-all-libtermcap +maybe-all-libtermcap: +all-libtermcap: stage_current + + + + +.PHONY: check-libtermcap maybe-check-libtermcap +maybe-check-libtermcap: + +.PHONY: install-libtermcap maybe-install-libtermcap +maybe-install-libtermcap: + +.PHONY: install-strip-libtermcap maybe-install-strip-libtermcap +maybe-install-strip-libtermcap: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libtermcap info-libtermcap +maybe-info-libtermcap: + +.PHONY: maybe-dvi-libtermcap dvi-libtermcap +maybe-dvi-libtermcap: + +.PHONY: maybe-pdf-libtermcap pdf-libtermcap +maybe-pdf-libtermcap: + +.PHONY: maybe-html-libtermcap html-libtermcap +maybe-html-libtermcap: + +.PHONY: maybe-TAGS-libtermcap TAGS-libtermcap +maybe-TAGS-libtermcap: + +.PHONY: maybe-install-info-libtermcap install-info-libtermcap +maybe-install-info-libtermcap: + +.PHONY: maybe-install-dvi-libtermcap install-dvi-libtermcap +maybe-install-dvi-libtermcap: + +.PHONY: maybe-install-pdf-libtermcap install-pdf-libtermcap +maybe-install-pdf-libtermcap: + +.PHONY: maybe-install-html-libtermcap install-html-libtermcap +maybe-install-html-libtermcap: + +.PHONY: maybe-installcheck-libtermcap installcheck-libtermcap +maybe-installcheck-libtermcap: + +.PHONY: maybe-mostlyclean-libtermcap mostlyclean-libtermcap +maybe-mostlyclean-libtermcap: + +.PHONY: maybe-clean-libtermcap clean-libtermcap +maybe-clean-libtermcap: + +.PHONY: maybe-distclean-libtermcap distclean-libtermcap +maybe-distclean-libtermcap: + +.PHONY: maybe-maintainer-clean-libtermcap maintainer-clean-libtermcap +maybe-maintainer-clean-libtermcap: + + + +.PHONY: configure-utils maybe-configure-utils +maybe-configure-utils: +configure-utils: stage_current + + + + + +.PHONY: all-utils maybe-all-utils +maybe-all-utils: +all-utils: stage_current + + + + +.PHONY: check-utils maybe-check-utils +maybe-check-utils: + +.PHONY: install-utils maybe-install-utils +maybe-install-utils: + +.PHONY: install-strip-utils maybe-install-strip-utils +maybe-install-strip-utils: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-utils info-utils +maybe-info-utils: + +.PHONY: maybe-dvi-utils dvi-utils +maybe-dvi-utils: + +.PHONY: maybe-pdf-utils pdf-utils +maybe-pdf-utils: + +.PHONY: maybe-html-utils html-utils +maybe-html-utils: + +.PHONY: maybe-TAGS-utils TAGS-utils +maybe-TAGS-utils: + +.PHONY: maybe-install-info-utils install-info-utils +maybe-install-info-utils: + +.PHONY: maybe-install-dvi-utils install-dvi-utils +maybe-install-dvi-utils: + +.PHONY: maybe-install-pdf-utils install-pdf-utils +maybe-install-pdf-utils: + +.PHONY: maybe-install-html-utils install-html-utils +maybe-install-html-utils: + +.PHONY: maybe-installcheck-utils installcheck-utils +maybe-installcheck-utils: + +.PHONY: maybe-mostlyclean-utils mostlyclean-utils +maybe-mostlyclean-utils: + +.PHONY: maybe-clean-utils clean-utils +maybe-clean-utils: + +.PHONY: maybe-distclean-utils distclean-utils +maybe-distclean-utils: + +.PHONY: maybe-maintainer-clean-utils maintainer-clean-utils +maybe-maintainer-clean-utils: + + + +.PHONY: configure-c++tools maybe-configure-c++tools +maybe-configure-c++tools: +configure-c++tools: stage_current +maybe-configure-c++tools: configure-c++tools +configure-c++tools: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/c++tools/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/c++tools; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/c++tools; \ + cd "$(HOST_SUBDIR)/c++tools" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/c++tools/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=c++tools; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-c++tools maybe-all-c++tools +maybe-all-c++tools: +all-c++tools: stage_current +TARGET-c++tools=all +maybe-all-c++tools: all-c++tools +all-c++tools: configure-c++tools + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-c++tools)) + + + + +.PHONY: check-c++tools maybe-check-c++tools +maybe-check-c++tools: +maybe-check-c++tools: check-c++tools + +check-c++tools: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(FLAGS_TO_PASS) check) + + +.PHONY: install-c++tools maybe-install-c++tools +maybe-install-c++tools: +maybe-install-c++tools: install-c++tools + +install-c++tools: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-c++tools maybe-install-strip-c++tools +maybe-install-strip-c++tools: +maybe-install-strip-c++tools: install-strip-c++tools + +install-strip-c++tools: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-c++tools info-c++tools +maybe-info-c++tools: +maybe-info-c++tools: info-c++tools + +info-c++tools: \ + configure-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-c++tools dvi-c++tools +maybe-dvi-c++tools: +maybe-dvi-c++tools: dvi-c++tools + +dvi-c++tools: \ + configure-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-c++tools pdf-c++tools +maybe-pdf-c++tools: +maybe-pdf-c++tools: pdf-c++tools + +pdf-c++tools: \ + configure-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-c++tools html-c++tools +maybe-html-c++tools: +maybe-html-c++tools: html-c++tools + +html-c++tools: \ + configure-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-c++tools TAGS-c++tools +maybe-TAGS-c++tools: +maybe-TAGS-c++tools: TAGS-c++tools + +# c++tools doesn't support TAGS. +TAGS-c++tools: + + +.PHONY: maybe-install-info-c++tools install-info-c++tools +maybe-install-info-c++tools: +maybe-install-info-c++tools: install-info-c++tools + +install-info-c++tools: \ + configure-c++tools \ + info-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-c++tools install-dvi-c++tools +maybe-install-dvi-c++tools: +maybe-install-dvi-c++tools: install-dvi-c++tools + +install-dvi-c++tools: \ + configure-c++tools \ + dvi-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-c++tools install-pdf-c++tools +maybe-install-pdf-c++tools: +maybe-install-pdf-c++tools: install-pdf-c++tools + +install-pdf-c++tools: \ + configure-c++tools \ + pdf-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-c++tools install-html-c++tools +maybe-install-html-c++tools: +maybe-install-html-c++tools: install-html-c++tools + +install-html-c++tools: \ + configure-c++tools \ + html-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-c++tools installcheck-c++tools +maybe-installcheck-c++tools: +maybe-installcheck-c++tools: installcheck-c++tools + +installcheck-c++tools: \ + configure-c++tools + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-c++tools mostlyclean-c++tools +maybe-mostlyclean-c++tools: +maybe-mostlyclean-c++tools: mostlyclean-c++tools + +mostlyclean-c++tools: + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-c++tools clean-c++tools +maybe-clean-c++tools: +maybe-clean-c++tools: clean-c++tools + +clean-c++tools: + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-c++tools distclean-c++tools +maybe-distclean-c++tools: +maybe-distclean-c++tools: distclean-c++tools + +distclean-c++tools: + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-c++tools maintainer-clean-c++tools +maybe-maintainer-clean-c++tools: +maybe-maintainer-clean-c++tools: maintainer-clean-c++tools + +maintainer-clean-c++tools: + @: $(MAKE); $(unstage) + @[ -f ./c++tools/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in c++tools"; \ + (cd $(HOST_SUBDIR)/c++tools && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-gnattools maybe-configure-gnattools +maybe-configure-gnattools: +configure-gnattools: stage_current + + + + + +.PHONY: all-gnattools maybe-all-gnattools +maybe-all-gnattools: +all-gnattools: stage_current + + + + +.PHONY: check-gnattools maybe-check-gnattools +maybe-check-gnattools: + +.PHONY: install-gnattools maybe-install-gnattools +maybe-install-gnattools: + +.PHONY: install-strip-gnattools maybe-install-strip-gnattools +maybe-install-strip-gnattools: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gnattools info-gnattools +maybe-info-gnattools: + +.PHONY: maybe-dvi-gnattools dvi-gnattools +maybe-dvi-gnattools: + +.PHONY: maybe-pdf-gnattools pdf-gnattools +maybe-pdf-gnattools: + +.PHONY: maybe-html-gnattools html-gnattools +maybe-html-gnattools: + +.PHONY: maybe-TAGS-gnattools TAGS-gnattools +maybe-TAGS-gnattools: + +.PHONY: maybe-install-info-gnattools install-info-gnattools +maybe-install-info-gnattools: + +.PHONY: maybe-install-dvi-gnattools install-dvi-gnattools +maybe-install-dvi-gnattools: + +.PHONY: maybe-install-pdf-gnattools install-pdf-gnattools +maybe-install-pdf-gnattools: + +.PHONY: maybe-install-html-gnattools install-html-gnattools +maybe-install-html-gnattools: + +.PHONY: maybe-installcheck-gnattools installcheck-gnattools +maybe-installcheck-gnattools: + +.PHONY: maybe-mostlyclean-gnattools mostlyclean-gnattools +maybe-mostlyclean-gnattools: + +.PHONY: maybe-clean-gnattools clean-gnattools +maybe-clean-gnattools: + +.PHONY: maybe-distclean-gnattools distclean-gnattools +maybe-distclean-gnattools: + +.PHONY: maybe-maintainer-clean-gnattools maintainer-clean-gnattools +maybe-maintainer-clean-gnattools: + + + +.PHONY: configure-lto-plugin maybe-configure-lto-plugin +maybe-configure-lto-plugin: +configure-lto-plugin: stage_current +maybe-configure-lto-plugin: configure-lto-plugin +configure-lto-plugin: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/lto-plugin; \ + cd "$(HOST_SUBDIR)/lto-plugin" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} --enable-shared \ + || exit 1 + + + +.PHONY: configure-stage1-lto-plugin maybe-configure-stage1-lto-plugin +maybe-configure-stage1-lto-plugin: +maybe-configure-stage1-lto-plugin: configure-stage1-lto-plugin +configure-stage1-lto-plugin: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stage2-lto-plugin maybe-configure-stage2-lto-plugin +maybe-configure-stage2-lto-plugin: +maybe-configure-stage2-lto-plugin: configure-stage2-lto-plugin +configure-stage2-lto-plugin: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stage3-lto-plugin maybe-configure-stage3-lto-plugin +maybe-configure-stage3-lto-plugin: +maybe-configure-stage3-lto-plugin: configure-stage3-lto-plugin +configure-stage3-lto-plugin: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stage4-lto-plugin maybe-configure-stage4-lto-plugin +maybe-configure-stage4-lto-plugin: +maybe-configure-stage4-lto-plugin: configure-stage4-lto-plugin +configure-stage4-lto-plugin: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stageprofile-lto-plugin maybe-configure-stageprofile-lto-plugin +maybe-configure-stageprofile-lto-plugin: +maybe-configure-stageprofile-lto-plugin: configure-stageprofile-lto-plugin +configure-stageprofile-lto-plugin: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stagetrain-lto-plugin maybe-configure-stagetrain-lto-plugin +maybe-configure-stagetrain-lto-plugin: +maybe-configure-stagetrain-lto-plugin: configure-stagetrain-lto-plugin +configure-stagetrain-lto-plugin: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stagefeedback-lto-plugin maybe-configure-stagefeedback-lto-plugin +maybe-configure-stagefeedback-lto-plugin: +maybe-configure-stagefeedback-lto-plugin: configure-stagefeedback-lto-plugin +configure-stagefeedback-lto-plugin: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stageautoprofile-lto-plugin maybe-configure-stageautoprofile-lto-plugin +maybe-configure-stageautoprofile-lto-plugin: +maybe-configure-stageautoprofile-lto-plugin: configure-stageautoprofile-lto-plugin +configure-stageautoprofile-lto-plugin: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) \ + --enable-shared + +.PHONY: configure-stageautofeedback-lto-plugin maybe-configure-stageautofeedback-lto-plugin +maybe-configure-stageautofeedback-lto-plugin: +maybe-configure-stageautofeedback-lto-plugin: configure-stageautofeedback-lto-plugin +configure-stageautofeedback-lto-plugin: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/lto-plugin/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/lto-plugin; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/lto-plugin; \ + cd $(HOST_SUBDIR)/lto-plugin || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/lto-plugin/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=lto-plugin; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) \ + --enable-shared + + + + + +.PHONY: all-lto-plugin maybe-all-lto-plugin +maybe-all-lto-plugin: +all-lto-plugin: stage_current +TARGET-lto-plugin=all +maybe-all-lto-plugin: all-lto-plugin +all-lto-plugin: configure-lto-plugin + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-lto-plugin)) + + + +.PHONY: all-stage1-lto-plugin maybe-all-stage1-lto-plugin +.PHONY: clean-stage1-lto-plugin maybe-clean-stage1-lto-plugin +maybe-all-stage1-lto-plugin: +maybe-clean-stage1-lto-plugin: +maybe-all-stage1-lto-plugin: all-stage1-lto-plugin +all-stage1: all-stage1-lto-plugin +TARGET-stage1-lto-plugin = $(TARGET-lto-plugin) +all-stage1-lto-plugin: configure-stage1-lto-plugin + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-lto-plugin) + +maybe-clean-stage1-lto-plugin: clean-stage1-lto-plugin +clean-stage1: clean-stage1-lto-plugin +clean-stage1-lto-plugin: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage2-lto-plugin maybe-all-stage2-lto-plugin +.PHONY: clean-stage2-lto-plugin maybe-clean-stage2-lto-plugin +maybe-all-stage2-lto-plugin: +maybe-clean-stage2-lto-plugin: +maybe-all-stage2-lto-plugin: all-stage2-lto-plugin +all-stage2: all-stage2-lto-plugin +TARGET-stage2-lto-plugin = $(TARGET-lto-plugin) +all-stage2-lto-plugin: configure-stage2-lto-plugin + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-lto-plugin) + +maybe-clean-stage2-lto-plugin: clean-stage2-lto-plugin +clean-stage2: clean-stage2-lto-plugin +clean-stage2-lto-plugin: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage3-lto-plugin maybe-all-stage3-lto-plugin +.PHONY: clean-stage3-lto-plugin maybe-clean-stage3-lto-plugin +maybe-all-stage3-lto-plugin: +maybe-clean-stage3-lto-plugin: +maybe-all-stage3-lto-plugin: all-stage3-lto-plugin +all-stage3: all-stage3-lto-plugin +TARGET-stage3-lto-plugin = $(TARGET-lto-plugin) +all-stage3-lto-plugin: configure-stage3-lto-plugin + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-lto-plugin) + +maybe-clean-stage3-lto-plugin: clean-stage3-lto-plugin +clean-stage3: clean-stage3-lto-plugin +clean-stage3-lto-plugin: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stage4-lto-plugin maybe-all-stage4-lto-plugin +.PHONY: clean-stage4-lto-plugin maybe-clean-stage4-lto-plugin +maybe-all-stage4-lto-plugin: +maybe-clean-stage4-lto-plugin: +maybe-all-stage4-lto-plugin: all-stage4-lto-plugin +all-stage4: all-stage4-lto-plugin +TARGET-stage4-lto-plugin = $(TARGET-lto-plugin) +all-stage4-lto-plugin: configure-stage4-lto-plugin + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-lto-plugin) + +maybe-clean-stage4-lto-plugin: clean-stage4-lto-plugin +clean-stage4: clean-stage4-lto-plugin +clean-stage4-lto-plugin: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageprofile-lto-plugin maybe-all-stageprofile-lto-plugin +.PHONY: clean-stageprofile-lto-plugin maybe-clean-stageprofile-lto-plugin +maybe-all-stageprofile-lto-plugin: +maybe-clean-stageprofile-lto-plugin: +maybe-all-stageprofile-lto-plugin: all-stageprofile-lto-plugin +all-stageprofile: all-stageprofile-lto-plugin +TARGET-stageprofile-lto-plugin = $(TARGET-lto-plugin) +all-stageprofile-lto-plugin: configure-stageprofile-lto-plugin + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-lto-plugin) + +maybe-clean-stageprofile-lto-plugin: clean-stageprofile-lto-plugin +clean-stageprofile: clean-stageprofile-lto-plugin +clean-stageprofile-lto-plugin: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagetrain-lto-plugin maybe-all-stagetrain-lto-plugin +.PHONY: clean-stagetrain-lto-plugin maybe-clean-stagetrain-lto-plugin +maybe-all-stagetrain-lto-plugin: +maybe-clean-stagetrain-lto-plugin: +maybe-all-stagetrain-lto-plugin: all-stagetrain-lto-plugin +all-stagetrain: all-stagetrain-lto-plugin +TARGET-stagetrain-lto-plugin = $(TARGET-lto-plugin) +all-stagetrain-lto-plugin: configure-stagetrain-lto-plugin + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-lto-plugin) + +maybe-clean-stagetrain-lto-plugin: clean-stagetrain-lto-plugin +clean-stagetrain: clean-stagetrain-lto-plugin +clean-stagetrain-lto-plugin: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stagefeedback-lto-plugin maybe-all-stagefeedback-lto-plugin +.PHONY: clean-stagefeedback-lto-plugin maybe-clean-stagefeedback-lto-plugin +maybe-all-stagefeedback-lto-plugin: +maybe-clean-stagefeedback-lto-plugin: +maybe-all-stagefeedback-lto-plugin: all-stagefeedback-lto-plugin +all-stagefeedback: all-stagefeedback-lto-plugin +TARGET-stagefeedback-lto-plugin = $(TARGET-lto-plugin) +all-stagefeedback-lto-plugin: configure-stagefeedback-lto-plugin + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-lto-plugin) + +maybe-clean-stagefeedback-lto-plugin: clean-stagefeedback-lto-plugin +clean-stagefeedback: clean-stagefeedback-lto-plugin +clean-stagefeedback-lto-plugin: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautoprofile-lto-plugin maybe-all-stageautoprofile-lto-plugin +.PHONY: clean-stageautoprofile-lto-plugin maybe-clean-stageautoprofile-lto-plugin +maybe-all-stageautoprofile-lto-plugin: +maybe-clean-stageautoprofile-lto-plugin: +maybe-all-stageautoprofile-lto-plugin: all-stageautoprofile-lto-plugin +all-stageautoprofile: all-stageautoprofile-lto-plugin +TARGET-stageautoprofile-lto-plugin = $(TARGET-lto-plugin) +all-stageautoprofile-lto-plugin: configure-stageautoprofile-lto-plugin + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-lto-plugin) + +maybe-clean-stageautoprofile-lto-plugin: clean-stageautoprofile-lto-plugin +clean-stageautoprofile: clean-stageautoprofile-lto-plugin +clean-stageautoprofile-lto-plugin: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + +.PHONY: all-stageautofeedback-lto-plugin maybe-all-stageautofeedback-lto-plugin +.PHONY: clean-stageautofeedback-lto-plugin maybe-clean-stageautofeedback-lto-plugin +maybe-all-stageautofeedback-lto-plugin: +maybe-clean-stageautofeedback-lto-plugin: +maybe-all-stageautofeedback-lto-plugin: all-stageautofeedback-lto-plugin +all-stageautofeedback: all-stageautofeedback-lto-plugin +TARGET-stageautofeedback-lto-plugin = $(TARGET-lto-plugin) +all-stageautofeedback-lto-plugin: configure-stageautofeedback-lto-plugin + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/lto-plugin && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-lto-plugin) + +maybe-clean-stageautofeedback-lto-plugin: clean-stageautofeedback-lto-plugin +clean-stageautofeedback: clean-stageautofeedback-lto-plugin +clean-stageautofeedback-lto-plugin: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/lto-plugin/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-lto-plugin/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean + + + + + +.PHONY: check-lto-plugin maybe-check-lto-plugin +maybe-check-lto-plugin: +maybe-check-lto-plugin: check-lto-plugin + +check-lto-plugin: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + + +.PHONY: install-lto-plugin maybe-install-lto-plugin +maybe-install-lto-plugin: +maybe-install-lto-plugin: install-lto-plugin + +install-lto-plugin: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-lto-plugin maybe-install-strip-lto-plugin +maybe-install-strip-lto-plugin: +maybe-install-strip-lto-plugin: install-strip-lto-plugin + +install-strip-lto-plugin: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-lto-plugin info-lto-plugin +maybe-info-lto-plugin: +maybe-info-lto-plugin: info-lto-plugin + +info-lto-plugin: \ + configure-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-lto-plugin dvi-lto-plugin +maybe-dvi-lto-plugin: +maybe-dvi-lto-plugin: dvi-lto-plugin + +dvi-lto-plugin: \ + configure-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-lto-plugin pdf-lto-plugin +maybe-pdf-lto-plugin: +maybe-pdf-lto-plugin: pdf-lto-plugin + +pdf-lto-plugin: \ + configure-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-lto-plugin html-lto-plugin +maybe-html-lto-plugin: +maybe-html-lto-plugin: html-lto-plugin + +html-lto-plugin: \ + configure-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-lto-plugin TAGS-lto-plugin +maybe-TAGS-lto-plugin: +maybe-TAGS-lto-plugin: TAGS-lto-plugin + +TAGS-lto-plugin: \ + configure-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-lto-plugin install-info-lto-plugin +maybe-install-info-lto-plugin: +maybe-install-info-lto-plugin: install-info-lto-plugin + +install-info-lto-plugin: \ + configure-lto-plugin \ + info-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-lto-plugin install-dvi-lto-plugin +maybe-install-dvi-lto-plugin: +maybe-install-dvi-lto-plugin: install-dvi-lto-plugin + +install-dvi-lto-plugin: \ + configure-lto-plugin \ + dvi-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-lto-plugin install-pdf-lto-plugin +maybe-install-pdf-lto-plugin: +maybe-install-pdf-lto-plugin: install-pdf-lto-plugin + +install-pdf-lto-plugin: \ + configure-lto-plugin \ + pdf-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-lto-plugin install-html-lto-plugin +maybe-install-html-lto-plugin: +maybe-install-html-lto-plugin: install-html-lto-plugin + +install-html-lto-plugin: \ + configure-lto-plugin \ + html-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-lto-plugin installcheck-lto-plugin +maybe-installcheck-lto-plugin: +maybe-installcheck-lto-plugin: installcheck-lto-plugin + +installcheck-lto-plugin: \ + configure-lto-plugin + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-lto-plugin mostlyclean-lto-plugin +maybe-mostlyclean-lto-plugin: +maybe-mostlyclean-lto-plugin: mostlyclean-lto-plugin + +mostlyclean-lto-plugin: + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-lto-plugin clean-lto-plugin +maybe-clean-lto-plugin: +maybe-clean-lto-plugin: clean-lto-plugin + +clean-lto-plugin: + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-lto-plugin distclean-lto-plugin +maybe-distclean-lto-plugin: +maybe-distclean-lto-plugin: distclean-lto-plugin + +distclean-lto-plugin: + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-lto-plugin maintainer-clean-lto-plugin +maybe-maintainer-clean-lto-plugin: +maybe-maintainer-clean-lto-plugin: maintainer-clean-lto-plugin + +maintainer-clean-lto-plugin: + @[ -f ./lto-plugin/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in lto-plugin"; \ + (cd $(HOST_SUBDIR)/lto-plugin && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-libcc1 maybe-configure-libcc1 +maybe-configure-libcc1: +configure-libcc1: stage_current +maybe-configure-libcc1: configure-libcc1 +configure-libcc1: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libcc1/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcc1; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libcc1; \ + cd "$(HOST_SUBDIR)/libcc1" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libcc1/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libcc1; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} --enable-shared \ + || exit 1 + + + + + +.PHONY: all-libcc1 maybe-all-libcc1 +maybe-all-libcc1: +all-libcc1: stage_current +TARGET-libcc1=all +maybe-all-libcc1: all-libcc1 +all-libcc1: configure-libcc1 + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-libcc1)) + + + + +.PHONY: check-libcc1 maybe-check-libcc1 +maybe-check-libcc1: +maybe-check-libcc1: check-libcc1 + +check-libcc1: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(FLAGS_TO_PASS) check) + + +.PHONY: install-libcc1 maybe-install-libcc1 +maybe-install-libcc1: +maybe-install-libcc1: install-libcc1 + +install-libcc1: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(FLAGS_TO_PASS) install) + + +.PHONY: install-strip-libcc1 maybe-install-strip-libcc1 +maybe-install-strip-libcc1: +maybe-install-strip-libcc1: install-strip-libcc1 + +install-strip-libcc1: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libcc1 info-libcc1 +maybe-info-libcc1: +maybe-info-libcc1: info-libcc1 + +info-libcc1: \ + configure-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-libcc1 dvi-libcc1 +maybe-dvi-libcc1: +maybe-dvi-libcc1: dvi-libcc1 + +dvi-libcc1: \ + configure-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-libcc1 pdf-libcc1 +maybe-pdf-libcc1: +maybe-pdf-libcc1: pdf-libcc1 + +pdf-libcc1: \ + configure-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-libcc1 html-libcc1 +maybe-html-libcc1: +maybe-html-libcc1: html-libcc1 + +html-libcc1: \ + configure-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-libcc1 TAGS-libcc1 +maybe-TAGS-libcc1: +maybe-TAGS-libcc1: TAGS-libcc1 + +TAGS-libcc1: \ + configure-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-libcc1 install-info-libcc1 +maybe-install-info-libcc1: +maybe-install-info-libcc1: install-info-libcc1 + +install-info-libcc1: \ + configure-libcc1 \ + info-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-libcc1 install-dvi-libcc1 +maybe-install-dvi-libcc1: +maybe-install-dvi-libcc1: install-dvi-libcc1 + +install-dvi-libcc1: \ + configure-libcc1 \ + dvi-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-libcc1 install-pdf-libcc1 +maybe-install-pdf-libcc1: +maybe-install-pdf-libcc1: install-pdf-libcc1 + +install-pdf-libcc1: \ + configure-libcc1 \ + pdf-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-libcc1 install-html-libcc1 +maybe-install-html-libcc1: +maybe-install-html-libcc1: install-html-libcc1 + +install-html-libcc1: \ + configure-libcc1 \ + html-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-libcc1 installcheck-libcc1 +maybe-installcheck-libcc1: +maybe-installcheck-libcc1: installcheck-libcc1 + +installcheck-libcc1: \ + configure-libcc1 + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-libcc1 mostlyclean-libcc1 +maybe-mostlyclean-libcc1: +maybe-mostlyclean-libcc1: mostlyclean-libcc1 + +mostlyclean-libcc1: + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-libcc1 clean-libcc1 +maybe-clean-libcc1: +maybe-clean-libcc1: clean-libcc1 + +clean-libcc1: + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-libcc1 distclean-libcc1 +maybe-distclean-libcc1: +maybe-distclean-libcc1: distclean-libcc1 + +distclean-libcc1: + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-libcc1 maintainer-clean-libcc1 +maybe-maintainer-clean-libcc1: +maybe-maintainer-clean-libcc1: maintainer-clean-libcc1 + +maintainer-clean-libcc1: + @: $(MAKE); $(unstage) + @[ -f ./libcc1/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in libcc1"; \ + (cd $(HOST_SUBDIR)/libcc1 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + +.PHONY: configure-gotools maybe-configure-gotools +maybe-configure-gotools: +configure-gotools: stage_current + + + + + +.PHONY: all-gotools maybe-all-gotools +maybe-all-gotools: +all-gotools: stage_current + + + + +.PHONY: check-gotools maybe-check-gotools +maybe-check-gotools: + +.PHONY: install-gotools maybe-install-gotools +maybe-install-gotools: + +.PHONY: install-strip-gotools maybe-install-strip-gotools +maybe-install-strip-gotools: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gotools info-gotools +maybe-info-gotools: + +.PHONY: maybe-dvi-gotools dvi-gotools +maybe-dvi-gotools: + +.PHONY: maybe-pdf-gotools pdf-gotools +maybe-pdf-gotools: + +.PHONY: maybe-html-gotools html-gotools +maybe-html-gotools: + +.PHONY: maybe-TAGS-gotools TAGS-gotools +maybe-TAGS-gotools: + +.PHONY: maybe-install-info-gotools install-info-gotools +maybe-install-info-gotools: + +.PHONY: maybe-install-dvi-gotools install-dvi-gotools +maybe-install-dvi-gotools: + +.PHONY: maybe-install-pdf-gotools install-pdf-gotools +maybe-install-pdf-gotools: + +.PHONY: maybe-install-html-gotools install-html-gotools +maybe-install-html-gotools: + +.PHONY: maybe-installcheck-gotools installcheck-gotools +maybe-installcheck-gotools: + +.PHONY: maybe-mostlyclean-gotools mostlyclean-gotools +maybe-mostlyclean-gotools: + +.PHONY: maybe-clean-gotools clean-gotools +maybe-clean-gotools: + +.PHONY: maybe-distclean-gotools distclean-gotools +maybe-distclean-gotools: + +.PHONY: maybe-maintainer-clean-gotools maintainer-clean-gotools +maybe-maintainer-clean-gotools: + + + +.PHONY: configure-libctf maybe-configure-libctf +maybe-configure-libctf: +configure-libctf: stage_current + + + +.PHONY: configure-stage1-libctf maybe-configure-stage1-libctf +maybe-configure-stage1-libctf: + +.PHONY: configure-stage2-libctf maybe-configure-stage2-libctf +maybe-configure-stage2-libctf: + +.PHONY: configure-stage3-libctf maybe-configure-stage3-libctf +maybe-configure-stage3-libctf: + +.PHONY: configure-stage4-libctf maybe-configure-stage4-libctf +maybe-configure-stage4-libctf: + +.PHONY: configure-stageprofile-libctf maybe-configure-stageprofile-libctf +maybe-configure-stageprofile-libctf: + +.PHONY: configure-stagetrain-libctf maybe-configure-stagetrain-libctf +maybe-configure-stagetrain-libctf: + +.PHONY: configure-stagefeedback-libctf maybe-configure-stagefeedback-libctf +maybe-configure-stagefeedback-libctf: + +.PHONY: configure-stageautoprofile-libctf maybe-configure-stageautoprofile-libctf +maybe-configure-stageautoprofile-libctf: + +.PHONY: configure-stageautofeedback-libctf maybe-configure-stageautofeedback-libctf +maybe-configure-stageautofeedback-libctf: + + + + + +.PHONY: all-libctf maybe-all-libctf +maybe-all-libctf: +all-libctf: stage_current + + + +.PHONY: all-stage1-libctf maybe-all-stage1-libctf +.PHONY: clean-stage1-libctf maybe-clean-stage1-libctf +maybe-all-stage1-libctf: +maybe-clean-stage1-libctf: + + +.PHONY: all-stage2-libctf maybe-all-stage2-libctf +.PHONY: clean-stage2-libctf maybe-clean-stage2-libctf +maybe-all-stage2-libctf: +maybe-clean-stage2-libctf: + + +.PHONY: all-stage3-libctf maybe-all-stage3-libctf +.PHONY: clean-stage3-libctf maybe-clean-stage3-libctf +maybe-all-stage3-libctf: +maybe-clean-stage3-libctf: + + +.PHONY: all-stage4-libctf maybe-all-stage4-libctf +.PHONY: clean-stage4-libctf maybe-clean-stage4-libctf +maybe-all-stage4-libctf: +maybe-clean-stage4-libctf: + + +.PHONY: all-stageprofile-libctf maybe-all-stageprofile-libctf +.PHONY: clean-stageprofile-libctf maybe-clean-stageprofile-libctf +maybe-all-stageprofile-libctf: +maybe-clean-stageprofile-libctf: + + +.PHONY: all-stagetrain-libctf maybe-all-stagetrain-libctf +.PHONY: clean-stagetrain-libctf maybe-clean-stagetrain-libctf +maybe-all-stagetrain-libctf: +maybe-clean-stagetrain-libctf: + + +.PHONY: all-stagefeedback-libctf maybe-all-stagefeedback-libctf +.PHONY: clean-stagefeedback-libctf maybe-clean-stagefeedback-libctf +maybe-all-stagefeedback-libctf: +maybe-clean-stagefeedback-libctf: + + +.PHONY: all-stageautoprofile-libctf maybe-all-stageautoprofile-libctf +.PHONY: clean-stageautoprofile-libctf maybe-clean-stageautoprofile-libctf +maybe-all-stageautoprofile-libctf: +maybe-clean-stageautoprofile-libctf: + + +.PHONY: all-stageautofeedback-libctf maybe-all-stageautofeedback-libctf +.PHONY: clean-stageautofeedback-libctf maybe-clean-stageautofeedback-libctf +maybe-all-stageautofeedback-libctf: +maybe-clean-stageautofeedback-libctf: + + + + + +.PHONY: check-libctf maybe-check-libctf +maybe-check-libctf: + +.PHONY: install-libctf maybe-install-libctf +maybe-install-libctf: + +.PHONY: install-strip-libctf maybe-install-strip-libctf +maybe-install-strip-libctf: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libctf info-libctf +maybe-info-libctf: + +.PHONY: maybe-dvi-libctf dvi-libctf +maybe-dvi-libctf: + +.PHONY: maybe-pdf-libctf pdf-libctf +maybe-pdf-libctf: + +.PHONY: maybe-html-libctf html-libctf +maybe-html-libctf: + +.PHONY: maybe-TAGS-libctf TAGS-libctf +maybe-TAGS-libctf: + +.PHONY: maybe-install-info-libctf install-info-libctf +maybe-install-info-libctf: + +.PHONY: maybe-install-dvi-libctf install-dvi-libctf +maybe-install-dvi-libctf: + +.PHONY: maybe-install-pdf-libctf install-pdf-libctf +maybe-install-pdf-libctf: + +.PHONY: maybe-install-html-libctf install-html-libctf +maybe-install-html-libctf: + +.PHONY: maybe-installcheck-libctf installcheck-libctf +maybe-installcheck-libctf: + +.PHONY: maybe-mostlyclean-libctf mostlyclean-libctf +maybe-mostlyclean-libctf: + +.PHONY: maybe-clean-libctf clean-libctf +maybe-clean-libctf: + +.PHONY: maybe-distclean-libctf distclean-libctf +maybe-distclean-libctf: + +.PHONY: maybe-maintainer-clean-libctf maintainer-clean-libctf +maybe-maintainer-clean-libctf: + + + +.PHONY: configure-libsframe maybe-configure-libsframe +maybe-configure-libsframe: +configure-libsframe: stage_current + + + +.PHONY: configure-stage1-libsframe maybe-configure-stage1-libsframe +maybe-configure-stage1-libsframe: + +.PHONY: configure-stage2-libsframe maybe-configure-stage2-libsframe +maybe-configure-stage2-libsframe: + +.PHONY: configure-stage3-libsframe maybe-configure-stage3-libsframe +maybe-configure-stage3-libsframe: + +.PHONY: configure-stage4-libsframe maybe-configure-stage4-libsframe +maybe-configure-stage4-libsframe: + +.PHONY: configure-stageprofile-libsframe maybe-configure-stageprofile-libsframe +maybe-configure-stageprofile-libsframe: + +.PHONY: configure-stagetrain-libsframe maybe-configure-stagetrain-libsframe +maybe-configure-stagetrain-libsframe: + +.PHONY: configure-stagefeedback-libsframe maybe-configure-stagefeedback-libsframe +maybe-configure-stagefeedback-libsframe: + +.PHONY: configure-stageautoprofile-libsframe maybe-configure-stageautoprofile-libsframe +maybe-configure-stageautoprofile-libsframe: + +.PHONY: configure-stageautofeedback-libsframe maybe-configure-stageautofeedback-libsframe +maybe-configure-stageautofeedback-libsframe: + + + + + +.PHONY: all-libsframe maybe-all-libsframe +maybe-all-libsframe: +all-libsframe: stage_current + + + +.PHONY: all-stage1-libsframe maybe-all-stage1-libsframe +.PHONY: clean-stage1-libsframe maybe-clean-stage1-libsframe +maybe-all-stage1-libsframe: +maybe-clean-stage1-libsframe: + + +.PHONY: all-stage2-libsframe maybe-all-stage2-libsframe +.PHONY: clean-stage2-libsframe maybe-clean-stage2-libsframe +maybe-all-stage2-libsframe: +maybe-clean-stage2-libsframe: + + +.PHONY: all-stage3-libsframe maybe-all-stage3-libsframe +.PHONY: clean-stage3-libsframe maybe-clean-stage3-libsframe +maybe-all-stage3-libsframe: +maybe-clean-stage3-libsframe: + + +.PHONY: all-stage4-libsframe maybe-all-stage4-libsframe +.PHONY: clean-stage4-libsframe maybe-clean-stage4-libsframe +maybe-all-stage4-libsframe: +maybe-clean-stage4-libsframe: + + +.PHONY: all-stageprofile-libsframe maybe-all-stageprofile-libsframe +.PHONY: clean-stageprofile-libsframe maybe-clean-stageprofile-libsframe +maybe-all-stageprofile-libsframe: +maybe-clean-stageprofile-libsframe: + + +.PHONY: all-stagetrain-libsframe maybe-all-stagetrain-libsframe +.PHONY: clean-stagetrain-libsframe maybe-clean-stagetrain-libsframe +maybe-all-stagetrain-libsframe: +maybe-clean-stagetrain-libsframe: + + +.PHONY: all-stagefeedback-libsframe maybe-all-stagefeedback-libsframe +.PHONY: clean-stagefeedback-libsframe maybe-clean-stagefeedback-libsframe +maybe-all-stagefeedback-libsframe: +maybe-clean-stagefeedback-libsframe: + + +.PHONY: all-stageautoprofile-libsframe maybe-all-stageautoprofile-libsframe +.PHONY: clean-stageautoprofile-libsframe maybe-clean-stageautoprofile-libsframe +maybe-all-stageautoprofile-libsframe: +maybe-clean-stageautoprofile-libsframe: + + +.PHONY: all-stageautofeedback-libsframe maybe-all-stageautofeedback-libsframe +.PHONY: clean-stageautofeedback-libsframe maybe-clean-stageautofeedback-libsframe +maybe-all-stageautofeedback-libsframe: +maybe-clean-stageautofeedback-libsframe: + + + + + +.PHONY: check-libsframe maybe-check-libsframe +maybe-check-libsframe: + +.PHONY: install-libsframe maybe-install-libsframe +maybe-install-libsframe: + +.PHONY: install-strip-libsframe maybe-install-strip-libsframe +maybe-install-strip-libsframe: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libsframe info-libsframe +maybe-info-libsframe: + +.PHONY: maybe-dvi-libsframe dvi-libsframe +maybe-dvi-libsframe: + +.PHONY: maybe-pdf-libsframe pdf-libsframe +maybe-pdf-libsframe: + +.PHONY: maybe-html-libsframe html-libsframe +maybe-html-libsframe: + +.PHONY: maybe-TAGS-libsframe TAGS-libsframe +maybe-TAGS-libsframe: + +.PHONY: maybe-install-info-libsframe install-info-libsframe +maybe-install-info-libsframe: + +.PHONY: maybe-install-dvi-libsframe install-dvi-libsframe +maybe-install-dvi-libsframe: + +.PHONY: maybe-install-pdf-libsframe install-pdf-libsframe +maybe-install-pdf-libsframe: + +.PHONY: maybe-install-html-libsframe install-html-libsframe +maybe-install-html-libsframe: + +.PHONY: maybe-installcheck-libsframe installcheck-libsframe +maybe-installcheck-libsframe: + +.PHONY: maybe-mostlyclean-libsframe mostlyclean-libsframe +maybe-mostlyclean-libsframe: + +.PHONY: maybe-clean-libsframe clean-libsframe +maybe-clean-libsframe: + +.PHONY: maybe-distclean-libsframe distclean-libsframe +maybe-distclean-libsframe: + +.PHONY: maybe-maintainer-clean-libsframe maintainer-clean-libsframe +maybe-maintainer-clean-libsframe: + + + +.PHONY: configure-libgrust maybe-configure-libgrust +maybe-configure-libgrust: +configure-libgrust: stage_current + + + +.PHONY: configure-stage1-libgrust maybe-configure-stage1-libgrust +maybe-configure-stage1-libgrust: + +.PHONY: configure-stage2-libgrust maybe-configure-stage2-libgrust +maybe-configure-stage2-libgrust: + +.PHONY: configure-stage3-libgrust maybe-configure-stage3-libgrust +maybe-configure-stage3-libgrust: + +.PHONY: configure-stage4-libgrust maybe-configure-stage4-libgrust +maybe-configure-stage4-libgrust: + +.PHONY: configure-stageprofile-libgrust maybe-configure-stageprofile-libgrust +maybe-configure-stageprofile-libgrust: + +.PHONY: configure-stagetrain-libgrust maybe-configure-stagetrain-libgrust +maybe-configure-stagetrain-libgrust: + +.PHONY: configure-stagefeedback-libgrust maybe-configure-stagefeedback-libgrust +maybe-configure-stagefeedback-libgrust: + +.PHONY: configure-stageautoprofile-libgrust maybe-configure-stageautoprofile-libgrust +maybe-configure-stageautoprofile-libgrust: + +.PHONY: configure-stageautofeedback-libgrust maybe-configure-stageautofeedback-libgrust +maybe-configure-stageautofeedback-libgrust: + + + + + +.PHONY: all-libgrust maybe-all-libgrust +maybe-all-libgrust: +all-libgrust: stage_current + + + +.PHONY: all-stage1-libgrust maybe-all-stage1-libgrust +.PHONY: clean-stage1-libgrust maybe-clean-stage1-libgrust +maybe-all-stage1-libgrust: +maybe-clean-stage1-libgrust: + + +.PHONY: all-stage2-libgrust maybe-all-stage2-libgrust +.PHONY: clean-stage2-libgrust maybe-clean-stage2-libgrust +maybe-all-stage2-libgrust: +maybe-clean-stage2-libgrust: + + +.PHONY: all-stage3-libgrust maybe-all-stage3-libgrust +.PHONY: clean-stage3-libgrust maybe-clean-stage3-libgrust +maybe-all-stage3-libgrust: +maybe-clean-stage3-libgrust: + + +.PHONY: all-stage4-libgrust maybe-all-stage4-libgrust +.PHONY: clean-stage4-libgrust maybe-clean-stage4-libgrust +maybe-all-stage4-libgrust: +maybe-clean-stage4-libgrust: + + +.PHONY: all-stageprofile-libgrust maybe-all-stageprofile-libgrust +.PHONY: clean-stageprofile-libgrust maybe-clean-stageprofile-libgrust +maybe-all-stageprofile-libgrust: +maybe-clean-stageprofile-libgrust: + + +.PHONY: all-stagetrain-libgrust maybe-all-stagetrain-libgrust +.PHONY: clean-stagetrain-libgrust maybe-clean-stagetrain-libgrust +maybe-all-stagetrain-libgrust: +maybe-clean-stagetrain-libgrust: + + +.PHONY: all-stagefeedback-libgrust maybe-all-stagefeedback-libgrust +.PHONY: clean-stagefeedback-libgrust maybe-clean-stagefeedback-libgrust +maybe-all-stagefeedback-libgrust: +maybe-clean-stagefeedback-libgrust: + + +.PHONY: all-stageautoprofile-libgrust maybe-all-stageautoprofile-libgrust +.PHONY: clean-stageautoprofile-libgrust maybe-clean-stageautoprofile-libgrust +maybe-all-stageautoprofile-libgrust: +maybe-clean-stageautoprofile-libgrust: + + +.PHONY: all-stageautofeedback-libgrust maybe-all-stageautofeedback-libgrust +.PHONY: clean-stageautofeedback-libgrust maybe-clean-stageautofeedback-libgrust +maybe-all-stageautofeedback-libgrust: +maybe-clean-stageautofeedback-libgrust: + + + + + +.PHONY: check-libgrust maybe-check-libgrust +maybe-check-libgrust: + +.PHONY: install-libgrust maybe-install-libgrust +maybe-install-libgrust: + +.PHONY: install-strip-libgrust maybe-install-strip-libgrust +maybe-install-strip-libgrust: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libgrust info-libgrust +maybe-info-libgrust: + +.PHONY: maybe-dvi-libgrust dvi-libgrust +maybe-dvi-libgrust: + +.PHONY: maybe-pdf-libgrust pdf-libgrust +maybe-pdf-libgrust: + +.PHONY: maybe-html-libgrust html-libgrust +maybe-html-libgrust: + +.PHONY: maybe-TAGS-libgrust TAGS-libgrust +maybe-TAGS-libgrust: + +.PHONY: maybe-install-info-libgrust install-info-libgrust +maybe-install-info-libgrust: + +.PHONY: maybe-install-dvi-libgrust install-dvi-libgrust +maybe-install-dvi-libgrust: + +.PHONY: maybe-install-pdf-libgrust install-pdf-libgrust +maybe-install-pdf-libgrust: + +.PHONY: maybe-install-html-libgrust install-html-libgrust +maybe-install-html-libgrust: + +.PHONY: maybe-installcheck-libgrust installcheck-libgrust +maybe-installcheck-libgrust: + +.PHONY: maybe-mostlyclean-libgrust mostlyclean-libgrust +maybe-mostlyclean-libgrust: + +.PHONY: maybe-clean-libgrust clean-libgrust +maybe-clean-libgrust: + +.PHONY: maybe-distclean-libgrust distclean-libgrust +maybe-distclean-libgrust: + +.PHONY: maybe-maintainer-clean-libgrust maintainer-clean-libgrust +maybe-maintainer-clean-libgrust: + + + +# --------------------------------------- +# Modules which run on the target machine +# --------------------------------------- + + + + +.PHONY: configure-target-libstdc++-v3 maybe-configure-target-libstdc++-v3 +maybe-configure-target-libstdc++-v3: +configure-target-libstdc++-v3: stage_current +maybe-configure-target-libstdc++-v3: configure-target-libstdc++-v3 +configure-target-libstdc++-v3: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libstdc++-v3; \ + cd "$(TARGET_SUBDIR)/libstdc++-v3" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-target-libstdc++-v3 maybe-configure-stage1-target-libstdc++-v3 +maybe-configure-stage1-target-libstdc++-v3: +maybe-configure-stage1-target-libstdc++-v3: configure-stage1-target-libstdc++-v3 +configure-stage1-target-libstdc++-v3: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) + +.PHONY: configure-stage2-target-libstdc++-v3 maybe-configure-stage2-target-libstdc++-v3 +maybe-configure-stage2-target-libstdc++-v3: +maybe-configure-stage2-target-libstdc++-v3: configure-stage2-target-libstdc++-v3 +configure-stage2-target-libstdc++-v3: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) + +.PHONY: configure-stage3-target-libstdc++-v3 maybe-configure-stage3-target-libstdc++-v3 +maybe-configure-stage3-target-libstdc++-v3: +maybe-configure-stage3-target-libstdc++-v3: configure-stage3-target-libstdc++-v3 +configure-stage3-target-libstdc++-v3: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) + +.PHONY: configure-stage4-target-libstdc++-v3 maybe-configure-stage4-target-libstdc++-v3 +maybe-configure-stage4-target-libstdc++-v3: +maybe-configure-stage4-target-libstdc++-v3: configure-stage4-target-libstdc++-v3 +configure-stage4-target-libstdc++-v3: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) + +.PHONY: configure-stageprofile-target-libstdc++-v3 maybe-configure-stageprofile-target-libstdc++-v3 +maybe-configure-stageprofile-target-libstdc++-v3: +maybe-configure-stageprofile-target-libstdc++-v3: configure-stageprofile-target-libstdc++-v3 +configure-stageprofile-target-libstdc++-v3: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stagetrain-target-libstdc++-v3 maybe-configure-stagetrain-target-libstdc++-v3 +maybe-configure-stagetrain-target-libstdc++-v3: +maybe-configure-stagetrain-target-libstdc++-v3: configure-stagetrain-target-libstdc++-v3 +configure-stagetrain-target-libstdc++-v3: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage train in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) + +.PHONY: configure-stagefeedback-target-libstdc++-v3 maybe-configure-stagefeedback-target-libstdc++-v3 +maybe-configure-stagefeedback-target-libstdc++-v3: +maybe-configure-stagefeedback-target-libstdc++-v3: configure-stagefeedback-target-libstdc++-v3 +configure-stagefeedback-target-libstdc++-v3: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) + +.PHONY: configure-stageautoprofile-target-libstdc++-v3 maybe-configure-stageautoprofile-target-libstdc++-v3 +maybe-configure-stageautoprofile-target-libstdc++-v3: +maybe-configure-stageautoprofile-target-libstdc++-v3: configure-stageautoprofile-target-libstdc++-v3 +configure-stageautoprofile-target-libstdc++-v3: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stageautofeedback-target-libstdc++-v3 maybe-configure-stageautofeedback-target-libstdc++-v3 +maybe-configure-stageautofeedback-target-libstdc++-v3: +maybe-configure-stageautofeedback-target-libstdc++-v3: configure-stageautofeedback-target-libstdc++-v3 +configure-stageautofeedback-target-libstdc++-v3: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(TARGET_SUBDIR)/libstdc++-v3; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libstdc++-v3; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) + + + + + +.PHONY: all-target-libstdc++-v3 maybe-all-target-libstdc++-v3 +maybe-all-target-libstdc++-v3: +all-target-libstdc++-v3: stage_current +TARGET-target-libstdc++-v3=all +maybe-all-target-libstdc++-v3: all-target-libstdc++-v3 +all-target-libstdc++-v3: configure-target-libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + $(TARGET-target-libstdc++-v3)) + + + +.PHONY: all-stage1-target-libstdc++-v3 maybe-all-stage1-target-libstdc++-v3 +.PHONY: clean-stage1-target-libstdc++-v3 maybe-clean-stage1-target-libstdc++-v3 +maybe-all-stage1-target-libstdc++-v3: +maybe-clean-stage1-target-libstdc++-v3: +maybe-all-stage1-target-libstdc++-v3: all-stage1-target-libstdc++-v3 +all-stage1: all-stage1-target-libstdc++-v3 +TARGET-stage1-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage1-target-libstdc++-v3: configure-stage1-target-libstdc++-v3 + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-target-libstdc++-v3) + +maybe-clean-stage1-target-libstdc++-v3: clean-stage1-target-libstdc++-v3 +clean-stage1: clean-stage1-target-libstdc++-v3 +clean-stage1-target-libstdc++-v3: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage1-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + clean + + +.PHONY: all-stage2-target-libstdc++-v3 maybe-all-stage2-target-libstdc++-v3 +.PHONY: clean-stage2-target-libstdc++-v3 maybe-clean-stage2-target-libstdc++-v3 +maybe-all-stage2-target-libstdc++-v3: +maybe-clean-stage2-target-libstdc++-v3: +maybe-all-stage2-target-libstdc++-v3: all-stage2-target-libstdc++-v3 +all-stage2: all-stage2-target-libstdc++-v3 +TARGET-stage2-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage2-target-libstdc++-v3: configure-stage2-target-libstdc++-v3 + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-target-libstdc++-v3) + +maybe-clean-stage2-target-libstdc++-v3: clean-stage2-target-libstdc++-v3 +clean-stage2: clean-stage2-target-libstdc++-v3 +clean-stage2-target-libstdc++-v3: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage2-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + +.PHONY: all-stage3-target-libstdc++-v3 maybe-all-stage3-target-libstdc++-v3 +.PHONY: clean-stage3-target-libstdc++-v3 maybe-clean-stage3-target-libstdc++-v3 +maybe-all-stage3-target-libstdc++-v3: +maybe-clean-stage3-target-libstdc++-v3: +maybe-all-stage3-target-libstdc++-v3: all-stage3-target-libstdc++-v3 +all-stage3: all-stage3-target-libstdc++-v3 +TARGET-stage3-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage3-target-libstdc++-v3: configure-stage3-target-libstdc++-v3 + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-target-libstdc++-v3) + +maybe-clean-stage3-target-libstdc++-v3: clean-stage3-target-libstdc++-v3 +clean-stage3: clean-stage3-target-libstdc++-v3 +clean-stage3-target-libstdc++-v3: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage3-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + +.PHONY: all-stage4-target-libstdc++-v3 maybe-all-stage4-target-libstdc++-v3 +.PHONY: clean-stage4-target-libstdc++-v3 maybe-clean-stage4-target-libstdc++-v3 +maybe-all-stage4-target-libstdc++-v3: +maybe-clean-stage4-target-libstdc++-v3: +maybe-all-stage4-target-libstdc++-v3: all-stage4-target-libstdc++-v3 +all-stage4: all-stage4-target-libstdc++-v3 +TARGET-stage4-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage4-target-libstdc++-v3: configure-stage4-target-libstdc++-v3 + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-target-libstdc++-v3) + +maybe-clean-stage4-target-libstdc++-v3: clean-stage4-target-libstdc++-v3 +clean-stage4: clean-stage4-target-libstdc++-v3 +clean-stage4-target-libstdc++-v3: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage4-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + +.PHONY: all-stageprofile-target-libstdc++-v3 maybe-all-stageprofile-target-libstdc++-v3 +.PHONY: clean-stageprofile-target-libstdc++-v3 maybe-clean-stageprofile-target-libstdc++-v3 +maybe-all-stageprofile-target-libstdc++-v3: +maybe-clean-stageprofile-target-libstdc++-v3: +maybe-all-stageprofile-target-libstdc++-v3: all-stageprofile-target-libstdc++-v3 +all-stageprofile: all-stageprofile-target-libstdc++-v3 +TARGET-stageprofile-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stageprofile-target-libstdc++-v3: configure-stageprofile-target-libstdc++-v3 + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-target-libstdc++-v3) + +maybe-clean-stageprofile-target-libstdc++-v3: clean-stageprofile-target-libstdc++-v3 +clean-stageprofile: clean-stageprofile-target-libstdc++-v3 +clean-stageprofile-target-libstdc++-v3: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageprofile-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + +.PHONY: all-stagetrain-target-libstdc++-v3 maybe-all-stagetrain-target-libstdc++-v3 +.PHONY: clean-stagetrain-target-libstdc++-v3 maybe-clean-stagetrain-target-libstdc++-v3 +maybe-all-stagetrain-target-libstdc++-v3: +maybe-clean-stagetrain-target-libstdc++-v3: +maybe-all-stagetrain-target-libstdc++-v3: all-stagetrain-target-libstdc++-v3 +all-stagetrain: all-stagetrain-target-libstdc++-v3 +TARGET-stagetrain-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stagetrain-target-libstdc++-v3: configure-stagetrain-target-libstdc++-v3 + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-target-libstdc++-v3) + +maybe-clean-stagetrain-target-libstdc++-v3: clean-stagetrain-target-libstdc++-v3 +clean-stagetrain: clean-stagetrain-target-libstdc++-v3 +clean-stagetrain-target-libstdc++-v3: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stagetrain-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + +.PHONY: all-stagefeedback-target-libstdc++-v3 maybe-all-stagefeedback-target-libstdc++-v3 +.PHONY: clean-stagefeedback-target-libstdc++-v3 maybe-clean-stagefeedback-target-libstdc++-v3 +maybe-all-stagefeedback-target-libstdc++-v3: +maybe-clean-stagefeedback-target-libstdc++-v3: +maybe-all-stagefeedback-target-libstdc++-v3: all-stagefeedback-target-libstdc++-v3 +all-stagefeedback: all-stagefeedback-target-libstdc++-v3 +TARGET-stagefeedback-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stagefeedback-target-libstdc++-v3: configure-stagefeedback-target-libstdc++-v3 + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-target-libstdc++-v3) + +maybe-clean-stagefeedback-target-libstdc++-v3: clean-stagefeedback-target-libstdc++-v3 +clean-stagefeedback: clean-stagefeedback-target-libstdc++-v3 +clean-stagefeedback-target-libstdc++-v3: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stagefeedback-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + +.PHONY: all-stageautoprofile-target-libstdc++-v3 maybe-all-stageautoprofile-target-libstdc++-v3 +.PHONY: clean-stageautoprofile-target-libstdc++-v3 maybe-clean-stageautoprofile-target-libstdc++-v3 +maybe-all-stageautoprofile-target-libstdc++-v3: +maybe-clean-stageautoprofile-target-libstdc++-v3: +maybe-all-stageautoprofile-target-libstdc++-v3: all-stageautoprofile-target-libstdc++-v3 +all-stageautoprofile: all-stageautoprofile-target-libstdc++-v3 +TARGET-stageautoprofile-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stageautoprofile-target-libstdc++-v3: configure-stageautoprofile-target-libstdc++-v3 + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-target-libstdc++-v3) + +maybe-clean-stageautoprofile-target-libstdc++-v3: clean-stageautoprofile-target-libstdc++-v3 +clean-stageautoprofile: clean-stageautoprofile-target-libstdc++-v3 +clean-stageautoprofile-target-libstdc++-v3: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageautoprofile-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + +.PHONY: all-stageautofeedback-target-libstdc++-v3 maybe-all-stageautofeedback-target-libstdc++-v3 +.PHONY: clean-stageautofeedback-target-libstdc++-v3 maybe-clean-stageautofeedback-target-libstdc++-v3 +maybe-all-stageautofeedback-target-libstdc++-v3: +maybe-clean-stageautofeedback-target-libstdc++-v3: +maybe-all-stageautofeedback-target-libstdc++-v3: all-stageautofeedback-target-libstdc++-v3 +all-stageautofeedback: all-stageautofeedback-target-libstdc++-v3 +TARGET-stageautofeedback-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stageautofeedback-target-libstdc++-v3: configure-stageautofeedback-target-libstdc++-v3 + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-target-libstdc++-v3) + +maybe-clean-stageautofeedback-target-libstdc++-v3: clean-stageautofeedback-target-libstdc++-v3 +clean-stageautofeedback: clean-stageautofeedback-target-libstdc++-v3 +clean-stageautofeedback-target-libstdc++-v3: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageautofeedback-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' clean + + + + + + +.PHONY: check-target-libstdc++-v3 maybe-check-target-libstdc++-v3 +maybe-check-target-libstdc++-v3: +maybe-check-target-libstdc++-v3: check-target-libstdc++-v3 + +check-target-libstdc++-v3: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' check) + + +.PHONY: install-target-libstdc++-v3 maybe-install-target-libstdc++-v3 +maybe-install-target-libstdc++-v3: +maybe-install-target-libstdc++-v3: install-target-libstdc++-v3 + +install-target-libstdc++-v3: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libstdc++-v3 maybe-install-strip-target-libstdc++-v3 +maybe-install-strip-target-libstdc++-v3: +maybe-install-strip-target-libstdc++-v3: install-strip-target-libstdc++-v3 + +install-strip-target-libstdc++-v3: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libstdc++-v3 info-target-libstdc++-v3 +maybe-info-target-libstdc++-v3: +maybe-info-target-libstdc++-v3: info-target-libstdc++-v3 + +info-target-libstdc++-v3: \ + configure-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libstdc++-v3 dvi-target-libstdc++-v3 +maybe-dvi-target-libstdc++-v3: +maybe-dvi-target-libstdc++-v3: dvi-target-libstdc++-v3 + +dvi-target-libstdc++-v3: \ + configure-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libstdc++-v3 pdf-target-libstdc++-v3 +maybe-pdf-target-libstdc++-v3: +maybe-pdf-target-libstdc++-v3: pdf-target-libstdc++-v3 + +pdf-target-libstdc++-v3: \ + configure-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libstdc++-v3 html-target-libstdc++-v3 +maybe-html-target-libstdc++-v3: +maybe-html-target-libstdc++-v3: html-target-libstdc++-v3 + +html-target-libstdc++-v3: \ + configure-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libstdc++-v3 TAGS-target-libstdc++-v3 +maybe-TAGS-target-libstdc++-v3: +maybe-TAGS-target-libstdc++-v3: TAGS-target-libstdc++-v3 + +TAGS-target-libstdc++-v3: \ + configure-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libstdc++-v3 install-info-target-libstdc++-v3 +maybe-install-info-target-libstdc++-v3: +maybe-install-info-target-libstdc++-v3: install-info-target-libstdc++-v3 + +install-info-target-libstdc++-v3: \ + configure-target-libstdc++-v3 \ + info-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libstdc++-v3 install-dvi-target-libstdc++-v3 +maybe-install-dvi-target-libstdc++-v3: +maybe-install-dvi-target-libstdc++-v3: install-dvi-target-libstdc++-v3 + +install-dvi-target-libstdc++-v3: \ + configure-target-libstdc++-v3 \ + dvi-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libstdc++-v3 install-pdf-target-libstdc++-v3 +maybe-install-pdf-target-libstdc++-v3: +maybe-install-pdf-target-libstdc++-v3: install-pdf-target-libstdc++-v3 + +install-pdf-target-libstdc++-v3: \ + configure-target-libstdc++-v3 \ + pdf-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libstdc++-v3 install-html-target-libstdc++-v3 +maybe-install-html-target-libstdc++-v3: +maybe-install-html-target-libstdc++-v3: install-html-target-libstdc++-v3 + +install-html-target-libstdc++-v3: \ + configure-target-libstdc++-v3 \ + html-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libstdc++-v3 installcheck-target-libstdc++-v3 +maybe-installcheck-target-libstdc++-v3: +maybe-installcheck-target-libstdc++-v3: installcheck-target-libstdc++-v3 + +installcheck-target-libstdc++-v3: \ + configure-target-libstdc++-v3 + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libstdc++-v3 mostlyclean-target-libstdc++-v3 +maybe-mostlyclean-target-libstdc++-v3: +maybe-mostlyclean-target-libstdc++-v3: mostlyclean-target-libstdc++-v3 + +mostlyclean-target-libstdc++-v3: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libstdc++-v3 clean-target-libstdc++-v3 +maybe-clean-target-libstdc++-v3: +maybe-clean-target-libstdc++-v3: clean-target-libstdc++-v3 + +clean-target-libstdc++-v3: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libstdc++-v3 distclean-target-libstdc++-v3 +maybe-distclean-target-libstdc++-v3: +maybe-distclean-target-libstdc++-v3: distclean-target-libstdc++-v3 + +distclean-target-libstdc++-v3: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libstdc++-v3 maintainer-clean-target-libstdc++-v3 +maybe-maintainer-clean-target-libstdc++-v3: +maybe-maintainer-clean-target-libstdc++-v3: maintainer-clean-target-libstdc++-v3 + +maintainer-clean-target-libstdc++-v3: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libstdc++-v3"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libsanitizer maybe-configure-target-libsanitizer +maybe-configure-target-libsanitizer: +configure-target-libsanitizer: stage_current +maybe-configure-target-libsanitizer: configure-target-libsanitizer +configure-target-libsanitizer: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libsanitizer..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libsanitizer; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libsanitizer/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libsanitizer/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libsanitizer/multilib.tmp $(TARGET_SUBDIR)/libsanitizer/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libsanitizer/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libsanitizer/Makefile; \ + mv $(TARGET_SUBDIR)/libsanitizer/multilib.tmp $(TARGET_SUBDIR)/libsanitizer/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libsanitizer/multilib.tmp $(TARGET_SUBDIR)/libsanitizer/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libsanitizer; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libsanitizer; \ + cd "$(TARGET_SUBDIR)/libsanitizer" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libsanitizer/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsanitizer; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-target-libsanitizer maybe-configure-stage1-target-libsanitizer +maybe-configure-stage1-target-libsanitizer: + +.PHONY: configure-stage2-target-libsanitizer maybe-configure-stage2-target-libsanitizer +maybe-configure-stage2-target-libsanitizer: + +.PHONY: configure-stage3-target-libsanitizer maybe-configure-stage3-target-libsanitizer +maybe-configure-stage3-target-libsanitizer: + +.PHONY: configure-stage4-target-libsanitizer maybe-configure-stage4-target-libsanitizer +maybe-configure-stage4-target-libsanitizer: + +.PHONY: configure-stageprofile-target-libsanitizer maybe-configure-stageprofile-target-libsanitizer +maybe-configure-stageprofile-target-libsanitizer: + +.PHONY: configure-stagetrain-target-libsanitizer maybe-configure-stagetrain-target-libsanitizer +maybe-configure-stagetrain-target-libsanitizer: + +.PHONY: configure-stagefeedback-target-libsanitizer maybe-configure-stagefeedback-target-libsanitizer +maybe-configure-stagefeedback-target-libsanitizer: + +.PHONY: configure-stageautoprofile-target-libsanitizer maybe-configure-stageautoprofile-target-libsanitizer +maybe-configure-stageautoprofile-target-libsanitizer: + +.PHONY: configure-stageautofeedback-target-libsanitizer maybe-configure-stageautofeedback-target-libsanitizer +maybe-configure-stageautofeedback-target-libsanitizer: + + + + + +.PHONY: all-target-libsanitizer maybe-all-target-libsanitizer +maybe-all-target-libsanitizer: +all-target-libsanitizer: stage_current +TARGET-target-libsanitizer=all +maybe-all-target-libsanitizer: all-target-libsanitizer +all-target-libsanitizer: configure-target-libsanitizer + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + $(TARGET-target-libsanitizer)) + + + +.PHONY: all-stage1-target-libsanitizer maybe-all-stage1-target-libsanitizer +.PHONY: clean-stage1-target-libsanitizer maybe-clean-stage1-target-libsanitizer +maybe-all-stage1-target-libsanitizer: +maybe-clean-stage1-target-libsanitizer: + + +.PHONY: all-stage2-target-libsanitizer maybe-all-stage2-target-libsanitizer +.PHONY: clean-stage2-target-libsanitizer maybe-clean-stage2-target-libsanitizer +maybe-all-stage2-target-libsanitizer: +maybe-clean-stage2-target-libsanitizer: + + +.PHONY: all-stage3-target-libsanitizer maybe-all-stage3-target-libsanitizer +.PHONY: clean-stage3-target-libsanitizer maybe-clean-stage3-target-libsanitizer +maybe-all-stage3-target-libsanitizer: +maybe-clean-stage3-target-libsanitizer: + + +.PHONY: all-stage4-target-libsanitizer maybe-all-stage4-target-libsanitizer +.PHONY: clean-stage4-target-libsanitizer maybe-clean-stage4-target-libsanitizer +maybe-all-stage4-target-libsanitizer: +maybe-clean-stage4-target-libsanitizer: + + +.PHONY: all-stageprofile-target-libsanitizer maybe-all-stageprofile-target-libsanitizer +.PHONY: clean-stageprofile-target-libsanitizer maybe-clean-stageprofile-target-libsanitizer +maybe-all-stageprofile-target-libsanitizer: +maybe-clean-stageprofile-target-libsanitizer: + + +.PHONY: all-stagetrain-target-libsanitizer maybe-all-stagetrain-target-libsanitizer +.PHONY: clean-stagetrain-target-libsanitizer maybe-clean-stagetrain-target-libsanitizer +maybe-all-stagetrain-target-libsanitizer: +maybe-clean-stagetrain-target-libsanitizer: + + +.PHONY: all-stagefeedback-target-libsanitizer maybe-all-stagefeedback-target-libsanitizer +.PHONY: clean-stagefeedback-target-libsanitizer maybe-clean-stagefeedback-target-libsanitizer +maybe-all-stagefeedback-target-libsanitizer: +maybe-clean-stagefeedback-target-libsanitizer: + + +.PHONY: all-stageautoprofile-target-libsanitizer maybe-all-stageautoprofile-target-libsanitizer +.PHONY: clean-stageautoprofile-target-libsanitizer maybe-clean-stageautoprofile-target-libsanitizer +maybe-all-stageautoprofile-target-libsanitizer: +maybe-clean-stageautoprofile-target-libsanitizer: + + +.PHONY: all-stageautofeedback-target-libsanitizer maybe-all-stageautofeedback-target-libsanitizer +.PHONY: clean-stageautofeedback-target-libsanitizer maybe-clean-stageautofeedback-target-libsanitizer +maybe-all-stageautofeedback-target-libsanitizer: +maybe-clean-stageautofeedback-target-libsanitizer: + + + + + + +.PHONY: check-target-libsanitizer maybe-check-target-libsanitizer +maybe-check-target-libsanitizer: +maybe-check-target-libsanitizer: check-target-libsanitizer + +check-target-libsanitizer: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' check) + + +.PHONY: install-target-libsanitizer maybe-install-target-libsanitizer +maybe-install-target-libsanitizer: +maybe-install-target-libsanitizer: install-target-libsanitizer + +install-target-libsanitizer: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libsanitizer maybe-install-strip-target-libsanitizer +maybe-install-strip-target-libsanitizer: +maybe-install-strip-target-libsanitizer: install-strip-target-libsanitizer + +install-strip-target-libsanitizer: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libsanitizer info-target-libsanitizer +maybe-info-target-libsanitizer: +maybe-info-target-libsanitizer: info-target-libsanitizer + +info-target-libsanitizer: \ + configure-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libsanitizer dvi-target-libsanitizer +maybe-dvi-target-libsanitizer: +maybe-dvi-target-libsanitizer: dvi-target-libsanitizer + +dvi-target-libsanitizer: \ + configure-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libsanitizer pdf-target-libsanitizer +maybe-pdf-target-libsanitizer: +maybe-pdf-target-libsanitizer: pdf-target-libsanitizer + +pdf-target-libsanitizer: \ + configure-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libsanitizer html-target-libsanitizer +maybe-html-target-libsanitizer: +maybe-html-target-libsanitizer: html-target-libsanitizer + +html-target-libsanitizer: \ + configure-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libsanitizer TAGS-target-libsanitizer +maybe-TAGS-target-libsanitizer: +maybe-TAGS-target-libsanitizer: TAGS-target-libsanitizer + +TAGS-target-libsanitizer: \ + configure-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libsanitizer install-info-target-libsanitizer +maybe-install-info-target-libsanitizer: +maybe-install-info-target-libsanitizer: install-info-target-libsanitizer + +install-info-target-libsanitizer: \ + configure-target-libsanitizer \ + info-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libsanitizer install-dvi-target-libsanitizer +maybe-install-dvi-target-libsanitizer: +maybe-install-dvi-target-libsanitizer: install-dvi-target-libsanitizer + +install-dvi-target-libsanitizer: \ + configure-target-libsanitizer \ + dvi-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libsanitizer install-pdf-target-libsanitizer +maybe-install-pdf-target-libsanitizer: +maybe-install-pdf-target-libsanitizer: install-pdf-target-libsanitizer + +install-pdf-target-libsanitizer: \ + configure-target-libsanitizer \ + pdf-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libsanitizer install-html-target-libsanitizer +maybe-install-html-target-libsanitizer: +maybe-install-html-target-libsanitizer: install-html-target-libsanitizer + +install-html-target-libsanitizer: \ + configure-target-libsanitizer \ + html-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libsanitizer installcheck-target-libsanitizer +maybe-installcheck-target-libsanitizer: +maybe-installcheck-target-libsanitizer: installcheck-target-libsanitizer + +installcheck-target-libsanitizer: \ + configure-target-libsanitizer + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libsanitizer mostlyclean-target-libsanitizer +maybe-mostlyclean-target-libsanitizer: +maybe-mostlyclean-target-libsanitizer: mostlyclean-target-libsanitizer + +mostlyclean-target-libsanitizer: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libsanitizer clean-target-libsanitizer +maybe-clean-target-libsanitizer: +maybe-clean-target-libsanitizer: clean-target-libsanitizer + +clean-target-libsanitizer: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libsanitizer distclean-target-libsanitizer +maybe-distclean-target-libsanitizer: +maybe-distclean-target-libsanitizer: distclean-target-libsanitizer + +distclean-target-libsanitizer: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libsanitizer maintainer-clean-target-libsanitizer +maybe-maintainer-clean-target-libsanitizer: +maybe-maintainer-clean-target-libsanitizer: maintainer-clean-target-libsanitizer + +maintainer-clean-target-libsanitizer: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libsanitizer"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libsanitizer && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libvtv maybe-configure-target-libvtv +maybe-configure-target-libvtv: +configure-target-libvtv: stage_current +maybe-configure-target-libvtv: configure-target-libvtv +configure-target-libvtv: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libvtv..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libvtv; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libvtv/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libvtv/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libvtv/multilib.tmp $(TARGET_SUBDIR)/libvtv/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libvtv/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libvtv/Makefile; \ + mv $(TARGET_SUBDIR)/libvtv/multilib.tmp $(TARGET_SUBDIR)/libvtv/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libvtv/multilib.tmp $(TARGET_SUBDIR)/libvtv/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libvtv; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libvtv; \ + cd "$(TARGET_SUBDIR)/libvtv" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libvtv/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libvtv; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-target-libvtv maybe-configure-stage1-target-libvtv +maybe-configure-stage1-target-libvtv: + +.PHONY: configure-stage2-target-libvtv maybe-configure-stage2-target-libvtv +maybe-configure-stage2-target-libvtv: + +.PHONY: configure-stage3-target-libvtv maybe-configure-stage3-target-libvtv +maybe-configure-stage3-target-libvtv: + +.PHONY: configure-stage4-target-libvtv maybe-configure-stage4-target-libvtv +maybe-configure-stage4-target-libvtv: + +.PHONY: configure-stageprofile-target-libvtv maybe-configure-stageprofile-target-libvtv +maybe-configure-stageprofile-target-libvtv: + +.PHONY: configure-stagetrain-target-libvtv maybe-configure-stagetrain-target-libvtv +maybe-configure-stagetrain-target-libvtv: + +.PHONY: configure-stagefeedback-target-libvtv maybe-configure-stagefeedback-target-libvtv +maybe-configure-stagefeedback-target-libvtv: + +.PHONY: configure-stageautoprofile-target-libvtv maybe-configure-stageautoprofile-target-libvtv +maybe-configure-stageautoprofile-target-libvtv: + +.PHONY: configure-stageautofeedback-target-libvtv maybe-configure-stageautofeedback-target-libvtv +maybe-configure-stageautofeedback-target-libvtv: + + + + + +.PHONY: all-target-libvtv maybe-all-target-libvtv +maybe-all-target-libvtv: +all-target-libvtv: stage_current +TARGET-target-libvtv=all +maybe-all-target-libvtv: all-target-libvtv +all-target-libvtv: configure-target-libvtv + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + $(TARGET-target-libvtv)) + + + +.PHONY: all-stage1-target-libvtv maybe-all-stage1-target-libvtv +.PHONY: clean-stage1-target-libvtv maybe-clean-stage1-target-libvtv +maybe-all-stage1-target-libvtv: +maybe-clean-stage1-target-libvtv: + + +.PHONY: all-stage2-target-libvtv maybe-all-stage2-target-libvtv +.PHONY: clean-stage2-target-libvtv maybe-clean-stage2-target-libvtv +maybe-all-stage2-target-libvtv: +maybe-clean-stage2-target-libvtv: + + +.PHONY: all-stage3-target-libvtv maybe-all-stage3-target-libvtv +.PHONY: clean-stage3-target-libvtv maybe-clean-stage3-target-libvtv +maybe-all-stage3-target-libvtv: +maybe-clean-stage3-target-libvtv: + + +.PHONY: all-stage4-target-libvtv maybe-all-stage4-target-libvtv +.PHONY: clean-stage4-target-libvtv maybe-clean-stage4-target-libvtv +maybe-all-stage4-target-libvtv: +maybe-clean-stage4-target-libvtv: + + +.PHONY: all-stageprofile-target-libvtv maybe-all-stageprofile-target-libvtv +.PHONY: clean-stageprofile-target-libvtv maybe-clean-stageprofile-target-libvtv +maybe-all-stageprofile-target-libvtv: +maybe-clean-stageprofile-target-libvtv: + + +.PHONY: all-stagetrain-target-libvtv maybe-all-stagetrain-target-libvtv +.PHONY: clean-stagetrain-target-libvtv maybe-clean-stagetrain-target-libvtv +maybe-all-stagetrain-target-libvtv: +maybe-clean-stagetrain-target-libvtv: + + +.PHONY: all-stagefeedback-target-libvtv maybe-all-stagefeedback-target-libvtv +.PHONY: clean-stagefeedback-target-libvtv maybe-clean-stagefeedback-target-libvtv +maybe-all-stagefeedback-target-libvtv: +maybe-clean-stagefeedback-target-libvtv: + + +.PHONY: all-stageautoprofile-target-libvtv maybe-all-stageautoprofile-target-libvtv +.PHONY: clean-stageautoprofile-target-libvtv maybe-clean-stageautoprofile-target-libvtv +maybe-all-stageautoprofile-target-libvtv: +maybe-clean-stageautoprofile-target-libvtv: + + +.PHONY: all-stageautofeedback-target-libvtv maybe-all-stageautofeedback-target-libvtv +.PHONY: clean-stageautofeedback-target-libvtv maybe-clean-stageautofeedback-target-libvtv +maybe-all-stageautofeedback-target-libvtv: +maybe-clean-stageautofeedback-target-libvtv: + + + + + + +.PHONY: check-target-libvtv maybe-check-target-libvtv +maybe-check-target-libvtv: +maybe-check-target-libvtv: check-target-libvtv + +check-target-libvtv: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' check) + + +.PHONY: install-target-libvtv maybe-install-target-libvtv +maybe-install-target-libvtv: +maybe-install-target-libvtv: install-target-libvtv + +install-target-libvtv: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libvtv maybe-install-strip-target-libvtv +maybe-install-strip-target-libvtv: +maybe-install-strip-target-libvtv: install-strip-target-libvtv + +install-strip-target-libvtv: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libvtv info-target-libvtv +maybe-info-target-libvtv: +maybe-info-target-libvtv: info-target-libvtv + +info-target-libvtv: \ + configure-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libvtv dvi-target-libvtv +maybe-dvi-target-libvtv: +maybe-dvi-target-libvtv: dvi-target-libvtv + +dvi-target-libvtv: \ + configure-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libvtv pdf-target-libvtv +maybe-pdf-target-libvtv: +maybe-pdf-target-libvtv: pdf-target-libvtv + +pdf-target-libvtv: \ + configure-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libvtv html-target-libvtv +maybe-html-target-libvtv: +maybe-html-target-libvtv: html-target-libvtv + +html-target-libvtv: \ + configure-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libvtv TAGS-target-libvtv +maybe-TAGS-target-libvtv: +maybe-TAGS-target-libvtv: TAGS-target-libvtv + +TAGS-target-libvtv: \ + configure-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libvtv install-info-target-libvtv +maybe-install-info-target-libvtv: +maybe-install-info-target-libvtv: install-info-target-libvtv + +install-info-target-libvtv: \ + configure-target-libvtv \ + info-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libvtv install-dvi-target-libvtv +maybe-install-dvi-target-libvtv: +maybe-install-dvi-target-libvtv: install-dvi-target-libvtv + +install-dvi-target-libvtv: \ + configure-target-libvtv \ + dvi-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libvtv install-pdf-target-libvtv +maybe-install-pdf-target-libvtv: +maybe-install-pdf-target-libvtv: install-pdf-target-libvtv + +install-pdf-target-libvtv: \ + configure-target-libvtv \ + pdf-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libvtv install-html-target-libvtv +maybe-install-html-target-libvtv: +maybe-install-html-target-libvtv: install-html-target-libvtv + +install-html-target-libvtv: \ + configure-target-libvtv \ + html-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libvtv installcheck-target-libvtv +maybe-installcheck-target-libvtv: +maybe-installcheck-target-libvtv: installcheck-target-libvtv + +installcheck-target-libvtv: \ + configure-target-libvtv + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libvtv mostlyclean-target-libvtv +maybe-mostlyclean-target-libvtv: +maybe-mostlyclean-target-libvtv: mostlyclean-target-libvtv + +mostlyclean-target-libvtv: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libvtv clean-target-libvtv +maybe-clean-target-libvtv: +maybe-clean-target-libvtv: clean-target-libvtv + +clean-target-libvtv: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libvtv distclean-target-libvtv +maybe-distclean-target-libvtv: +maybe-distclean-target-libvtv: distclean-target-libvtv + +distclean-target-libvtv: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libvtv maintainer-clean-target-libvtv +maybe-maintainer-clean-target-libvtv: +maybe-maintainer-clean-target-libvtv: maintainer-clean-target-libvtv + +maintainer-clean-target-libvtv: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(RAW_CXX_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libvtv"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libvtv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libssp maybe-configure-target-libssp +maybe-configure-target-libssp: +configure-target-libssp: stage_current +maybe-configure-target-libssp: configure-target-libssp +configure-target-libssp: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libssp..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libssp; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libssp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libssp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libssp/multilib.tmp $(TARGET_SUBDIR)/libssp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libssp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libssp/Makefile; \ + mv $(TARGET_SUBDIR)/libssp/multilib.tmp $(TARGET_SUBDIR)/libssp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libssp/multilib.tmp $(TARGET_SUBDIR)/libssp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libssp/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libssp; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libssp; \ + cd "$(TARGET_SUBDIR)/libssp" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libssp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libssp; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-target-libssp maybe-all-target-libssp +maybe-all-target-libssp: +all-target-libssp: stage_current +TARGET-target-libssp=all +maybe-all-target-libssp: all-target-libssp +all-target-libssp: configure-target-libssp + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libssp)) + + + + + +.PHONY: check-target-libssp maybe-check-target-libssp +maybe-check-target-libssp: +maybe-check-target-libssp: check-target-libssp + +check-target-libssp: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libssp maybe-install-target-libssp +maybe-install-target-libssp: +maybe-install-target-libssp: install-target-libssp + +install-target-libssp: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libssp maybe-install-strip-target-libssp +maybe-install-strip-target-libssp: +maybe-install-strip-target-libssp: install-strip-target-libssp + +install-strip-target-libssp: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libssp info-target-libssp +maybe-info-target-libssp: +maybe-info-target-libssp: info-target-libssp + +info-target-libssp: \ + configure-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libssp dvi-target-libssp +maybe-dvi-target-libssp: +maybe-dvi-target-libssp: dvi-target-libssp + +dvi-target-libssp: \ + configure-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libssp pdf-target-libssp +maybe-pdf-target-libssp: +maybe-pdf-target-libssp: pdf-target-libssp + +pdf-target-libssp: \ + configure-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libssp html-target-libssp +maybe-html-target-libssp: +maybe-html-target-libssp: html-target-libssp + +html-target-libssp: \ + configure-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libssp TAGS-target-libssp +maybe-TAGS-target-libssp: +maybe-TAGS-target-libssp: TAGS-target-libssp + +TAGS-target-libssp: \ + configure-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libssp install-info-target-libssp +maybe-install-info-target-libssp: +maybe-install-info-target-libssp: install-info-target-libssp + +install-info-target-libssp: \ + configure-target-libssp \ + info-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libssp install-dvi-target-libssp +maybe-install-dvi-target-libssp: +maybe-install-dvi-target-libssp: install-dvi-target-libssp + +install-dvi-target-libssp: \ + configure-target-libssp \ + dvi-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libssp install-pdf-target-libssp +maybe-install-pdf-target-libssp: +maybe-install-pdf-target-libssp: install-pdf-target-libssp + +install-pdf-target-libssp: \ + configure-target-libssp \ + pdf-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libssp install-html-target-libssp +maybe-install-html-target-libssp: +maybe-install-html-target-libssp: install-html-target-libssp + +install-html-target-libssp: \ + configure-target-libssp \ + html-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libssp installcheck-target-libssp +maybe-installcheck-target-libssp: +maybe-installcheck-target-libssp: installcheck-target-libssp + +installcheck-target-libssp: \ + configure-target-libssp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libssp mostlyclean-target-libssp +maybe-mostlyclean-target-libssp: +maybe-mostlyclean-target-libssp: mostlyclean-target-libssp + +mostlyclean-target-libssp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libssp clean-target-libssp +maybe-clean-target-libssp: +maybe-clean-target-libssp: clean-target-libssp + +clean-target-libssp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libssp distclean-target-libssp +maybe-distclean-target-libssp: +maybe-distclean-target-libssp: distclean-target-libssp + +distclean-target-libssp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libssp maintainer-clean-target-libssp +maybe-maintainer-clean-target-libssp: +maybe-maintainer-clean-target-libssp: maintainer-clean-target-libssp + +maintainer-clean-target-libssp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libssp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libssp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-newlib maybe-configure-target-newlib +maybe-configure-target-newlib: +configure-target-newlib: stage_current + + + + + +.PHONY: all-target-newlib maybe-all-target-newlib +maybe-all-target-newlib: +all-target-newlib: stage_current + + + + + +.PHONY: check-target-newlib maybe-check-target-newlib +maybe-check-target-newlib: + +.PHONY: install-target-newlib maybe-install-target-newlib +maybe-install-target-newlib: + +.PHONY: install-strip-target-newlib maybe-install-strip-target-newlib +maybe-install-strip-target-newlib: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-newlib info-target-newlib +maybe-info-target-newlib: + +.PHONY: maybe-dvi-target-newlib dvi-target-newlib +maybe-dvi-target-newlib: + +.PHONY: maybe-pdf-target-newlib pdf-target-newlib +maybe-pdf-target-newlib: + +.PHONY: maybe-html-target-newlib html-target-newlib +maybe-html-target-newlib: + +.PHONY: maybe-TAGS-target-newlib TAGS-target-newlib +maybe-TAGS-target-newlib: + +.PHONY: maybe-install-info-target-newlib install-info-target-newlib +maybe-install-info-target-newlib: + +.PHONY: maybe-install-dvi-target-newlib install-dvi-target-newlib +maybe-install-dvi-target-newlib: + +.PHONY: maybe-install-pdf-target-newlib install-pdf-target-newlib +maybe-install-pdf-target-newlib: + +.PHONY: maybe-install-html-target-newlib install-html-target-newlib +maybe-install-html-target-newlib: + +.PHONY: maybe-installcheck-target-newlib installcheck-target-newlib +maybe-installcheck-target-newlib: + +.PHONY: maybe-mostlyclean-target-newlib mostlyclean-target-newlib +maybe-mostlyclean-target-newlib: + +.PHONY: maybe-clean-target-newlib clean-target-newlib +maybe-clean-target-newlib: + +.PHONY: maybe-distclean-target-newlib distclean-target-newlib +maybe-distclean-target-newlib: + +.PHONY: maybe-maintainer-clean-target-newlib maintainer-clean-target-newlib +maybe-maintainer-clean-target-newlib: + + + + + +.PHONY: configure-target-libgcc maybe-configure-target-libgcc +maybe-configure-target-libgcc: +configure-target-libgcc: stage_current +maybe-configure-target-libgcc: configure-target-libgcc +configure-target-libgcc: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libgcc..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libgcc; \ + cd "$(TARGET_SUBDIR)/libgcc" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-target-libgcc maybe-configure-stage1-target-libgcc +maybe-configure-stage1-target-libgcc: +maybe-configure-stage1-target-libgcc: configure-stage1-target-libgcc +configure-stage1-target-libgcc: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) + +.PHONY: configure-stage2-target-libgcc maybe-configure-stage2-target-libgcc +maybe-configure-stage2-target-libgcc: +maybe-configure-stage2-target-libgcc: configure-stage2-target-libgcc +configure-stage2-target-libgcc: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) + +.PHONY: configure-stage3-target-libgcc maybe-configure-stage3-target-libgcc +maybe-configure-stage3-target-libgcc: +maybe-configure-stage3-target-libgcc: configure-stage3-target-libgcc +configure-stage3-target-libgcc: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) + +.PHONY: configure-stage4-target-libgcc maybe-configure-stage4-target-libgcc +maybe-configure-stage4-target-libgcc: +maybe-configure-stage4-target-libgcc: configure-stage4-target-libgcc +configure-stage4-target-libgcc: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) + +.PHONY: configure-stageprofile-target-libgcc maybe-configure-stageprofile-target-libgcc +maybe-configure-stageprofile-target-libgcc: +maybe-configure-stageprofile-target-libgcc: configure-stageprofile-target-libgcc +configure-stageprofile-target-libgcc: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stagetrain-target-libgcc maybe-configure-stagetrain-target-libgcc +maybe-configure-stagetrain-target-libgcc: +maybe-configure-stagetrain-target-libgcc: configure-stagetrain-target-libgcc +configure-stagetrain-target-libgcc: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage train in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) + +.PHONY: configure-stagefeedback-target-libgcc maybe-configure-stagefeedback-target-libgcc +maybe-configure-stagefeedback-target-libgcc: +maybe-configure-stagefeedback-target-libgcc: configure-stagefeedback-target-libgcc +configure-stagefeedback-target-libgcc: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) + +.PHONY: configure-stageautoprofile-target-libgcc maybe-configure-stageautoprofile-target-libgcc +maybe-configure-stageautoprofile-target-libgcc: +maybe-configure-stageautoprofile-target-libgcc: configure-stageautoprofile-target-libgcc +configure-stageautoprofile-target-libgcc: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stageautofeedback-target-libgcc maybe-configure-stageautofeedback-target-libgcc +maybe-configure-stageautofeedback-target-libgcc: +maybe-configure-stageautofeedback-target-libgcc: configure-stageautofeedback-target-libgcc +configure-stageautofeedback-target-libgcc: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + echo "Checking multilib configuration for libgcc..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(TARGET_SUBDIR)/libgcc; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc; \ + cd $(TARGET_SUBDIR)/libgcc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgcc; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) + + + + + +.PHONY: all-target-libgcc maybe-all-target-libgcc +maybe-all-target-libgcc: +all-target-libgcc: stage_current +TARGET-target-libgcc=all +maybe-all-target-libgcc: all-target-libgcc +all-target-libgcc: configure-target-libgcc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libgcc)) + + + +.PHONY: all-stage1-target-libgcc maybe-all-stage1-target-libgcc +.PHONY: clean-stage1-target-libgcc maybe-clean-stage1-target-libgcc +maybe-all-stage1-target-libgcc: +maybe-clean-stage1-target-libgcc: +maybe-all-stage1-target-libgcc: all-stage1-target-libgcc +all-stage1: all-stage1-target-libgcc +TARGET-stage1-target-libgcc = $(TARGET-target-libgcc) +all-stage1-target-libgcc: configure-stage1-target-libgcc + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-target-libgcc) + +maybe-clean-stage1-target-libgcc: clean-stage1-target-libgcc +clean-stage1: clean-stage1-target-libgcc +clean-stage1-target-libgcc: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage1-libgcc/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ + clean + + +.PHONY: all-stage2-target-libgcc maybe-all-stage2-target-libgcc +.PHONY: clean-stage2-target-libgcc maybe-clean-stage2-target-libgcc +maybe-all-stage2-target-libgcc: +maybe-clean-stage2-target-libgcc: +maybe-all-stage2-target-libgcc: all-stage2-target-libgcc +all-stage2: all-stage2-target-libgcc +TARGET-stage2-target-libgcc = $(TARGET-target-libgcc) +all-stage2-target-libgcc: configure-stage2-target-libgcc + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-target-libgcc) + +maybe-clean-stage2-target-libgcc: clean-stage2-target-libgcc +clean-stage2: clean-stage2-target-libgcc +clean-stage2-target-libgcc: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage2-libgcc/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stage3-target-libgcc maybe-all-stage3-target-libgcc +.PHONY: clean-stage3-target-libgcc maybe-clean-stage3-target-libgcc +maybe-all-stage3-target-libgcc: +maybe-clean-stage3-target-libgcc: +maybe-all-stage3-target-libgcc: all-stage3-target-libgcc +all-stage3: all-stage3-target-libgcc +TARGET-stage3-target-libgcc = $(TARGET-target-libgcc) +all-stage3-target-libgcc: configure-stage3-target-libgcc + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-target-libgcc) + +maybe-clean-stage3-target-libgcc: clean-stage3-target-libgcc +clean-stage3: clean-stage3-target-libgcc +clean-stage3-target-libgcc: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage3-libgcc/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stage4-target-libgcc maybe-all-stage4-target-libgcc +.PHONY: clean-stage4-target-libgcc maybe-clean-stage4-target-libgcc +maybe-all-stage4-target-libgcc: +maybe-clean-stage4-target-libgcc: +maybe-all-stage4-target-libgcc: all-stage4-target-libgcc +all-stage4: all-stage4-target-libgcc +TARGET-stage4-target-libgcc = $(TARGET-target-libgcc) +all-stage4-target-libgcc: configure-stage4-target-libgcc + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-target-libgcc) + +maybe-clean-stage4-target-libgcc: clean-stage4-target-libgcc +clean-stage4: clean-stage4-target-libgcc +clean-stage4-target-libgcc: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage4-libgcc/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stageprofile-target-libgcc maybe-all-stageprofile-target-libgcc +.PHONY: clean-stageprofile-target-libgcc maybe-clean-stageprofile-target-libgcc +maybe-all-stageprofile-target-libgcc: +maybe-clean-stageprofile-target-libgcc: +maybe-all-stageprofile-target-libgcc: all-stageprofile-target-libgcc +all-stageprofile: all-stageprofile-target-libgcc +TARGET-stageprofile-target-libgcc = $(TARGET-target-libgcc) +all-stageprofile-target-libgcc: configure-stageprofile-target-libgcc + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-target-libgcc) + +maybe-clean-stageprofile-target-libgcc: clean-stageprofile-target-libgcc +clean-stageprofile: clean-stageprofile-target-libgcc +clean-stageprofile-target-libgcc: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageprofile-libgcc/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stagetrain-target-libgcc maybe-all-stagetrain-target-libgcc +.PHONY: clean-stagetrain-target-libgcc maybe-clean-stagetrain-target-libgcc +maybe-all-stagetrain-target-libgcc: +maybe-clean-stagetrain-target-libgcc: +maybe-all-stagetrain-target-libgcc: all-stagetrain-target-libgcc +all-stagetrain: all-stagetrain-target-libgcc +TARGET-stagetrain-target-libgcc = $(TARGET-target-libgcc) +all-stagetrain-target-libgcc: configure-stagetrain-target-libgcc + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-target-libgcc) + +maybe-clean-stagetrain-target-libgcc: clean-stagetrain-target-libgcc +clean-stagetrain: clean-stagetrain-target-libgcc +clean-stagetrain-target-libgcc: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stagetrain-libgcc/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stagefeedback-target-libgcc maybe-all-stagefeedback-target-libgcc +.PHONY: clean-stagefeedback-target-libgcc maybe-clean-stagefeedback-target-libgcc +maybe-all-stagefeedback-target-libgcc: +maybe-clean-stagefeedback-target-libgcc: +maybe-all-stagefeedback-target-libgcc: all-stagefeedback-target-libgcc +all-stagefeedback: all-stagefeedback-target-libgcc +TARGET-stagefeedback-target-libgcc = $(TARGET-target-libgcc) +all-stagefeedback-target-libgcc: configure-stagefeedback-target-libgcc + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-target-libgcc) + +maybe-clean-stagefeedback-target-libgcc: clean-stagefeedback-target-libgcc +clean-stagefeedback: clean-stagefeedback-target-libgcc +clean-stagefeedback-target-libgcc: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stagefeedback-libgcc/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stageautoprofile-target-libgcc maybe-all-stageautoprofile-target-libgcc +.PHONY: clean-stageautoprofile-target-libgcc maybe-clean-stageautoprofile-target-libgcc +maybe-all-stageautoprofile-target-libgcc: +maybe-clean-stageautoprofile-target-libgcc: +maybe-all-stageautoprofile-target-libgcc: all-stageautoprofile-target-libgcc +all-stageautoprofile: all-stageautoprofile-target-libgcc +TARGET-stageautoprofile-target-libgcc = $(TARGET-target-libgcc) +all-stageautoprofile-target-libgcc: configure-stageautoprofile-target-libgcc + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-target-libgcc) + +maybe-clean-stageautoprofile-target-libgcc: clean-stageautoprofile-target-libgcc +clean-stageautoprofile: clean-stageautoprofile-target-libgcc +clean-stageautoprofile-target-libgcc: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageautoprofile-libgcc/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stageautofeedback-target-libgcc maybe-all-stageautofeedback-target-libgcc +.PHONY: clean-stageautofeedback-target-libgcc maybe-clean-stageautofeedback-target-libgcc +maybe-all-stageautofeedback-target-libgcc: +maybe-clean-stageautofeedback-target-libgcc: +maybe-all-stageautofeedback-target-libgcc: all-stageautofeedback-target-libgcc +all-stageautofeedback: all-stageautofeedback-target-libgcc +TARGET-stageautofeedback-target-libgcc = $(TARGET-target-libgcc) +all-stageautofeedback-target-libgcc: configure-stageautofeedback-target-libgcc + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgcc && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-target-libgcc) + +maybe-clean-stageautofeedback-target-libgcc: clean-stageautofeedback-target-libgcc +clean-stageautofeedback: clean-stageautofeedback-target-libgcc +clean-stageautofeedback-target-libgcc: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageautofeedback-libgcc/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + + + + + +.PHONY: check-target-libgcc maybe-check-target-libgcc +maybe-check-target-libgcc: +maybe-check-target-libgcc: check-target-libgcc + +# Dummy target for uncheckable module. +check-target-libgcc: + + +.PHONY: install-target-libgcc maybe-install-target-libgcc +maybe-install-target-libgcc: +maybe-install-target-libgcc: install-target-libgcc + +install-target-libgcc: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libgcc maybe-install-strip-target-libgcc +maybe-install-strip-target-libgcc: +maybe-install-strip-target-libgcc: install-strip-target-libgcc + +install-strip-target-libgcc: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libgcc info-target-libgcc +maybe-info-target-libgcc: +maybe-info-target-libgcc: info-target-libgcc + +info-target-libgcc: \ + configure-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libgcc dvi-target-libgcc +maybe-dvi-target-libgcc: +maybe-dvi-target-libgcc: dvi-target-libgcc + +dvi-target-libgcc: \ + configure-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libgcc pdf-target-libgcc +maybe-pdf-target-libgcc: +maybe-pdf-target-libgcc: pdf-target-libgcc + +pdf-target-libgcc: \ + configure-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libgcc html-target-libgcc +maybe-html-target-libgcc: +maybe-html-target-libgcc: html-target-libgcc + +html-target-libgcc: \ + configure-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libgcc TAGS-target-libgcc +maybe-TAGS-target-libgcc: +maybe-TAGS-target-libgcc: TAGS-target-libgcc + +# libgcc doesn't support TAGS. +TAGS-target-libgcc: + + +.PHONY: maybe-install-info-target-libgcc install-info-target-libgcc +maybe-install-info-target-libgcc: +maybe-install-info-target-libgcc: install-info-target-libgcc + +install-info-target-libgcc: \ + configure-target-libgcc \ + info-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libgcc install-dvi-target-libgcc +maybe-install-dvi-target-libgcc: +maybe-install-dvi-target-libgcc: install-dvi-target-libgcc + +# libgcc doesn't support install-dvi. +install-dvi-target-libgcc: + + +.PHONY: maybe-install-pdf-target-libgcc install-pdf-target-libgcc +maybe-install-pdf-target-libgcc: +maybe-install-pdf-target-libgcc: install-pdf-target-libgcc + +install-pdf-target-libgcc: \ + configure-target-libgcc \ + pdf-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libgcc install-html-target-libgcc +maybe-install-html-target-libgcc: +maybe-install-html-target-libgcc: install-html-target-libgcc + +install-html-target-libgcc: \ + configure-target-libgcc \ + html-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libgcc installcheck-target-libgcc +maybe-installcheck-target-libgcc: +maybe-installcheck-target-libgcc: installcheck-target-libgcc + +installcheck-target-libgcc: \ + configure-target-libgcc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libgcc mostlyclean-target-libgcc +maybe-mostlyclean-target-libgcc: +maybe-mostlyclean-target-libgcc: mostlyclean-target-libgcc + +mostlyclean-target-libgcc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libgcc clean-target-libgcc +maybe-clean-target-libgcc: +maybe-clean-target-libgcc: clean-target-libgcc + +clean-target-libgcc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libgcc distclean-target-libgcc +maybe-distclean-target-libgcc: +maybe-distclean-target-libgcc: distclean-target-libgcc + +distclean-target-libgcc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libgcc maintainer-clean-target-libgcc +maybe-maintainer-clean-target-libgcc: +maybe-maintainer-clean-target-libgcc: maintainer-clean-target-libgcc + +maintainer-clean-target-libgcc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgcc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgcc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libbacktrace maybe-configure-target-libbacktrace +maybe-configure-target-libbacktrace: +configure-target-libbacktrace: stage_current +maybe-configure-target-libbacktrace: configure-target-libbacktrace +configure-target-libbacktrace: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libbacktrace..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \ + mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libbacktrace; \ + cd "$(TARGET_SUBDIR)/libbacktrace" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libbacktrace; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-target-libbacktrace maybe-configure-stage1-target-libbacktrace +maybe-configure-stage1-target-libbacktrace: + +.PHONY: configure-stage2-target-libbacktrace maybe-configure-stage2-target-libbacktrace +maybe-configure-stage2-target-libbacktrace: + +.PHONY: configure-stage3-target-libbacktrace maybe-configure-stage3-target-libbacktrace +maybe-configure-stage3-target-libbacktrace: + +.PHONY: configure-stage4-target-libbacktrace maybe-configure-stage4-target-libbacktrace +maybe-configure-stage4-target-libbacktrace: + +.PHONY: configure-stageprofile-target-libbacktrace maybe-configure-stageprofile-target-libbacktrace +maybe-configure-stageprofile-target-libbacktrace: + +.PHONY: configure-stagetrain-target-libbacktrace maybe-configure-stagetrain-target-libbacktrace +maybe-configure-stagetrain-target-libbacktrace: + +.PHONY: configure-stagefeedback-target-libbacktrace maybe-configure-stagefeedback-target-libbacktrace +maybe-configure-stagefeedback-target-libbacktrace: + +.PHONY: configure-stageautoprofile-target-libbacktrace maybe-configure-stageautoprofile-target-libbacktrace +maybe-configure-stageautoprofile-target-libbacktrace: + +.PHONY: configure-stageautofeedback-target-libbacktrace maybe-configure-stageautofeedback-target-libbacktrace +maybe-configure-stageautofeedback-target-libbacktrace: + + + + + +.PHONY: all-target-libbacktrace maybe-all-target-libbacktrace +maybe-all-target-libbacktrace: +all-target-libbacktrace: stage_current +TARGET-target-libbacktrace=all +maybe-all-target-libbacktrace: all-target-libbacktrace +all-target-libbacktrace: configure-target-libbacktrace + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libbacktrace)) + + + +.PHONY: all-stage1-target-libbacktrace maybe-all-stage1-target-libbacktrace +.PHONY: clean-stage1-target-libbacktrace maybe-clean-stage1-target-libbacktrace +maybe-all-stage1-target-libbacktrace: +maybe-clean-stage1-target-libbacktrace: + + +.PHONY: all-stage2-target-libbacktrace maybe-all-stage2-target-libbacktrace +.PHONY: clean-stage2-target-libbacktrace maybe-clean-stage2-target-libbacktrace +maybe-all-stage2-target-libbacktrace: +maybe-clean-stage2-target-libbacktrace: + + +.PHONY: all-stage3-target-libbacktrace maybe-all-stage3-target-libbacktrace +.PHONY: clean-stage3-target-libbacktrace maybe-clean-stage3-target-libbacktrace +maybe-all-stage3-target-libbacktrace: +maybe-clean-stage3-target-libbacktrace: + + +.PHONY: all-stage4-target-libbacktrace maybe-all-stage4-target-libbacktrace +.PHONY: clean-stage4-target-libbacktrace maybe-clean-stage4-target-libbacktrace +maybe-all-stage4-target-libbacktrace: +maybe-clean-stage4-target-libbacktrace: + + +.PHONY: all-stageprofile-target-libbacktrace maybe-all-stageprofile-target-libbacktrace +.PHONY: clean-stageprofile-target-libbacktrace maybe-clean-stageprofile-target-libbacktrace +maybe-all-stageprofile-target-libbacktrace: +maybe-clean-stageprofile-target-libbacktrace: + + +.PHONY: all-stagetrain-target-libbacktrace maybe-all-stagetrain-target-libbacktrace +.PHONY: clean-stagetrain-target-libbacktrace maybe-clean-stagetrain-target-libbacktrace +maybe-all-stagetrain-target-libbacktrace: +maybe-clean-stagetrain-target-libbacktrace: + + +.PHONY: all-stagefeedback-target-libbacktrace maybe-all-stagefeedback-target-libbacktrace +.PHONY: clean-stagefeedback-target-libbacktrace maybe-clean-stagefeedback-target-libbacktrace +maybe-all-stagefeedback-target-libbacktrace: +maybe-clean-stagefeedback-target-libbacktrace: + + +.PHONY: all-stageautoprofile-target-libbacktrace maybe-all-stageautoprofile-target-libbacktrace +.PHONY: clean-stageautoprofile-target-libbacktrace maybe-clean-stageautoprofile-target-libbacktrace +maybe-all-stageautoprofile-target-libbacktrace: +maybe-clean-stageautoprofile-target-libbacktrace: + + +.PHONY: all-stageautofeedback-target-libbacktrace maybe-all-stageautofeedback-target-libbacktrace +.PHONY: clean-stageautofeedback-target-libbacktrace maybe-clean-stageautofeedback-target-libbacktrace +maybe-all-stageautofeedback-target-libbacktrace: +maybe-clean-stageautofeedback-target-libbacktrace: + + + + + + +.PHONY: check-target-libbacktrace maybe-check-target-libbacktrace +maybe-check-target-libbacktrace: +maybe-check-target-libbacktrace: check-target-libbacktrace + +check-target-libbacktrace: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libbacktrace maybe-install-target-libbacktrace +maybe-install-target-libbacktrace: +maybe-install-target-libbacktrace: install-target-libbacktrace + +install-target-libbacktrace: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libbacktrace maybe-install-strip-target-libbacktrace +maybe-install-strip-target-libbacktrace: +maybe-install-strip-target-libbacktrace: install-strip-target-libbacktrace + +install-strip-target-libbacktrace: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libbacktrace info-target-libbacktrace +maybe-info-target-libbacktrace: +maybe-info-target-libbacktrace: info-target-libbacktrace + +info-target-libbacktrace: \ + configure-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libbacktrace dvi-target-libbacktrace +maybe-dvi-target-libbacktrace: +maybe-dvi-target-libbacktrace: dvi-target-libbacktrace + +dvi-target-libbacktrace: \ + configure-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libbacktrace pdf-target-libbacktrace +maybe-pdf-target-libbacktrace: +maybe-pdf-target-libbacktrace: pdf-target-libbacktrace + +pdf-target-libbacktrace: \ + configure-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libbacktrace html-target-libbacktrace +maybe-html-target-libbacktrace: +maybe-html-target-libbacktrace: html-target-libbacktrace + +html-target-libbacktrace: \ + configure-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libbacktrace TAGS-target-libbacktrace +maybe-TAGS-target-libbacktrace: +maybe-TAGS-target-libbacktrace: TAGS-target-libbacktrace + +TAGS-target-libbacktrace: \ + configure-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libbacktrace install-info-target-libbacktrace +maybe-install-info-target-libbacktrace: +maybe-install-info-target-libbacktrace: install-info-target-libbacktrace + +install-info-target-libbacktrace: \ + configure-target-libbacktrace \ + info-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libbacktrace install-dvi-target-libbacktrace +maybe-install-dvi-target-libbacktrace: +maybe-install-dvi-target-libbacktrace: install-dvi-target-libbacktrace + +install-dvi-target-libbacktrace: \ + configure-target-libbacktrace \ + dvi-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libbacktrace install-pdf-target-libbacktrace +maybe-install-pdf-target-libbacktrace: +maybe-install-pdf-target-libbacktrace: install-pdf-target-libbacktrace + +install-pdf-target-libbacktrace: \ + configure-target-libbacktrace \ + pdf-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libbacktrace install-html-target-libbacktrace +maybe-install-html-target-libbacktrace: +maybe-install-html-target-libbacktrace: install-html-target-libbacktrace + +install-html-target-libbacktrace: \ + configure-target-libbacktrace \ + html-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libbacktrace installcheck-target-libbacktrace +maybe-installcheck-target-libbacktrace: +maybe-installcheck-target-libbacktrace: installcheck-target-libbacktrace + +installcheck-target-libbacktrace: \ + configure-target-libbacktrace + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libbacktrace mostlyclean-target-libbacktrace +maybe-mostlyclean-target-libbacktrace: +maybe-mostlyclean-target-libbacktrace: mostlyclean-target-libbacktrace + +mostlyclean-target-libbacktrace: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libbacktrace clean-target-libbacktrace +maybe-clean-target-libbacktrace: +maybe-clean-target-libbacktrace: clean-target-libbacktrace + +clean-target-libbacktrace: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libbacktrace distclean-target-libbacktrace +maybe-distclean-target-libbacktrace: +maybe-distclean-target-libbacktrace: distclean-target-libbacktrace + +distclean-target-libbacktrace: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libbacktrace maintainer-clean-target-libbacktrace +maybe-maintainer-clean-target-libbacktrace: +maybe-maintainer-clean-target-libbacktrace: maintainer-clean-target-libbacktrace + +maintainer-clean-target-libbacktrace: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libbacktrace"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libbacktrace && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libquadmath maybe-configure-target-libquadmath +maybe-configure-target-libquadmath: +configure-target-libquadmath: stage_current +maybe-configure-target-libquadmath: configure-target-libquadmath +configure-target-libquadmath: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libquadmath..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libquadmath; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libquadmath/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libquadmath/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libquadmath/multilib.tmp $(TARGET_SUBDIR)/libquadmath/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libquadmath/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libquadmath/Makefile; \ + mv $(TARGET_SUBDIR)/libquadmath/multilib.tmp $(TARGET_SUBDIR)/libquadmath/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libquadmath/multilib.tmp $(TARGET_SUBDIR)/libquadmath/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libquadmath/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libquadmath; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libquadmath; \ + cd "$(TARGET_SUBDIR)/libquadmath" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libquadmath/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libquadmath; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-target-libquadmath maybe-all-target-libquadmath +maybe-all-target-libquadmath: +all-target-libquadmath: stage_current +TARGET-target-libquadmath=all +maybe-all-target-libquadmath: all-target-libquadmath +all-target-libquadmath: configure-target-libquadmath + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libquadmath)) + + + + + +.PHONY: check-target-libquadmath maybe-check-target-libquadmath +maybe-check-target-libquadmath: +maybe-check-target-libquadmath: check-target-libquadmath + +check-target-libquadmath: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libquadmath maybe-install-target-libquadmath +maybe-install-target-libquadmath: +maybe-install-target-libquadmath: install-target-libquadmath + +install-target-libquadmath: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libquadmath maybe-install-strip-target-libquadmath +maybe-install-strip-target-libquadmath: +maybe-install-strip-target-libquadmath: install-strip-target-libquadmath + +install-strip-target-libquadmath: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libquadmath info-target-libquadmath +maybe-info-target-libquadmath: +maybe-info-target-libquadmath: info-target-libquadmath + +info-target-libquadmath: \ + configure-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libquadmath dvi-target-libquadmath +maybe-dvi-target-libquadmath: +maybe-dvi-target-libquadmath: dvi-target-libquadmath + +dvi-target-libquadmath: \ + configure-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libquadmath pdf-target-libquadmath +maybe-pdf-target-libquadmath: +maybe-pdf-target-libquadmath: pdf-target-libquadmath + +pdf-target-libquadmath: \ + configure-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libquadmath html-target-libquadmath +maybe-html-target-libquadmath: +maybe-html-target-libquadmath: html-target-libquadmath + +html-target-libquadmath: \ + configure-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libquadmath TAGS-target-libquadmath +maybe-TAGS-target-libquadmath: +maybe-TAGS-target-libquadmath: TAGS-target-libquadmath + +TAGS-target-libquadmath: \ + configure-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libquadmath install-info-target-libquadmath +maybe-install-info-target-libquadmath: +maybe-install-info-target-libquadmath: install-info-target-libquadmath + +install-info-target-libquadmath: \ + configure-target-libquadmath \ + info-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libquadmath install-dvi-target-libquadmath +maybe-install-dvi-target-libquadmath: +maybe-install-dvi-target-libquadmath: install-dvi-target-libquadmath + +install-dvi-target-libquadmath: \ + configure-target-libquadmath \ + dvi-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libquadmath install-pdf-target-libquadmath +maybe-install-pdf-target-libquadmath: +maybe-install-pdf-target-libquadmath: install-pdf-target-libquadmath + +install-pdf-target-libquadmath: \ + configure-target-libquadmath \ + pdf-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libquadmath install-html-target-libquadmath +maybe-install-html-target-libquadmath: +maybe-install-html-target-libquadmath: install-html-target-libquadmath + +install-html-target-libquadmath: \ + configure-target-libquadmath \ + html-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libquadmath installcheck-target-libquadmath +maybe-installcheck-target-libquadmath: +maybe-installcheck-target-libquadmath: installcheck-target-libquadmath + +installcheck-target-libquadmath: \ + configure-target-libquadmath + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libquadmath mostlyclean-target-libquadmath +maybe-mostlyclean-target-libquadmath: +maybe-mostlyclean-target-libquadmath: mostlyclean-target-libquadmath + +mostlyclean-target-libquadmath: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libquadmath clean-target-libquadmath +maybe-clean-target-libquadmath: +maybe-clean-target-libquadmath: clean-target-libquadmath + +clean-target-libquadmath: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libquadmath distclean-target-libquadmath +maybe-distclean-target-libquadmath: +maybe-distclean-target-libquadmath: distclean-target-libquadmath + +distclean-target-libquadmath: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libquadmath maintainer-clean-target-libquadmath +maybe-maintainer-clean-target-libquadmath: +maybe-maintainer-clean-target-libquadmath: maintainer-clean-target-libquadmath + +maintainer-clean-target-libquadmath: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libquadmath"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libquadmath && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libgfortran maybe-configure-target-libgfortran +maybe-configure-target-libgfortran: +configure-target-libgfortran: stage_current +maybe-configure-target-libgfortran: configure-target-libgfortran +configure-target-libgfortran: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libgfortran..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgfortran; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgfortran/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgfortran/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgfortran/multilib.tmp $(TARGET_SUBDIR)/libgfortran/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgfortran/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgfortran/Makefile; \ + mv $(TARGET_SUBDIR)/libgfortran/multilib.tmp $(TARGET_SUBDIR)/libgfortran/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgfortran/multilib.tmp $(TARGET_SUBDIR)/libgfortran/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgfortran/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgfortran; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libgfortran; \ + cd "$(TARGET_SUBDIR)/libgfortran" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgfortran/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgfortran; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-target-libgfortran maybe-all-target-libgfortran +maybe-all-target-libgfortran: +all-target-libgfortran: stage_current +TARGET-target-libgfortran=all +maybe-all-target-libgfortran: all-target-libgfortran +all-target-libgfortran: configure-target-libgfortran + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libgfortran)) + + + + + +.PHONY: check-target-libgfortran maybe-check-target-libgfortran +maybe-check-target-libgfortran: +maybe-check-target-libgfortran: check-target-libgfortran + +check-target-libgfortran: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libgfortran maybe-install-target-libgfortran +maybe-install-target-libgfortran: +maybe-install-target-libgfortran: install-target-libgfortran + +install-target-libgfortran: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libgfortran maybe-install-strip-target-libgfortran +maybe-install-strip-target-libgfortran: +maybe-install-strip-target-libgfortran: install-strip-target-libgfortran + +install-strip-target-libgfortran: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libgfortran info-target-libgfortran +maybe-info-target-libgfortran: +maybe-info-target-libgfortran: info-target-libgfortran + +info-target-libgfortran: \ + configure-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libgfortran dvi-target-libgfortran +maybe-dvi-target-libgfortran: +maybe-dvi-target-libgfortran: dvi-target-libgfortran + +dvi-target-libgfortran: \ + configure-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libgfortran pdf-target-libgfortran +maybe-pdf-target-libgfortran: +maybe-pdf-target-libgfortran: pdf-target-libgfortran + +pdf-target-libgfortran: \ + configure-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libgfortran html-target-libgfortran +maybe-html-target-libgfortran: +maybe-html-target-libgfortran: html-target-libgfortran + +html-target-libgfortran: \ + configure-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libgfortran TAGS-target-libgfortran +maybe-TAGS-target-libgfortran: +maybe-TAGS-target-libgfortran: TAGS-target-libgfortran + +TAGS-target-libgfortran: \ + configure-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libgfortran install-info-target-libgfortran +maybe-install-info-target-libgfortran: +maybe-install-info-target-libgfortran: install-info-target-libgfortran + +install-info-target-libgfortran: \ + configure-target-libgfortran \ + info-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libgfortran install-dvi-target-libgfortran +maybe-install-dvi-target-libgfortran: +maybe-install-dvi-target-libgfortran: install-dvi-target-libgfortran + +install-dvi-target-libgfortran: \ + configure-target-libgfortran \ + dvi-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libgfortran install-pdf-target-libgfortran +maybe-install-pdf-target-libgfortran: +maybe-install-pdf-target-libgfortran: install-pdf-target-libgfortran + +install-pdf-target-libgfortran: \ + configure-target-libgfortran \ + pdf-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libgfortran install-html-target-libgfortran +maybe-install-html-target-libgfortran: +maybe-install-html-target-libgfortran: install-html-target-libgfortran + +install-html-target-libgfortran: \ + configure-target-libgfortran \ + html-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libgfortran installcheck-target-libgfortran +maybe-installcheck-target-libgfortran: +maybe-installcheck-target-libgfortran: installcheck-target-libgfortran + +installcheck-target-libgfortran: \ + configure-target-libgfortran + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libgfortran mostlyclean-target-libgfortran +maybe-mostlyclean-target-libgfortran: +maybe-mostlyclean-target-libgfortran: mostlyclean-target-libgfortran + +mostlyclean-target-libgfortran: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libgfortran clean-target-libgfortran +maybe-clean-target-libgfortran: +maybe-clean-target-libgfortran: clean-target-libgfortran + +clean-target-libgfortran: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libgfortran distclean-target-libgfortran +maybe-distclean-target-libgfortran: +maybe-distclean-target-libgfortran: distclean-target-libgfortran + +distclean-target-libgfortran: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libgfortran maintainer-clean-target-libgfortran +maybe-maintainer-clean-target-libgfortran: +maybe-maintainer-clean-target-libgfortran: maintainer-clean-target-libgfortran + +maintainer-clean-target-libgfortran: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgfortran"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgfortran && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libobjc maybe-configure-target-libobjc +maybe-configure-target-libobjc: +configure-target-libobjc: stage_current +maybe-configure-target-libobjc: configure-target-libobjc +configure-target-libobjc: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libobjc..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libobjc; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libobjc/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libobjc/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libobjc/multilib.tmp $(TARGET_SUBDIR)/libobjc/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libobjc/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libobjc/Makefile; \ + mv $(TARGET_SUBDIR)/libobjc/multilib.tmp $(TARGET_SUBDIR)/libobjc/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libobjc/multilib.tmp $(TARGET_SUBDIR)/libobjc/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libobjc/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libobjc; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libobjc; \ + cd "$(TARGET_SUBDIR)/libobjc" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libobjc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libobjc; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-target-libobjc maybe-all-target-libobjc +maybe-all-target-libobjc: +all-target-libobjc: stage_current +TARGET-target-libobjc=all +maybe-all-target-libobjc: all-target-libobjc +all-target-libobjc: configure-target-libobjc + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libobjc)) + + + + + +.PHONY: check-target-libobjc maybe-check-target-libobjc +maybe-check-target-libobjc: +maybe-check-target-libobjc: check-target-libobjc + +check-target-libobjc: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libobjc maybe-install-target-libobjc +maybe-install-target-libobjc: +maybe-install-target-libobjc: install-target-libobjc + +install-target-libobjc: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libobjc maybe-install-strip-target-libobjc +maybe-install-strip-target-libobjc: +maybe-install-strip-target-libobjc: install-strip-target-libobjc + +install-strip-target-libobjc: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libobjc info-target-libobjc +maybe-info-target-libobjc: +maybe-info-target-libobjc: info-target-libobjc + +info-target-libobjc: \ + configure-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libobjc dvi-target-libobjc +maybe-dvi-target-libobjc: +maybe-dvi-target-libobjc: dvi-target-libobjc + +dvi-target-libobjc: \ + configure-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libobjc pdf-target-libobjc +maybe-pdf-target-libobjc: +maybe-pdf-target-libobjc: pdf-target-libobjc + +pdf-target-libobjc: \ + configure-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libobjc html-target-libobjc +maybe-html-target-libobjc: +maybe-html-target-libobjc: html-target-libobjc + +html-target-libobjc: \ + configure-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libobjc TAGS-target-libobjc +maybe-TAGS-target-libobjc: +maybe-TAGS-target-libobjc: TAGS-target-libobjc + +# libobjc doesn't support TAGS. +TAGS-target-libobjc: + + +.PHONY: maybe-install-info-target-libobjc install-info-target-libobjc +maybe-install-info-target-libobjc: +maybe-install-info-target-libobjc: install-info-target-libobjc + +install-info-target-libobjc: \ + configure-target-libobjc \ + info-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libobjc install-dvi-target-libobjc +maybe-install-dvi-target-libobjc: +maybe-install-dvi-target-libobjc: install-dvi-target-libobjc + +# libobjc doesn't support install-dvi. +install-dvi-target-libobjc: + + +.PHONY: maybe-install-pdf-target-libobjc install-pdf-target-libobjc +maybe-install-pdf-target-libobjc: +maybe-install-pdf-target-libobjc: install-pdf-target-libobjc + +install-pdf-target-libobjc: \ + configure-target-libobjc \ + pdf-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libobjc install-html-target-libobjc +maybe-install-html-target-libobjc: +maybe-install-html-target-libobjc: install-html-target-libobjc + +install-html-target-libobjc: \ + configure-target-libobjc \ + html-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libobjc installcheck-target-libobjc +maybe-installcheck-target-libobjc: +maybe-installcheck-target-libobjc: installcheck-target-libobjc + +installcheck-target-libobjc: \ + configure-target-libobjc + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libobjc mostlyclean-target-libobjc +maybe-mostlyclean-target-libobjc: +maybe-mostlyclean-target-libobjc: mostlyclean-target-libobjc + +mostlyclean-target-libobjc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libobjc clean-target-libobjc +maybe-clean-target-libobjc: +maybe-clean-target-libobjc: clean-target-libobjc + +clean-target-libobjc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libobjc distclean-target-libobjc +maybe-distclean-target-libobjc: +maybe-distclean-target-libobjc: distclean-target-libobjc + +distclean-target-libobjc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libobjc maintainer-clean-target-libobjc +maybe-maintainer-clean-target-libobjc: +maybe-maintainer-clean-target-libobjc: maintainer-clean-target-libobjc + +maintainer-clean-target-libobjc: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libobjc"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libobjc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libgo maybe-configure-target-libgo +maybe-configure-target-libgo: +configure-target-libgo: stage_current + + + + + +.PHONY: all-target-libgo maybe-all-target-libgo +maybe-all-target-libgo: +all-target-libgo: stage_current + + + + + +.PHONY: check-target-libgo maybe-check-target-libgo +maybe-check-target-libgo: + +.PHONY: install-target-libgo maybe-install-target-libgo +maybe-install-target-libgo: + +.PHONY: install-strip-target-libgo maybe-install-strip-target-libgo +maybe-install-strip-target-libgo: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libgo info-target-libgo +maybe-info-target-libgo: + +.PHONY: maybe-dvi-target-libgo dvi-target-libgo +maybe-dvi-target-libgo: + +.PHONY: maybe-pdf-target-libgo pdf-target-libgo +maybe-pdf-target-libgo: + +.PHONY: maybe-html-target-libgo html-target-libgo +maybe-html-target-libgo: + +.PHONY: maybe-TAGS-target-libgo TAGS-target-libgo +maybe-TAGS-target-libgo: + +.PHONY: maybe-install-info-target-libgo install-info-target-libgo +maybe-install-info-target-libgo: + +.PHONY: maybe-install-dvi-target-libgo install-dvi-target-libgo +maybe-install-dvi-target-libgo: + +.PHONY: maybe-install-pdf-target-libgo install-pdf-target-libgo +maybe-install-pdf-target-libgo: + +.PHONY: maybe-install-html-target-libgo install-html-target-libgo +maybe-install-html-target-libgo: + +.PHONY: maybe-installcheck-target-libgo installcheck-target-libgo +maybe-installcheck-target-libgo: + +.PHONY: maybe-mostlyclean-target-libgo mostlyclean-target-libgo +maybe-mostlyclean-target-libgo: + +.PHONY: maybe-clean-target-libgo clean-target-libgo +maybe-clean-target-libgo: + +.PHONY: maybe-distclean-target-libgo distclean-target-libgo +maybe-distclean-target-libgo: + +.PHONY: maybe-maintainer-clean-target-libgo maintainer-clean-target-libgo +maybe-maintainer-clean-target-libgo: + + + + + +.PHONY: configure-target-libphobos maybe-configure-target-libphobos +maybe-configure-target-libphobos: +configure-target-libphobos: stage_current + + + +.PHONY: configure-stage1-target-libphobos maybe-configure-stage1-target-libphobos +maybe-configure-stage1-target-libphobos: + +.PHONY: configure-stage2-target-libphobos maybe-configure-stage2-target-libphobos +maybe-configure-stage2-target-libphobos: + +.PHONY: configure-stage3-target-libphobos maybe-configure-stage3-target-libphobos +maybe-configure-stage3-target-libphobos: + +.PHONY: configure-stage4-target-libphobos maybe-configure-stage4-target-libphobos +maybe-configure-stage4-target-libphobos: + +.PHONY: configure-stageprofile-target-libphobos maybe-configure-stageprofile-target-libphobos +maybe-configure-stageprofile-target-libphobos: + +.PHONY: configure-stagetrain-target-libphobos maybe-configure-stagetrain-target-libphobos +maybe-configure-stagetrain-target-libphobos: + +.PHONY: configure-stagefeedback-target-libphobos maybe-configure-stagefeedback-target-libphobos +maybe-configure-stagefeedback-target-libphobos: + +.PHONY: configure-stageautoprofile-target-libphobos maybe-configure-stageautoprofile-target-libphobos +maybe-configure-stageautoprofile-target-libphobos: + +.PHONY: configure-stageautofeedback-target-libphobos maybe-configure-stageautofeedback-target-libphobos +maybe-configure-stageautofeedback-target-libphobos: + + + + + +.PHONY: all-target-libphobos maybe-all-target-libphobos +maybe-all-target-libphobos: +all-target-libphobos: stage_current + + + +.PHONY: all-stage1-target-libphobos maybe-all-stage1-target-libphobos +.PHONY: clean-stage1-target-libphobos maybe-clean-stage1-target-libphobos +maybe-all-stage1-target-libphobos: +maybe-clean-stage1-target-libphobos: + + +.PHONY: all-stage2-target-libphobos maybe-all-stage2-target-libphobos +.PHONY: clean-stage2-target-libphobos maybe-clean-stage2-target-libphobos +maybe-all-stage2-target-libphobos: +maybe-clean-stage2-target-libphobos: + + +.PHONY: all-stage3-target-libphobos maybe-all-stage3-target-libphobos +.PHONY: clean-stage3-target-libphobos maybe-clean-stage3-target-libphobos +maybe-all-stage3-target-libphobos: +maybe-clean-stage3-target-libphobos: + + +.PHONY: all-stage4-target-libphobos maybe-all-stage4-target-libphobos +.PHONY: clean-stage4-target-libphobos maybe-clean-stage4-target-libphobos +maybe-all-stage4-target-libphobos: +maybe-clean-stage4-target-libphobos: + + +.PHONY: all-stageprofile-target-libphobos maybe-all-stageprofile-target-libphobos +.PHONY: clean-stageprofile-target-libphobos maybe-clean-stageprofile-target-libphobos +maybe-all-stageprofile-target-libphobos: +maybe-clean-stageprofile-target-libphobos: + + +.PHONY: all-stagetrain-target-libphobos maybe-all-stagetrain-target-libphobos +.PHONY: clean-stagetrain-target-libphobos maybe-clean-stagetrain-target-libphobos +maybe-all-stagetrain-target-libphobos: +maybe-clean-stagetrain-target-libphobos: + + +.PHONY: all-stagefeedback-target-libphobos maybe-all-stagefeedback-target-libphobos +.PHONY: clean-stagefeedback-target-libphobos maybe-clean-stagefeedback-target-libphobos +maybe-all-stagefeedback-target-libphobos: +maybe-clean-stagefeedback-target-libphobos: + + +.PHONY: all-stageautoprofile-target-libphobos maybe-all-stageautoprofile-target-libphobos +.PHONY: clean-stageautoprofile-target-libphobos maybe-clean-stageautoprofile-target-libphobos +maybe-all-stageautoprofile-target-libphobos: +maybe-clean-stageautoprofile-target-libphobos: + + +.PHONY: all-stageautofeedback-target-libphobos maybe-all-stageautofeedback-target-libphobos +.PHONY: clean-stageautofeedback-target-libphobos maybe-clean-stageautofeedback-target-libphobos +maybe-all-stageautofeedback-target-libphobos: +maybe-clean-stageautofeedback-target-libphobos: + + + + + + +.PHONY: check-target-libphobos maybe-check-target-libphobos +maybe-check-target-libphobos: + +.PHONY: install-target-libphobos maybe-install-target-libphobos +maybe-install-target-libphobos: + +.PHONY: install-strip-target-libphobos maybe-install-strip-target-libphobos +maybe-install-strip-target-libphobos: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libphobos info-target-libphobos +maybe-info-target-libphobos: + +.PHONY: maybe-dvi-target-libphobos dvi-target-libphobos +maybe-dvi-target-libphobos: + +.PHONY: maybe-pdf-target-libphobos pdf-target-libphobos +maybe-pdf-target-libphobos: + +.PHONY: maybe-html-target-libphobos html-target-libphobos +maybe-html-target-libphobos: + +.PHONY: maybe-TAGS-target-libphobos TAGS-target-libphobos +maybe-TAGS-target-libphobos: + +.PHONY: maybe-install-info-target-libphobos install-info-target-libphobos +maybe-install-info-target-libphobos: + +.PHONY: maybe-install-dvi-target-libphobos install-dvi-target-libphobos +maybe-install-dvi-target-libphobos: + +.PHONY: maybe-install-pdf-target-libphobos install-pdf-target-libphobos +maybe-install-pdf-target-libphobos: + +.PHONY: maybe-install-html-target-libphobos install-html-target-libphobos +maybe-install-html-target-libphobos: + +.PHONY: maybe-installcheck-target-libphobos installcheck-target-libphobos +maybe-installcheck-target-libphobos: + +.PHONY: maybe-mostlyclean-target-libphobos mostlyclean-target-libphobos +maybe-mostlyclean-target-libphobos: + +.PHONY: maybe-clean-target-libphobos clean-target-libphobos +maybe-clean-target-libphobos: + +.PHONY: maybe-distclean-target-libphobos distclean-target-libphobos +maybe-distclean-target-libphobos: + +.PHONY: maybe-maintainer-clean-target-libphobos maintainer-clean-target-libphobos +maybe-maintainer-clean-target-libphobos: + + + + + +.PHONY: configure-target-libtermcap maybe-configure-target-libtermcap +maybe-configure-target-libtermcap: +configure-target-libtermcap: stage_current + + + + + +.PHONY: all-target-libtermcap maybe-all-target-libtermcap +maybe-all-target-libtermcap: +all-target-libtermcap: stage_current + + + + + +.PHONY: check-target-libtermcap maybe-check-target-libtermcap +maybe-check-target-libtermcap: + +.PHONY: install-target-libtermcap maybe-install-target-libtermcap +maybe-install-target-libtermcap: + +.PHONY: install-strip-target-libtermcap maybe-install-strip-target-libtermcap +maybe-install-strip-target-libtermcap: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libtermcap info-target-libtermcap +maybe-info-target-libtermcap: + +.PHONY: maybe-dvi-target-libtermcap dvi-target-libtermcap +maybe-dvi-target-libtermcap: + +.PHONY: maybe-pdf-target-libtermcap pdf-target-libtermcap +maybe-pdf-target-libtermcap: + +.PHONY: maybe-html-target-libtermcap html-target-libtermcap +maybe-html-target-libtermcap: + +.PHONY: maybe-TAGS-target-libtermcap TAGS-target-libtermcap +maybe-TAGS-target-libtermcap: + +.PHONY: maybe-install-info-target-libtermcap install-info-target-libtermcap +maybe-install-info-target-libtermcap: + +.PHONY: maybe-install-dvi-target-libtermcap install-dvi-target-libtermcap +maybe-install-dvi-target-libtermcap: + +.PHONY: maybe-install-pdf-target-libtermcap install-pdf-target-libtermcap +maybe-install-pdf-target-libtermcap: + +.PHONY: maybe-install-html-target-libtermcap install-html-target-libtermcap +maybe-install-html-target-libtermcap: + +.PHONY: maybe-installcheck-target-libtermcap installcheck-target-libtermcap +maybe-installcheck-target-libtermcap: + +.PHONY: maybe-mostlyclean-target-libtermcap mostlyclean-target-libtermcap +maybe-mostlyclean-target-libtermcap: + +.PHONY: maybe-clean-target-libtermcap clean-target-libtermcap +maybe-clean-target-libtermcap: + +.PHONY: maybe-distclean-target-libtermcap distclean-target-libtermcap +maybe-distclean-target-libtermcap: + +.PHONY: maybe-maintainer-clean-target-libtermcap maintainer-clean-target-libtermcap +maybe-maintainer-clean-target-libtermcap: + + + + + +.PHONY: configure-target-winsup maybe-configure-target-winsup +maybe-configure-target-winsup: +configure-target-winsup: stage_current + + + + + +.PHONY: all-target-winsup maybe-all-target-winsup +maybe-all-target-winsup: +all-target-winsup: stage_current + + + + + +.PHONY: check-target-winsup maybe-check-target-winsup +maybe-check-target-winsup: + +.PHONY: install-target-winsup maybe-install-target-winsup +maybe-install-target-winsup: + +.PHONY: install-strip-target-winsup maybe-install-strip-target-winsup +maybe-install-strip-target-winsup: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-winsup info-target-winsup +maybe-info-target-winsup: + +.PHONY: maybe-dvi-target-winsup dvi-target-winsup +maybe-dvi-target-winsup: + +.PHONY: maybe-pdf-target-winsup pdf-target-winsup +maybe-pdf-target-winsup: + +.PHONY: maybe-html-target-winsup html-target-winsup +maybe-html-target-winsup: + +.PHONY: maybe-TAGS-target-winsup TAGS-target-winsup +maybe-TAGS-target-winsup: + +.PHONY: maybe-install-info-target-winsup install-info-target-winsup +maybe-install-info-target-winsup: + +.PHONY: maybe-install-dvi-target-winsup install-dvi-target-winsup +maybe-install-dvi-target-winsup: + +.PHONY: maybe-install-pdf-target-winsup install-pdf-target-winsup +maybe-install-pdf-target-winsup: + +.PHONY: maybe-install-html-target-winsup install-html-target-winsup +maybe-install-html-target-winsup: + +.PHONY: maybe-installcheck-target-winsup installcheck-target-winsup +maybe-installcheck-target-winsup: + +.PHONY: maybe-mostlyclean-target-winsup mostlyclean-target-winsup +maybe-mostlyclean-target-winsup: + +.PHONY: maybe-clean-target-winsup clean-target-winsup +maybe-clean-target-winsup: + +.PHONY: maybe-distclean-target-winsup distclean-target-winsup +maybe-distclean-target-winsup: + +.PHONY: maybe-maintainer-clean-target-winsup maintainer-clean-target-winsup +maybe-maintainer-clean-target-winsup: + + + + + +.PHONY: configure-target-libgloss maybe-configure-target-libgloss +maybe-configure-target-libgloss: +configure-target-libgloss: stage_current + + + + + +.PHONY: all-target-libgloss maybe-all-target-libgloss +maybe-all-target-libgloss: +all-target-libgloss: stage_current + + + + + +.PHONY: check-target-libgloss maybe-check-target-libgloss +maybe-check-target-libgloss: + +.PHONY: install-target-libgloss maybe-install-target-libgloss +maybe-install-target-libgloss: + +.PHONY: install-strip-target-libgloss maybe-install-strip-target-libgloss +maybe-install-strip-target-libgloss: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libgloss info-target-libgloss +maybe-info-target-libgloss: + +.PHONY: maybe-dvi-target-libgloss dvi-target-libgloss +maybe-dvi-target-libgloss: + +.PHONY: maybe-pdf-target-libgloss pdf-target-libgloss +maybe-pdf-target-libgloss: + +.PHONY: maybe-html-target-libgloss html-target-libgloss +maybe-html-target-libgloss: + +.PHONY: maybe-TAGS-target-libgloss TAGS-target-libgloss +maybe-TAGS-target-libgloss: + +.PHONY: maybe-install-info-target-libgloss install-info-target-libgloss +maybe-install-info-target-libgloss: + +.PHONY: maybe-install-dvi-target-libgloss install-dvi-target-libgloss +maybe-install-dvi-target-libgloss: + +.PHONY: maybe-install-pdf-target-libgloss install-pdf-target-libgloss +maybe-install-pdf-target-libgloss: + +.PHONY: maybe-install-html-target-libgloss install-html-target-libgloss +maybe-install-html-target-libgloss: + +.PHONY: maybe-installcheck-target-libgloss installcheck-target-libgloss +maybe-installcheck-target-libgloss: + +.PHONY: maybe-mostlyclean-target-libgloss mostlyclean-target-libgloss +maybe-mostlyclean-target-libgloss: + +.PHONY: maybe-clean-target-libgloss clean-target-libgloss +maybe-clean-target-libgloss: + +.PHONY: maybe-distclean-target-libgloss distclean-target-libgloss +maybe-distclean-target-libgloss: + +.PHONY: maybe-maintainer-clean-target-libgloss maintainer-clean-target-libgloss +maybe-maintainer-clean-target-libgloss: + + + + + +.PHONY: configure-target-libffi maybe-configure-target-libffi +maybe-configure-target-libffi: +configure-target-libffi: stage_current + + + + + +.PHONY: all-target-libffi maybe-all-target-libffi +maybe-all-target-libffi: +all-target-libffi: stage_current + + + + + +.PHONY: check-target-libffi maybe-check-target-libffi +maybe-check-target-libffi: + +.PHONY: install-target-libffi maybe-install-target-libffi +maybe-install-target-libffi: + +.PHONY: install-strip-target-libffi maybe-install-strip-target-libffi +maybe-install-strip-target-libffi: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libffi info-target-libffi +maybe-info-target-libffi: + +.PHONY: maybe-dvi-target-libffi dvi-target-libffi +maybe-dvi-target-libffi: + +.PHONY: maybe-pdf-target-libffi pdf-target-libffi +maybe-pdf-target-libffi: + +.PHONY: maybe-html-target-libffi html-target-libffi +maybe-html-target-libffi: + +.PHONY: maybe-TAGS-target-libffi TAGS-target-libffi +maybe-TAGS-target-libffi: + +.PHONY: maybe-install-info-target-libffi install-info-target-libffi +maybe-install-info-target-libffi: + +.PHONY: maybe-install-dvi-target-libffi install-dvi-target-libffi +maybe-install-dvi-target-libffi: + +.PHONY: maybe-install-pdf-target-libffi install-pdf-target-libffi +maybe-install-pdf-target-libffi: + +.PHONY: maybe-install-html-target-libffi install-html-target-libffi +maybe-install-html-target-libffi: + +.PHONY: maybe-installcheck-target-libffi installcheck-target-libffi +maybe-installcheck-target-libffi: + +.PHONY: maybe-mostlyclean-target-libffi mostlyclean-target-libffi +maybe-mostlyclean-target-libffi: + +.PHONY: maybe-clean-target-libffi clean-target-libffi +maybe-clean-target-libffi: + +.PHONY: maybe-distclean-target-libffi distclean-target-libffi +maybe-distclean-target-libffi: + +.PHONY: maybe-maintainer-clean-target-libffi maintainer-clean-target-libffi +maybe-maintainer-clean-target-libffi: + + + + + +.PHONY: configure-target-zlib maybe-configure-target-zlib +maybe-configure-target-zlib: +configure-target-zlib: stage_current + + + +.PHONY: configure-stage1-target-zlib maybe-configure-stage1-target-zlib +maybe-configure-stage1-target-zlib: + +.PHONY: configure-stage2-target-zlib maybe-configure-stage2-target-zlib +maybe-configure-stage2-target-zlib: + +.PHONY: configure-stage3-target-zlib maybe-configure-stage3-target-zlib +maybe-configure-stage3-target-zlib: + +.PHONY: configure-stage4-target-zlib maybe-configure-stage4-target-zlib +maybe-configure-stage4-target-zlib: + +.PHONY: configure-stageprofile-target-zlib maybe-configure-stageprofile-target-zlib +maybe-configure-stageprofile-target-zlib: + +.PHONY: configure-stagetrain-target-zlib maybe-configure-stagetrain-target-zlib +maybe-configure-stagetrain-target-zlib: + +.PHONY: configure-stagefeedback-target-zlib maybe-configure-stagefeedback-target-zlib +maybe-configure-stagefeedback-target-zlib: + +.PHONY: configure-stageautoprofile-target-zlib maybe-configure-stageautoprofile-target-zlib +maybe-configure-stageautoprofile-target-zlib: + +.PHONY: configure-stageautofeedback-target-zlib maybe-configure-stageautofeedback-target-zlib +maybe-configure-stageautofeedback-target-zlib: + + + + + +.PHONY: all-target-zlib maybe-all-target-zlib +maybe-all-target-zlib: +all-target-zlib: stage_current + + + +.PHONY: all-stage1-target-zlib maybe-all-stage1-target-zlib +.PHONY: clean-stage1-target-zlib maybe-clean-stage1-target-zlib +maybe-all-stage1-target-zlib: +maybe-clean-stage1-target-zlib: + + +.PHONY: all-stage2-target-zlib maybe-all-stage2-target-zlib +.PHONY: clean-stage2-target-zlib maybe-clean-stage2-target-zlib +maybe-all-stage2-target-zlib: +maybe-clean-stage2-target-zlib: + + +.PHONY: all-stage3-target-zlib maybe-all-stage3-target-zlib +.PHONY: clean-stage3-target-zlib maybe-clean-stage3-target-zlib +maybe-all-stage3-target-zlib: +maybe-clean-stage3-target-zlib: + + +.PHONY: all-stage4-target-zlib maybe-all-stage4-target-zlib +.PHONY: clean-stage4-target-zlib maybe-clean-stage4-target-zlib +maybe-all-stage4-target-zlib: +maybe-clean-stage4-target-zlib: + + +.PHONY: all-stageprofile-target-zlib maybe-all-stageprofile-target-zlib +.PHONY: clean-stageprofile-target-zlib maybe-clean-stageprofile-target-zlib +maybe-all-stageprofile-target-zlib: +maybe-clean-stageprofile-target-zlib: + + +.PHONY: all-stagetrain-target-zlib maybe-all-stagetrain-target-zlib +.PHONY: clean-stagetrain-target-zlib maybe-clean-stagetrain-target-zlib +maybe-all-stagetrain-target-zlib: +maybe-clean-stagetrain-target-zlib: + + +.PHONY: all-stagefeedback-target-zlib maybe-all-stagefeedback-target-zlib +.PHONY: clean-stagefeedback-target-zlib maybe-clean-stagefeedback-target-zlib +maybe-all-stagefeedback-target-zlib: +maybe-clean-stagefeedback-target-zlib: + + +.PHONY: all-stageautoprofile-target-zlib maybe-all-stageautoprofile-target-zlib +.PHONY: clean-stageautoprofile-target-zlib maybe-clean-stageautoprofile-target-zlib +maybe-all-stageautoprofile-target-zlib: +maybe-clean-stageautoprofile-target-zlib: + + +.PHONY: all-stageautofeedback-target-zlib maybe-all-stageautofeedback-target-zlib +.PHONY: clean-stageautofeedback-target-zlib maybe-clean-stageautofeedback-target-zlib +maybe-all-stageautofeedback-target-zlib: +maybe-clean-stageautofeedback-target-zlib: + + + + + + +.PHONY: check-target-zlib maybe-check-target-zlib +maybe-check-target-zlib: + +.PHONY: install-target-zlib maybe-install-target-zlib +maybe-install-target-zlib: + +.PHONY: install-strip-target-zlib maybe-install-strip-target-zlib +maybe-install-strip-target-zlib: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-zlib info-target-zlib +maybe-info-target-zlib: + +.PHONY: maybe-dvi-target-zlib dvi-target-zlib +maybe-dvi-target-zlib: + +.PHONY: maybe-pdf-target-zlib pdf-target-zlib +maybe-pdf-target-zlib: + +.PHONY: maybe-html-target-zlib html-target-zlib +maybe-html-target-zlib: + +.PHONY: maybe-TAGS-target-zlib TAGS-target-zlib +maybe-TAGS-target-zlib: + +.PHONY: maybe-install-info-target-zlib install-info-target-zlib +maybe-install-info-target-zlib: + +.PHONY: maybe-install-dvi-target-zlib install-dvi-target-zlib +maybe-install-dvi-target-zlib: + +.PHONY: maybe-install-pdf-target-zlib install-pdf-target-zlib +maybe-install-pdf-target-zlib: + +.PHONY: maybe-install-html-target-zlib install-html-target-zlib +maybe-install-html-target-zlib: + +.PHONY: maybe-installcheck-target-zlib installcheck-target-zlib +maybe-installcheck-target-zlib: + +.PHONY: maybe-mostlyclean-target-zlib mostlyclean-target-zlib +maybe-mostlyclean-target-zlib: + +.PHONY: maybe-clean-target-zlib clean-target-zlib +maybe-clean-target-zlib: + +.PHONY: maybe-distclean-target-zlib distclean-target-zlib +maybe-distclean-target-zlib: + +.PHONY: maybe-maintainer-clean-target-zlib maintainer-clean-target-zlib +maybe-maintainer-clean-target-zlib: + + + + + +.PHONY: configure-target-rda maybe-configure-target-rda +maybe-configure-target-rda: +configure-target-rda: stage_current + + + + + +.PHONY: all-target-rda maybe-all-target-rda +maybe-all-target-rda: +all-target-rda: stage_current + + + + + +.PHONY: check-target-rda maybe-check-target-rda +maybe-check-target-rda: + +.PHONY: install-target-rda maybe-install-target-rda +maybe-install-target-rda: + +.PHONY: install-strip-target-rda maybe-install-strip-target-rda +maybe-install-strip-target-rda: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-rda info-target-rda +maybe-info-target-rda: + +.PHONY: maybe-dvi-target-rda dvi-target-rda +maybe-dvi-target-rda: + +.PHONY: maybe-pdf-target-rda pdf-target-rda +maybe-pdf-target-rda: + +.PHONY: maybe-html-target-rda html-target-rda +maybe-html-target-rda: + +.PHONY: maybe-TAGS-target-rda TAGS-target-rda +maybe-TAGS-target-rda: + +.PHONY: maybe-install-info-target-rda install-info-target-rda +maybe-install-info-target-rda: + +.PHONY: maybe-install-dvi-target-rda install-dvi-target-rda +maybe-install-dvi-target-rda: + +.PHONY: maybe-install-pdf-target-rda install-pdf-target-rda +maybe-install-pdf-target-rda: + +.PHONY: maybe-install-html-target-rda install-html-target-rda +maybe-install-html-target-rda: + +.PHONY: maybe-installcheck-target-rda installcheck-target-rda +maybe-installcheck-target-rda: + +.PHONY: maybe-mostlyclean-target-rda mostlyclean-target-rda +maybe-mostlyclean-target-rda: + +.PHONY: maybe-clean-target-rda clean-target-rda +maybe-clean-target-rda: + +.PHONY: maybe-distclean-target-rda distclean-target-rda +maybe-distclean-target-rda: + +.PHONY: maybe-maintainer-clean-target-rda maintainer-clean-target-rda +maybe-maintainer-clean-target-rda: + + + + + +.PHONY: configure-target-libada maybe-configure-target-libada +maybe-configure-target-libada: +configure-target-libada: stage_current + + + + + +.PHONY: all-target-libada maybe-all-target-libada +maybe-all-target-libada: +all-target-libada: stage_current + + + + + +.PHONY: check-target-libada maybe-check-target-libada +maybe-check-target-libada: + +.PHONY: install-target-libada maybe-install-target-libada +maybe-install-target-libada: + +.PHONY: install-strip-target-libada maybe-install-strip-target-libada +maybe-install-strip-target-libada: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libada info-target-libada +maybe-info-target-libada: + +.PHONY: maybe-dvi-target-libada dvi-target-libada +maybe-dvi-target-libada: + +.PHONY: maybe-pdf-target-libada pdf-target-libada +maybe-pdf-target-libada: + +.PHONY: maybe-html-target-libada html-target-libada +maybe-html-target-libada: + +.PHONY: maybe-TAGS-target-libada TAGS-target-libada +maybe-TAGS-target-libada: + +.PHONY: maybe-install-info-target-libada install-info-target-libada +maybe-install-info-target-libada: + +.PHONY: maybe-install-dvi-target-libada install-dvi-target-libada +maybe-install-dvi-target-libada: + +.PHONY: maybe-install-pdf-target-libada install-pdf-target-libada +maybe-install-pdf-target-libada: + +.PHONY: maybe-install-html-target-libada install-html-target-libada +maybe-install-html-target-libada: + +.PHONY: maybe-installcheck-target-libada installcheck-target-libada +maybe-installcheck-target-libada: + +.PHONY: maybe-mostlyclean-target-libada mostlyclean-target-libada +maybe-mostlyclean-target-libada: + +.PHONY: maybe-clean-target-libada clean-target-libada +maybe-clean-target-libada: + +.PHONY: maybe-distclean-target-libada distclean-target-libada +maybe-distclean-target-libada: + +.PHONY: maybe-maintainer-clean-target-libada maintainer-clean-target-libada +maybe-maintainer-clean-target-libada: + + + + + +.PHONY: configure-target-libgm2 maybe-configure-target-libgm2 +maybe-configure-target-libgm2: +configure-target-libgm2: stage_current + + + + + +.PHONY: all-target-libgm2 maybe-all-target-libgm2 +maybe-all-target-libgm2: +all-target-libgm2: stage_current + + + + + +.PHONY: check-target-libgm2 maybe-check-target-libgm2 +maybe-check-target-libgm2: + +.PHONY: install-target-libgm2 maybe-install-target-libgm2 +maybe-install-target-libgm2: + +.PHONY: install-strip-target-libgm2 maybe-install-strip-target-libgm2 +maybe-install-strip-target-libgm2: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libgm2 info-target-libgm2 +maybe-info-target-libgm2: + +.PHONY: maybe-dvi-target-libgm2 dvi-target-libgm2 +maybe-dvi-target-libgm2: + +.PHONY: maybe-pdf-target-libgm2 pdf-target-libgm2 +maybe-pdf-target-libgm2: + +.PHONY: maybe-html-target-libgm2 html-target-libgm2 +maybe-html-target-libgm2: + +.PHONY: maybe-TAGS-target-libgm2 TAGS-target-libgm2 +maybe-TAGS-target-libgm2: + +.PHONY: maybe-install-info-target-libgm2 install-info-target-libgm2 +maybe-install-info-target-libgm2: + +.PHONY: maybe-install-dvi-target-libgm2 install-dvi-target-libgm2 +maybe-install-dvi-target-libgm2: + +.PHONY: maybe-install-pdf-target-libgm2 install-pdf-target-libgm2 +maybe-install-pdf-target-libgm2: + +.PHONY: maybe-install-html-target-libgm2 install-html-target-libgm2 +maybe-install-html-target-libgm2: + +.PHONY: maybe-installcheck-target-libgm2 installcheck-target-libgm2 +maybe-installcheck-target-libgm2: + +.PHONY: maybe-mostlyclean-target-libgm2 mostlyclean-target-libgm2 +maybe-mostlyclean-target-libgm2: + +.PHONY: maybe-clean-target-libgm2 clean-target-libgm2 +maybe-clean-target-libgm2: + +.PHONY: maybe-distclean-target-libgm2 distclean-target-libgm2 +maybe-distclean-target-libgm2: + +.PHONY: maybe-maintainer-clean-target-libgm2 maintainer-clean-target-libgm2 +maybe-maintainer-clean-target-libgm2: + + + + + +.PHONY: configure-target-libgomp maybe-configure-target-libgomp +maybe-configure-target-libgomp: +configure-target-libgomp: stage_current +maybe-configure-target-libgomp: configure-target-libgomp +configure-target-libgomp: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libgomp..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libgomp; \ + cd "$(TARGET_SUBDIR)/libgomp" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-target-libgomp maybe-configure-stage1-target-libgomp +maybe-configure-stage1-target-libgomp: +maybe-configure-stage1-target-libgomp: configure-stage1-target-libgomp +configure-stage1-target-libgomp: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) + +.PHONY: configure-stage2-target-libgomp maybe-configure-stage2-target-libgomp +maybe-configure-stage2-target-libgomp: +maybe-configure-stage2-target-libgomp: configure-stage2-target-libgomp +configure-stage2-target-libgomp: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) + +.PHONY: configure-stage3-target-libgomp maybe-configure-stage3-target-libgomp +maybe-configure-stage3-target-libgomp: +maybe-configure-stage3-target-libgomp: configure-stage3-target-libgomp +configure-stage3-target-libgomp: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) + +.PHONY: configure-stage4-target-libgomp maybe-configure-stage4-target-libgomp +maybe-configure-stage4-target-libgomp: +maybe-configure-stage4-target-libgomp: configure-stage4-target-libgomp +configure-stage4-target-libgomp: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) + +.PHONY: configure-stageprofile-target-libgomp maybe-configure-stageprofile-target-libgomp +maybe-configure-stageprofile-target-libgomp: +maybe-configure-stageprofile-target-libgomp: configure-stageprofile-target-libgomp +configure-stageprofile-target-libgomp: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stagetrain-target-libgomp maybe-configure-stagetrain-target-libgomp +maybe-configure-stagetrain-target-libgomp: +maybe-configure-stagetrain-target-libgomp: configure-stagetrain-target-libgomp +configure-stagetrain-target-libgomp: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage train in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) + +.PHONY: configure-stagefeedback-target-libgomp maybe-configure-stagefeedback-target-libgomp +maybe-configure-stagefeedback-target-libgomp: +maybe-configure-stagefeedback-target-libgomp: configure-stagefeedback-target-libgomp +configure-stagefeedback-target-libgomp: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) + +.PHONY: configure-stageautoprofile-target-libgomp maybe-configure-stageautoprofile-target-libgomp +maybe-configure-stageautoprofile-target-libgomp: +maybe-configure-stageautoprofile-target-libgomp: configure-stageautoprofile-target-libgomp +configure-stageautoprofile-target-libgomp: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) + +.PHONY: configure-stageautofeedback-target-libgomp maybe-configure-stageautofeedback-target-libgomp +maybe-configure-stageautofeedback-target-libgomp: +maybe-configure-stageautofeedback-target-libgomp: configure-stageautofeedback-target-libgomp +configure-stageautofeedback-target-libgomp: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + echo "Checking multilib configuration for libgomp..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgomp/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libgomp/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libgomp/Makefile; \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libgomp/multilib.tmp $(TARGET_SUBDIR)/libgomp/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(TARGET_SUBDIR)/libgomp; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgomp; \ + cd $(TARGET_SUBDIR)/libgomp || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libgomp/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libgomp; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) + + + + + +.PHONY: all-target-libgomp maybe-all-target-libgomp +maybe-all-target-libgomp: +all-target-libgomp: stage_current +TARGET-target-libgomp=all +maybe-all-target-libgomp: all-target-libgomp +all-target-libgomp: configure-target-libgomp + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libgomp)) + + + +.PHONY: all-stage1-target-libgomp maybe-all-stage1-target-libgomp +.PHONY: clean-stage1-target-libgomp maybe-clean-stage1-target-libgomp +maybe-all-stage1-target-libgomp: +maybe-clean-stage1-target-libgomp: +maybe-all-stage1-target-libgomp: all-stage1-target-libgomp +all-stage1: all-stage1-target-libgomp +TARGET-stage1-target-libgomp = $(TARGET-target-libgomp) +all-stage1-target-libgomp: configure-stage1-target-libgomp + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-target-libgomp) + +maybe-clean-stage1-target-libgomp: clean-stage1-target-libgomp +clean-stage1: clean-stage1-target-libgomp +clean-stage1-target-libgomp: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage1-libgomp/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ + clean + + +.PHONY: all-stage2-target-libgomp maybe-all-stage2-target-libgomp +.PHONY: clean-stage2-target-libgomp maybe-clean-stage2-target-libgomp +maybe-all-stage2-target-libgomp: +maybe-clean-stage2-target-libgomp: +maybe-all-stage2-target-libgomp: all-stage2-target-libgomp +all-stage2: all-stage2-target-libgomp +TARGET-stage2-target-libgomp = $(TARGET-target-libgomp) +all-stage2-target-libgomp: configure-stage2-target-libgomp + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-target-libgomp) + +maybe-clean-stage2-target-libgomp: clean-stage2-target-libgomp +clean-stage2: clean-stage2-target-libgomp +clean-stage2-target-libgomp: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage2-libgomp/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stage3-target-libgomp maybe-all-stage3-target-libgomp +.PHONY: clean-stage3-target-libgomp maybe-clean-stage3-target-libgomp +maybe-all-stage3-target-libgomp: +maybe-clean-stage3-target-libgomp: +maybe-all-stage3-target-libgomp: all-stage3-target-libgomp +all-stage3: all-stage3-target-libgomp +TARGET-stage3-target-libgomp = $(TARGET-target-libgomp) +all-stage3-target-libgomp: configure-stage3-target-libgomp + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-target-libgomp) + +maybe-clean-stage3-target-libgomp: clean-stage3-target-libgomp +clean-stage3: clean-stage3-target-libgomp +clean-stage3-target-libgomp: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage3-libgomp/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stage4-target-libgomp maybe-all-stage4-target-libgomp +.PHONY: clean-stage4-target-libgomp maybe-clean-stage4-target-libgomp +maybe-all-stage4-target-libgomp: +maybe-clean-stage4-target-libgomp: +maybe-all-stage4-target-libgomp: all-stage4-target-libgomp +all-stage4: all-stage4-target-libgomp +TARGET-stage4-target-libgomp = $(TARGET-target-libgomp) +all-stage4-target-libgomp: configure-stage4-target-libgomp + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-target-libgomp) + +maybe-clean-stage4-target-libgomp: clean-stage4-target-libgomp +clean-stage4: clean-stage4-target-libgomp +clean-stage4-target-libgomp: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage4-libgomp/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stageprofile-target-libgomp maybe-all-stageprofile-target-libgomp +.PHONY: clean-stageprofile-target-libgomp maybe-clean-stageprofile-target-libgomp +maybe-all-stageprofile-target-libgomp: +maybe-clean-stageprofile-target-libgomp: +maybe-all-stageprofile-target-libgomp: all-stageprofile-target-libgomp +all-stageprofile: all-stageprofile-target-libgomp +TARGET-stageprofile-target-libgomp = $(TARGET-target-libgomp) +all-stageprofile-target-libgomp: configure-stageprofile-target-libgomp + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-target-libgomp) + +maybe-clean-stageprofile-target-libgomp: clean-stageprofile-target-libgomp +clean-stageprofile: clean-stageprofile-target-libgomp +clean-stageprofile-target-libgomp: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageprofile-libgomp/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stagetrain-target-libgomp maybe-all-stagetrain-target-libgomp +.PHONY: clean-stagetrain-target-libgomp maybe-clean-stagetrain-target-libgomp +maybe-all-stagetrain-target-libgomp: +maybe-clean-stagetrain-target-libgomp: +maybe-all-stagetrain-target-libgomp: all-stagetrain-target-libgomp +all-stagetrain: all-stagetrain-target-libgomp +TARGET-stagetrain-target-libgomp = $(TARGET-target-libgomp) +all-stagetrain-target-libgomp: configure-stagetrain-target-libgomp + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-target-libgomp) + +maybe-clean-stagetrain-target-libgomp: clean-stagetrain-target-libgomp +clean-stagetrain: clean-stagetrain-target-libgomp +clean-stagetrain-target-libgomp: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stagetrain-libgomp/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stagefeedback-target-libgomp maybe-all-stagefeedback-target-libgomp +.PHONY: clean-stagefeedback-target-libgomp maybe-clean-stagefeedback-target-libgomp +maybe-all-stagefeedback-target-libgomp: +maybe-clean-stagefeedback-target-libgomp: +maybe-all-stagefeedback-target-libgomp: all-stagefeedback-target-libgomp +all-stagefeedback: all-stagefeedback-target-libgomp +TARGET-stagefeedback-target-libgomp = $(TARGET-target-libgomp) +all-stagefeedback-target-libgomp: configure-stagefeedback-target-libgomp + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-target-libgomp) + +maybe-clean-stagefeedback-target-libgomp: clean-stagefeedback-target-libgomp +clean-stagefeedback: clean-stagefeedback-target-libgomp +clean-stagefeedback-target-libgomp: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stagefeedback-libgomp/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stageautoprofile-target-libgomp maybe-all-stageautoprofile-target-libgomp +.PHONY: clean-stageautoprofile-target-libgomp maybe-clean-stageautoprofile-target-libgomp +maybe-all-stageautoprofile-target-libgomp: +maybe-clean-stageautoprofile-target-libgomp: +maybe-all-stageautoprofile-target-libgomp: all-stageautoprofile-target-libgomp +all-stageautoprofile: all-stageautoprofile-target-libgomp +TARGET-stageautoprofile-target-libgomp = $(TARGET-target-libgomp) +all-stageautoprofile-target-libgomp: configure-stageautoprofile-target-libgomp + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-target-libgomp) + +maybe-clean-stageautoprofile-target-libgomp: clean-stageautoprofile-target-libgomp +clean-stageautoprofile: clean-stageautoprofile-target-libgomp +clean-stageautoprofile-target-libgomp: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageautoprofile-libgomp/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + +.PHONY: all-stageautofeedback-target-libgomp maybe-all-stageautofeedback-target-libgomp +.PHONY: clean-stageautofeedback-target-libgomp maybe-clean-stageautofeedback-target-libgomp +maybe-all-stageautofeedback-target-libgomp: +maybe-clean-stageautofeedback-target-libgomp: +maybe-all-stageautofeedback-target-libgomp: all-stageautofeedback-target-libgomp +all-stageautofeedback: all-stageautofeedback-target-libgomp +TARGET-stageautofeedback-target-libgomp = $(TARGET-target-libgomp) +all-stageautofeedback-target-libgomp: configure-stageautofeedback-target-libgomp + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(NORMAL_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libgomp && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-target-libgomp) + +maybe-clean-stageautofeedback-target-libgomp: clean-stageautofeedback-target-libgomp +clean-stageautofeedback: clean-stageautofeedback-target-libgomp +clean-stageautofeedback-target-libgomp: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageautofeedback-libgomp/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) clean + + + + + + +.PHONY: check-target-libgomp maybe-check-target-libgomp +maybe-check-target-libgomp: +maybe-check-target-libgomp: check-target-libgomp + +check-target-libgomp: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libgomp maybe-install-target-libgomp +maybe-install-target-libgomp: +maybe-install-target-libgomp: install-target-libgomp + +install-target-libgomp: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libgomp maybe-install-strip-target-libgomp +maybe-install-strip-target-libgomp: +maybe-install-strip-target-libgomp: install-strip-target-libgomp + +install-strip-target-libgomp: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libgomp info-target-libgomp +maybe-info-target-libgomp: +maybe-info-target-libgomp: info-target-libgomp + +info-target-libgomp: \ + configure-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libgomp dvi-target-libgomp +maybe-dvi-target-libgomp: +maybe-dvi-target-libgomp: dvi-target-libgomp + +dvi-target-libgomp: \ + configure-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libgomp pdf-target-libgomp +maybe-pdf-target-libgomp: +maybe-pdf-target-libgomp: pdf-target-libgomp + +pdf-target-libgomp: \ + configure-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libgomp html-target-libgomp +maybe-html-target-libgomp: +maybe-html-target-libgomp: html-target-libgomp + +html-target-libgomp: \ + configure-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libgomp TAGS-target-libgomp +maybe-TAGS-target-libgomp: +maybe-TAGS-target-libgomp: TAGS-target-libgomp + +TAGS-target-libgomp: \ + configure-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libgomp install-info-target-libgomp +maybe-install-info-target-libgomp: +maybe-install-info-target-libgomp: install-info-target-libgomp + +install-info-target-libgomp: \ + configure-target-libgomp \ + info-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libgomp install-dvi-target-libgomp +maybe-install-dvi-target-libgomp: +maybe-install-dvi-target-libgomp: install-dvi-target-libgomp + +install-dvi-target-libgomp: \ + configure-target-libgomp \ + dvi-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libgomp install-pdf-target-libgomp +maybe-install-pdf-target-libgomp: +maybe-install-pdf-target-libgomp: install-pdf-target-libgomp + +install-pdf-target-libgomp: \ + configure-target-libgomp \ + pdf-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libgomp install-html-target-libgomp +maybe-install-html-target-libgomp: +maybe-install-html-target-libgomp: install-html-target-libgomp + +install-html-target-libgomp: \ + configure-target-libgomp \ + html-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libgomp installcheck-target-libgomp +maybe-installcheck-target-libgomp: +maybe-installcheck-target-libgomp: installcheck-target-libgomp + +installcheck-target-libgomp: \ + configure-target-libgomp + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libgomp mostlyclean-target-libgomp +maybe-mostlyclean-target-libgomp: +maybe-mostlyclean-target-libgomp: mostlyclean-target-libgomp + +mostlyclean-target-libgomp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libgomp clean-target-libgomp +maybe-clean-target-libgomp: +maybe-clean-target-libgomp: clean-target-libgomp + +clean-target-libgomp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libgomp distclean-target-libgomp +maybe-distclean-target-libgomp: +maybe-distclean-target-libgomp: distclean-target-libgomp + +distclean-target-libgomp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libgomp maintainer-clean-target-libgomp +maybe-maintainer-clean-target-libgomp: +maybe-maintainer-clean-target-libgomp: maintainer-clean-target-libgomp + +maintainer-clean-target-libgomp: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgomp"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libgomp && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libitm maybe-configure-target-libitm +maybe-configure-target-libitm: +configure-target-libitm: stage_current +maybe-configure-target-libitm: configure-target-libitm +configure-target-libitm: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libitm..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libitm; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libitm/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libitm/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libitm/multilib.tmp $(TARGET_SUBDIR)/libitm/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libitm/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libitm/Makefile; \ + mv $(TARGET_SUBDIR)/libitm/multilib.tmp $(TARGET_SUBDIR)/libitm/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libitm/multilib.tmp $(TARGET_SUBDIR)/libitm/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libitm/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libitm; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libitm; \ + cd "$(TARGET_SUBDIR)/libitm" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libitm/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libitm; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + + + +.PHONY: all-target-libitm maybe-all-target-libitm +maybe-all-target-libitm: +all-target-libitm: stage_current +TARGET-target-libitm=all +maybe-all-target-libitm: all-target-libitm +all-target-libitm: configure-target-libitm + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libitm)) + + + + + +.PHONY: check-target-libitm maybe-check-target-libitm +maybe-check-target-libitm: +maybe-check-target-libitm: check-target-libitm + +check-target-libitm: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libitm maybe-install-target-libitm +maybe-install-target-libitm: +maybe-install-target-libitm: install-target-libitm + +install-target-libitm: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libitm maybe-install-strip-target-libitm +maybe-install-strip-target-libitm: +maybe-install-strip-target-libitm: install-strip-target-libitm + +install-strip-target-libitm: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libitm info-target-libitm +maybe-info-target-libitm: +maybe-info-target-libitm: info-target-libitm + +info-target-libitm: \ + configure-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libitm dvi-target-libitm +maybe-dvi-target-libitm: +maybe-dvi-target-libitm: dvi-target-libitm + +dvi-target-libitm: \ + configure-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libitm pdf-target-libitm +maybe-pdf-target-libitm: +maybe-pdf-target-libitm: pdf-target-libitm + +pdf-target-libitm: \ + configure-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libitm html-target-libitm +maybe-html-target-libitm: +maybe-html-target-libitm: html-target-libitm + +html-target-libitm: \ + configure-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libitm TAGS-target-libitm +maybe-TAGS-target-libitm: +maybe-TAGS-target-libitm: TAGS-target-libitm + +TAGS-target-libitm: \ + configure-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libitm install-info-target-libitm +maybe-install-info-target-libitm: +maybe-install-info-target-libitm: install-info-target-libitm + +install-info-target-libitm: \ + configure-target-libitm \ + info-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libitm install-dvi-target-libitm +maybe-install-dvi-target-libitm: +maybe-install-dvi-target-libitm: install-dvi-target-libitm + +install-dvi-target-libitm: \ + configure-target-libitm \ + dvi-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libitm install-pdf-target-libitm +maybe-install-pdf-target-libitm: +maybe-install-pdf-target-libitm: install-pdf-target-libitm + +install-pdf-target-libitm: \ + configure-target-libitm \ + pdf-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libitm install-html-target-libitm +maybe-install-html-target-libitm: +maybe-install-html-target-libitm: install-html-target-libitm + +install-html-target-libitm: \ + configure-target-libitm \ + html-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libitm installcheck-target-libitm +maybe-installcheck-target-libitm: +maybe-installcheck-target-libitm: installcheck-target-libitm + +installcheck-target-libitm: \ + configure-target-libitm + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libitm mostlyclean-target-libitm +maybe-mostlyclean-target-libitm: +maybe-mostlyclean-target-libitm: mostlyclean-target-libitm + +mostlyclean-target-libitm: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libitm clean-target-libitm +maybe-clean-target-libitm: +maybe-clean-target-libitm: clean-target-libitm + +clean-target-libitm: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libitm distclean-target-libitm +maybe-distclean-target-libitm: +maybe-distclean-target-libitm: distclean-target-libitm + +distclean-target-libitm: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libitm maintainer-clean-target-libitm +maybe-maintainer-clean-target-libitm: +maybe-maintainer-clean-target-libitm: maintainer-clean-target-libitm + +maintainer-clean-target-libitm: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libitm"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libitm && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libatomic maybe-configure-target-libatomic +maybe-configure-target-libatomic: +configure-target-libatomic: stage_current +maybe-configure-target-libatomic: configure-target-libatomic +configure-target-libatomic: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + echo "Checking multilib configuration for libatomic..."; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \ + if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \ + mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \ + $(NORMAL_TARGET_EXPORTS) \ + echo Configuring in $(TARGET_SUBDIR)/libatomic; \ + cd "$(TARGET_SUBDIR)/libatomic" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libatomic; \ + rm -f no-such-file || : ; \ + CONFIG_SITE=no-such-file $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} \ + || exit 1 + + + +.PHONY: configure-stage1-target-libatomic maybe-configure-stage1-target-libatomic +maybe-configure-stage1-target-libatomic: + +.PHONY: configure-stage2-target-libatomic maybe-configure-stage2-target-libatomic +maybe-configure-stage2-target-libatomic: + +.PHONY: configure-stage3-target-libatomic maybe-configure-stage3-target-libatomic +maybe-configure-stage3-target-libatomic: + +.PHONY: configure-stage4-target-libatomic maybe-configure-stage4-target-libatomic +maybe-configure-stage4-target-libatomic: + +.PHONY: configure-stageprofile-target-libatomic maybe-configure-stageprofile-target-libatomic +maybe-configure-stageprofile-target-libatomic: + +.PHONY: configure-stagetrain-target-libatomic maybe-configure-stagetrain-target-libatomic +maybe-configure-stagetrain-target-libatomic: + +.PHONY: configure-stagefeedback-target-libatomic maybe-configure-stagefeedback-target-libatomic +maybe-configure-stagefeedback-target-libatomic: + +.PHONY: configure-stageautoprofile-target-libatomic maybe-configure-stageautoprofile-target-libatomic +maybe-configure-stageautoprofile-target-libatomic: + +.PHONY: configure-stageautofeedback-target-libatomic maybe-configure-stageautofeedback-target-libatomic +maybe-configure-stageautofeedback-target-libatomic: + + + + + +.PHONY: all-target-libatomic maybe-all-target-libatomic +maybe-all-target-libatomic: +all-target-libatomic: stage_current +TARGET-target-libatomic=all +maybe-all-target-libatomic: all-target-libatomic +all-target-libatomic: configure-target-libatomic + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libatomic)) + + + +.PHONY: all-stage1-target-libatomic maybe-all-stage1-target-libatomic +.PHONY: clean-stage1-target-libatomic maybe-clean-stage1-target-libatomic +maybe-all-stage1-target-libatomic: +maybe-clean-stage1-target-libatomic: + + +.PHONY: all-stage2-target-libatomic maybe-all-stage2-target-libatomic +.PHONY: clean-stage2-target-libatomic maybe-clean-stage2-target-libatomic +maybe-all-stage2-target-libatomic: +maybe-clean-stage2-target-libatomic: + + +.PHONY: all-stage3-target-libatomic maybe-all-stage3-target-libatomic +.PHONY: clean-stage3-target-libatomic maybe-clean-stage3-target-libatomic +maybe-all-stage3-target-libatomic: +maybe-clean-stage3-target-libatomic: + + +.PHONY: all-stage4-target-libatomic maybe-all-stage4-target-libatomic +.PHONY: clean-stage4-target-libatomic maybe-clean-stage4-target-libatomic +maybe-all-stage4-target-libatomic: +maybe-clean-stage4-target-libatomic: + + +.PHONY: all-stageprofile-target-libatomic maybe-all-stageprofile-target-libatomic +.PHONY: clean-stageprofile-target-libatomic maybe-clean-stageprofile-target-libatomic +maybe-all-stageprofile-target-libatomic: +maybe-clean-stageprofile-target-libatomic: + + +.PHONY: all-stagetrain-target-libatomic maybe-all-stagetrain-target-libatomic +.PHONY: clean-stagetrain-target-libatomic maybe-clean-stagetrain-target-libatomic +maybe-all-stagetrain-target-libatomic: +maybe-clean-stagetrain-target-libatomic: + + +.PHONY: all-stagefeedback-target-libatomic maybe-all-stagefeedback-target-libatomic +.PHONY: clean-stagefeedback-target-libatomic maybe-clean-stagefeedback-target-libatomic +maybe-all-stagefeedback-target-libatomic: +maybe-clean-stagefeedback-target-libatomic: + + +.PHONY: all-stageautoprofile-target-libatomic maybe-all-stageautoprofile-target-libatomic +.PHONY: clean-stageautoprofile-target-libatomic maybe-clean-stageautoprofile-target-libatomic +maybe-all-stageautoprofile-target-libatomic: +maybe-clean-stageautoprofile-target-libatomic: + + +.PHONY: all-stageautofeedback-target-libatomic maybe-all-stageautofeedback-target-libatomic +.PHONY: clean-stageautofeedback-target-libatomic maybe-clean-stageautofeedback-target-libatomic +maybe-all-stageautofeedback-target-libatomic: +maybe-clean-stageautofeedback-target-libatomic: + + + + + + +.PHONY: check-target-libatomic maybe-check-target-libatomic +maybe-check-target-libatomic: +maybe-check-target-libatomic: check-target-libatomic + +check-target-libatomic: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check) + + +.PHONY: install-target-libatomic maybe-install-target-libatomic +maybe-install-target-libatomic: +maybe-install-target-libatomic: install-target-libatomic + +install-target-libatomic: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install) + + +.PHONY: install-strip-target-libatomic maybe-install-strip-target-libatomic +maybe-install-strip-target-libatomic: +maybe-install-strip-target-libatomic: install-strip-target-libatomic + +install-strip-target-libatomic: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip) + + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libatomic info-target-libatomic +maybe-info-target-libatomic: +maybe-info-target-libatomic: info-target-libatomic + +info-target-libatomic: \ + configure-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing info in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + + +.PHONY: maybe-dvi-target-libatomic dvi-target-libatomic +maybe-dvi-target-libatomic: +maybe-dvi-target-libatomic: dvi-target-libatomic + +dvi-target-libatomic: \ + configure-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing dvi in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + + +.PHONY: maybe-pdf-target-libatomic pdf-target-libatomic +maybe-pdf-target-libatomic: +maybe-pdf-target-libatomic: pdf-target-libatomic + +pdf-target-libatomic: \ + configure-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing pdf in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + + +.PHONY: maybe-html-target-libatomic html-target-libatomic +maybe-html-target-libatomic: +maybe-html-target-libatomic: html-target-libatomic + +html-target-libatomic: \ + configure-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing html in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + + +.PHONY: maybe-TAGS-target-libatomic TAGS-target-libatomic +maybe-TAGS-target-libatomic: +maybe-TAGS-target-libatomic: TAGS-target-libatomic + +TAGS-target-libatomic: \ + configure-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing TAGS in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + + +.PHONY: maybe-install-info-target-libatomic install-info-target-libatomic +maybe-install-info-target-libatomic: +maybe-install-info-target-libatomic: install-info-target-libatomic + +install-info-target-libatomic: \ + configure-target-libatomic \ + info-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-info in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + + +.PHONY: maybe-install-dvi-target-libatomic install-dvi-target-libatomic +maybe-install-dvi-target-libatomic: +maybe-install-dvi-target-libatomic: install-dvi-target-libatomic + +install-dvi-target-libatomic: \ + configure-target-libatomic \ + dvi-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-dvi in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + + +.PHONY: maybe-install-pdf-target-libatomic install-pdf-target-libatomic +maybe-install-pdf-target-libatomic: +maybe-install-pdf-target-libatomic: install-pdf-target-libatomic + +install-pdf-target-libatomic: \ + configure-target-libatomic \ + pdf-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-pdf in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + + +.PHONY: maybe-install-html-target-libatomic install-html-target-libatomic +maybe-install-html-target-libatomic: +maybe-install-html-target-libatomic: install-html-target-libatomic + +install-html-target-libatomic: \ + configure-target-libatomic \ + html-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing install-html in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + + +.PHONY: maybe-installcheck-target-libatomic installcheck-target-libatomic +maybe-installcheck-target-libatomic: +maybe-installcheck-target-libatomic: installcheck-target-libatomic + +installcheck-target-libatomic: \ + configure-target-libatomic + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing installcheck in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + + +.PHONY: maybe-mostlyclean-target-libatomic mostlyclean-target-libatomic +maybe-mostlyclean-target-libatomic: +maybe-mostlyclean-target-libatomic: mostlyclean-target-libatomic + +mostlyclean-target-libatomic: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing mostlyclean in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + + +.PHONY: maybe-clean-target-libatomic clean-target-libatomic +maybe-clean-target-libatomic: +maybe-clean-target-libatomic: clean-target-libatomic + +clean-target-libatomic: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing clean in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + + +.PHONY: maybe-distclean-target-libatomic distclean-target-libatomic +maybe-distclean-target-libatomic: +maybe-distclean-target-libatomic: distclean-target-libatomic + +distclean-target-libatomic: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing distclean in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + + +.PHONY: maybe-maintainer-clean-target-libatomic maintainer-clean-target-libatomic +maybe-maintainer-clean-target-libatomic: +maybe-maintainer-clean-target-libatomic: maintainer-clean-target-libatomic + +maintainer-clean-target-libatomic: + @: $(MAKE); $(unstage) + @[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(NORMAL_TARGET_EXPORTS) \ + echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libatomic"; \ + for flag in $(EXTRA_TARGET_FLAGS); do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + (cd $(TARGET_SUBDIR)/libatomic && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + + + + + + +.PHONY: configure-target-libgrust maybe-configure-target-libgrust +maybe-configure-target-libgrust: +configure-target-libgrust: stage_current + + + + + +.PHONY: all-target-libgrust maybe-all-target-libgrust +maybe-all-target-libgrust: +all-target-libgrust: stage_current + + + + + +.PHONY: check-target-libgrust maybe-check-target-libgrust +maybe-check-target-libgrust: + +.PHONY: install-target-libgrust maybe-install-target-libgrust +maybe-install-target-libgrust: + +.PHONY: install-strip-target-libgrust maybe-install-strip-target-libgrust +maybe-install-strip-target-libgrust: + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-target-libgrust info-target-libgrust +maybe-info-target-libgrust: + +.PHONY: maybe-dvi-target-libgrust dvi-target-libgrust +maybe-dvi-target-libgrust: + +.PHONY: maybe-pdf-target-libgrust pdf-target-libgrust +maybe-pdf-target-libgrust: + +.PHONY: maybe-html-target-libgrust html-target-libgrust +maybe-html-target-libgrust: + +.PHONY: maybe-TAGS-target-libgrust TAGS-target-libgrust +maybe-TAGS-target-libgrust: + +.PHONY: maybe-install-info-target-libgrust install-info-target-libgrust +maybe-install-info-target-libgrust: + +.PHONY: maybe-install-dvi-target-libgrust install-dvi-target-libgrust +maybe-install-dvi-target-libgrust: + +.PHONY: maybe-install-pdf-target-libgrust install-pdf-target-libgrust +maybe-install-pdf-target-libgrust: + +.PHONY: maybe-install-html-target-libgrust install-html-target-libgrust +maybe-install-html-target-libgrust: + +.PHONY: maybe-installcheck-target-libgrust installcheck-target-libgrust +maybe-installcheck-target-libgrust: + +.PHONY: maybe-mostlyclean-target-libgrust mostlyclean-target-libgrust +maybe-mostlyclean-target-libgrust: + +.PHONY: maybe-clean-target-libgrust clean-target-libgrust +maybe-clean-target-libgrust: + +.PHONY: maybe-distclean-target-libgrust distclean-target-libgrust +maybe-distclean-target-libgrust: + +.PHONY: maybe-maintainer-clean-target-libgrust maintainer-clean-target-libgrust +maybe-maintainer-clean-target-libgrust: + + + +.PHONY: check-target-libgomp-c++ +check-target-libgomp-c++: + $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.exp" check-target-libgomp + +.PHONY: check-target-libgomp-fortran +check-target-libgomp-fortran: + $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) fortran.exp" check-target-libgomp + + +.PHONY: check-target-libitm-c++ +check-target-libitm-c++: + $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.exp" check-target-libitm + + +# ---------- +# GCC module +# ---------- + + + +.PHONY: gcc-site.exp +gcc-site.exp: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) site.exp); + + +.PHONY: check-gcc-c check-c +check-gcc-c: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-gcc); +check-c: check-gcc-c + +.PHONY: check-gcc-c++ check-c++ +check-gcc-c++: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); +check-c++: check-gcc-c++ check-target-libstdc++-v3 check-target-libitm-c++ check-target-libgomp-c++ + +.PHONY: check-gcc-fortran check-fortran +check-gcc-fortran: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-fortran); +check-fortran: check-gcc-fortran check-target-libquadmath check-target-libgfortran check-target-libgomp-fortran + +.PHONY: check-gcc-ada check-ada +check-gcc-ada: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-ada); +check-ada: check-gcc-ada check-target-libada + +.PHONY: check-gcc-objc check-objc +check-gcc-objc: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-objc); +check-objc: check-gcc-objc check-target-libobjc + +.PHONY: check-gcc-obj-c++ check-obj-c++ +check-gcc-obj-c++: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-obj-c++); +check-obj-c++: check-gcc-obj-c++ + +.PHONY: check-gcc-go check-go +check-gcc-go: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-go); +check-go: check-gcc-go check-target-libgo check-gotools + +.PHONY: check-gcc-m2 check-m2 +check-gcc-m2: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-m2); +check-m2: check-gcc-m2 check-target-libgm2 + +.PHONY: check-gcc-d check-d +check-gcc-d: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-d); +check-d: check-gcc-d check-target-libphobos + +.PHONY: check-gcc-jit check-jit +check-gcc-jit: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-jit); +check-jit: check-gcc-jit + +.PHONY: check-gcc-rust check-rust +check-gcc-rust: gcc-site.exp + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-rust); +check-rust: check-gcc-rust + + +# The gcc part of install-no-fixedincludes, which relies on an intimate +# knowledge of how a number of gcc internal targets (inter)operate. Delegate. +.PHONY: gcc-install-no-fixedincludes +gcc-install-no-fixedincludes: + @if [ -f ./gcc/Makefile ]; then \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd ./gcc \ + && $(MAKE) $(GCC_FLAGS_TO_PASS) install-no-fixedincludes); \ + else true; fi + +# --------------------- +# GCC bootstrap support +# --------------------- + +# We track the current stage (the one in 'gcc') in the stage_current file. +# stage_last instead tracks the stage that was built last. These targets +# are dummy when toplevel bootstrap is not active. + +# While making host and target tools, symlinks to the final stage must be +# there, so $(unstage) should be run at various points. To avoid excessive +# recursive invocations of make, we "inline" them using a variable. These +# must be referenced as ": $(MAKE) ; $(unstage)" rather than "$(unstage)" +# to avoid warnings from the GNU Make job server. + +unstage = : +stage = : +current_stage = "" + +unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi +stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi +current_stage = "`cat stage_current 2> /dev/null`" + +.PHONY: unstage stage +unstage: + @: $(MAKE); $(unstage) +stage: + @: $(MAKE); $(stage) + +# Disable commands for lean bootstrap. +LEAN = false + +# We name the build directories for the various stages "stage1-gcc", +# "stage2-gcc","stage3-gcc", etc. + +# Since the 'compare' process will fail (on debugging information) if any +# directory names are different, we need to link the gcc directory for +# the previous stage to a constant name ('prev-gcc'), and to make the name of +# the build directories constant as well. For the latter, we use naked names +# like 'gcc', because the scripts in that directory assume it. We use +# mv on platforms where symlinks to directories do not work or are not +# reliable. + +# 'touch' doesn't work right on some platforms. +STAMP = echo timestamp > + +# We only want to compare .o files, so set this! +objext = .o + + +.PHONY: stage1-start stage1-end + +stage1-start:: + @: $(MAKE); $(stage); \ + echo stage1 > stage_current; \ + echo stage1 > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stage1-fixincludes ] || \ + mkdir stage1-fixincludes; \ + mv stage1-fixincludes fixincludes + @cd $(HOST_SUBDIR); [ -d stage1-gcc ] || \ + mkdir stage1-gcc; \ + mv stage1-gcc gcc + @cd $(HOST_SUBDIR); [ -d stage1-libbacktrace ] || \ + mkdir stage1-libbacktrace; \ + mv stage1-libbacktrace libbacktrace + @cd $(HOST_SUBDIR); [ -d stage1-libcpp ] || \ + mkdir stage1-libcpp; \ + mv stage1-libcpp libcpp + @cd $(HOST_SUBDIR); [ -d stage1-libcody ] || \ + mkdir stage1-libcody; \ + mv stage1-libcody libcody + @cd $(HOST_SUBDIR); [ -d stage1-libdecnumber ] || \ + mkdir stage1-libdecnumber; \ + mv stage1-libdecnumber libdecnumber + @cd $(HOST_SUBDIR); [ -d stage1-libiberty ] || \ + mkdir stage1-libiberty; \ + mv stage1-libiberty libiberty + @cd $(HOST_SUBDIR); [ -d stage1-zlib ] || \ + mkdir stage1-zlib; \ + mv stage1-zlib zlib + @cd $(HOST_SUBDIR); [ -d stage1-lto-plugin ] || \ + mkdir stage1-lto-plugin; \ + mv stage1-lto-plugin lto-plugin + @[ -d stage1-$(TARGET_SUBDIR) ] || \ + mkdir stage1-$(TARGET_SUBDIR); \ + mv stage1-$(TARGET_SUBDIR) $(TARGET_SUBDIR) + +stage1-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stage1-fixincludes; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stage1-gcc; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stage1-libbacktrace; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stage1-libcpp; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stage1-libcody; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stage1-libdecnumber; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stage1-libiberty; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stage1-zlib; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stage1-lto-plugin; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage 1. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stage1-bubble +stage1-bubble:: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stage1-lean ; then \ + echo Skipping rebuild of stage1; \ + else \ + $(MAKE) stage1-start; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage1; \ + fi + +.PHONY: all-stage1 clean-stage1 +do-clean: clean-stage1 + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + + + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap + +.PHONY: distclean-stage1 +distclean-stage1:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stage1 || rm -f stage_last + rm -rf stage1-* + + + + +.PHONY: stage2-start stage2-end + +stage2-start:: + @: $(MAKE); $(stage); \ + echo stage2 > stage_current; \ + echo stage2 > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stage2-fixincludes ] || \ + mkdir stage2-fixincludes; \ + mv stage2-fixincludes fixincludes; \ + mv stage1-fixincludes prev-fixincludes || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-gcc ] || \ + mkdir stage2-gcc; \ + mv stage2-gcc gcc; \ + mv stage1-gcc prev-gcc || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-libbacktrace ] || \ + mkdir stage2-libbacktrace; \ + mv stage2-libbacktrace libbacktrace; \ + mv stage1-libbacktrace prev-libbacktrace || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-libcpp ] || \ + mkdir stage2-libcpp; \ + mv stage2-libcpp libcpp; \ + mv stage1-libcpp prev-libcpp || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-libcody ] || \ + mkdir stage2-libcody; \ + mv stage2-libcody libcody; \ + mv stage1-libcody prev-libcody || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-libdecnumber ] || \ + mkdir stage2-libdecnumber; \ + mv stage2-libdecnumber libdecnumber; \ + mv stage1-libdecnumber prev-libdecnumber || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-libiberty ] || \ + mkdir stage2-libiberty; \ + mv stage2-libiberty libiberty; \ + mv stage1-libiberty prev-libiberty || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-zlib ] || \ + mkdir stage2-zlib; \ + mv stage2-zlib zlib; \ + mv stage1-zlib prev-zlib || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stage2-lto-plugin ] || \ + mkdir stage2-lto-plugin; \ + mv stage2-lto-plugin lto-plugin; \ + mv stage1-lto-plugin prev-lto-plugin || test -f stage1-lean + @[ -d stage2-$(TARGET_SUBDIR) ] || \ + mkdir stage2-$(TARGET_SUBDIR); \ + mv stage2-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stage1-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage1-lean + +stage2-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stage2-fixincludes; \ + mv prev-fixincludes stage1-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stage2-gcc; \ + mv prev-gcc stage1-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stage2-libbacktrace; \ + mv prev-libbacktrace stage1-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stage2-libcpp; \ + mv prev-libcpp stage1-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stage2-libcody; \ + mv prev-libcody stage1-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stage2-libdecnumber; \ + mv prev-libdecnumber stage1-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stage2-libiberty; \ + mv prev-libiberty stage1-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stage2-zlib; \ + mv prev-zlib stage1-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stage2-lto-plugin; \ + mv prev-lto-plugin stage1-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stage2-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage 2. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stage2-bubble +stage2-bubble:: stage1-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stage2-lean || test -f stage1-lean ; then \ + echo Skipping rebuild of stage2; \ + else \ + $(MAKE) stage2-start; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage2; \ + fi + +.PHONY: all-stage2 clean-stage2 +do-clean: clean-stage2 + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + + + +.PHONY: bootstrap2 bootstrap2-lean +bootstrap2: + echo stage2 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage2-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + +bootstrap2-lean: + echo stage2 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) LEAN=: stage2-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stage1:: distclean-stage2 +.PHONY: distclean-stage2 +distclean-stage2:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stage2 || rm -f stage_last + rm -rf stage2-* + + + + +.PHONY: stage3-start stage3-end + +stage3-start:: + @: $(MAKE); $(stage); \ + echo stage3 > stage_current; \ + echo stage3 > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stage3-fixincludes ] || \ + mkdir stage3-fixincludes; \ + mv stage3-fixincludes fixincludes; \ + mv stage2-fixincludes prev-fixincludes || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-gcc ] || \ + mkdir stage3-gcc; \ + mv stage3-gcc gcc; \ + mv stage2-gcc prev-gcc || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-libbacktrace ] || \ + mkdir stage3-libbacktrace; \ + mv stage3-libbacktrace libbacktrace; \ + mv stage2-libbacktrace prev-libbacktrace || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-libcpp ] || \ + mkdir stage3-libcpp; \ + mv stage3-libcpp libcpp; \ + mv stage2-libcpp prev-libcpp || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-libcody ] || \ + mkdir stage3-libcody; \ + mv stage3-libcody libcody; \ + mv stage2-libcody prev-libcody || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-libdecnumber ] || \ + mkdir stage3-libdecnumber; \ + mv stage3-libdecnumber libdecnumber; \ + mv stage2-libdecnumber prev-libdecnumber || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-libiberty ] || \ + mkdir stage3-libiberty; \ + mv stage3-libiberty libiberty; \ + mv stage2-libiberty prev-libiberty || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-zlib ] || \ + mkdir stage3-zlib; \ + mv stage3-zlib zlib; \ + mv stage2-zlib prev-zlib || test -f stage2-lean + @cd $(HOST_SUBDIR); [ -d stage3-lto-plugin ] || \ + mkdir stage3-lto-plugin; \ + mv stage3-lto-plugin lto-plugin; \ + mv stage2-lto-plugin prev-lto-plugin || test -f stage2-lean + @[ -d stage3-$(TARGET_SUBDIR) ] || \ + mkdir stage3-$(TARGET_SUBDIR); \ + mv stage3-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stage2-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage2-lean + +stage3-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stage3-fixincludes; \ + mv prev-fixincludes stage2-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stage3-gcc; \ + mv prev-gcc stage2-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stage3-libbacktrace; \ + mv prev-libbacktrace stage2-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stage3-libcpp; \ + mv prev-libcpp stage2-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stage3-libcody; \ + mv prev-libcody stage2-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stage3-libdecnumber; \ + mv prev-libdecnumber stage2-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stage3-libiberty; \ + mv prev-libiberty stage2-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stage3-zlib; \ + mv prev-zlib stage2-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stage3-lto-plugin; \ + mv prev-lto-plugin stage2-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stage3-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stage2-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage 3. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stage3-bubble +stage3-bubble:: stage2-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stage3-lean || test -f stage2-lean ; then \ + echo Skipping rebuild of stage3; \ + else \ + $(MAKE) stage3-start; \ + if $(LEAN); then \ + rm -rf stage1-*; \ + $(STAMP) stage1-lean; \ + fi; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage3; \ + fi + $(MAKE) $(RECURSE_FLAGS_TO_PASS) compare + +.PHONY: all-stage3 clean-stage3 +do-clean: clean-stage3 + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + +compare: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stage2-lean; then \ + echo Cannot compare object files as stage 2 was deleted.; \ + exit 0; \ + fi; \ + : $(MAKE); $(stage); \ + rm -f .bad_compare; \ + echo Comparing stages 2 and 3; \ + sed=`echo stage3 | sed 's,^stage,,;s,.,.,g'`; \ + files=`find stage3-* -name "*$(objext)" -print | \ + sed -n s,^stage$$sed-,,p`; \ + for file in $${files} ${extra-compare}; do \ + f1=$$r/stage2-$$file; f2=$$r/stage3-$$file; \ + if test ! -f $$f1; then continue; fi; \ + $(do-compare) > /dev/null 2>&1; \ + if test $$? -eq 1; then \ + case $$file in \ + gcc/cc*-checksum$(objext) | gcc/ada/*tools/* | gcc/m2/gm2-compiler-boot/M2Version* | gcc/m2/gm2-compiler-boot/SYSTEM* | gcc/m2/gm2version*) \ + echo warning: $$file differs ;; \ + *) \ + echo $$file differs >> .bad_compare ;; \ + esac; \ + fi; \ + done; \ + if [ -f .bad_compare ]; then \ + echo "Bootstrap comparison failure!"; \ + cat .bad_compare; \ + exit 1; \ + else \ + echo Comparison successful.; \ + fi; \ + $(STAMP) compare + if $(LEAN); then \ + rm -rf stage2-*; \ + $(STAMP) stage2-lean; \ + fi + + + +.PHONY: bootstrap bootstrap-lean +bootstrap: + echo stage3 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage3-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + +bootstrap-lean: + echo stage3 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) LEAN=: stage3-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stage2:: distclean-stage3 +.PHONY: distclean-stage3 +distclean-stage3:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stage3 || rm -f stage_last + rm -rf stage3-* compare + + +.PHONY: cleanstrap +cleanstrap: do-distclean local-clean + echo stage3 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage3-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + + + +.PHONY: stage4-start stage4-end + +stage4-start:: + @: $(MAKE); $(stage); \ + echo stage4 > stage_current; \ + echo stage4 > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stage4-fixincludes ] || \ + mkdir stage4-fixincludes; \ + mv stage4-fixincludes fixincludes; \ + mv stage3-fixincludes prev-fixincludes || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-gcc ] || \ + mkdir stage4-gcc; \ + mv stage4-gcc gcc; \ + mv stage3-gcc prev-gcc || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-libbacktrace ] || \ + mkdir stage4-libbacktrace; \ + mv stage4-libbacktrace libbacktrace; \ + mv stage3-libbacktrace prev-libbacktrace || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-libcpp ] || \ + mkdir stage4-libcpp; \ + mv stage4-libcpp libcpp; \ + mv stage3-libcpp prev-libcpp || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-libcody ] || \ + mkdir stage4-libcody; \ + mv stage4-libcody libcody; \ + mv stage3-libcody prev-libcody || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-libdecnumber ] || \ + mkdir stage4-libdecnumber; \ + mv stage4-libdecnumber libdecnumber; \ + mv stage3-libdecnumber prev-libdecnumber || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-libiberty ] || \ + mkdir stage4-libiberty; \ + mv stage4-libiberty libiberty; \ + mv stage3-libiberty prev-libiberty || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-zlib ] || \ + mkdir stage4-zlib; \ + mv stage4-zlib zlib; \ + mv stage3-zlib prev-zlib || test -f stage3-lean + @cd $(HOST_SUBDIR); [ -d stage4-lto-plugin ] || \ + mkdir stage4-lto-plugin; \ + mv stage4-lto-plugin lto-plugin; \ + mv stage3-lto-plugin prev-lto-plugin || test -f stage3-lean + @[ -d stage4-$(TARGET_SUBDIR) ] || \ + mkdir stage4-$(TARGET_SUBDIR); \ + mv stage4-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stage3-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage3-lean + +stage4-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stage4-fixincludes; \ + mv prev-fixincludes stage3-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stage4-gcc; \ + mv prev-gcc stage3-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stage4-libbacktrace; \ + mv prev-libbacktrace stage3-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stage4-libcpp; \ + mv prev-libcpp stage3-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stage4-libcody; \ + mv prev-libcody stage3-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stage4-libdecnumber; \ + mv prev-libdecnumber stage3-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stage4-libiberty; \ + mv prev-libiberty stage3-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stage4-zlib; \ + mv prev-zlib stage3-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stage4-lto-plugin; \ + mv prev-lto-plugin stage3-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stage4-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stage3-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage 4. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stage4-bubble +stage4-bubble:: stage3-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stage4-lean || test -f stage3-lean ; then \ + echo Skipping rebuild of stage4; \ + else \ + $(MAKE) stage4-start; \ + if $(LEAN); then \ + rm -rf stage2-*; \ + $(STAMP) stage2-lean; \ + fi; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage4; \ + fi + $(MAKE) $(RECURSE_FLAGS_TO_PASS) compare3 + +.PHONY: all-stage4 clean-stage4 +do-clean: clean-stage4 + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + +compare3: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stage3-lean; then \ + echo Cannot compare object files as stage 3 was deleted.; \ + exit 0; \ + fi; \ + : $(MAKE); $(stage); \ + rm -f .bad_compare; \ + echo Comparing stages 3 and 4; \ + sed=`echo stage4 | sed 's,^stage,,;s,.,.,g'`; \ + files=`find stage4-* -name "*$(objext)" -print | \ + sed -n s,^stage$$sed-,,p`; \ + for file in $${files} ${extra-compare}; do \ + f1=$$r/stage3-$$file; f2=$$r/stage4-$$file; \ + if test ! -f $$f1; then continue; fi; \ + $(do-compare3) > /dev/null 2>&1; \ + if test $$? -eq 1; then \ + case $$file in \ + gcc/cc*-checksum$(objext) | gcc/ada/*tools/* | gcc/m2/gm2-compiler-boot/M2Version* | gcc/m2/gm2-compiler-boot/SYSTEM* | gcc/m2/gm2version*) \ + echo warning: $$file differs ;; \ + *) \ + echo $$file differs >> .bad_compare ;; \ + esac; \ + fi; \ + done; \ + if [ -f .bad_compare ]; then \ + echo "Bootstrap comparison failure!"; \ + cat .bad_compare; \ + exit 1; \ + else \ + echo Comparison successful.; \ + fi; \ + $(STAMP) compare3 + if $(LEAN); then \ + rm -rf stage3-*; \ + $(STAMP) stage3-lean; \ + fi + + + +.PHONY: bootstrap4 bootstrap4-lean +bootstrap4: + echo stage4 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage4-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + +bootstrap4-lean: + echo stage4 > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) LEAN=: stage4-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stage3:: distclean-stage4 +.PHONY: distclean-stage4 +distclean-stage4:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stage4 || rm -f stage_last + rm -rf stage4-* compare3 + + + + +.PHONY: stageprofile-start stageprofile-end + +stageprofile-start:: + @: $(MAKE); $(stage); \ + echo stageprofile > stage_current; \ + echo stageprofile > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stageprofile-fixincludes ] || \ + mkdir stageprofile-fixincludes; \ + mv stageprofile-fixincludes fixincludes; \ + mv stage1-fixincludes prev-fixincludes || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-gcc ] || \ + mkdir stageprofile-gcc; \ + mv stageprofile-gcc gcc; \ + mv stage1-gcc prev-gcc || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-libbacktrace ] || \ + mkdir stageprofile-libbacktrace; \ + mv stageprofile-libbacktrace libbacktrace; \ + mv stage1-libbacktrace prev-libbacktrace || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-libcpp ] || \ + mkdir stageprofile-libcpp; \ + mv stageprofile-libcpp libcpp; \ + mv stage1-libcpp prev-libcpp || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-libcody ] || \ + mkdir stageprofile-libcody; \ + mv stageprofile-libcody libcody; \ + mv stage1-libcody prev-libcody || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-libdecnumber ] || \ + mkdir stageprofile-libdecnumber; \ + mv stageprofile-libdecnumber libdecnumber; \ + mv stage1-libdecnumber prev-libdecnumber || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-libiberty ] || \ + mkdir stageprofile-libiberty; \ + mv stageprofile-libiberty libiberty; \ + mv stage1-libiberty prev-libiberty || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-zlib ] || \ + mkdir stageprofile-zlib; \ + mv stageprofile-zlib zlib; \ + mv stage1-zlib prev-zlib || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageprofile-lto-plugin ] || \ + mkdir stageprofile-lto-plugin; \ + mv stageprofile-lto-plugin lto-plugin; \ + mv stage1-lto-plugin prev-lto-plugin || test -f stage1-lean + @[ -d stageprofile-$(TARGET_SUBDIR) ] || \ + mkdir stageprofile-$(TARGET_SUBDIR); \ + mv stageprofile-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stage1-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage1-lean + +stageprofile-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stageprofile-fixincludes; \ + mv prev-fixincludes stage1-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stageprofile-gcc; \ + mv prev-gcc stage1-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stageprofile-libbacktrace; \ + mv prev-libbacktrace stage1-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stageprofile-libcpp; \ + mv prev-libcpp stage1-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stageprofile-libcody; \ + mv prev-libcody stage1-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stageprofile-libdecnumber; \ + mv prev-libdecnumber stage1-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stageprofile-libiberty; \ + mv prev-libiberty stage1-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stageprofile-zlib; \ + mv prev-zlib stage1-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stageprofile-lto-plugin; \ + mv prev-lto-plugin stage1-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stageprofile-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage profile. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stageprofile-bubble +stageprofile-bubble:: stage1-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stageprofile-lean || test -f stage1-lean ; then \ + echo Skipping rebuild of stageprofile; \ + else \ + $(MAKE) stageprofile-start; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stageprofile; \ + fi + +.PHONY: all-stageprofile clean-stageprofile +do-clean: clean-stageprofile + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + + + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stage1:: distclean-stageprofile +.PHONY: distclean-stageprofile +distclean-stageprofile:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stageprofile || rm -f stage_last + rm -rf stageprofile-* + + + + +.PHONY: stagetrain-start stagetrain-end + +stagetrain-start:: + @: $(MAKE); $(stage); \ + echo stagetrain > stage_current; \ + echo stagetrain > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stagetrain-fixincludes ] || \ + mkdir stagetrain-fixincludes; \ + mv stagetrain-fixincludes fixincludes; \ + mv stageprofile-fixincludes prev-fixincludes || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-gcc ] || \ + mkdir stagetrain-gcc; \ + mv stagetrain-gcc gcc; \ + mv stageprofile-gcc prev-gcc || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-libbacktrace ] || \ + mkdir stagetrain-libbacktrace; \ + mv stagetrain-libbacktrace libbacktrace; \ + mv stageprofile-libbacktrace prev-libbacktrace || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-libcpp ] || \ + mkdir stagetrain-libcpp; \ + mv stagetrain-libcpp libcpp; \ + mv stageprofile-libcpp prev-libcpp || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-libcody ] || \ + mkdir stagetrain-libcody; \ + mv stagetrain-libcody libcody; \ + mv stageprofile-libcody prev-libcody || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-libdecnumber ] || \ + mkdir stagetrain-libdecnumber; \ + mv stagetrain-libdecnumber libdecnumber; \ + mv stageprofile-libdecnumber prev-libdecnumber || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-libiberty ] || \ + mkdir stagetrain-libiberty; \ + mv stagetrain-libiberty libiberty; \ + mv stageprofile-libiberty prev-libiberty || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-zlib ] || \ + mkdir stagetrain-zlib; \ + mv stagetrain-zlib zlib; \ + mv stageprofile-zlib prev-zlib || test -f stageprofile-lean + @cd $(HOST_SUBDIR); [ -d stagetrain-lto-plugin ] || \ + mkdir stagetrain-lto-plugin; \ + mv stagetrain-lto-plugin lto-plugin; \ + mv stageprofile-lto-plugin prev-lto-plugin || test -f stageprofile-lean + @[ -d stagetrain-$(TARGET_SUBDIR) ] || \ + mkdir stagetrain-$(TARGET_SUBDIR); \ + mv stagetrain-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stageprofile-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stageprofile-lean + +stagetrain-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stagetrain-fixincludes; \ + mv prev-fixincludes stageprofile-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stagetrain-gcc; \ + mv prev-gcc stageprofile-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stagetrain-libbacktrace; \ + mv prev-libbacktrace stageprofile-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stagetrain-libcpp; \ + mv prev-libcpp stageprofile-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stagetrain-libcody; \ + mv prev-libcody stageprofile-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stagetrain-libdecnumber; \ + mv prev-libdecnumber stageprofile-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stagetrain-libiberty; \ + mv prev-libiberty stageprofile-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stagetrain-zlib; \ + mv prev-zlib stageprofile-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stagetrain-lto-plugin; \ + mv prev-lto-plugin stageprofile-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stagetrain-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stageprofile-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage train. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stagetrain-bubble +stagetrain-bubble:: stageprofile-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stagetrain-lean || test -f stageprofile-lean ; then \ + echo Skipping rebuild of stagetrain; \ + else \ + $(MAKE) stagetrain-start; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stagetrain; \ + fi + +.PHONY: all-stagetrain clean-stagetrain +do-clean: clean-stagetrain + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + + + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stageprofile:: distclean-stagetrain +.PHONY: distclean-stagetrain +distclean-stagetrain:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stagetrain || rm -f stage_last + rm -rf stagetrain-* + + + + +.PHONY: stagefeedback-start stagefeedback-end + +stagefeedback-start:: + @: $(MAKE); $(stage); \ + echo stagefeedback > stage_current; \ + echo stagefeedback > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stagefeedback-fixincludes ] || \ + mkdir stagefeedback-fixincludes; \ + mv stagefeedback-fixincludes fixincludes; \ + mv stagetrain-fixincludes prev-fixincludes || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-gcc ] || \ + mkdir stagefeedback-gcc; \ + mv stagefeedback-gcc gcc; \ + mv stagetrain-gcc prev-gcc || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-libbacktrace ] || \ + mkdir stagefeedback-libbacktrace; \ + mv stagefeedback-libbacktrace libbacktrace; \ + mv stagetrain-libbacktrace prev-libbacktrace || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-libcpp ] || \ + mkdir stagefeedback-libcpp; \ + mv stagefeedback-libcpp libcpp; \ + mv stagetrain-libcpp prev-libcpp || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-libcody ] || \ + mkdir stagefeedback-libcody; \ + mv stagefeedback-libcody libcody; \ + mv stagetrain-libcody prev-libcody || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-libdecnumber ] || \ + mkdir stagefeedback-libdecnumber; \ + mv stagefeedback-libdecnumber libdecnumber; \ + mv stagetrain-libdecnumber prev-libdecnumber || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-libiberty ] || \ + mkdir stagefeedback-libiberty; \ + mv stagefeedback-libiberty libiberty; \ + mv stagetrain-libiberty prev-libiberty || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-zlib ] || \ + mkdir stagefeedback-zlib; \ + mv stagefeedback-zlib zlib; \ + mv stagetrain-zlib prev-zlib || test -f stagetrain-lean + @cd $(HOST_SUBDIR); [ -d stagefeedback-lto-plugin ] || \ + mkdir stagefeedback-lto-plugin; \ + mv stagefeedback-lto-plugin lto-plugin; \ + mv stagetrain-lto-plugin prev-lto-plugin || test -f stagetrain-lean + @[ -d stagefeedback-$(TARGET_SUBDIR) ] || \ + mkdir stagefeedback-$(TARGET_SUBDIR); \ + mv stagefeedback-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stagetrain-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stagetrain-lean + +stagefeedback-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stagefeedback-fixincludes; \ + mv prev-fixincludes stagetrain-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stagefeedback-gcc; \ + mv prev-gcc stagetrain-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stagefeedback-libbacktrace; \ + mv prev-libbacktrace stagetrain-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stagefeedback-libcpp; \ + mv prev-libcpp stagetrain-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stagefeedback-libcody; \ + mv prev-libcody stagetrain-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stagefeedback-libdecnumber; \ + mv prev-libdecnumber stagetrain-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stagefeedback-libiberty; \ + mv prev-libiberty stagetrain-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stagefeedback-zlib; \ + mv prev-zlib stagetrain-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stagefeedback-lto-plugin; \ + mv prev-lto-plugin stagetrain-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stagefeedback-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stagetrain-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage feedback. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stagefeedback-bubble +stagefeedback-bubble:: stagetrain-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stagefeedback-lean || test -f stagetrain-lean ; then \ + echo Skipping rebuild of stagefeedback; \ + else \ + $(MAKE) stagefeedback-start; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stagefeedback; \ + fi + +.PHONY: all-stagefeedback clean-stagefeedback +do-clean: clean-stagefeedback + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + + + +.PHONY: profiledbootstrap profiledbootstrap-lean +profiledbootstrap: + echo stagefeedback > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) stagefeedback-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + +profiledbootstrap-lean: + echo stagefeedback > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) LEAN=: stagefeedback-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stagetrain:: distclean-stagefeedback +.PHONY: distclean-stagefeedback +distclean-stagefeedback:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stagefeedback || rm -f stage_last + rm -rf stagefeedback-* + + + + +.PHONY: stageautoprofile-start stageautoprofile-end + +stageautoprofile-start:: + @: $(MAKE); $(stage); \ + echo stageautoprofile > stage_current; \ + echo stageautoprofile > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stageautoprofile-fixincludes ] || \ + mkdir stageautoprofile-fixincludes; \ + mv stageautoprofile-fixincludes fixincludes; \ + mv stage1-fixincludes prev-fixincludes || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-gcc ] || \ + mkdir stageautoprofile-gcc; \ + mv stageautoprofile-gcc gcc; \ + mv stage1-gcc prev-gcc || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-libbacktrace ] || \ + mkdir stageautoprofile-libbacktrace; \ + mv stageautoprofile-libbacktrace libbacktrace; \ + mv stage1-libbacktrace prev-libbacktrace || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-libcpp ] || \ + mkdir stageautoprofile-libcpp; \ + mv stageautoprofile-libcpp libcpp; \ + mv stage1-libcpp prev-libcpp || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-libcody ] || \ + mkdir stageautoprofile-libcody; \ + mv stageautoprofile-libcody libcody; \ + mv stage1-libcody prev-libcody || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-libdecnumber ] || \ + mkdir stageautoprofile-libdecnumber; \ + mv stageautoprofile-libdecnumber libdecnumber; \ + mv stage1-libdecnumber prev-libdecnumber || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-libiberty ] || \ + mkdir stageautoprofile-libiberty; \ + mv stageautoprofile-libiberty libiberty; \ + mv stage1-libiberty prev-libiberty || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-zlib ] || \ + mkdir stageautoprofile-zlib; \ + mv stageautoprofile-zlib zlib; \ + mv stage1-zlib prev-zlib || test -f stage1-lean + @cd $(HOST_SUBDIR); [ -d stageautoprofile-lto-plugin ] || \ + mkdir stageautoprofile-lto-plugin; \ + mv stageautoprofile-lto-plugin lto-plugin; \ + mv stage1-lto-plugin prev-lto-plugin || test -f stage1-lean + @[ -d stageautoprofile-$(TARGET_SUBDIR) ] || \ + mkdir stageautoprofile-$(TARGET_SUBDIR); \ + mv stageautoprofile-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stage1-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage1-lean + +stageautoprofile-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stageautoprofile-fixincludes; \ + mv prev-fixincludes stage1-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stageautoprofile-gcc; \ + mv prev-gcc stage1-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stageautoprofile-libbacktrace; \ + mv prev-libbacktrace stage1-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stageautoprofile-libcpp; \ + mv prev-libcpp stage1-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stageautoprofile-libcody; \ + mv prev-libcody stage1-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stageautoprofile-libdecnumber; \ + mv prev-libdecnumber stage1-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stageautoprofile-libiberty; \ + mv prev-libiberty stage1-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stageautoprofile-zlib; \ + mv prev-zlib stage1-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stageautoprofile-lto-plugin; \ + mv prev-lto-plugin stage1-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stageautoprofile-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage autoprofile. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stageautoprofile-bubble +stageautoprofile-bubble:: stage1-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stageautoprofile-lean || test -f stage1-lean ; then \ + echo Skipping rebuild of stageautoprofile; \ + else \ + $(MAKE) stageautoprofile-start; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stageautoprofile; \ + fi + +.PHONY: all-stageautoprofile clean-stageautoprofile +do-clean: clean-stageautoprofile + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + + + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stage1:: distclean-stageautoprofile +.PHONY: distclean-stageautoprofile +distclean-stageautoprofile:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stageautoprofile || rm -f stage_last + rm -rf stageautoprofile-* + + + + +.PHONY: stageautofeedback-start stageautofeedback-end + +stageautofeedback-start:: + @: $(MAKE); $(stage); \ + echo stageautofeedback > stage_current; \ + echo stageautofeedback > stage_last; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR) + @cd $(HOST_SUBDIR); [ -d stageautofeedback-fixincludes ] || \ + mkdir stageautofeedback-fixincludes; \ + mv stageautofeedback-fixincludes fixincludes; \ + mv stageautoprofile-fixincludes prev-fixincludes || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-gcc ] || \ + mkdir stageautofeedback-gcc; \ + mv stageautofeedback-gcc gcc; \ + mv stageautoprofile-gcc prev-gcc || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-libbacktrace ] || \ + mkdir stageautofeedback-libbacktrace; \ + mv stageautofeedback-libbacktrace libbacktrace; \ + mv stageautoprofile-libbacktrace prev-libbacktrace || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-libcpp ] || \ + mkdir stageautofeedback-libcpp; \ + mv stageautofeedback-libcpp libcpp; \ + mv stageautoprofile-libcpp prev-libcpp || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-libcody ] || \ + mkdir stageautofeedback-libcody; \ + mv stageautofeedback-libcody libcody; \ + mv stageautoprofile-libcody prev-libcody || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-libdecnumber ] || \ + mkdir stageautofeedback-libdecnumber; \ + mv stageautofeedback-libdecnumber libdecnumber; \ + mv stageautoprofile-libdecnumber prev-libdecnumber || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-libiberty ] || \ + mkdir stageautofeedback-libiberty; \ + mv stageautofeedback-libiberty libiberty; \ + mv stageautoprofile-libiberty prev-libiberty || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-zlib ] || \ + mkdir stageautofeedback-zlib; \ + mv stageautofeedback-zlib zlib; \ + mv stageautoprofile-zlib prev-zlib || test -f stageautoprofile-lean + @cd $(HOST_SUBDIR); [ -d stageautofeedback-lto-plugin ] || \ + mkdir stageautofeedback-lto-plugin; \ + mv stageautofeedback-lto-plugin lto-plugin; \ + mv stageautoprofile-lto-plugin prev-lto-plugin || test -f stageautoprofile-lean + @[ -d stageautofeedback-$(TARGET_SUBDIR) ] || \ + mkdir stageautofeedback-$(TARGET_SUBDIR); \ + mv stageautofeedback-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ + mv stageautoprofile-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stageautoprofile-lean + +stageautofeedback-end:: + @if test -d $(HOST_SUBDIR)/fixincludes; then \ + cd $(HOST_SUBDIR); mv fixincludes stageautofeedback-fixincludes; \ + mv prev-fixincludes stageautoprofile-fixincludes; : ; \ + fi + @if test -d $(HOST_SUBDIR)/gcc; then \ + cd $(HOST_SUBDIR); mv gcc stageautofeedback-gcc; \ + mv prev-gcc stageautoprofile-gcc; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libbacktrace; then \ + cd $(HOST_SUBDIR); mv libbacktrace stageautofeedback-libbacktrace; \ + mv prev-libbacktrace stageautoprofile-libbacktrace; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcpp; then \ + cd $(HOST_SUBDIR); mv libcpp stageautofeedback-libcpp; \ + mv prev-libcpp stageautoprofile-libcpp; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libcody; then \ + cd $(HOST_SUBDIR); mv libcody stageautofeedback-libcody; \ + mv prev-libcody stageautoprofile-libcody; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libdecnumber; then \ + cd $(HOST_SUBDIR); mv libdecnumber stageautofeedback-libdecnumber; \ + mv prev-libdecnumber stageautoprofile-libdecnumber; : ; \ + fi + @if test -d $(HOST_SUBDIR)/libiberty; then \ + cd $(HOST_SUBDIR); mv libiberty stageautofeedback-libiberty; \ + mv prev-libiberty stageautoprofile-libiberty; : ; \ + fi + @if test -d $(HOST_SUBDIR)/zlib; then \ + cd $(HOST_SUBDIR); mv zlib stageautofeedback-zlib; \ + mv prev-zlib stageautoprofile-zlib; : ; \ + fi + @if test -d $(HOST_SUBDIR)/lto-plugin; then \ + cd $(HOST_SUBDIR); mv lto-plugin stageautofeedback-lto-plugin; \ + mv prev-lto-plugin stageautoprofile-lto-plugin; : ; \ + fi + @if test -d $(TARGET_SUBDIR); then \ + mv $(TARGET_SUBDIR) stageautofeedback-$(TARGET_SUBDIR); \ + mv prev-$(TARGET_SUBDIR) stageautoprofile-$(TARGET_SUBDIR); : ; \ + fi + rm -f stage_current + +# Bubble a bug fix through all the stages up to stage autofeedback. They are +# remade, but not reconfigured. The next stage (if any) will not be +# reconfigured either. +.PHONY: stageautofeedback-bubble +stageautofeedback-bubble:: stageautoprofile-bubble + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + if test -f stageautofeedback-lean || test -f stageautoprofile-lean ; then \ + echo Skipping rebuild of stageautofeedback; \ + else \ + $(MAKE) stageautofeedback-start; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stageautofeedback; \ + fi + +.PHONY: all-stageautofeedback clean-stageautofeedback +do-clean: clean-stageautofeedback + +# FIXME: Will not need to be conditional when toplevel bootstrap is the +# only possibility, but now it conflicts with no-bootstrap rules + + + +.PHONY: autoprofiledbootstrap autoprofiledbootstrap-lean +autoprofiledbootstrap: + echo stageautofeedback > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) stageautofeedback-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + +autoprofiledbootstrap-lean: + echo stageautofeedback > stage_final + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) LEAN=: stageautofeedback-bubble + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target + + +# Rules to wipe a stage and all the following ones, also used for cleanstrap +distclean-stageautoprofile:: distclean-stageautofeedback +.PHONY: distclean-stageautofeedback +distclean-stageautofeedback:: + @: $(MAKE); $(stage) + @test "`cat stage_last`" != stageautofeedback || rm -f stage_last + rm -rf stageautofeedback-* + + + + + +stageprofile-end:: + $(MAKE) distclean-stagefeedback + +stagefeedback-start:: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + for i in prev-*; do \ + j=`echo $$i | sed s/^prev-//`; \ + cd $$r/$$i && \ + { find . -type d | sort | sed 's,.*,$(SHELL) '"$$s"'/mkinstalldirs "../'$$j'/&",' | $(SHELL); } && \ + { find . -name '*.*da' | sed 's,.*,$(LN) -f "&" "../'$$j'/&",' | $(SHELL); }; \ + done + +do-distclean: distclean-stage1 + +# Provide a GCC build when we're building target libraries. This does +# not work as a dependency, just as the minimum necessary to avoid errors. +stage_last: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble + +# Same as unstage, but not phony and defaulting to stage1-start. We place +# it in the dependency so that for example `make -j3 all-gcc' works. +stage_current: + @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi + +.PHONY: restrap +restrap:: + @: $(MAKE); $(stage) + rm -rf stage1-$(TARGET_SUBDIR) stage2-* stage3-* stage4-* stageprofile-* stagetrain-* stagefeedback-* stageautoprofile-* stageautofeedback-* +restrap:: all + +# -------------------------------------- +# Dependencies between different modules +# -------------------------------------- + +# Generic dependencies for target modules on host stuff, especially gcc +configure-stage1-target-libstdc++-v3: maybe-all-stage1-gcc +configure-stage2-target-libstdc++-v3: maybe-all-stage2-gcc +configure-stage3-target-libstdc++-v3: maybe-all-stage3-gcc +configure-stage4-target-libstdc++-v3: maybe-all-stage4-gcc +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-gcc +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-gcc +configure-stage1-target-libsanitizer: maybe-all-stage1-gcc +configure-stage2-target-libsanitizer: maybe-all-stage2-gcc +configure-stage3-target-libsanitizer: maybe-all-stage3-gcc +configure-stage4-target-libsanitizer: maybe-all-stage4-gcc +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-gcc +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-gcc +configure-stage1-target-libvtv: maybe-all-stage1-gcc +configure-stage2-target-libvtv: maybe-all-stage2-gcc +configure-stage3-target-libvtv: maybe-all-stage3-gcc +configure-stage4-target-libvtv: maybe-all-stage4-gcc +configure-stageprofile-target-libvtv: maybe-all-stageprofile-gcc +configure-stagetrain-target-libvtv: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-gcc +configure-target-libssp: stage_last +configure-target-newlib: stage_last +configure-stage1-target-libgcc: maybe-all-stage1-gcc +configure-stage2-target-libgcc: maybe-all-stage2-gcc +configure-stage3-target-libgcc: maybe-all-stage3-gcc +configure-stage4-target-libgcc: maybe-all-stage4-gcc +configure-stageprofile-target-libgcc: maybe-all-stageprofile-gcc +configure-stagetrain-target-libgcc: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libgcc: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libgcc: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libgcc: maybe-all-stageautofeedback-gcc +configure-stage1-target-libbacktrace: maybe-all-stage1-gcc +configure-stage2-target-libbacktrace: maybe-all-stage2-gcc +configure-stage3-target-libbacktrace: maybe-all-stage3-gcc +configure-stage4-target-libbacktrace: maybe-all-stage4-gcc +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-gcc +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-gcc +configure-target-libquadmath: stage_last +configure-target-libgfortran: stage_last +configure-target-libobjc: stage_last +configure-target-libgo: stage_last +configure-stage1-target-libphobos: maybe-all-stage1-gcc +configure-stage2-target-libphobos: maybe-all-stage2-gcc +configure-stage3-target-libphobos: maybe-all-stage3-gcc +configure-stage4-target-libphobos: maybe-all-stage4-gcc +configure-stageprofile-target-libphobos: maybe-all-stageprofile-gcc +configure-stagetrain-target-libphobos: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-gcc +configure-target-libtermcap: stage_last +configure-target-winsup: stage_last +configure-target-libgloss: stage_last +configure-target-libffi: stage_last +configure-stage1-target-zlib: maybe-all-stage1-gcc +configure-stage2-target-zlib: maybe-all-stage2-gcc +configure-stage3-target-zlib: maybe-all-stage3-gcc +configure-stage4-target-zlib: maybe-all-stage4-gcc +configure-stageprofile-target-zlib: maybe-all-stageprofile-gcc +configure-stagetrain-target-zlib: maybe-all-stagetrain-gcc +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-gcc +configure-target-rda: stage_last +configure-target-libada: stage_last +configure-target-libgm2: stage_last +configure-stage1-target-libgomp: maybe-all-stage1-gcc +configure-stage2-target-libgomp: maybe-all-stage2-gcc +configure-stage3-target-libgomp: maybe-all-stage3-gcc +configure-stage4-target-libgomp: maybe-all-stage4-gcc +configure-stageprofile-target-libgomp: maybe-all-stageprofile-gcc +configure-stagetrain-target-libgomp: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-gcc +configure-target-libitm: stage_last +configure-stage1-target-libatomic: maybe-all-stage1-gcc +configure-stage2-target-libatomic: maybe-all-stage2-gcc +configure-stage3-target-libatomic: maybe-all-stage3-gcc +configure-stage4-target-libatomic: maybe-all-stage4-gcc +configure-stageprofile-target-libatomic: maybe-all-stageprofile-gcc +configure-stagetrain-target-libatomic: maybe-all-stagetrain-gcc +configure-stagefeedback-target-libatomic: maybe-all-stagefeedback-gcc +configure-stageautoprofile-target-libatomic: maybe-all-stageautoprofile-gcc +configure-stageautofeedback-target-libatomic: maybe-all-stageautofeedback-gcc +configure-target-libgrust: stage_last + + + +# There are two types of dependencies here: 'hard' dependencies, where one +# module simply won't build without the other; and 'soft' dependencies, where +# if the depended-on module is missing, the depending module will do without +# or find a substitute somewhere (perhaps installed). Soft dependencies +# are made here to depend on a 'maybe-' target. If you're not sure, +# it's safer to use a soft dependency. + + + + + + +# With all the machinery above in place, it is pretty easy to generate +# dependencies. Host dependencies are a bit more complex because we have +# to check for bootstrap/prebootstrap dependencies. To resolve +# prebootstrap dependencies, prebootstrap modules are gathered in +# a hash table. +all-build-bison: maybe-all-build-texinfo +all-build-flex: maybe-all-build-texinfo +all-build-flex: maybe-all-build-bison +all-build-flex: maybe-all-build-m4 +all-build-libiberty: maybe-all-build-texinfo +all-build-m4: maybe-all-build-texinfo +all-build-fixincludes: maybe-all-build-libiberty +all-build-libcpp: maybe-all-build-libiberty +configure-gcc: maybe-configure-gettext +configure-stage1-gcc: maybe-configure-stage1-gettext +configure-stage2-gcc: maybe-configure-stage2-gettext +configure-stage3-gcc: maybe-configure-stage3-gettext +configure-stage4-gcc: maybe-configure-stage4-gettext +configure-stageprofile-gcc: maybe-configure-stageprofile-gettext +configure-stagetrain-gcc: maybe-configure-stagetrain-gettext +configure-stagefeedback-gcc: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-gcc: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-gcc: maybe-configure-stageautofeedback-gettext +configure-gcc: maybe-all-gmp +configure-stage1-gcc: maybe-all-stage1-gmp +configure-stage2-gcc: maybe-all-stage2-gmp +configure-stage3-gcc: maybe-all-stage3-gmp +configure-stage4-gcc: maybe-all-stage4-gmp +configure-stageprofile-gcc: maybe-all-stageprofile-gmp +configure-stagetrain-gcc: maybe-all-stagetrain-gmp +configure-stagefeedback-gcc: maybe-all-stagefeedback-gmp +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-gmp +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-gmp +configure-gcc: maybe-all-mpfr +configure-stage1-gcc: maybe-all-stage1-mpfr +configure-stage2-gcc: maybe-all-stage2-mpfr +configure-stage3-gcc: maybe-all-stage3-mpfr +configure-stage4-gcc: maybe-all-stage4-mpfr +configure-stageprofile-gcc: maybe-all-stageprofile-mpfr +configure-stagetrain-gcc: maybe-all-stagetrain-mpfr +configure-stagefeedback-gcc: maybe-all-stagefeedback-mpfr +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-mpfr +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-mpfr +configure-gcc: maybe-all-mpc +configure-stage1-gcc: maybe-all-stage1-mpc +configure-stage2-gcc: maybe-all-stage2-mpc +configure-stage3-gcc: maybe-all-stage3-mpc +configure-stage4-gcc: maybe-all-stage4-mpc +configure-stageprofile-gcc: maybe-all-stageprofile-mpc +configure-stagetrain-gcc: maybe-all-stagetrain-mpc +configure-stagefeedback-gcc: maybe-all-stagefeedback-mpc +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-mpc +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-mpc +configure-gcc: maybe-all-isl +configure-stage1-gcc: maybe-all-stage1-isl +configure-stage2-gcc: maybe-all-stage2-isl +configure-stage3-gcc: maybe-all-stage3-isl +configure-stage4-gcc: maybe-all-stage4-isl +configure-stageprofile-gcc: maybe-all-stageprofile-isl +configure-stagetrain-gcc: maybe-all-stagetrain-isl +configure-stagefeedback-gcc: maybe-all-stagefeedback-isl +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-isl +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-isl +configure-gcc: maybe-all-lto-plugin +configure-stage1-gcc: maybe-all-stage1-lto-plugin +configure-stage2-gcc: maybe-all-stage2-lto-plugin +configure-stage3-gcc: maybe-all-stage3-lto-plugin +configure-stage4-gcc: maybe-all-stage4-lto-plugin +configure-stageprofile-gcc: maybe-all-stageprofile-lto-plugin +configure-stagetrain-gcc: maybe-all-stagetrain-lto-plugin +configure-stagefeedback-gcc: maybe-all-stagefeedback-lto-plugin +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-lto-plugin +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-lto-plugin +configure-gcc: maybe-all-binutils +configure-stage1-gcc: maybe-all-stage1-binutils +configure-stage2-gcc: maybe-all-stage2-binutils +configure-stage3-gcc: maybe-all-stage3-binutils +configure-stage4-gcc: maybe-all-stage4-binutils +configure-stageprofile-gcc: maybe-all-stageprofile-binutils +configure-stagetrain-gcc: maybe-all-stagetrain-binutils +configure-stagefeedback-gcc: maybe-all-stagefeedback-binutils +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-binutils +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-binutils +configure-gcc: maybe-all-gas +configure-stage1-gcc: maybe-all-stage1-gas +configure-stage2-gcc: maybe-all-stage2-gas +configure-stage3-gcc: maybe-all-stage3-gas +configure-stage4-gcc: maybe-all-stage4-gas +configure-stageprofile-gcc: maybe-all-stageprofile-gas +configure-stagetrain-gcc: maybe-all-stagetrain-gas +configure-stagefeedback-gcc: maybe-all-stagefeedback-gas +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-gas +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-gas +configure-gcc: maybe-all-ld +configure-stage1-gcc: maybe-all-stage1-ld +configure-stage2-gcc: maybe-all-stage2-ld +configure-stage3-gcc: maybe-all-stage3-ld +configure-stage4-gcc: maybe-all-stage4-ld +configure-stageprofile-gcc: maybe-all-stageprofile-ld +configure-stagetrain-gcc: maybe-all-stagetrain-ld +configure-stagefeedback-gcc: maybe-all-stagefeedback-ld +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-ld +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-ld +configure-gcc: maybe-all-gold +configure-stage1-gcc: maybe-all-stage1-gold +configure-stage2-gcc: maybe-all-stage2-gold +configure-stage3-gcc: maybe-all-stage3-gold +configure-stage4-gcc: maybe-all-stage4-gold +configure-stageprofile-gcc: maybe-all-stageprofile-gold +configure-stagetrain-gcc: maybe-all-stagetrain-gold +configure-stagefeedback-gcc: maybe-all-stagefeedback-gold +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-gold +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-gold +configure-gcc: maybe-all-libiconv +configure-stage1-gcc: maybe-all-stage1-libiconv +configure-stage2-gcc: maybe-all-stage2-libiconv +configure-stage3-gcc: maybe-all-stage3-libiconv +configure-stage4-gcc: maybe-all-stage4-libiconv +configure-stageprofile-gcc: maybe-all-stageprofile-libiconv +configure-stagetrain-gcc: maybe-all-stagetrain-libiconv +configure-stagefeedback-gcc: maybe-all-stagefeedback-libiconv +configure-stageautoprofile-gcc: maybe-all-stageautoprofile-libiconv +configure-stageautofeedback-gcc: maybe-all-stageautofeedback-libiconv +all-gcc: all-libiberty +all-stage1-gcc: all-stage1-libiberty +all-stage2-gcc: all-stage2-libiberty +all-stage3-gcc: all-stage3-libiberty +all-stage4-gcc: all-stage4-libiberty +all-stageprofile-gcc: all-stageprofile-libiberty +all-stagetrain-gcc: all-stagetrain-libiberty +all-stagefeedback-gcc: all-stagefeedback-libiberty +all-stageautoprofile-gcc: all-stageautoprofile-libiberty +all-stageautofeedback-gcc: all-stageautofeedback-libiberty +all-gcc: maybe-all-libgrust +all-stage1-gcc: maybe-all-stage1-libgrust +all-stage2-gcc: maybe-all-stage2-libgrust +all-stage3-gcc: maybe-all-stage3-libgrust +all-stage4-gcc: maybe-all-stage4-libgrust +all-stageprofile-gcc: maybe-all-stageprofile-libgrust +all-stagetrain-gcc: maybe-all-stagetrain-libgrust +all-stagefeedback-gcc: maybe-all-stagefeedback-libgrust +all-stageautoprofile-gcc: maybe-all-stageautoprofile-libgrust +all-stageautofeedback-gcc: maybe-all-stageautofeedback-libgrust +all-gcc: maybe-all-gettext +all-stage1-gcc: maybe-all-stage1-gettext +all-stage2-gcc: maybe-all-stage2-gettext +all-stage3-gcc: maybe-all-stage3-gettext +all-stage4-gcc: maybe-all-stage4-gettext +all-stageprofile-gcc: maybe-all-stageprofile-gettext +all-stagetrain-gcc: maybe-all-stagetrain-gettext +all-stagefeedback-gcc: maybe-all-stagefeedback-gettext +all-stageautoprofile-gcc: maybe-all-stageautoprofile-gettext +all-stageautofeedback-gcc: maybe-all-stageautofeedback-gettext +all-gcc: maybe-all-mpfr +all-stage1-gcc: maybe-all-stage1-mpfr +all-stage2-gcc: maybe-all-stage2-mpfr +all-stage3-gcc: maybe-all-stage3-mpfr +all-stage4-gcc: maybe-all-stage4-mpfr +all-stageprofile-gcc: maybe-all-stageprofile-mpfr +all-stagetrain-gcc: maybe-all-stagetrain-mpfr +all-stagefeedback-gcc: maybe-all-stagefeedback-mpfr +all-stageautoprofile-gcc: maybe-all-stageautoprofile-mpfr +all-stageautofeedback-gcc: maybe-all-stageautofeedback-mpfr +all-gcc: maybe-all-mpc +all-stage1-gcc: maybe-all-stage1-mpc +all-stage2-gcc: maybe-all-stage2-mpc +all-stage3-gcc: maybe-all-stage3-mpc +all-stage4-gcc: maybe-all-stage4-mpc +all-stageprofile-gcc: maybe-all-stageprofile-mpc +all-stagetrain-gcc: maybe-all-stagetrain-mpc +all-stagefeedback-gcc: maybe-all-stagefeedback-mpc +all-stageautoprofile-gcc: maybe-all-stageautoprofile-mpc +all-stageautofeedback-gcc: maybe-all-stageautofeedback-mpc +all-gcc: maybe-all-isl +all-stage1-gcc: maybe-all-stage1-isl +all-stage2-gcc: maybe-all-stage2-isl +all-stage3-gcc: maybe-all-stage3-isl +all-stage4-gcc: maybe-all-stage4-isl +all-stageprofile-gcc: maybe-all-stageprofile-isl +all-stagetrain-gcc: maybe-all-stagetrain-isl +all-stagefeedback-gcc: maybe-all-stagefeedback-isl +all-stageautoprofile-gcc: maybe-all-stageautoprofile-isl +all-stageautofeedback-gcc: maybe-all-stageautofeedback-isl +all-gcc: maybe-all-build-texinfo +all-stage1-gcc: maybe-all-build-texinfo +all-stage2-gcc: maybe-all-build-texinfo +all-stage3-gcc: maybe-all-build-texinfo +all-stage4-gcc: maybe-all-build-texinfo +all-stageprofile-gcc: maybe-all-build-texinfo +all-stagetrain-gcc: maybe-all-build-texinfo +all-stagefeedback-gcc: maybe-all-build-texinfo +all-stageautoprofile-gcc: maybe-all-build-texinfo +all-stageautofeedback-gcc: maybe-all-build-texinfo +all-gcc: maybe-all-build-bison +all-stage1-gcc: maybe-all-build-bison +all-stage2-gcc: maybe-all-build-bison +all-stage3-gcc: maybe-all-build-bison +all-stage4-gcc: maybe-all-build-bison +all-stageprofile-gcc: maybe-all-build-bison +all-stagetrain-gcc: maybe-all-build-bison +all-stagefeedback-gcc: maybe-all-build-bison +all-stageautoprofile-gcc: maybe-all-build-bison +all-stageautofeedback-gcc: maybe-all-build-bison +all-gcc: maybe-all-build-flex +all-stage1-gcc: maybe-all-build-flex +all-stage2-gcc: maybe-all-build-flex +all-stage3-gcc: maybe-all-build-flex +all-stage4-gcc: maybe-all-build-flex +all-stageprofile-gcc: maybe-all-build-flex +all-stagetrain-gcc: maybe-all-build-flex +all-stagefeedback-gcc: maybe-all-build-flex +all-stageautoprofile-gcc: maybe-all-build-flex +all-stageautofeedback-gcc: maybe-all-build-flex +all-gcc: maybe-all-build-libiberty +all-stage1-gcc: maybe-all-build-libiberty +all-stage2-gcc: maybe-all-build-libiberty +all-stage3-gcc: maybe-all-build-libiberty +all-stage4-gcc: maybe-all-build-libiberty +all-stageprofile-gcc: maybe-all-build-libiberty +all-stagetrain-gcc: maybe-all-build-libiberty +all-stagefeedback-gcc: maybe-all-build-libiberty +all-stageautoprofile-gcc: maybe-all-build-libiberty +all-stageautofeedback-gcc: maybe-all-build-libiberty +all-gcc: maybe-all-build-fixincludes +all-stage1-gcc: maybe-all-build-fixincludes +all-stage2-gcc: maybe-all-build-fixincludes +all-stage3-gcc: maybe-all-build-fixincludes +all-stage4-gcc: maybe-all-build-fixincludes +all-stageprofile-gcc: maybe-all-build-fixincludes +all-stagetrain-gcc: maybe-all-build-fixincludes +all-stagefeedback-gcc: maybe-all-build-fixincludes +all-stageautoprofile-gcc: maybe-all-build-fixincludes +all-stageautofeedback-gcc: maybe-all-build-fixincludes +all-gcc: maybe-all-build-libcpp +all-stage1-gcc: maybe-all-build-libcpp +all-stage2-gcc: maybe-all-build-libcpp +all-stage3-gcc: maybe-all-build-libcpp +all-stage4-gcc: maybe-all-build-libcpp +all-stageprofile-gcc: maybe-all-build-libcpp +all-stagetrain-gcc: maybe-all-build-libcpp +all-stagefeedback-gcc: maybe-all-build-libcpp +all-stageautoprofile-gcc: maybe-all-build-libcpp +all-stageautofeedback-gcc: maybe-all-build-libcpp +all-gcc: maybe-all-zlib +all-stage1-gcc: maybe-all-stage1-zlib +all-stage2-gcc: maybe-all-stage2-zlib +all-stage3-gcc: maybe-all-stage3-zlib +all-stage4-gcc: maybe-all-stage4-zlib +all-stageprofile-gcc: maybe-all-stageprofile-zlib +all-stagetrain-gcc: maybe-all-stagetrain-zlib +all-stagefeedback-gcc: maybe-all-stagefeedback-zlib +all-stageautoprofile-gcc: maybe-all-stageautoprofile-zlib +all-stageautofeedback-gcc: maybe-all-stageautofeedback-zlib +all-gcc: all-libbacktrace +all-stage1-gcc: all-stage1-libbacktrace +all-stage2-gcc: all-stage2-libbacktrace +all-stage3-gcc: all-stage3-libbacktrace +all-stage4-gcc: all-stage4-libbacktrace +all-stageprofile-gcc: all-stageprofile-libbacktrace +all-stagetrain-gcc: all-stagetrain-libbacktrace +all-stagefeedback-gcc: all-stagefeedback-libbacktrace +all-stageautoprofile-gcc: all-stageautoprofile-libbacktrace +all-stageautofeedback-gcc: all-stageautofeedback-libbacktrace +all-gcc: all-libcpp +all-stage1-gcc: all-stage1-libcpp +all-stage2-gcc: all-stage2-libcpp +all-stage3-gcc: all-stage3-libcpp +all-stage4-gcc: all-stage4-libcpp +all-stageprofile-gcc: all-stageprofile-libcpp +all-stagetrain-gcc: all-stagetrain-libcpp +all-stagefeedback-gcc: all-stagefeedback-libcpp +all-stageautoprofile-gcc: all-stageautoprofile-libcpp +all-stageautofeedback-gcc: all-stageautofeedback-libcpp +all-gcc: all-libcody +all-stage1-gcc: all-stage1-libcody +all-stage2-gcc: all-stage2-libcody +all-stage3-gcc: all-stage3-libcody +all-stage4-gcc: all-stage4-libcody +all-stageprofile-gcc: all-stageprofile-libcody +all-stagetrain-gcc: all-stagetrain-libcody +all-stagefeedback-gcc: all-stagefeedback-libcody +all-stageautoprofile-gcc: all-stageautoprofile-libcody +all-stageautofeedback-gcc: all-stageautofeedback-libcody +all-gcc: all-libdecnumber +all-stage1-gcc: all-stage1-libdecnumber +all-stage2-gcc: all-stage2-libdecnumber +all-stage3-gcc: all-stage3-libdecnumber +all-stage4-gcc: all-stage4-libdecnumber +all-stageprofile-gcc: all-stageprofile-libdecnumber +all-stagetrain-gcc: all-stagetrain-libdecnumber +all-stagefeedback-gcc: all-stagefeedback-libdecnumber +all-stageautoprofile-gcc: all-stageautoprofile-libdecnumber +all-stageautofeedback-gcc: all-stageautofeedback-libdecnumber +all-gcc: maybe-all-libiberty +all-stage1-gcc: maybe-all-stage1-libiberty +all-stage2-gcc: maybe-all-stage2-libiberty +all-stage3-gcc: maybe-all-stage3-libiberty +all-stage4-gcc: maybe-all-stage4-libiberty +all-stageprofile-gcc: maybe-all-stageprofile-libiberty +all-stagetrain-gcc: maybe-all-stagetrain-libiberty +all-stagefeedback-gcc: maybe-all-stagefeedback-libiberty +all-stageautoprofile-gcc: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-gcc: maybe-all-stageautofeedback-libiberty +all-gcc: maybe-all-fixincludes +all-stage1-gcc: maybe-all-stage1-fixincludes +all-stage2-gcc: maybe-all-stage2-fixincludes +all-stage3-gcc: maybe-all-stage3-fixincludes +all-stage4-gcc: maybe-all-stage4-fixincludes +all-stageprofile-gcc: maybe-all-stageprofile-fixincludes +all-stagetrain-gcc: maybe-all-stagetrain-fixincludes +all-stagefeedback-gcc: maybe-all-stagefeedback-fixincludes +all-stageautoprofile-gcc: maybe-all-stageautoprofile-fixincludes +all-stageautofeedback-gcc: maybe-all-stageautofeedback-fixincludes +all-gcc: maybe-all-lto-plugin +all-stage1-gcc: maybe-all-stage1-lto-plugin +all-stage2-gcc: maybe-all-stage2-lto-plugin +all-stage3-gcc: maybe-all-stage3-lto-plugin +all-stage4-gcc: maybe-all-stage4-lto-plugin +all-stageprofile-gcc: maybe-all-stageprofile-lto-plugin +all-stagetrain-gcc: maybe-all-stagetrain-lto-plugin +all-stagefeedback-gcc: maybe-all-stagefeedback-lto-plugin +all-stageautoprofile-gcc: maybe-all-stageautoprofile-lto-plugin +all-stageautofeedback-gcc: maybe-all-stageautofeedback-lto-plugin +all-gcc: maybe-all-libiconv +all-stage1-gcc: maybe-all-stage1-libiconv +all-stage2-gcc: maybe-all-stage2-libiconv +all-stage3-gcc: maybe-all-stage3-libiconv +all-stage4-gcc: maybe-all-stage4-libiconv +all-stageprofile-gcc: maybe-all-stageprofile-libiconv +all-stagetrain-gcc: maybe-all-stagetrain-libiconv +all-stagefeedback-gcc: maybe-all-stagefeedback-libiconv +all-stageautoprofile-gcc: maybe-all-stageautoprofile-libiconv +all-stageautofeedback-gcc: maybe-all-stageautofeedback-libiconv +info-gcc: maybe-all-build-libiberty +info-stage1-gcc: maybe-all-build-libiberty +info-stage2-gcc: maybe-all-build-libiberty +info-stage3-gcc: maybe-all-build-libiberty +info-stage4-gcc: maybe-all-build-libiberty +info-stageprofile-gcc: maybe-all-build-libiberty +info-stagetrain-gcc: maybe-all-build-libiberty +info-stagefeedback-gcc: maybe-all-build-libiberty +info-stageautoprofile-gcc: maybe-all-build-libiberty +info-stageautofeedback-gcc: maybe-all-build-libiberty +dvi-gcc: maybe-all-build-libiberty +dvi-stage1-gcc: maybe-all-build-libiberty +dvi-stage2-gcc: maybe-all-build-libiberty +dvi-stage3-gcc: maybe-all-build-libiberty +dvi-stage4-gcc: maybe-all-build-libiberty +dvi-stageprofile-gcc: maybe-all-build-libiberty +dvi-stagetrain-gcc: maybe-all-build-libiberty +dvi-stagefeedback-gcc: maybe-all-build-libiberty +dvi-stageautoprofile-gcc: maybe-all-build-libiberty +dvi-stageautofeedback-gcc: maybe-all-build-libiberty +pdf-gcc: maybe-all-build-libiberty +pdf-stage1-gcc: maybe-all-build-libiberty +pdf-stage2-gcc: maybe-all-build-libiberty +pdf-stage3-gcc: maybe-all-build-libiberty +pdf-stage4-gcc: maybe-all-build-libiberty +pdf-stageprofile-gcc: maybe-all-build-libiberty +pdf-stagetrain-gcc: maybe-all-build-libiberty +pdf-stagefeedback-gcc: maybe-all-build-libiberty +pdf-stageautoprofile-gcc: maybe-all-build-libiberty +pdf-stageautofeedback-gcc: maybe-all-build-libiberty +html-gcc: maybe-all-build-libiberty +html-stage1-gcc: maybe-all-build-libiberty +html-stage2-gcc: maybe-all-build-libiberty +html-stage3-gcc: maybe-all-build-libiberty +html-stage4-gcc: maybe-all-build-libiberty +html-stageprofile-gcc: maybe-all-build-libiberty +html-stagetrain-gcc: maybe-all-build-libiberty +html-stagefeedback-gcc: maybe-all-build-libiberty +html-stageautoprofile-gcc: maybe-all-build-libiberty +html-stageautofeedback-gcc: maybe-all-build-libiberty +install-gcc: maybe-install-fixincludes +install-gcc: maybe-install-lto-plugin +install-strip-gcc: maybe-install-strip-fixincludes +install-strip-gcc: maybe-install-strip-lto-plugin +configure-libcpp: configure-libiberty +configure-stage1-libcpp: configure-stage1-libiberty +configure-stage2-libcpp: configure-stage2-libiberty +configure-stage3-libcpp: configure-stage3-libiberty +configure-stage4-libcpp: configure-stage4-libiberty +configure-stageprofile-libcpp: configure-stageprofile-libiberty +configure-stagetrain-libcpp: configure-stagetrain-libiberty +configure-stagefeedback-libcpp: configure-stagefeedback-libiberty +configure-stageautoprofile-libcpp: configure-stageautoprofile-libiberty +configure-stageautofeedback-libcpp: configure-stageautofeedback-libiberty +configure-libcpp: maybe-configure-gettext +configure-stage1-libcpp: maybe-configure-stage1-gettext +configure-stage2-libcpp: maybe-configure-stage2-gettext +configure-stage3-libcpp: maybe-configure-stage3-gettext +configure-stage4-libcpp: maybe-configure-stage4-gettext +configure-stageprofile-libcpp: maybe-configure-stageprofile-gettext +configure-stagetrain-libcpp: maybe-configure-stagetrain-gettext +configure-stagefeedback-libcpp: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-libcpp: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-libcpp: maybe-configure-stageautofeedback-gettext +configure-libcpp: maybe-all-libiconv +configure-stage1-libcpp: maybe-all-stage1-libiconv +configure-stage2-libcpp: maybe-all-stage2-libiconv +configure-stage3-libcpp: maybe-all-stage3-libiconv +configure-stage4-libcpp: maybe-all-stage4-libiconv +configure-stageprofile-libcpp: maybe-all-stageprofile-libiconv +configure-stagetrain-libcpp: maybe-all-stagetrain-libiconv +configure-stagefeedback-libcpp: maybe-all-stagefeedback-libiconv +configure-stageautoprofile-libcpp: maybe-all-stageautoprofile-libiconv +configure-stageautofeedback-libcpp: maybe-all-stageautofeedback-libiconv +all-libcpp: all-libiberty +all-stage1-libcpp: all-stage1-libiberty +all-stage2-libcpp: all-stage2-libiberty +all-stage3-libcpp: all-stage3-libiberty +all-stage4-libcpp: all-stage4-libiberty +all-stageprofile-libcpp: all-stageprofile-libiberty +all-stagetrain-libcpp: all-stagetrain-libiberty +all-stagefeedback-libcpp: all-stagefeedback-libiberty +all-stageautoprofile-libcpp: all-stageautoprofile-libiberty +all-stageautofeedback-libcpp: all-stageautofeedback-libiberty +all-libcpp: maybe-all-gettext +all-stage1-libcpp: maybe-all-stage1-gettext +all-stage2-libcpp: maybe-all-stage2-gettext +all-stage3-libcpp: maybe-all-stage3-gettext +all-stage4-libcpp: maybe-all-stage4-gettext +all-stageprofile-libcpp: maybe-all-stageprofile-gettext +all-stagetrain-libcpp: maybe-all-stagetrain-gettext +all-stagefeedback-libcpp: maybe-all-stagefeedback-gettext +all-stageautoprofile-libcpp: maybe-all-stageautoprofile-gettext +all-stageautofeedback-libcpp: maybe-all-stageautofeedback-gettext +all-libcpp: maybe-all-libiconv +all-stage1-libcpp: maybe-all-stage1-libiconv +all-stage2-libcpp: maybe-all-stage2-libiconv +all-stage3-libcpp: maybe-all-stage3-libiconv +all-stage4-libcpp: maybe-all-stage4-libiconv +all-stageprofile-libcpp: maybe-all-stageprofile-libiconv +all-stagetrain-libcpp: maybe-all-stagetrain-libiconv +all-stagefeedback-libcpp: maybe-all-stagefeedback-libiconv +all-stageautoprofile-libcpp: maybe-all-stageautoprofile-libiconv +all-stageautofeedback-libcpp: maybe-all-stageautofeedback-libiconv +all-fixincludes: maybe-all-libiberty +all-stage1-fixincludes: maybe-all-stage1-libiberty +all-stage2-fixincludes: maybe-all-stage2-libiberty +all-stage3-fixincludes: maybe-all-stage3-libiberty +all-stage4-fixincludes: maybe-all-stage4-libiberty +all-stageprofile-fixincludes: maybe-all-stageprofile-libiberty +all-stagetrain-fixincludes: maybe-all-stagetrain-libiberty +all-stagefeedback-fixincludes: maybe-all-stagefeedback-libiberty +all-stageautoprofile-fixincludes: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-fixincludes: maybe-all-stageautofeedback-libiberty +all-gnattools: maybe-all-target-libada +all-lto-plugin: maybe-all-libiberty +all-stage1-lto-plugin: maybe-all-stage1-libiberty +all-stage2-lto-plugin: maybe-all-stage2-libiberty +all-stage3-lto-plugin: maybe-all-stage3-libiberty +all-stage4-lto-plugin: maybe-all-stage4-libiberty +all-stageprofile-lto-plugin: maybe-all-stageprofile-libiberty +all-stagetrain-lto-plugin: maybe-all-stagetrain-libiberty +all-stagefeedback-lto-plugin: maybe-all-stagefeedback-libiberty +all-stageautoprofile-lto-plugin: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-lto-plugin: maybe-all-stageautofeedback-libiberty +all-lto-plugin: maybe-all-libiberty-linker-plugin +all-stage1-lto-plugin: maybe-all-stage1-libiberty-linker-plugin +all-stage2-lto-plugin: maybe-all-stage2-libiberty-linker-plugin +all-stage3-lto-plugin: maybe-all-stage3-libiberty-linker-plugin +all-stage4-lto-plugin: maybe-all-stage4-libiberty-linker-plugin +all-stageprofile-lto-plugin: maybe-all-stageprofile-libiberty-linker-plugin +all-stagetrain-lto-plugin: maybe-all-stagetrain-libiberty-linker-plugin +all-stagefeedback-lto-plugin: maybe-all-stagefeedback-libiberty-linker-plugin +all-stageautoprofile-lto-plugin: maybe-all-stageautoprofile-libiberty-linker-plugin +all-stageautofeedback-lto-plugin: maybe-all-stageautofeedback-libiberty-linker-plugin +all-gotools: maybe-all-target-libgo +configure-gettext: maybe-all-libiconv +configure-stage1-gettext: maybe-all-stage1-libiconv +configure-stage2-gettext: maybe-all-stage2-libiconv +configure-stage3-gettext: maybe-all-stage3-libiconv +configure-stage4-gettext: maybe-all-stage4-libiconv +configure-stageprofile-gettext: maybe-all-stageprofile-libiconv +configure-stagetrain-gettext: maybe-all-stagetrain-libiconv +configure-stagefeedback-gettext: maybe-all-stagefeedback-libiconv +configure-stageautoprofile-gettext: maybe-all-stageautoprofile-libiconv +configure-stageautofeedback-gettext: maybe-all-stageautofeedback-libiconv +configure-mpfr: maybe-all-gmp +configure-stage1-mpfr: maybe-all-stage1-gmp +configure-stage2-mpfr: maybe-all-stage2-gmp +configure-stage3-mpfr: maybe-all-stage3-gmp +configure-stage4-mpfr: maybe-all-stage4-gmp +configure-stageprofile-mpfr: maybe-all-stageprofile-gmp +configure-stagetrain-mpfr: maybe-all-stagetrain-gmp +configure-stagefeedback-mpfr: maybe-all-stagefeedback-gmp +configure-stageautoprofile-mpfr: maybe-all-stageautoprofile-gmp +configure-stageautofeedback-mpfr: maybe-all-stageautofeedback-gmp +configure-mpc: maybe-all-mpfr +configure-stage1-mpc: maybe-all-stage1-mpfr +configure-stage2-mpc: maybe-all-stage2-mpfr +configure-stage3-mpc: maybe-all-stage3-mpfr +configure-stage4-mpc: maybe-all-stage4-mpfr +configure-stageprofile-mpc: maybe-all-stageprofile-mpfr +configure-stagetrain-mpc: maybe-all-stagetrain-mpfr +configure-stagefeedback-mpc: maybe-all-stagefeedback-mpfr +configure-stageautoprofile-mpc: maybe-all-stageautoprofile-mpfr +configure-stageautofeedback-mpc: maybe-all-stageautofeedback-mpfr +configure-isl: maybe-all-gmp +configure-stage1-isl: maybe-all-stage1-gmp +configure-stage2-isl: maybe-all-stage2-gmp +configure-stage3-isl: maybe-all-stage3-gmp +configure-stage4-isl: maybe-all-stage4-gmp +configure-stageprofile-isl: maybe-all-stageprofile-gmp +configure-stagetrain-isl: maybe-all-stagetrain-gmp +configure-stagefeedback-isl: maybe-all-stagefeedback-gmp +configure-stageautoprofile-isl: maybe-all-stageautoprofile-gmp +configure-stageautofeedback-isl: maybe-all-stageautofeedback-gmp +all-gettext: maybe-all-libiconv +all-stage1-gettext: maybe-all-stage1-libiconv +all-stage2-gettext: maybe-all-stage2-libiconv +all-stage3-gettext: maybe-all-stage3-libiconv +all-stage4-gettext: maybe-all-stage4-libiconv +all-stageprofile-gettext: maybe-all-stageprofile-libiconv +all-stagetrain-gettext: maybe-all-stagetrain-libiconv +all-stagefeedback-gettext: maybe-all-stagefeedback-libiconv +all-stageautoprofile-gettext: maybe-all-stageautoprofile-libiconv +all-stageautofeedback-gettext: maybe-all-stageautofeedback-libiconv +configure-gdb: maybe-configure-sim +configure-gdb: maybe-all-gnulib +configure-gdb: maybe-all-gdbsupport +all-gdb: maybe-all-gnulib +all-gdb: maybe-all-gdbsupport +all-gdb: maybe-all-readline +all-gdb: maybe-all-build-bison +all-gdb: maybe-all-sim +all-gdb: maybe-all-libtermcap +configure-gdbserver: maybe-all-gnulib +all-gdbserver: maybe-all-gdbsupport +all-gdbserver: maybe-all-gnulib +configure-libgui: maybe-configure-tcl +configure-libgui: maybe-configure-tk +all-libgui: maybe-all-tcl +all-libgui: maybe-all-tk +all-libgui: maybe-all-itcl +configure-gdbsupport: maybe-configure-gnulib +all-gdbsupport: maybe-all-gnulib +configure-bfd: configure-libiberty +configure-stage1-bfd: configure-stage1-libiberty +configure-stage2-bfd: configure-stage2-libiberty +configure-stage3-bfd: configure-stage3-libiberty +configure-stage4-bfd: configure-stage4-libiberty +configure-stageprofile-bfd: configure-stageprofile-libiberty +configure-stagetrain-bfd: configure-stagetrain-libiberty +configure-stagefeedback-bfd: configure-stagefeedback-libiberty +configure-stageautoprofile-bfd: configure-stageautoprofile-libiberty +configure-stageautofeedback-bfd: configure-stageautofeedback-libiberty +configure-bfd: maybe-configure-gettext +configure-stage1-bfd: maybe-configure-stage1-gettext +configure-stage2-bfd: maybe-configure-stage2-gettext +configure-stage3-bfd: maybe-configure-stage3-gettext +configure-stage4-bfd: maybe-configure-stage4-gettext +configure-stageprofile-bfd: maybe-configure-stageprofile-gettext +configure-stagetrain-bfd: maybe-configure-stagetrain-gettext +configure-stagefeedback-bfd: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-bfd: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-bfd: maybe-configure-stageautofeedback-gettext +all-bfd: maybe-all-libiberty +all-stage1-bfd: maybe-all-stage1-libiberty +all-stage2-bfd: maybe-all-stage2-libiberty +all-stage3-bfd: maybe-all-stage3-libiberty +all-stage4-bfd: maybe-all-stage4-libiberty +all-stageprofile-bfd: maybe-all-stageprofile-libiberty +all-stagetrain-bfd: maybe-all-stagetrain-libiberty +all-stagefeedback-bfd: maybe-all-stagefeedback-libiberty +all-stageautoprofile-bfd: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-bfd: maybe-all-stageautofeedback-libiberty +all-bfd: maybe-all-gettext +all-stage1-bfd: maybe-all-stage1-gettext +all-stage2-bfd: maybe-all-stage2-gettext +all-stage3-bfd: maybe-all-stage3-gettext +all-stage4-bfd: maybe-all-stage4-gettext +all-stageprofile-bfd: maybe-all-stageprofile-gettext +all-stagetrain-bfd: maybe-all-stagetrain-gettext +all-stagefeedback-bfd: maybe-all-stagefeedback-gettext +all-stageautoprofile-bfd: maybe-all-stageautoprofile-gettext +all-stageautofeedback-bfd: maybe-all-stageautofeedback-gettext +all-bfd: maybe-all-zlib +all-stage1-bfd: maybe-all-stage1-zlib +all-stage2-bfd: maybe-all-stage2-zlib +all-stage3-bfd: maybe-all-stage3-zlib +all-stage4-bfd: maybe-all-stage4-zlib +all-stageprofile-bfd: maybe-all-stageprofile-zlib +all-stagetrain-bfd: maybe-all-stagetrain-zlib +all-stagefeedback-bfd: maybe-all-stagefeedback-zlib +all-stageautoprofile-bfd: maybe-all-stageautoprofile-zlib +all-stageautofeedback-bfd: maybe-all-stageautofeedback-zlib +all-bfd: maybe-all-libsframe +all-stage1-bfd: maybe-all-stage1-libsframe +all-stage2-bfd: maybe-all-stage2-libsframe +all-stage3-bfd: maybe-all-stage3-libsframe +all-stage4-bfd: maybe-all-stage4-libsframe +all-stageprofile-bfd: maybe-all-stageprofile-libsframe +all-stagetrain-bfd: maybe-all-stagetrain-libsframe +all-stagefeedback-bfd: maybe-all-stagefeedback-libsframe +all-stageautoprofile-bfd: maybe-all-stageautoprofile-libsframe +all-stageautofeedback-bfd: maybe-all-stageautofeedback-libsframe +configure-opcodes: configure-libiberty +configure-stage1-opcodes: configure-stage1-libiberty +configure-stage2-opcodes: configure-stage2-libiberty +configure-stage3-opcodes: configure-stage3-libiberty +configure-stage4-opcodes: configure-stage4-libiberty +configure-stageprofile-opcodes: configure-stageprofile-libiberty +configure-stagetrain-opcodes: configure-stagetrain-libiberty +configure-stagefeedback-opcodes: configure-stagefeedback-libiberty +configure-stageautoprofile-opcodes: configure-stageautoprofile-libiberty +configure-stageautofeedback-opcodes: configure-stageautofeedback-libiberty +all-opcodes: maybe-all-libiberty +all-stage1-opcodes: maybe-all-stage1-libiberty +all-stage2-opcodes: maybe-all-stage2-libiberty +all-stage3-opcodes: maybe-all-stage3-libiberty +all-stage4-opcodes: maybe-all-stage4-libiberty +all-stageprofile-opcodes: maybe-all-stageprofile-libiberty +all-stagetrain-opcodes: maybe-all-stagetrain-libiberty +all-stagefeedback-opcodes: maybe-all-stagefeedback-libiberty +all-stageautoprofile-opcodes: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-opcodes: maybe-all-stageautofeedback-libiberty +configure-binutils: maybe-configure-gettext +configure-stage1-binutils: maybe-configure-stage1-gettext +configure-stage2-binutils: maybe-configure-stage2-gettext +configure-stage3-binutils: maybe-configure-stage3-gettext +configure-stage4-binutils: maybe-configure-stage4-gettext +configure-stageprofile-binutils: maybe-configure-stageprofile-gettext +configure-stagetrain-binutils: maybe-configure-stagetrain-gettext +configure-stagefeedback-binutils: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-binutils: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-binutils: maybe-configure-stageautofeedback-gettext +all-binutils: maybe-all-libiberty +all-stage1-binutils: maybe-all-stage1-libiberty +all-stage2-binutils: maybe-all-stage2-libiberty +all-stage3-binutils: maybe-all-stage3-libiberty +all-stage4-binutils: maybe-all-stage4-libiberty +all-stageprofile-binutils: maybe-all-stageprofile-libiberty +all-stagetrain-binutils: maybe-all-stagetrain-libiberty +all-stagefeedback-binutils: maybe-all-stagefeedback-libiberty +all-stageautoprofile-binutils: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-binutils: maybe-all-stageautofeedback-libiberty +all-binutils: maybe-all-opcodes +all-stage1-binutils: maybe-all-stage1-opcodes +all-stage2-binutils: maybe-all-stage2-opcodes +all-stage3-binutils: maybe-all-stage3-opcodes +all-stage4-binutils: maybe-all-stage4-opcodes +all-stageprofile-binutils: maybe-all-stageprofile-opcodes +all-stagetrain-binutils: maybe-all-stagetrain-opcodes +all-stagefeedback-binutils: maybe-all-stagefeedback-opcodes +all-stageautoprofile-binutils: maybe-all-stageautoprofile-opcodes +all-stageautofeedback-binutils: maybe-all-stageautofeedback-opcodes +all-binutils: maybe-all-bfd +all-stage1-binutils: maybe-all-stage1-bfd +all-stage2-binutils: maybe-all-stage2-bfd +all-stage3-binutils: maybe-all-stage3-bfd +all-stage4-binutils: maybe-all-stage4-bfd +all-stageprofile-binutils: maybe-all-stageprofile-bfd +all-stagetrain-binutils: maybe-all-stagetrain-bfd +all-stagefeedback-binutils: maybe-all-stagefeedback-bfd +all-stageautoprofile-binutils: maybe-all-stageautoprofile-bfd +all-stageautofeedback-binutils: maybe-all-stageautofeedback-bfd +all-binutils: maybe-all-build-flex +all-stage1-binutils: maybe-all-build-flex +all-stage2-binutils: maybe-all-build-flex +all-stage3-binutils: maybe-all-build-flex +all-stage4-binutils: maybe-all-build-flex +all-stageprofile-binutils: maybe-all-build-flex +all-stagetrain-binutils: maybe-all-build-flex +all-stagefeedback-binutils: maybe-all-build-flex +all-stageautoprofile-binutils: maybe-all-build-flex +all-stageautofeedback-binutils: maybe-all-build-flex +all-binutils: maybe-all-build-bison +all-stage1-binutils: maybe-all-build-bison +all-stage2-binutils: maybe-all-build-bison +all-stage3-binutils: maybe-all-build-bison +all-stage4-binutils: maybe-all-build-bison +all-stageprofile-binutils: maybe-all-build-bison +all-stagetrain-binutils: maybe-all-build-bison +all-stagefeedback-binutils: maybe-all-build-bison +all-stageautoprofile-binutils: maybe-all-build-bison +all-stageautofeedback-binutils: maybe-all-build-bison +all-binutils: maybe-all-gettext +all-stage1-binutils: maybe-all-stage1-gettext +all-stage2-binutils: maybe-all-stage2-gettext +all-stage3-binutils: maybe-all-stage3-gettext +all-stage4-binutils: maybe-all-stage4-gettext +all-stageprofile-binutils: maybe-all-stageprofile-gettext +all-stagetrain-binutils: maybe-all-stagetrain-gettext +all-stagefeedback-binutils: maybe-all-stagefeedback-gettext +all-stageautoprofile-binutils: maybe-all-stageautoprofile-gettext +all-stageautofeedback-binutils: maybe-all-stageautofeedback-gettext +all-binutils: maybe-all-gas +all-stage1-binutils: maybe-all-stage1-gas +all-stage2-binutils: maybe-all-stage2-gas +all-stage3-binutils: maybe-all-stage3-gas +all-stage4-binutils: maybe-all-stage4-gas +all-stageprofile-binutils: maybe-all-stageprofile-gas +all-stagetrain-binutils: maybe-all-stagetrain-gas +all-stagefeedback-binutils: maybe-all-stagefeedback-gas +all-stageautoprofile-binutils: maybe-all-stageautoprofile-gas +all-stageautofeedback-binutils: maybe-all-stageautofeedback-gas +all-binutils: maybe-all-libctf +all-stage1-binutils: maybe-all-stage1-libctf +all-stage2-binutils: maybe-all-stage2-libctf +all-stage3-binutils: maybe-all-stage3-libctf +all-stage4-binutils: maybe-all-stage4-libctf +all-stageprofile-binutils: maybe-all-stageprofile-libctf +all-stagetrain-binutils: maybe-all-stagetrain-libctf +all-stagefeedback-binutils: maybe-all-stagefeedback-libctf +all-stageautoprofile-binutils: maybe-all-stageautoprofile-libctf +all-stageautofeedback-binutils: maybe-all-stageautofeedback-libctf +all-ld: maybe-all-libctf +all-stage1-ld: maybe-all-stage1-libctf +all-stage2-ld: maybe-all-stage2-libctf +all-stage3-ld: maybe-all-stage3-libctf +all-stage4-ld: maybe-all-stage4-libctf +all-stageprofile-ld: maybe-all-stageprofile-libctf +all-stagetrain-ld: maybe-all-stagetrain-libctf +all-stagefeedback-ld: maybe-all-stagefeedback-libctf +all-stageautoprofile-ld: maybe-all-stageautoprofile-libctf +all-stageautofeedback-ld: maybe-all-stageautofeedback-libctf +all-binutils: maybe-all-libsframe +all-stage1-binutils: maybe-all-stage1-libsframe +all-stage2-binutils: maybe-all-stage2-libsframe +all-stage3-binutils: maybe-all-stage3-libsframe +all-stage4-binutils: maybe-all-stage4-libsframe +all-stageprofile-binutils: maybe-all-stageprofile-libsframe +all-stagetrain-binutils: maybe-all-stagetrain-libsframe +all-stagefeedback-binutils: maybe-all-stagefeedback-libsframe +all-stageautoprofile-binutils: maybe-all-stageautoprofile-libsframe +all-stageautofeedback-binutils: maybe-all-stageautofeedback-libsframe +install-binutils: maybe-install-opcodes +install-strip-binutils: maybe-install-strip-opcodes +install-libctf: maybe-install-bfd +install-ld: maybe-install-bfd +install-ld: maybe-install-libctf +install-strip-libctf: maybe-install-strip-bfd +install-strip-ld: maybe-install-strip-bfd +install-strip-ld: maybe-install-strip-libctf +install-bfd: maybe-install-libsframe +install-strip-bfd: maybe-install-strip-libsframe +configure-opcodes: configure-bfd +configure-stage1-opcodes: configure-stage1-bfd +configure-stage2-opcodes: configure-stage2-bfd +configure-stage3-opcodes: configure-stage3-bfd +configure-stage4-opcodes: configure-stage4-bfd +configure-stageprofile-opcodes: configure-stageprofile-bfd +configure-stagetrain-opcodes: configure-stagetrain-bfd +configure-stagefeedback-opcodes: configure-stagefeedback-bfd +configure-stageautoprofile-opcodes: configure-stageautoprofile-bfd +configure-stageautofeedback-opcodes: configure-stageautofeedback-bfd +install-opcodes: maybe-install-bfd +install-strip-opcodes: maybe-install-strip-bfd +configure-gas: maybe-configure-gettext +configure-stage1-gas: maybe-configure-stage1-gettext +configure-stage2-gas: maybe-configure-stage2-gettext +configure-stage3-gas: maybe-configure-stage3-gettext +configure-stage4-gas: maybe-configure-stage4-gettext +configure-stageprofile-gas: maybe-configure-stageprofile-gettext +configure-stagetrain-gas: maybe-configure-stagetrain-gettext +configure-stagefeedback-gas: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-gas: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-gas: maybe-configure-stageautofeedback-gettext +all-gas: maybe-all-libiberty +all-stage1-gas: maybe-all-stage1-libiberty +all-stage2-gas: maybe-all-stage2-libiberty +all-stage3-gas: maybe-all-stage3-libiberty +all-stage4-gas: maybe-all-stage4-libiberty +all-stageprofile-gas: maybe-all-stageprofile-libiberty +all-stagetrain-gas: maybe-all-stagetrain-libiberty +all-stagefeedback-gas: maybe-all-stagefeedback-libiberty +all-stageautoprofile-gas: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-gas: maybe-all-stageautofeedback-libiberty +all-gas: maybe-all-opcodes +all-stage1-gas: maybe-all-stage1-opcodes +all-stage2-gas: maybe-all-stage2-opcodes +all-stage3-gas: maybe-all-stage3-opcodes +all-stage4-gas: maybe-all-stage4-opcodes +all-stageprofile-gas: maybe-all-stageprofile-opcodes +all-stagetrain-gas: maybe-all-stagetrain-opcodes +all-stagefeedback-gas: maybe-all-stagefeedback-opcodes +all-stageautoprofile-gas: maybe-all-stageautoprofile-opcodes +all-stageautofeedback-gas: maybe-all-stageautofeedback-opcodes +all-gas: maybe-all-bfd +all-stage1-gas: maybe-all-stage1-bfd +all-stage2-gas: maybe-all-stage2-bfd +all-stage3-gas: maybe-all-stage3-bfd +all-stage4-gas: maybe-all-stage4-bfd +all-stageprofile-gas: maybe-all-stageprofile-bfd +all-stagetrain-gas: maybe-all-stagetrain-bfd +all-stagefeedback-gas: maybe-all-stagefeedback-bfd +all-stageautoprofile-gas: maybe-all-stageautoprofile-bfd +all-stageautofeedback-gas: maybe-all-stageautofeedback-bfd +all-gas: maybe-all-gettext +all-stage1-gas: maybe-all-stage1-gettext +all-stage2-gas: maybe-all-stage2-gettext +all-stage3-gas: maybe-all-stage3-gettext +all-stage4-gas: maybe-all-stage4-gettext +all-stageprofile-gas: maybe-all-stageprofile-gettext +all-stagetrain-gas: maybe-all-stagetrain-gettext +all-stagefeedback-gas: maybe-all-stagefeedback-gettext +all-stageautoprofile-gas: maybe-all-stageautoprofile-gettext +all-stageautofeedback-gas: maybe-all-stageautofeedback-gettext +install-gprofng: maybe-install-opcodes +install-gprofng: maybe-install-bfd +configure-ld: maybe-configure-gettext +configure-stage1-ld: maybe-configure-stage1-gettext +configure-stage2-ld: maybe-configure-stage2-gettext +configure-stage3-ld: maybe-configure-stage3-gettext +configure-stage4-ld: maybe-configure-stage4-gettext +configure-stageprofile-ld: maybe-configure-stageprofile-gettext +configure-stagetrain-ld: maybe-configure-stagetrain-gettext +configure-stagefeedback-ld: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-ld: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-ld: maybe-configure-stageautofeedback-gettext +all-ld: maybe-all-libiberty +all-stage1-ld: maybe-all-stage1-libiberty +all-stage2-ld: maybe-all-stage2-libiberty +all-stage3-ld: maybe-all-stage3-libiberty +all-stage4-ld: maybe-all-stage4-libiberty +all-stageprofile-ld: maybe-all-stageprofile-libiberty +all-stagetrain-ld: maybe-all-stagetrain-libiberty +all-stagefeedback-ld: maybe-all-stagefeedback-libiberty +all-stageautoprofile-ld: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-ld: maybe-all-stageautofeedback-libiberty +all-ld: maybe-all-bfd +all-stage1-ld: maybe-all-stage1-bfd +all-stage2-ld: maybe-all-stage2-bfd +all-stage3-ld: maybe-all-stage3-bfd +all-stage4-ld: maybe-all-stage4-bfd +all-stageprofile-ld: maybe-all-stageprofile-bfd +all-stagetrain-ld: maybe-all-stagetrain-bfd +all-stagefeedback-ld: maybe-all-stagefeedback-bfd +all-stageautoprofile-ld: maybe-all-stageautoprofile-bfd +all-stageautofeedback-ld: maybe-all-stageautofeedback-bfd +all-ld: maybe-all-opcodes +all-stage1-ld: maybe-all-stage1-opcodes +all-stage2-ld: maybe-all-stage2-opcodes +all-stage3-ld: maybe-all-stage3-opcodes +all-stage4-ld: maybe-all-stage4-opcodes +all-stageprofile-ld: maybe-all-stageprofile-opcodes +all-stagetrain-ld: maybe-all-stagetrain-opcodes +all-stagefeedback-ld: maybe-all-stagefeedback-opcodes +all-stageautoprofile-ld: maybe-all-stageautoprofile-opcodes +all-stageautofeedback-ld: maybe-all-stageautofeedback-opcodes +all-ld: maybe-all-build-bison +all-stage1-ld: maybe-all-build-bison +all-stage2-ld: maybe-all-build-bison +all-stage3-ld: maybe-all-build-bison +all-stage4-ld: maybe-all-build-bison +all-stageprofile-ld: maybe-all-build-bison +all-stagetrain-ld: maybe-all-build-bison +all-stagefeedback-ld: maybe-all-build-bison +all-stageautoprofile-ld: maybe-all-build-bison +all-stageautofeedback-ld: maybe-all-build-bison +all-ld: maybe-all-build-flex +all-stage1-ld: maybe-all-build-flex +all-stage2-ld: maybe-all-build-flex +all-stage3-ld: maybe-all-build-flex +all-stage4-ld: maybe-all-build-flex +all-stageprofile-ld: maybe-all-build-flex +all-stagetrain-ld: maybe-all-build-flex +all-stagefeedback-ld: maybe-all-build-flex +all-stageautoprofile-ld: maybe-all-build-flex +all-stageautofeedback-ld: maybe-all-build-flex +all-ld: maybe-all-gettext +all-stage1-ld: maybe-all-stage1-gettext +all-stage2-ld: maybe-all-stage2-gettext +all-stage3-ld: maybe-all-stage3-gettext +all-stage4-ld: maybe-all-stage4-gettext +all-stageprofile-ld: maybe-all-stageprofile-gettext +all-stagetrain-ld: maybe-all-stagetrain-gettext +all-stagefeedback-ld: maybe-all-stagefeedback-gettext +all-stageautoprofile-ld: maybe-all-stageautoprofile-gettext +all-stageautofeedback-ld: maybe-all-stageautofeedback-gettext +all-ld: maybe-all-gas +all-stage1-ld: maybe-all-stage1-gas +all-stage2-ld: maybe-all-stage2-gas +all-stage3-ld: maybe-all-stage3-gas +all-stage4-ld: maybe-all-stage4-gas +all-stageprofile-ld: maybe-all-stageprofile-gas +all-stagetrain-ld: maybe-all-stagetrain-gas +all-stagefeedback-ld: maybe-all-stagefeedback-gas +all-stageautoprofile-ld: maybe-all-stageautoprofile-gas +all-stageautofeedback-ld: maybe-all-stageautofeedback-gas +all-ld: maybe-all-binutils +all-stage1-ld: maybe-all-stage1-binutils +all-stage2-ld: maybe-all-stage2-binutils +all-stage3-ld: maybe-all-stage3-binutils +all-stage4-ld: maybe-all-stage4-binutils +all-stageprofile-ld: maybe-all-stageprofile-binutils +all-stagetrain-ld: maybe-all-stagetrain-binutils +all-stagefeedback-ld: maybe-all-stagefeedback-binutils +all-stageautoprofile-ld: maybe-all-stageautoprofile-binutils +all-stageautofeedback-ld: maybe-all-stageautofeedback-binutils +install-ld: maybe-install-gold +install-strip-ld: maybe-install-strip-gold +configure-gold: maybe-configure-gettext +configure-stage1-gold: maybe-configure-stage1-gettext +configure-stage2-gold: maybe-configure-stage2-gettext +configure-stage3-gold: maybe-configure-stage3-gettext +configure-stage4-gold: maybe-configure-stage4-gettext +configure-stageprofile-gold: maybe-configure-stageprofile-gettext +configure-stagetrain-gold: maybe-configure-stagetrain-gettext +configure-stagefeedback-gold: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-gold: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-gold: maybe-configure-stageautofeedback-gettext +all-gold: maybe-all-libiberty +all-stage1-gold: maybe-all-stage1-libiberty +all-stage2-gold: maybe-all-stage2-libiberty +all-stage3-gold: maybe-all-stage3-libiberty +all-stage4-gold: maybe-all-stage4-libiberty +all-stageprofile-gold: maybe-all-stageprofile-libiberty +all-stagetrain-gold: maybe-all-stagetrain-libiberty +all-stagefeedback-gold: maybe-all-stagefeedback-libiberty +all-stageautoprofile-gold: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-gold: maybe-all-stageautofeedback-libiberty +all-gold: maybe-all-gettext +all-stage1-gold: maybe-all-stage1-gettext +all-stage2-gold: maybe-all-stage2-gettext +all-stage3-gold: maybe-all-stage3-gettext +all-stage4-gold: maybe-all-stage4-gettext +all-stageprofile-gold: maybe-all-stageprofile-gettext +all-stagetrain-gold: maybe-all-stagetrain-gettext +all-stagefeedback-gold: maybe-all-stagefeedback-gettext +all-stageautoprofile-gold: maybe-all-stageautoprofile-gettext +all-stageautofeedback-gold: maybe-all-stageautofeedback-gettext +all-gold: maybe-all-bfd +all-stage1-gold: maybe-all-stage1-bfd +all-stage2-gold: maybe-all-stage2-bfd +all-stage3-gold: maybe-all-stage3-bfd +all-stage4-gold: maybe-all-stage4-bfd +all-stageprofile-gold: maybe-all-stageprofile-bfd +all-stagetrain-gold: maybe-all-stagetrain-bfd +all-stagefeedback-gold: maybe-all-stagefeedback-bfd +all-stageautoprofile-gold: maybe-all-stageautoprofile-bfd +all-stageautofeedback-gold: maybe-all-stageautofeedback-bfd +all-gold: maybe-all-build-bison +all-stage1-gold: maybe-all-build-bison +all-stage2-gold: maybe-all-build-bison +all-stage3-gold: maybe-all-build-bison +all-stage4-gold: maybe-all-build-bison +all-stageprofile-gold: maybe-all-build-bison +all-stagetrain-gold: maybe-all-build-bison +all-stagefeedback-gold: maybe-all-build-bison +all-stageautoprofile-gold: maybe-all-build-bison +all-stageautofeedback-gold: maybe-all-build-bison +all-gold: maybe-all-gas +all-stage1-gold: maybe-all-stage1-gas +all-stage2-gold: maybe-all-stage2-gas +all-stage3-gold: maybe-all-stage3-gas +all-stage4-gold: maybe-all-stage4-gas +all-stageprofile-gold: maybe-all-stageprofile-gas +all-stagetrain-gold: maybe-all-stagetrain-gas +all-stagefeedback-gold: maybe-all-stagefeedback-gas +all-stageautoprofile-gold: maybe-all-stageautoprofile-gas +all-stageautofeedback-gold: maybe-all-stageautofeedback-gas +check-gold: maybe-all-binutils +check-stage1-gold: maybe-all-stage1-binutils +check-stage2-gold: maybe-all-stage2-binutils +check-stage3-gold: maybe-all-stage3-binutils +check-stage4-gold: maybe-all-stage4-binutils +check-stageprofile-gold: maybe-all-stageprofile-binutils +check-stagetrain-gold: maybe-all-stagetrain-binutils +check-stagefeedback-gold: maybe-all-stagefeedback-binutils +check-stageautoprofile-gold: maybe-all-stageautoprofile-binutils +check-stageautofeedback-gold: maybe-all-stageautofeedback-binutils +check-gold: maybe-all-gas +check-stage1-gold: maybe-all-stage1-gas +check-stage2-gold: maybe-all-stage2-gas +check-stage3-gold: maybe-all-stage3-gas +check-stage4-gold: maybe-all-stage4-gas +check-stageprofile-gold: maybe-all-stageprofile-gas +check-stagetrain-gold: maybe-all-stagetrain-gas +check-stagefeedback-gold: maybe-all-stagefeedback-gas +check-stageautoprofile-gold: maybe-all-stageautoprofile-gas +check-stageautofeedback-gold: maybe-all-stageautofeedback-gas +configure-opcodes: maybe-configure-gettext +configure-stage1-opcodes: maybe-configure-stage1-gettext +configure-stage2-opcodes: maybe-configure-stage2-gettext +configure-stage3-opcodes: maybe-configure-stage3-gettext +configure-stage4-opcodes: maybe-configure-stage4-gettext +configure-stageprofile-opcodes: maybe-configure-stageprofile-gettext +configure-stagetrain-opcodes: maybe-configure-stagetrain-gettext +configure-stagefeedback-opcodes: maybe-configure-stagefeedback-gettext +configure-stageautoprofile-opcodes: maybe-configure-stageautoprofile-gettext +configure-stageautofeedback-opcodes: maybe-configure-stageautofeedback-gettext +all-opcodes: maybe-all-bfd +all-stage1-opcodes: maybe-all-stage1-bfd +all-stage2-opcodes: maybe-all-stage2-bfd +all-stage3-opcodes: maybe-all-stage3-bfd +all-stage4-opcodes: maybe-all-stage4-bfd +all-stageprofile-opcodes: maybe-all-stageprofile-bfd +all-stagetrain-opcodes: maybe-all-stagetrain-bfd +all-stagefeedback-opcodes: maybe-all-stagefeedback-bfd +all-stageautoprofile-opcodes: maybe-all-stageautoprofile-bfd +all-stageautofeedback-opcodes: maybe-all-stageautofeedback-bfd +all-opcodes: maybe-all-libiberty +all-stage1-opcodes: maybe-all-stage1-libiberty +all-stage2-opcodes: maybe-all-stage2-libiberty +all-stage3-opcodes: maybe-all-stage3-libiberty +all-stage4-opcodes: maybe-all-stage4-libiberty +all-stageprofile-opcodes: maybe-all-stageprofile-libiberty +all-stagetrain-opcodes: maybe-all-stagetrain-libiberty +all-stagefeedback-opcodes: maybe-all-stagefeedback-libiberty +all-stageautoprofile-opcodes: maybe-all-stageautoprofile-libiberty +all-stageautofeedback-opcodes: maybe-all-stageautofeedback-libiberty +all-opcodes: maybe-all-gettext +all-stage1-opcodes: maybe-all-stage1-gettext +all-stage2-opcodes: maybe-all-stage2-gettext +all-stage3-opcodes: maybe-all-stage3-gettext +all-stage4-opcodes: maybe-all-stage4-gettext +all-stageprofile-opcodes: maybe-all-stageprofile-gettext +all-stagetrain-opcodes: maybe-all-stagetrain-gettext +all-stagefeedback-opcodes: maybe-all-stagefeedback-gettext +all-stageautoprofile-opcodes: maybe-all-stageautoprofile-gettext +all-stageautofeedback-opcodes: maybe-all-stageautofeedback-gettext +all-dejagnu: maybe-all-tcl +all-dejagnu: maybe-all-expect +all-dejagnu: maybe-all-tk +configure-expect: maybe-configure-tcl +configure-expect: maybe-configure-tk +all-expect: maybe-all-tcl +all-expect: maybe-all-tk +configure-itcl: maybe-configure-tcl +configure-itcl: maybe-configure-tk +all-itcl: maybe-all-tcl +all-itcl: maybe-all-tk +install-itcl: maybe-install-tcl +install-strip-itcl: maybe-install-strip-tcl +configure-tk: maybe-configure-tcl +all-tk: maybe-all-tcl +all-sid: maybe-all-tcl +all-sid: maybe-all-tk +install-sid: maybe-install-tcl +install-strip-sid: maybe-install-strip-tcl +install-sid: maybe-install-tk +install-strip-sid: maybe-install-strip-tk +configure-sim: maybe-all-gnulib +configure-sim: maybe-all-readline +all-fastjar: maybe-all-build-texinfo +all-libctf: all-libiberty +all-stage1-libctf: all-stage1-libiberty +all-stage2-libctf: all-stage2-libiberty +all-stage3-libctf: all-stage3-libiberty +all-stage4-libctf: all-stage4-libiberty +all-stageprofile-libctf: all-stageprofile-libiberty +all-stagetrain-libctf: all-stagetrain-libiberty +all-stagefeedback-libctf: all-stagefeedback-libiberty +all-stageautoprofile-libctf: all-stageautoprofile-libiberty +all-stageautofeedback-libctf: all-stageautofeedback-libiberty +all-libctf: maybe-all-bfd +all-stage1-libctf: maybe-all-stage1-bfd +all-stage2-libctf: maybe-all-stage2-bfd +all-stage3-libctf: maybe-all-stage3-bfd +all-stage4-libctf: maybe-all-stage4-bfd +all-stageprofile-libctf: maybe-all-stageprofile-bfd +all-stagetrain-libctf: maybe-all-stagetrain-bfd +all-stagefeedback-libctf: maybe-all-stagefeedback-bfd +all-stageautoprofile-libctf: maybe-all-stageautoprofile-bfd +all-stageautofeedback-libctf: maybe-all-stageautofeedback-bfd +all-libctf: maybe-all-zlib +all-stage1-libctf: maybe-all-stage1-zlib +all-stage2-libctf: maybe-all-stage2-zlib +all-stage3-libctf: maybe-all-stage3-zlib +all-stage4-libctf: maybe-all-stage4-zlib +all-stageprofile-libctf: maybe-all-stageprofile-zlib +all-stagetrain-libctf: maybe-all-stagetrain-zlib +all-stagefeedback-libctf: maybe-all-stagefeedback-zlib +all-stageautoprofile-libctf: maybe-all-stageautoprofile-zlib +all-stageautofeedback-libctf: maybe-all-stageautofeedback-zlib +configure-libctf: maybe-all-bfd +configure-stage1-libctf: maybe-all-stage1-bfd +configure-stage2-libctf: maybe-all-stage2-bfd +configure-stage3-libctf: maybe-all-stage3-bfd +configure-stage4-libctf: maybe-all-stage4-bfd +configure-stageprofile-libctf: maybe-all-stageprofile-bfd +configure-stagetrain-libctf: maybe-all-stagetrain-bfd +configure-stagefeedback-libctf: maybe-all-stagefeedback-bfd +configure-stageautoprofile-libctf: maybe-all-stageautoprofile-bfd +configure-stageautofeedback-libctf: maybe-all-stageautofeedback-bfd +configure-libctf: maybe-all-gettext +configure-stage1-libctf: maybe-all-stage1-gettext +configure-stage2-libctf: maybe-all-stage2-gettext +configure-stage3-libctf: maybe-all-stage3-gettext +configure-stage4-libctf: maybe-all-stage4-gettext +configure-stageprofile-libctf: maybe-all-stageprofile-gettext +configure-stagetrain-libctf: maybe-all-stagetrain-gettext +configure-stagefeedback-libctf: maybe-all-stagefeedback-gettext +configure-stageautoprofile-libctf: maybe-all-stageautoprofile-gettext +configure-stageautofeedback-libctf: maybe-all-stageautofeedback-gettext +configure-libctf: maybe-all-zlib +configure-stage1-libctf: maybe-all-stage1-zlib +configure-stage2-libctf: maybe-all-stage2-zlib +configure-stage3-libctf: maybe-all-stage3-zlib +configure-stage4-libctf: maybe-all-stage4-zlib +configure-stageprofile-libctf: maybe-all-stageprofile-zlib +configure-stagetrain-libctf: maybe-all-stagetrain-zlib +configure-stagefeedback-libctf: maybe-all-stagefeedback-zlib +configure-stageautoprofile-libctf: maybe-all-stageautoprofile-zlib +configure-stageautofeedback-libctf: maybe-all-stageautofeedback-zlib +configure-libctf: maybe-all-libiconv +configure-stage1-libctf: maybe-all-stage1-libiconv +configure-stage2-libctf: maybe-all-stage2-libiconv +configure-stage3-libctf: maybe-all-stage3-libiconv +configure-stage4-libctf: maybe-all-stage4-libiconv +configure-stageprofile-libctf: maybe-all-stageprofile-libiconv +configure-stagetrain-libctf: maybe-all-stagetrain-libiconv +configure-stagefeedback-libctf: maybe-all-stagefeedback-libiconv +configure-stageautoprofile-libctf: maybe-all-stageautoprofile-libiconv +configure-stageautofeedback-libctf: maybe-all-stageautofeedback-libiconv +check-libctf: maybe-all-ld +check-stage1-libctf: maybe-all-stage1-ld +check-stage2-libctf: maybe-all-stage2-ld +check-stage3-libctf: maybe-all-stage3-ld +check-stage4-libctf: maybe-all-stage4-ld +check-stageprofile-libctf: maybe-all-stageprofile-ld +check-stagetrain-libctf: maybe-all-stagetrain-ld +check-stagefeedback-libctf: maybe-all-stagefeedback-ld +check-stageautoprofile-libctf: maybe-all-stageautoprofile-ld +check-stageautofeedback-libctf: maybe-all-stageautofeedback-ld +distclean-gnulib: maybe-distclean-gdb +distclean-gnulib: maybe-distclean-gdbserver +distclean-gnulib: maybe-distclean-sim +all-bison: maybe-all-build-texinfo +all-flex: maybe-all-build-bison +all-flex: maybe-all-m4 +all-flex: maybe-all-build-texinfo +all-m4: maybe-all-build-texinfo +configure-target-libgo: maybe-configure-target-libffi +all-target-libgo: maybe-all-target-libffi +configure-target-libphobos: maybe-configure-target-libbacktrace +configure-stage1-target-libphobos: maybe-configure-stage1-target-libbacktrace +configure-stage2-target-libphobos: maybe-configure-stage2-target-libbacktrace +configure-stage3-target-libphobos: maybe-configure-stage3-target-libbacktrace +configure-stage4-target-libphobos: maybe-configure-stage4-target-libbacktrace +configure-stageprofile-target-libphobos: maybe-configure-stageprofile-target-libbacktrace +configure-stagetrain-target-libphobos: maybe-configure-stagetrain-target-libbacktrace +configure-stagefeedback-target-libphobos: maybe-configure-stagefeedback-target-libbacktrace +configure-stageautoprofile-target-libphobos: maybe-configure-stageautoprofile-target-libbacktrace +configure-stageautofeedback-target-libphobos: maybe-configure-stageautofeedback-target-libbacktrace +configure-target-libphobos: maybe-configure-target-zlib +configure-stage1-target-libphobos: maybe-configure-stage1-target-zlib +configure-stage2-target-libphobos: maybe-configure-stage2-target-zlib +configure-stage3-target-libphobos: maybe-configure-stage3-target-zlib +configure-stage4-target-libphobos: maybe-configure-stage4-target-zlib +configure-stageprofile-target-libphobos: maybe-configure-stageprofile-target-zlib +configure-stagetrain-target-libphobos: maybe-configure-stagetrain-target-zlib +configure-stagefeedback-target-libphobos: maybe-configure-stagefeedback-target-zlib +configure-stageautoprofile-target-libphobos: maybe-configure-stageautoprofile-target-zlib +configure-stageautofeedback-target-libphobos: maybe-configure-stageautofeedback-target-zlib +all-target-libphobos: maybe-all-target-libbacktrace +all-stage1-target-libphobos: maybe-all-stage1-target-libbacktrace +all-stage2-target-libphobos: maybe-all-stage2-target-libbacktrace +all-stage3-target-libphobos: maybe-all-stage3-target-libbacktrace +all-stage4-target-libphobos: maybe-all-stage4-target-libbacktrace +all-stageprofile-target-libphobos: maybe-all-stageprofile-target-libbacktrace +all-stagetrain-target-libphobos: maybe-all-stagetrain-target-libbacktrace +all-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libbacktrace +all-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libbacktrace +all-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libbacktrace +all-target-libphobos: maybe-all-target-zlib +all-stage1-target-libphobos: maybe-all-stage1-target-zlib +all-stage2-target-libphobos: maybe-all-stage2-target-zlib +all-stage3-target-libphobos: maybe-all-stage3-target-zlib +all-stage4-target-libphobos: maybe-all-stage4-target-zlib +all-stageprofile-target-libphobos: maybe-all-stageprofile-target-zlib +all-stagetrain-target-libphobos: maybe-all-stagetrain-target-zlib +all-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-zlib +all-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-zlib +all-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-zlib +all-target-libphobos: maybe-all-target-libatomic +all-stage1-target-libphobos: maybe-all-stage1-target-libatomic +all-stage2-target-libphobos: maybe-all-stage2-target-libatomic +all-stage3-target-libphobos: maybe-all-stage3-target-libatomic +all-stage4-target-libphobos: maybe-all-stage4-target-libatomic +all-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +all-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +all-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +all-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +all-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-target-libstdc++-v3: maybe-configure-target-libgomp +configure-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp +configure-stage2-target-libstdc++-v3: maybe-configure-stage2-target-libgomp +configure-stage3-target-libstdc++-v3: maybe-configure-stage3-target-libgomp +configure-stage4-target-libstdc++-v3: maybe-configure-stage4-target-libgomp +configure-stageprofile-target-libstdc++-v3: maybe-configure-stageprofile-target-libgomp +configure-stagetrain-target-libstdc++-v3: maybe-configure-stagetrain-target-libgomp +configure-stagefeedback-target-libstdc++-v3: maybe-configure-stagefeedback-target-libgomp +configure-stageautoprofile-target-libstdc++-v3: maybe-configure-stageautoprofile-target-libgomp +configure-stageautofeedback-target-libstdc++-v3: maybe-configure-stageautofeedback-target-libgomp +configure-target-libsanitizer: maybe-all-target-libstdc++-v3 +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libstdc++-v3 +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libstdc++-v3 +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libstdc++-v3 +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libstdc++-v3 +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libstdc++-v3 +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libstdc++-v3 +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libstdc++-v3 +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libstdc++-v3 +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libstdc++-v3 +configure-target-libvtv: maybe-all-target-libstdc++-v3 +configure-stage1-target-libvtv: maybe-all-stage1-target-libstdc++-v3 +configure-stage2-target-libvtv: maybe-all-stage2-target-libstdc++-v3 +configure-stage3-target-libvtv: maybe-all-stage3-target-libstdc++-v3 +configure-stage4-target-libvtv: maybe-all-stage4-target-libstdc++-v3 +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libstdc++-v3 +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libstdc++-v3 +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libstdc++-v3 +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libstdc++-v3 +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libstdc++-v3 +all-target-libstdc++-v3: maybe-configure-target-libgomp +all-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp +all-stage2-target-libstdc++-v3: maybe-configure-stage2-target-libgomp +all-stage3-target-libstdc++-v3: maybe-configure-stage3-target-libgomp +all-stage4-target-libstdc++-v3: maybe-configure-stage4-target-libgomp +all-stageprofile-target-libstdc++-v3: maybe-configure-stageprofile-target-libgomp +all-stagetrain-target-libstdc++-v3: maybe-configure-stagetrain-target-libgomp +all-stagefeedback-target-libstdc++-v3: maybe-configure-stagefeedback-target-libgomp +all-stageautoprofile-target-libstdc++-v3: maybe-configure-stageautoprofile-target-libgomp +all-stageautofeedback-target-libstdc++-v3: maybe-configure-stageautofeedback-target-libgomp +install-target-libgo: maybe-install-target-libatomic +install-target-libgfortran: maybe-install-target-libquadmath +install-target-libgfortran: maybe-install-target-libgcc +install-target-libphobos: maybe-install-target-libatomic +install-target-libsanitizer: maybe-install-target-libstdc++-v3 +install-target-libsanitizer: maybe-install-target-libgcc +install-target-libvtv: maybe-install-target-libstdc++-v3 +install-target-libvtv: maybe-install-target-libgcc +install-target-libitm: maybe-install-target-libgcc +install-target-libobjc: maybe-install-target-libgcc +install-target-libstdc++-v3: maybe-install-target-libgcc +all-target-libgloss: maybe-all-target-newlib +all-target-winsup: maybe-all-target-libtermcap +configure-target-libgfortran: maybe-all-target-libquadmath + + +configure-gnattools: stage_last +configure-libcc1: stage_last +configure-c++tools: stage_last +configure-utils: stage_last +configure-gdb: stage_last +configure-gdbserver: stage_last +configure-gdbsupport: stage_last +configure-gprof: stage_last +configure-gprofng: stage_last +configure-sid: stage_last +configure-sim: stage_last +configure-fastjar: stage_last +configure-bison: stage_last +configure-flex: stage_last +configure-m4: stage_last + +configure-target-fastjar: maybe-configure-target-zlib +all-target-fastjar: maybe-all-target-zlib +all-target-libgo: maybe-all-target-libbacktrace +all-target-libgo: maybe-all-target-libatomic +all-target-libgm2: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libbacktrace +configure-target-libgo: maybe-all-target-libbacktrace + + +# Dependencies for target modules on other target modules are +# described by lang_env_dependencies; the defaults apply to anything +# not mentioned there. + + +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libgcc +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libgcc +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libgcc +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libgcc +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libgcc +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libgcc +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libgcc +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libgcc +configure-stage1-target-libvtv: maybe-all-stage1-target-libgcc +configure-stage2-target-libvtv: maybe-all-stage2-target-libgcc +configure-stage3-target-libvtv: maybe-all-stage3-target-libgcc +configure-stage4-target-libvtv: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libgcc +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libgcc +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libgcc +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libgcc +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libgcc +configure-stage1-target-libphobos: maybe-all-stage1-target-libgcc +configure-stage2-target-libphobos: maybe-all-stage2-target-libgcc +configure-stage3-target-libphobos: maybe-all-stage3-target-libgcc +configure-stage4-target-libphobos: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libgcc +configure-stage1-target-zlib: maybe-all-stage1-target-libgcc +configure-stage2-target-zlib: maybe-all-stage2-target-libgcc +configure-stage3-target-zlib: maybe-all-stage3-target-libgcc +configure-stage4-target-zlib: maybe-all-stage4-target-libgcc +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libgcc +configure-stage1-target-libgomp: maybe-all-stage1-target-libgcc +configure-stage2-target-libgomp: maybe-all-stage2-target-libgcc +configure-stage3-target-libgomp: maybe-all-stage3-target-libgcc +configure-stage4-target-libgomp: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libgcc +configure-stage1-target-libatomic: maybe-all-stage1-target-libgcc +configure-stage2-target-libatomic: maybe-all-stage2-target-libgcc +configure-stage3-target-libatomic: maybe-all-stage3-target-libgcc +configure-stage4-target-libatomic: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libatomic: maybe-all-stageprofile-target-libgcc +configure-stagetrain-target-libatomic: maybe-all-stagetrain-target-libgcc +configure-stagefeedback-target-libatomic: maybe-all-stagefeedback-target-libgcc +configure-stageautoprofile-target-libatomic: maybe-all-stageautoprofile-target-libgcc +configure-stageautofeedback-target-libatomic: maybe-all-stageautofeedback-target-libgcc + + + +configure-target-libstdc++-v3: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libsanitizer: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libvtv: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libssp: maybe-all-target-newlib maybe-all-target-libgloss + + + +configure-target-libbacktrace: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libquadmath: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libgfortran: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libobjc: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libgo: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libphobos: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss + + +configure-target-libffi: maybe-all-target-newlib maybe-all-target-libgloss +configure-target-libffi: maybe-all-target-libstdc++-v3 + +configure-target-zlib: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-rda: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libgm2: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libitm: maybe-all-target-newlib maybe-all-target-libgloss +configure-target-libitm: maybe-all-target-libstdc++-v3 + +configure-target-libatomic: maybe-all-target-newlib maybe-all-target-libgloss + +configure-target-libgrust: maybe-all-target-newlib maybe-all-target-libgloss + + +CONFIGURE_GDB_TK = +GDB_TK = +INSTALL_GDB_TK = +configure-gdb: $(CONFIGURE_GDB_TK) +all-gdb: $(gdbnlmrequirements) $(GDB_TK) +install-gdb: $(INSTALL_GDB_TK) + +# Serialization dependencies. Host configures don't work well in parallel to +# each other, due to contention over config.cache. Target configures and +# build configures are similar. + +# -------------------------------- +# Regenerating top level configury +# -------------------------------- + +# Rebuilding Makefile.in, using autogen. +AUTOGEN = autogen +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.tpl $(srcdir)/Makefile.def + cd $(srcdir) && $(AUTOGEN) Makefile.def + +# Rebuilding Makefile. +Makefile: $(srcdir)/Makefile.in config.status + CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +config.status: configure + CONFIG_SHELL="$(SHELL)" $(SHELL) ./config.status --recheck + +# Rebuilding configure. +AUTOCONF = autoconf +$(srcdir)/configure: # $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \ + $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 \ + $(srcdir)/config/elf.m4 $(srcdir)/config/isl.m4 \ + $(srcdir)/config/gcc-plugin.m4 \ + $(srcdir)/libtool.m4 $(srcdir)/ltoptions.m4 $(srcdir)/ltsugar.m4 \ + $(srcdir)/ltversion.m4 $(srcdir)/lt~obsolete.m4 + cd $(srcdir) && $(AUTOCONF) + +# ------------------------------ +# Special directives to GNU Make +# ------------------------------ + +# Don't pass command-line variables to submakes. +.NOEXPORT: +MAKEOVERRIDES= + +# end of Makefile.in diff --git a/gcc/Make-hooks b/gcc/Make-hooks new file mode 100644 index 0000000000000..660fb6f489429 --- /dev/null +++ b/gcc/Make-hooks @@ -0,0 +1,31 @@ +lang.all.cross: c.all.cross +lang.start.encap: c.start.encap +lang.rest.encap: c.rest.encap +lang.tags: c.tags +lang.install-common: c.install-common +lang.install-man: c.install-man +lang.install-info: c.install-info +lang.install-dvi: c.install-dvi +lang.install-pdf: c.install-pdf +lang.install-html: c.install-html +lang.dvi: c.dvi +lang.pdf: c.pdf +lang.html: c.html +lang.uninstall: c.uninstall +lang.info: c.info +lang.man: c.man +lang.srcextra: c.srcextra +lang.srcman: c.srcman +lang.srcinfo: c.srcinfo +lang.mostlyclean: c.mostlyclean +lang.clean: c.clean +lang.distclean: c.distclean +lang.maintainer-clean: c.maintainer-clean +lang.install-plugin: c.install-plugin +ifeq ($(DO_LINK_SERIALIZATION),) +SERIAL_LIST = +else +SERIAL_LIST = $(wordlist $(DO_LINK_SERIALIZATION),0,) +endif +SERIAL_COUNT = 1 +INDEX.c = 0 diff --git a/gcc/Makefile b/gcc/Makefile new file mode 100644 index 0000000000000..d933873cec47a --- /dev/null +++ b/gcc/Makefile @@ -0,0 +1,4609 @@ +# Makefile for GNU Compiler Collection +# Run 'configure' to generate Makefile from Makefile.in + +# Copyright (C) 1987-2024 Free Software Foundation, Inc. + +#This file is part of GCC. + +#GCC is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3, or (at your option) +#any later version. + +#GCC is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. + +#You should have received a copy of the GNU General Public License +#along with GCC; see the file COPYING3. If not see +#. + +# The targets for external use include: +# all, doc, install, install-cross, install-cross-rest, install-strip, +# uninstall, TAGS, mostlyclean, clean, distclean, maintainer-clean. + +# This is the default target. +# Set by autoconf to "all.internal" for a native build, or +# "all.cross" to build a cross compiler. +all: all.internal + +# Depend on this to specify a phony target portably. +force: + +# This tells GNU make version 3 not to export the variables +# defined in this file into the environment (and thus recursive makes). +.NOEXPORT: +# And this tells it not to automatically pass command-line variables +# to recursive makes. +MAKEOVERRIDES = + +# Suppress smart makes who think they know how to automake yacc and flex file +.y.c: +.l.c: + +# The only suffixes we want for implicit rules are .c and .o, so clear +# the list and add them. This speeds up GNU Make, and allows -r to work. +# For i18n support, we also need .gmo, .po, .pox. +# This must come before the language makefile fragments to allow them to +# add suffixes and rules of their own. +.SUFFIXES: +.SUFFIXES: .c .cc .o .po .pox .gmo + +# ------------------------------- +# Standard autoconf-set variables +# ------------------------------- + +build=x86_64-pc-linux-gnu +build_os=linux-gnu +host=x86_64-pc-linux-gnu +host_noncanonical=x86_64-pc-linux-gnu +host_os=linux-gnu +target=x86_64-pc-linux-gnu +target_noncanonical:=x86_64-pc-linux-gnu + +# Normally identical to target_noncanonical, except for compilers built +# as accelerator targets. +real_target_noncanonical:=x86_64-pc-linux-gnu +accel_dir_suffix = + +# Sed command to transform gcc to installed name. +program_transform_name := s,x,x, + +# ----------------------------- +# Directories used during build +# ----------------------------- + +# Directory where sources are, from where we are. +srcdir = . +gcc_docdir = ./doc + +# Directory where sources are, absolute. +abs_srcdir = /home/ahryhorzhevskyi/gcc/gcc +abs_docdir = /home/ahryhorzhevskyi/gcc/gcc/doc + +# Directory where sources are, relative to here. +top_srcdir = . + +# Top build directory for this package, relative to here. +top_builddir = . + +# The absolute path to the current directory. +objdir := $(shell pwd) + +host_subdir=. +build_subdir=build-x86_64-pc-linux-gnu +target_subdir=x86_64-pc-linux-gnu +build_libsubdir=build-x86_64-pc-linux-gnu + +# Top build directory for the "Cygnus tree", relative to $(top_builddir). +ifeq ($(host_subdir),.) +toplevel_builddir := .. +else +toplevel_builddir := ../.. +endif + +build_objdir := $(toplevel_builddir)/$(build_subdir) +build_libobjdir := $(toplevel_builddir)/$(build_libsubdir) +target_objdir := $(toplevel_builddir)/$(target_subdir) + +# -------- +# Defined vpaths +# -------- + +# Directory where sources are, from where we are. + + +# We define a vpath for the sources of the .texi files here because they +# are split between multiple directories and we would rather use one implicit +# pattern rule for everything. +# This vpath could be extended within the Make-lang fragments. + +vpath %.texi $(gcc_docdir) +vpath %.texi $(gcc_docdir)/include + +# -------- +# UNSORTED +# -------- + +# Extra flags to pass to indicate cross compilation, which +# might be used or tested by Make-lang fragments. +CROSS= + +# Variables that exist for you to override. +# See below for how to change them for certain systems. + +# List of language subdirectories. +SUBDIRS = ada c cp d fortran go jit lto m2 objc objcp rust build + +# Selection of languages to be made. +CONFIG_LANGUAGES = c +LANGUAGES = c $(CONFIG_LANGUAGES) +ifeq (yes,yes) +LANGUAGES += gcov$(exeext) gcov-dump$(exeext) gcov-tool$(exeext) +endif + +# Default values for variables overridden in Makefile fragments. +# CFLAGS is for the user to override to, e.g., do a cross build with -O2. +# TCFLAGS is used for compilations with the GCC just built. +# T_CFLAGS is used for all compilations and is overridden by t-* files. +# TFLAGS is also for the user to override, passed down from the top-level +# Makefile. It is used for all compilations. +T_CFLAGS = +TCFLAGS = +TFLAGS = +CFLAGS = -g +CXXFLAGS = -g +LDFLAGS = + +# Should we build position-independent host code? +PICFLAG = -fno-PIE + +# The linker flag for the above. +LD_PICFLAG = -no-pie + +# Flags to determine code coverage. When coverage is disabled, this will +# contain the optimization flags, as you normally want code coverage +# without optimization. +COVERAGE_FLAGS = +coverageexts = .{gcda,gcno} + +# The warning flags are separate from CFLAGS because people tend to +# override optimization flags and we'd like them to still have warnings +# turned on. These flags are also used to pass other stage dependent +# flags from configure. The user is free to explicitly turn these flags +# off if they wish. +# LOOSE_WARN are the warning flags to use when compiling something +# which is only compiled with gcc, such as libgcc. +# C_LOOSE_WARN is similar, but with C-only warnings. +# STRICT_WARN are the additional warning flags to +# apply to the back end and some front ends, which may be compiled +# with other compilers. +# C_STRICT_WARN is similar, with C-only warnings. +LOOSE_WARN = -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual +C_LOOSE_WARN = -Wstrict-prototypes -Wmissing-prototypes +STRICT_WARN = -Wmissing-format-attribute -Wconditionally-supported -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings +C_STRICT_WARN = -Wold-style-definition -Wc++-compat + +# This is set by --enable-checking. The idea is to catch forgotten +# "extern" tags in header files. +NOCOMMON_FLAG = -fno-common + +NOEXCEPTION_FLAGS = -fno-exceptions -fno-rtti -fasynchronous-unwind-tables + +ALIASING_FLAGS = + +# This is set by --disable-maintainer-mode (default) to "#" +# FIXME: 'MAINT' will always be set to an empty string, no matter if +# --disable-maintainer-mode is used or not. This is because the +# following will expand to "MAINT := " in maintainer mode, and to +# "MAINT := #" in non-maintainer mode, but because '#' starts a comment, +# they mean exactly the same thing for make. +MAINT := # + +# The following provides the variable ENABLE_MAINTAINER_RULES that can +# be used in language Make-lang.in makefile fragments to enable +# maintainer rules. So, ENABLE_MAINTAINER_RULES is 'true' in +# maintainer mode, and '' otherwise. +# ENABLE_MAINTAINER_RULES = true + +# These are set by --enable-checking=valgrind. +RUN_GEN = +VALGRIND_DRIVER_DEFINES = + +# This is how we control whether or not the additional warnings are applied. +.-warn = $(STRICT_WARN) +build-warn = $(STRICT_WARN) +rtl-ssa-warn = $(STRICT_WARN) +GCC_WARN_CFLAGS = $(LOOSE_WARN) $(C_LOOSE_WARN) $($(@D)-warn) $(if $(filter-out $(STRICT_WARN),$($(@D)-warn)),,$(C_STRICT_WARN)) $(NOCOMMON_FLAG) $($@-warn) +GCC_WARN_CXXFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn) + +# 1 2 3 ... 9999 +one_to_9999_0:=1 2 3 4 5 6 7 8 9 +one_to_9999_1:=0 $(one_to_9999_0) +one_to_9999_2:=$(foreach i,$(one_to_9999_0),$(addprefix $(i),$(one_to_9999_1))) +one_to_9999_3:=$(addprefix 0,$(one_to_9999_1)) $(one_to_9999_2) +one_to_9999_4:=$(foreach i,$(one_to_9999_0),$(addprefix $(i),$(one_to_9999_3))) +one_to_9999_5:=$(addprefix 0,$(one_to_9999_3)) $(one_to_9999_4) +one_to_9999_6:=$(foreach i,$(one_to_9999_0),$(addprefix $(i),$(one_to_9999_5))) +one_to_9999:=$(one_to_9999_0) $(one_to_9999_2) $(one_to_9999_4) $(one_to_9999_6) + +# The number of splits to be made for the match.pd files. +NUM_MATCH_SPLITS = 10 +MATCH_SPLITS_SEQ = $(wordlist 1,$(NUM_MATCH_SPLITS),$(one_to_9999)) +GIMPLE_MATCH_PD_SEQ_SRC = $(patsubst %, gimple-match-%.cc, $(MATCH_SPLITS_SEQ)) +GIMPLE_MATCH_PD_SEQ_O = $(patsubst %, gimple-match-%.o, $(MATCH_SPLITS_SEQ)) +GENERIC_MATCH_PD_SEQ_SRC = $(patsubst %, generic-match-%.cc, $(MATCH_SPLITS_SEQ)) +GENERIC_MATCH_PD_SEQ_O = $(patsubst %, generic-match-%.o, $(MATCH_SPLITS_SEQ)) + +# The number of splits to be made for the insn-emit files. +NUM_INSNEMIT_SPLITS = 10 +INSNEMIT_SPLITS_SEQ = $(wordlist 1,$(NUM_INSNEMIT_SPLITS),$(one_to_9999)) +INSNEMIT_SEQ_SRC = $(patsubst %, insn-emit-%.cc, $(INSNEMIT_SPLITS_SEQ)) +INSNEMIT_SEQ_TMP = $(patsubst %, tmp-emit-%.cc, $(INSNEMIT_SPLITS_SEQ)) +INSNEMIT_SEQ_O = $(patsubst %, insn-emit-%.o, $(INSNEMIT_SPLITS_SEQ)) + +# These files are to have specific diagnostics suppressed, or are not to +# be subject to -Werror: +# flex output may yield harmless "no previous prototype" warnings +build/gengtype-lex.o-warn = -Wno-error +gengtype-lex.o-warn = -Wno-error +libgcov-util.o-warn = -Wno-error +libgcov-driver-tool.o-warn = -Wno-error +libgcov-merge-tool.o-warn = -Wno-error +gimple-match-exports.o-warn = -Wno-unused +dfp.o-warn = -Wno-strict-aliasing + +# All warnings have to be shut off in stage1 if the compiler used then +# isn't gcc; configure determines that. WARN_CFLAGS will be either +# $(GCC_WARN_CFLAGS), or nothing. Similarly, WARN_CXXFLAGS will be +# either $(GCC_WARN_CXXFLAGS), or nothing. +WARN_CFLAGS = $(GCC_WARN_CFLAGS) +WARN_CXXFLAGS = $(GCC_WARN_CXXFLAGS) + +CPPFLAGS = + +AWK = gawk +CC = gcc +CXX = g++ +BISON = bison +BISONFLAGS = +FLEX = flex +FLEXFLAGS = +AR = ar --plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so +AR_FLAGS = rc +NM = /usr/bin/nm -B +RANLIB = ranlib --plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so +RANLIB_FLAGS = + +# Libraries to use on the host. +HOST_LIBS = + +# The name of the compiler to use. +COMPILER = $(CXX) +COMPILER_FLAGS = $(CXXFLAGS) +# If HOST_LIBS is set, then the user is controlling the libraries to +# link against. In that case, link with $(CC) so that the -lstdc++ +# library is not introduced. If HOST_LIBS is not set, link with +# $(CXX) to pick up -lstdc++. +ifeq ($(HOST_LIBS),) +LINKER = $(CXX) +LINKER_FLAGS = $(CXXFLAGS) +else +LINKER = $(CC) +LINKER_FLAGS = $(CFLAGS) +endif + +enable_host_pie = + +# Enable Intel CET on Intel CET enabled host if needed. +CET_HOST_FLAGS = +COMPILER += $(CET_HOST_FLAGS) + +DO_LINK_MUTEX = false + +# Maybe compile the compilers with -fPIE or -fPIC. +COMPILER += $(PICFLAG) + +# Link with -pie, or -no-pie, depending on the above. +LINKER += $(LD_PICFLAG) + +# Like LINKER, but use a mutex for serializing front end links. +ifeq (false,true) +LLINKER = $(SHELL) $(srcdir)/lock-and-run.sh linkfe.lck $(LINKER) +else +LLINKER = $(LINKER) +endif + +THIN_ARCHIVE_SUPPORT = yes + +USE_THIN_ARCHIVES = no +ifeq ($(THIN_ARCHIVE_SUPPORT),yes) +ifeq ($(AR_FLAGS),rc) +ifeq ($(RANLIB_FLAGS),) +USE_THIN_ARCHIVES = yes +endif +endif +endif + +# ------------------------------------------- +# Programs which operate on the build machine +# ------------------------------------------- + +SHELL = /bin/sh +# pwd command to use. Allow user to override default by setting PWDCMD in +# the environment to account for automounters. The make variable must not +# be called PWDCMD, otherwise the value set here is passed to make +# subprocesses and overrides the setting from the user's environment. +# Don't use PWD since it is a common shell environment variable and we +# don't want to corrupt it. +PWD_COMMAND = $${PWDCMD-pwd} +# on sysV, define this as cp. +INSTALL = /usr/bin/install -c +# Some systems may be missing symbolic links, regular links, or both. +# Allow configure to check this and use "ln -s", "ln", or "cp" as appropriate. +LN=ln +LN_S=ln -s +# These permit overriding just for certain files. +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_SCRIPT = /usr/bin/install -c +install_sh = $(SHELL) $(srcdir)/../install-sh +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +MAKEINFO = /bin/sh ./../missing makeinfo +MAKEINFOFLAGS = --no-split +TEXI2DVI = texi2dvi +TEXI2PDF = texi2pdf +TEXI2HTML = $(MAKEINFO) --html +TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl +POD2MAN = pod2man --center="GNU" --release="gcc-$(version)" --date=$(shell sed 's/\(....\)\(..\)\(..\)/\1-\2-\3/' <$(DATESTAMP)) +# Some versions of `touch' (such as the version on Solaris 2.8) +# do not correctly set the timestamp due to buggy versions of `utime' +# in the kernel. So, we use `echo' instead. +STAMP = echo timestamp > +# If necessary (e.g., when using the MSYS shell on Microsoft Windows) +# translate the shell's notion of absolute pathnames to the native +# spelling. +build_file_translate = + +# Make sure the $(MAKE) variable is defined. + + +# Locate mkinstalldirs. +mkinstalldirs=$(SHELL) $(srcdir)/../mkinstalldirs + +# write_entries_to_file - writes each entry in a list +# to the specified file. Entries are written in chunks of +# $(write_entries_to_file_split) to accommodate systems with +# severe command-line-length limitations. +# Parameters: +# $(1): variable containing entries to iterate over +# $(2): output file +write_entries_to_file_split = 50 +write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) \ + $(foreach range, \ + $(shell i=1; while test $$i -le $(words $(1)); do \ + echo $$i; i=`expr $$i + $(write_entries_to_file_split)`; done), \ + $(shell echo "$(wordlist $(range), \ + $(shell expr $(range) + $(write_entries_to_file_split) - 1), $(1))" \ + | tr ' ' '\012' >> $(2))) + +# The jit documentation looks better if built with sphinx, but can be +# built with texinfo if sphinx is not available. +# configure sets "doc_build_sys" to "sphinx" or "texinfo" accordingly +doc_build_sys=texinfo + +# -------- +# UNSORTED +# -------- + +# Dependency tracking stuff. +CXXDEPMODE = depmode=gcc3 +DEPDIR = .deps +depcomp = $(SHELL) $(srcdir)/../depcomp + +# In the past we used AC_PROG_CC_C_O and set this properly, but +# it was discovered that this hadn't worked in a long time, so now +# we just hard-code. +OUTPUT_OPTION = -o $@ + +# This is where we get zlib from. zlibdir is -L../zlib and zlibinc is +# -I../zlib, unless we were configured with --with-system-zlib, in which +# case both are empty. +ZLIB = -L$(top_builddir)/../zlib -lz +ZLIBINC = -I$(top_srcdir)/../zlib + +# How to find GMP +GMPLIBS = +GMPINC = + +# How to find isl. +ISLLIBS = +ISLINC = + +# Set to 'yes' if the LTO front end is enabled. +enable_lto = + +# Compiler and flags needed for plugin support +PLUGINCC = g++ +PLUGINCFLAGS = -g + +# Libs and linker options needed for plugin support +PLUGINLIBS = + +enable_plugin = no + +# On MinGW plugin installation involves installing import libraries. +ifeq ($(enable_plugin),yes) + plugin_implib := $(if $(strip $(filter mingw%,$(host_os))),yes,no) +endif + +enable_host_shared = + +enable_as_accelerator = + +CPPLIB = ../libcpp/libcpp.a +CPPINC = -I$(srcdir)/../libcpp/include + +CODYLIB = ../libcody/libcody.a +CODYINC = -I$(srcdir)/../libcody + +# Where to find decNumber +enable_decimal_float = bid +DECNUM = $(srcdir)/../libdecnumber +DECNUMFMT = $(srcdir)/../libdecnumber/$(enable_decimal_float) +DECNUMINC = -I$(DECNUM) -I$(DECNUMFMT) -I../libdecnumber +LIBDECNUMBER = ../libdecnumber/libdecnumber.a + +# The backtrace library. +BACKTRACE = $(srcdir)/../libbacktrace +BACKTRACEINC = -I$(BACKTRACE) +LIBBACKTRACE = ../libbacktrace/.libs/libbacktrace.a + +# Target to use when installing include directory. Either +# install-headers-tar, install-headers-cpio or install-headers-cp. +INSTALL_HEADERS_DIR = install-headers-tar + +# Header files that are made available under the same name +# to programs compiled with GCC. +USER_H = $(srcdir)/ginclude/float.h \ + $(srcdir)/ginclude/iso646.h \ + $(srcdir)/ginclude/stdarg.h \ + $(srcdir)/ginclude/stdbool.h \ + $(srcdir)/ginclude/stddef.h \ + $(srcdir)/ginclude/varargs.h \ + $(srcdir)/ginclude/stdfix.h \ + $(srcdir)/ginclude/stdnoreturn.h \ + $(srcdir)/ginclude/stdalign.h \ + $(srcdir)/ginclude/stdatomic.h \ + $(srcdir)/ginclude/stdckdint.h \ + $(EXTRA_HEADERS) + +USER_H_INC_NEXT_PRE = +USER_H_INC_NEXT_POST = + +# Enable target overriding of this fragment, as in config/t-vxworks. +T_GLIMITS_H = $(srcdir)/glimits.h +T_STDINT_GCC_H = $(srcdir)/ginclude/stdint-gcc.h + +# The GCC to use for compiling crt*.o. +# Usually the one we just built. +# Don't use this as a dependency--use $(GCC_PASSES). +GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld $(TFLAGS) + +# Set if the compiler was configured with --with-build-sysroot. +SYSROOT_CFLAGS_FOR_TARGET = + +# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET. +# It specifies -B./. +# It also specifies -isystem ./include to find, e.g., stddef.h. +GCC_CFLAGS=$(CFLAGS_FOR_TARGET) $(INTERNAL_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) $(C_LOOSE_WARN) -Wold-style-definition $($@-warn) -isystem ./include $(TCFLAGS) + +# --------------------------------------------------- +# Programs which produce files for the target machine +# --------------------------------------------------- + +AR_FOR_TARGET := $(shell \ + if [ -f $(objdir)/../binutils/ar ] ; then \ + echo $(objdir)/../binutils/ar ; \ + else \ + if [ "$(host)" = "$(target)" ] ; then \ + echo $(AR); \ + else \ + t='$(program_transform_name)'; echo ar | sed -e "$$t" ; \ + fi; \ + fi) +AR_FLAGS_FOR_TARGET = +AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc +AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x +LIPO_FOR_TARGET = lipo +ORIGINAL_AS_FOR_TARGET = +RANLIB_FOR_TARGET := $(shell \ + if [ -f $(objdir)/../binutils/ranlib ] ; then \ + echo $(objdir)/../binutils/ranlib ; \ + else \ + if [ "$(host)" = "$(target)" ] ; then \ + echo $(RANLIB); \ + else \ + t='$(program_transform_name)'; echo ranlib | sed -e "$$t" ; \ + fi; \ + fi) +ORIGINAL_LD_FOR_TARGET = +ORIGINAL_NM_FOR_TARGET = +NM_FOR_TARGET = ./nm +STRIP_FOR_TARGET := $(shell \ + if [ -f $(objdir)/../binutils/strip-new ] ; then \ + echo $(objdir)/../binutils/strip-new ; \ + else \ + if [ "$(host)" = "$(target)" ] ; then \ + echo strip; \ + else \ + t='$(program_transform_name)'; echo strip | sed -e "$$t" ; \ + fi; \ + fi) + +# -------- +# UNSORTED +# -------- + +# Where to find some libiberty headers. +HASHTAB_H = $(srcdir)/../include/hashtab.h +OBSTACK_H = $(srcdir)/../include/obstack.h +SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h +MD5_H = $(srcdir)/../include/md5.h +XREGEX_H = $(srcdir)/../include/xregex.h +FNMATCH_H = $(srcdir)/../include/fnmatch.h + +# Linker plugin API headers +LINKER_PLUGIN_API_H = $(srcdir)/../include/plugin-api.h + +# Default native SYSTEM_HEADER_DIR, to be overridden by targets. +NATIVE_SYSTEM_HEADER_DIR = /usr/include +# Default cross SYSTEM_HEADER_DIR, to be overridden by targets. +ifeq (${prefix}/include,$(prefix)/include) + CROSS_SYSTEM_HEADER_DIR = $(gcc_tooldir)/sys-include +else + CROSS_SYSTEM_HEADER_DIR = ${prefix}/include +endif + +# autoconf sets SYSTEM_HEADER_DIR to one of the above. +# Purge it of unnecessary internal relative paths +# to directories that might not exist yet. +# The sed idiom for this is to repeat the search-and-replace until it doesn't match, using :a ... ta. +# Use single quotes here to avoid nested double- and backquotes, this +# macro is also used in a double-quoted context. +SYSTEM_HEADER_DIR = `echo $(NATIVE_SYSTEM_HEADER_DIR) | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta` + +# Path to the system headers on the build machine. +BUILD_SYSTEM_HEADER_DIR = `echo $(NATIVE_SYSTEM_HEADER_DIR) | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta` + +# Control whether to run fixincludes. +STMP_FIXINC = stmp-fixinc + +# Test to see whether exists in the system header files. +LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ] + +# Directory for prefix to system directories, for +# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc. +TARGET_SYSTEM_ROOT = +TARGET_SYSTEM_ROOT_DEFINE = + +xmake_file= $(srcdir)/config/i386/x-i386 $(srcdir)/config/x-linux +tmake_file= $(srcdir)/config/t-slibgcc $(srcdir)/config/t-linux $(srcdir)/config/t-glibc $(srcdir)/config/i386/t-linux64 $(srcdir)/config/i386/t-pmm_malloc $(srcdir)/config/i386/t-i386 $(srcdir)/config/i386/t-linux $(srcdir)/config/i386/t-gnu-property +TM_ENDIAN_CONFIG= +TM_MULTILIB_CONFIG=m64,m32 +TM_MULTILIB_EXCEPTIONS_CONFIG= +out_file=$(srcdir)/config/i386/i386.cc +out_object_file=i386.o +common_out_file=$(srcdir)/common/config/i386/i386-common.cc +common_out_object_file=i386-common.o +EXTRA_GTYPE_DEPS= +md_file=$(srcdir)/common.md $(srcdir)/config/i386/i386.md +tm_file_list=options.h $(srcdir)/config/vxworks-dummy.h $(srcdir)/config/i386/biarch64.h $(srcdir)/config/i386/i386.h $(srcdir)/config/i386/unix.h $(srcdir)/config/i386/att.h $(srcdir)/config/elfos.h $(srcdir)/config/gnu-user.h $(srcdir)/config/glibc-stdint.h $(srcdir)/config/i386/x86-64.h $(srcdir)/config/i386/gnu-user-common.h $(srcdir)/config/i386/gnu-user64.h $(srcdir)/config/linux.h $(srcdir)/config/linux-android.h $(srcdir)/config/i386/linux-common.h $(srcdir)/config/i386/linux64.h $(srcdir)/config/initfini-array.h $(srcdir)/defaults.h +tm_include_list=options.h insn-constants.h config/vxworks-dummy.h config/i386/biarch64.h config/i386/i386.h config/i386/unix.h config/i386/att.h config/elfos.h config/gnu-user.h config/glibc-stdint.h config/i386/x86-64.h config/i386/gnu-user-common.h config/i386/gnu-user64.h config/linux.h config/linux-android.h config/i386/linux-common.h config/i386/linux64.h config/initfini-array.h defaults.h +tm_defines= LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4 DEFAULT_LIBC=LIBC_GLIBC ANDROID_DEFAULT=0 HEAP_TRAMPOLINES_INIT=0 +tm_p_file_list= $(srcdir)/config/i386/i386-protos.h $(srcdir)/config/linux-protos.h tm-preds.h +tm_p_include_list= config/i386/i386-protos.h config/linux-protos.h tm-preds.h +tm_d_file_list= $(srcdir)/config/i386/i386-d.h +tm_d_include_list= config/i386/i386-d.h +tm_rust_file_list= $(srcdir)/config/i386/i386-rust.h +tm_rust_include_list= config/i386/i386-rust.h +build_xm_file_list= auto-host.h $(srcdir)/../include/ansidecl.h +build_xm_include_list= auto-host.h ansidecl.h +build_xm_defines= +host_xm_file_list= auto-host.h $(srcdir)/../include/ansidecl.h +host_xm_include_list= auto-host.h ansidecl.h +host_xm_defines= +xm_file_list= auto-host.h $(srcdir)/../include/ansidecl.h +xm_include_list= auto-host.h ansidecl.h +xm_defines= +lang_checks= +lang_checks_parallelized= +lang_opt_files= ./ada/gcc-interface/lang.opt ./d/lang.opt ./fortran/lang.opt ./go/lang.opt ./lto/lang.opt ./m2/lang.opt ./rust/lang.opt $(srcdir)/c-family/c.opt $(srcdir)/common.opt $(srcdir)/params.opt $(srcdir)/analyzer/analyzer.opt +lang_specs_files= +lang_tree_files= ./ada/gcc-interface/ada-tree.def ./c/c-tree.def ./cp/cp-tree.def ./d/d-tree.def ./m2/m2-tree.def ./objc/objc-tree.def +target_cpu_default= +OBJC_BOEHM_GC= +extra_modes_file=$(srcdir)/config/i386/i386-modes.def +extra_opt_files= $(srcdir)/config/fused-madd.opt $(srcdir)/config/i386/i386.opt $(srcdir)/config/gnu-user.opt $(srcdir)/config/linux.opt $(srcdir)/config/linux-android.opt +host_hook_obj=host-linux.o + +# Multiarch support +enable_multiarch = auto +with_cpu = generic +with_float = +ifeq ($(enable_multiarch),yes) + if_multiarch = $(1) +else + ifeq ($(enable_multiarch),auto) + # SYSTEM_HEADER_DIR is makefile syntax, cannot be evaluated in configure.ac + if_multiarch = $(if $(wildcard $(shell echo $(BUILD_SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1)) + else + if_multiarch = + endif +endif + +# ------------------------ +# Installation directories +# ------------------------ + +# Common prefix for installation directories. +# NOTE: This directory must exist when you start installation. +prefix = /usr/local +# Directory in which to put localized header files. On the systems with +# gcc as the native cc, `local_prefix' may not be `prefix' which is +# `/usr'. +# NOTE: local_prefix *should not* default from prefix. +local_prefix = /usr/local +# Directory in which to put host dependent programs and libraries +exec_prefix = ${prefix} +# Directory in which to put the executable for the command `gcc' +bindir = ${exec_prefix}/bin +# Directory in which to put the directories used by the compiler. +libdir = ${exec_prefix}/lib +# Directory in which GCC puts its executables. +libexecdir = ${exec_prefix}/libexec + +# -------- +# UNSORTED +# -------- + +# Directory in which the compiler finds libraries etc. +libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) +# Directory in which the compiler finds executables +libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) +# Directory in which all plugin resources are installed +plugin_resourcesdir = $(libsubdir)/plugin + # Directory in which plugin headers are installed +plugin_includedir = $(plugin_resourcesdir)/include +# Directory in which plugin specific executables are installed +plugin_bindir = $(libexecsubdir)/plugin +# Used to produce a relative $(gcc_tooldir) in gcc.o +ifeq ($(enable_as_accelerator),yes) +unlibsubdir = ../../../../.. +else +unlibsubdir = ../../.. +endif +# $(prefix), expressed as a path relative to $(libsubdir). +# +# An explanation of the sed strings: +# -e 's|^$(prefix)||' matches and eliminates 'prefix' from 'exec_prefix' +# -e 's|/$$||' match a trailing forward slash and eliminates it +# -e 's|^[^/]|/|' forces the string to start with a forward slash (*) +# -e 's|/[^/]*|../|g' replaces each occurrence of / with ../ +# +# (*) Note this pattern overwrites the first character of the string +# with a forward slash if one is not already present. This is not a +# problem because the exact names of the sub-directories concerned is +# unimportant, just the number of them matters. +# +# The practical upshot of these patterns is like this: +# +# prefix exec_prefix result +# ------ ----------- ------ +# /foo /foo/bar ../ +# /foo/ /foo/bar ../ +# /foo /foo/bar/ ../ +# /foo/ /foo/bar/ ../ +# /foo /foo/bar/ugg ../../ +libsubdir_to_prefix := \ + $(unlibsubdir)/$(shell echo "$(libdir)" | \ + sed -e 's|^$(prefix)||' -e 's|/$$||' -e 's|^[^/]|/|' \ + -e 's|/[^/]*|../|g') +# $(exec_prefix), expressed as a path relative to $(prefix). +prefix_to_exec_prefix := \ + $(shell echo "$(exec_prefix)" | \ + sed -e 's|^$(prefix)||' -e 's|^/||' -e '/./s|$$|/|') +# Directory in which to find other cross-compilation tools and headers. +dollar = +# Used in install-cross. +gcc_tooldir = $(libsubdir)/$(libsubdir_to_prefix)$(target_noncanonical) +# Since gcc_tooldir does not exist at build-time, use -B$(build_tooldir)/bin/ +build_tooldir = $(exec_prefix)/$(target_noncanonical) +# Directory in which the compiler finds target-independent g++ includes. +gcc_gxx_include_dir = $(libsubdir)/$(libsubdir_to_prefix)include/c++/$(version) +gcc_gxx_include_dir_add_sysroot = 0 +# Directory in which the compiler finds libc++ includes. +gcc_gxx_libcxx_include_dir = $(libsubdir)/$(libsubdir_to_prefix)include/c++/v1 +gcc_gxx_libcxx_include_dir_add_sysroot = 0 +# Directory to search for site-specific includes. +local_includedir = $(local_prefix)/include +includedir = $(prefix)/include +# where the info files go +infodir = ${datarootdir}/info +# Where cpp should go besides $prefix/bin if necessary +cpp_install_dir = +# where the locale files go +datadir = ${datarootdir} +localedir = $(datadir)/locale +# Extension (if any) to put in installed man-page filename. +man1ext = .1 +man7ext = .7 +objext = .o +exeext = +build_exeext = + +# Directory in which to put man pages. +mandir = ${datarootdir}/man +man1dir = $(mandir)/man1 +man7dir = $(mandir)/man7 +# Dir for temp files. +tmpdir = /tmp + +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE} +# Directory in which to put DVIs +dvidir = ${docdir} +# Directory in which to build HTML +build_htmldir = $(objdir)/HTML/gcc-$(version) +# Directory in which to put HTML +htmldir = ${docdir} + +# Whether we were configured with NLS. +USE_NLS = yes + +# Internationalization library. +INCINTL = +LIBINTL = +LIBINTL_DEP = + +# Character encoding conversion library. +LIBICONV = +LIBICONV_DEP = + +# If a supplementary library is being used for the GC. +GGC_LIB= + +# "true" if the target C library headers are unavailable; "false" +# otherwise. +inhibit_libc = false +ifeq ($(inhibit_libc),true) +INHIBIT_LIBC_CFLAGS = -Dinhibit_libc +endif + +# List of extra executables that should be compiled for this target machine +# that are used when linking. +# The rules for compiling them should be in the t-* file for the machine. +EXTRA_PROGRAMS = + +# List of extra object files that should be compiled and linked with +# compiler proper (cc1, cc1obj, cc1plus). +EXTRA_OBJS = x86-tune-sched.o x86-tune-sched-bd.o x86-tune-sched-atom.o x86-tune-sched-core.o i386-options.o i386-builtins.o i386-expand.o i386-features.o linux.o gnu-property.o + +# List of extra object files that should be compiled and linked with +# the gcc driver. +EXTRA_GCC_OBJS =driver-i386.o + +# List of extra libraries that should be linked with the gcc driver. +EXTRA_GCC_LIBS = + +# List of additional header files to install. +EXTRA_HEADERS = $(srcdir)/config/i386/cpuid.h $(srcdir)/config/i386/mmintrin.h $(srcdir)/config/i386/mm3dnow.h $(srcdir)/config/i386/xmmintrin.h $(srcdir)/config/i386/emmintrin.h $(srcdir)/config/i386/pmmintrin.h $(srcdir)/config/i386/tmmintrin.h $(srcdir)/config/i386/ammintrin.h $(srcdir)/config/i386/smmintrin.h $(srcdir)/config/i386/nmmintrin.h $(srcdir)/config/i386/bmmintrin.h $(srcdir)/config/i386/fma4intrin.h $(srcdir)/config/i386/wmmintrin.h $(srcdir)/config/i386/immintrin.h $(srcdir)/config/i386/x86intrin.h $(srcdir)/config/i386/avxintrin.h $(srcdir)/config/i386/xopintrin.h $(srcdir)/config/i386/ia32intrin.h $(srcdir)/config/i386/cross-stdarg.h $(srcdir)/config/i386/lwpintrin.h $(srcdir)/config/i386/popcntintrin.h $(srcdir)/config/i386/lzcntintrin.h $(srcdir)/config/i386/bmiintrin.h $(srcdir)/config/i386/bmi2intrin.h $(srcdir)/config/i386/tbmintrin.h $(srcdir)/config/i386/avx2intrin.h $(srcdir)/config/i386/avx512fintrin.h $(srcdir)/config/i386/fmaintrin.h $(srcdir)/config/i386/f16cintrin.h $(srcdir)/config/i386/rtmintrin.h $(srcdir)/config/i386/xtestintrin.h $(srcdir)/config/i386/rdseedintrin.h $(srcdir)/config/i386/prfchwintrin.h $(srcdir)/config/i386/adxintrin.h $(srcdir)/config/i386/fxsrintrin.h $(srcdir)/config/i386/xsaveintrin.h $(srcdir)/config/i386/xsaveoptintrin.h $(srcdir)/config/i386/avx512cdintrin.h $(srcdir)/config/i386/shaintrin.h $(srcdir)/config/i386/clflushoptintrin.h $(srcdir)/config/i386/xsavecintrin.h $(srcdir)/config/i386/xsavesintrin.h $(srcdir)/config/i386/avx512dqintrin.h $(srcdir)/config/i386/avx512bwintrin.h $(srcdir)/config/i386/avx512vlintrin.h $(srcdir)/config/i386/avx512vlbwintrin.h $(srcdir)/config/i386/avx512vldqintrin.h $(srcdir)/config/i386/avx512ifmaintrin.h $(srcdir)/config/i386/avx512ifmavlintrin.h $(srcdir)/config/i386/avx512vbmiintrin.h $(srcdir)/config/i386/avx512vbmivlintrin.h $(srcdir)/config/i386/avx512vpopcntdqintrin.h $(srcdir)/config/i386/clwbintrin.h $(srcdir)/config/i386/mwaitxintrin.h $(srcdir)/config/i386/clzerointrin.h $(srcdir)/config/i386/pkuintrin.h $(srcdir)/config/i386/sgxintrin.h $(srcdir)/config/i386/cetintrin.h $(srcdir)/config/i386/gfniintrin.h $(srcdir)/config/i386/cet.h $(srcdir)/config/i386/avx512vbmi2intrin.h $(srcdir)/config/i386/avx512vbmi2vlintrin.h $(srcdir)/config/i386/avx512vnniintrin.h $(srcdir)/config/i386/avx512vnnivlintrin.h $(srcdir)/config/i386/vaesintrin.h $(srcdir)/config/i386/vpclmulqdqintrin.h $(srcdir)/config/i386/avx512vpopcntdqvlintrin.h $(srcdir)/config/i386/avx512bitalgintrin.h $(srcdir)/config/i386/avx512bitalgvlintrin.h $(srcdir)/config/i386/pconfigintrin.h $(srcdir)/config/i386/wbnoinvdintrin.h $(srcdir)/config/i386/movdirintrin.h $(srcdir)/config/i386/waitpkgintrin.h $(srcdir)/config/i386/cldemoteintrin.h $(srcdir)/config/i386/avx512bf16vlintrin.h $(srcdir)/config/i386/avx512bf16intrin.h $(srcdir)/config/i386/enqcmdintrin.h $(srcdir)/config/i386/serializeintrin.h $(srcdir)/config/i386/avx512vp2intersectintrin.h $(srcdir)/config/i386/avx512vp2intersectvlintrin.h $(srcdir)/config/i386/tsxldtrkintrin.h $(srcdir)/config/i386/amxtileintrin.h $(srcdir)/config/i386/amxint8intrin.h $(srcdir)/config/i386/amxbf16intrin.h $(srcdir)/config/i386/x86gprintrin.h $(srcdir)/config/i386/uintrintrin.h $(srcdir)/config/i386/hresetintrin.h $(srcdir)/config/i386/keylockerintrin.h $(srcdir)/config/i386/avxvnniintrin.h $(srcdir)/config/i386/mwaitintrin.h $(srcdir)/config/i386/avx512fp16intrin.h $(srcdir)/config/i386/avx512fp16vlintrin.h $(srcdir)/config/i386/avxifmaintrin.h $(srcdir)/config/i386/avxvnniint8intrin.h $(srcdir)/config/i386/avxneconvertintrin.h $(srcdir)/config/i386/cmpccxaddintrin.h $(srcdir)/config/i386/amxfp16intrin.h $(srcdir)/config/i386/prfchiintrin.h $(srcdir)/config/i386/raointintrin.h $(srcdir)/config/i386/amxcomplexintrin.h $(srcdir)/config/i386/avxvnniint16intrin.h $(srcdir)/config/i386/sm3intrin.h $(srcdir)/config/i386/sha512intrin.h $(srcdir)/config/i386/sm4intrin.h $(srcdir)/config/i386/usermsrintrin.h + +# How to handle . +USE_GCC_STDINT = wrap + +# The configure script will set this to collect2$(exeext), except on a +# (non-Unix) host which cannot build collect2, for which it will be +# set to empty. +COLLECT2 = collect2$(exeext) + +# Program to convert libraries. +LIBCONVERT = + +# Control whether header files are installed. +INSTALL_HEADERS=install-headers install-mkheaders + +# Control whether Info documentation is built and installed. +BUILD_INFO = no-info + +# Control flags for @contents placement in HTML output +MAKEINFO_TOC_INLINE_FLAG = -c CONTENTS_OUTPUT_LOCATION=inline + +# Control whether manpages generated by texi2pod.pl can be rebuilt. +GENERATED_MANPAGES = generated-manpages + +# Additional directories of header files to run fixincludes on. +# These should be directories searched automatically by default +# just as /usr/include is. +# *Do not* use this for directories that happen to contain +# header files, but are not searched automatically by default. +# On most systems, this is empty. +OTHER_FIXINCLUDES_DIRS= + +# A list of all the language-specific executables. +COMPILERS = gnat1$(exeext) cc1$(exeext) cc1plus$(exeext) d21$(exeext) f951$(exeext) go1$(exeext) lto1$(exeext) cc1gm2$(exeext) cc1obj$(exeext) cc1objplus$(exeext) crab1$(exeext) + +# List of things which should already be built whenever we try to use xgcc +# to compile anything (without linking). +GCC_PASSES=xgcc$(exeext) specs + +# Directory to link to, when using the target `maketest'. +DIR = ../gcc + +# Native compiler for the build machine and its switches. +CC_FOR_BUILD = $(CC) +CXX_FOR_BUILD = $(CXX) +BUILD_CFLAGS= $(ALL_CFLAGS) $(GENERATOR_CFLAGS) -DGENERATOR_FILE +BUILD_CXXFLAGS = $(ALL_CXXFLAGS) $(GENERATOR_CFLAGS) -DGENERATOR_FILE + +# Native compiler that we use. This may be C++ some day. +COMPILER_FOR_BUILD = $(CXX_FOR_BUILD) +BUILD_COMPILERFLAGS = $(BUILD_CXXFLAGS) + +# Native linker that we use. +LINKER_FOR_BUILD = $(CXX_FOR_BUILD) +BUILD_LINKERFLAGS = $(BUILD_CXXFLAGS) + +# Native linker and preprocessor flags. For x-fragment overrides. +BUILD_LDFLAGS=$(LDFLAGS) +BUILD_CPPFLAGS= -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \ + -I$(srcdir)/../include $(INCINTL) $(CPPINC) $(CPPFLAGS) + +# Actual name to use when installing a native compiler. +GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)') +GCC_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcc|sed '$(program_transform_name)') +CPP_INSTALL_NAME := $(shell echo cpp|sed '$(program_transform_name)') +GCOV_INSTALL_NAME := $(shell echo gcov|sed '$(program_transform_name)') +GCOV_TOOL_INSTALL_NAME := $(shell echo gcov-tool|sed '$(program_transform_name)') +GCOV_DUMP_INSTALL_NAME := $(shell echo gcov-dump|sed '$(program_transform_name)') + +# Setup the testing framework, if you have one +EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \ + echo $${rootme}/../expect/expect ; \ + else echo expect ; fi` + +RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \ + echo $${srcdir}/../dejagnu/runtest ; \ + else echo runtest; fi` +RUNTESTFLAGS = + +# This should name the specs file that we're going to install. Target +# Makefiles may override it and name another file to be generated from +# the built-in specs and installed as the default spec, as long as +# they also introduce a rule to generate a file name specs, to be used +# at build time. +SPECS = specs + +# Extra include files that are defined by HeaderInclude directives in +# the .opt files +OPTIONS_H_EXTRA = + +# Extra include files that are defined by SourceInclude directives in +# the .opt files +OPTIONS_C_EXTRA = $(PRETTY_PRINT_H) + +OPTIONS_H_EXTRA += $(srcdir)/config/i386/i386-opts.h + +# End of variables for you to override. + +# GTM_H lists the config files that the generator files depend on, +# while TM_H lists the ones ordinary gcc files depend on, which +# includes several files generated by those generators. +BCONFIG_H = bconfig.h $(build_xm_file_list) +CONFIG_H = config.h $(host_xm_file_list) +TCONFIG_H = tconfig.h $(xm_file_list) +# Some $(target)-protos.h depends on tree.h +TM_P_H = tm_p.h $(tm_p_file_list) $(TREE_H) +TM_D_H = tm_d.h $(tm_d_file_list) +TM_RUST_H = tm_rust.h $(tm_rust_file_list) +GTM_H = tm.h $(tm_file_list) insn-constants.h +TM_H = $(GTM_H) insn-flags.h $(OPTIONS_H) + +# Variables for version information. +BASEVER := $(srcdir)/BASE-VER # 4.x.y +DEVPHASE := $(srcdir)/DEV-PHASE # experimental, prerelease, "" +DATESTAMP := $(srcdir)/DATESTAMP # YYYYMMDD or empty +REVISION := $(srcdir)/REVISION # [BRANCH revision XXXXXX] + +BASEVER_c := $(shell cat $(BASEVER)) +DEVPHASE_c := $(shell cat $(DEVPHASE)) +DATESTAMP_c := $(shell cat $(DATESTAMP)) + +ifeq (,$(wildcard $(REVISION))) +REVISION_c := +REVISION := +else +REVISION_c := $(shell cat $(REVISION)) +endif + +version := $(shell cat $(BASEVER)) + +PATCHLEVEL_c := \ + $(shell echo $(BASEVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/') + + +# For use in version.cc - double quoted strings, with appropriate +# surrounding punctuation and spaces, and with the datestamp and +# development phase collapsed to the empty string in release mode +# (i.e. if DEVPHASE_c is empty and PATCHLEVEL_c is 0). The space +# immediately after the comma in the $(if ...) constructs is +# significant - do not remove it. +BASEVER_s := "\"$(BASEVER_c)\"" +DEVPHASE_s := "\"$(if $(DEVPHASE_c), ($(DEVPHASE_c)))\"" +DATESTAMP_s := \ + "\"$(if $(DEVPHASE_c)$(filter-out 0,$(PATCHLEVEL_c)), $(DATESTAMP_c))\"" +PKGVERSION_s:= "\"(GCC) \"" +BUGURL_s := "\"\"" + +PKGVERSION := (GCC) +BUGURL_TEXI := @uref{https://gcc.gnu.org/bugs/} + +ifdef REVISION_c +REVISION_s := \ + "\"$(if $(DEVPHASE_c)$(filter-out 0,$(PATCHLEVEL_c)), $(REVISION_c))\"" +else +REVISION_s := "\"\"" +endif + +# Shorthand variables for dependency lists. +DUMPFILE_H = $(srcdir)/../libcpp/include/line-map.h dumpfile.h +VEC_H = vec.h statistics.h $(GGC_H) +HASH_TABLE_H = $(HASHTAB_H) hash-table.h $(GGC_H) +EXCEPT_H = except.h $(HASHTAB_H) +TARGET_DEF = target.def target-hooks-macros.h target-insns.def +C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h +COMMON_TARGET_DEF = common/common-target.def target-hooks-macros.h +D_TARGET_DEF = d/d-target.def target-hooks-macros.h +RUST_TARGET_DEF = rust/rust-target.def target-hooks-macros.h +TARGET_H = $(TM_H) target.h $(TARGET_DEF) insn-modes.h insn-codes.h +C_TARGET_H = c-family/c-target.h $(C_TARGET_DEF) +COMMON_TARGET_H = common/common-target.h $(INPUT_H) $(COMMON_TARGET_DEF) +D_TARGET_H = d/d-target.h $(D_TARGET_DEF) +RUST_TARGET_H = rust/rust-target.h $(RUST_TARGET_DEF) +MACHMODE_H = machmode.h mode-classes.def +HOOKS_H = hooks.h +HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H) +LANGHOOKS_DEF_H = langhooks-def.h $(HOOKS_H) +TARGET_DEF_H = target-def.h target-hooks-def.h $(HOOKS_H) targhooks.h +C_TARGET_DEF_H = c-family/c-target-def.h c-family/c-target-hooks-def.h \ + $(TREE_H) $(C_COMMON_H) $(HOOKS_H) common/common-targhooks.h +CORETYPES_H = coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h \ + insn-modes-inline.h $(MACHMODE_H) double-int.h align.h poly-int.h \ + poly-int-types.h +RTL_BASE_H = $(CORETYPES_H) rtl.h rtl.def reg-notes.def \ + insn-notes.def $(INPUT_H) $(REAL_H) statistics.h $(VEC_H) \ + $(FIXED_VALUE_H) alias.h $(HASHTAB_H) +FIXED_VALUE_H = fixed-value.h +RTL_H = $(RTL_BASE_H) $(FLAGS_H) genrtl.h +READ_MD_H = $(OBSTACK_H) $(HASHTAB_H) read-md.h +BUILTINS_DEF = builtins.def sync-builtins.def omp-builtins.def \ + gtm-builtins.def sanitizer.def +INTERNAL_FN_DEF = internal-fn.def +INTERNAL_FN_H = internal-fn.h $(INTERNAL_FN_DEF) insn-opinit.h +TREE_CORE_H = tree-core.h $(CORETYPES_H) all-tree.def tree.def \ + c-family/c-common.def $(lang_tree_files) \ + $(BUILTINS_DEF) $(INPUT_H) statistics.h \ + $(VEC_H) treestruct.def $(HASHTAB_H) \ + alias.h $(SYMTAB_H) $(FLAGS_H) \ + $(REAL_H) $(FIXED_VALUE_H) +TREE_H = tree.h $(TREE_CORE_H) tree-check.h +REGSET_H = regset.h $(BITMAP_H) hard-reg-set.h +BASIC_BLOCK_H = basic-block.h $(PREDICT_H) $(VEC_H) $(FUNCTION_H) \ + cfg-flags.def cfghooks.h profile-count.h +GIMPLE_H = gimple.h gimple.def gsstruct.def $(VEC_H) \ + $(GGC_H) $(BASIC_BLOCK_H) $(TREE_H) tree-ssa-operands.h \ + tree-ssa-alias.h $(INTERNAL_FN_H) $(HASH_TABLE_H) is-a.h +GCOV_IO_H = gcov-io.h version.h auto-host.h gcov-counter.def +RECOG_H = recog.h $(TREE_H) +EMIT_RTL_H = emit-rtl.h +FLAGS_H = flags.h flag-types.h $(OPTIONS_H) +OPTIONS_H = options.h flag-types.h $(OPTIONS_H_EXTRA) +FUNCTION_H = function.h $(HASHTAB_H) $(TM_H) hard-reg-set.h \ + $(VEC_H) $(INPUT_H) +EXPR_H = expr.h insn-config.h $(FUNCTION_H) $(RTL_H) $(FLAGS_H) $(TREE_H) \ + $(EMIT_RTL_H) +OPTABS_H = optabs.h insn-codes.h insn-opinit.h +REGS_H = regs.h hard-reg-set.h +CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(BITMAP_H) sbitmap.h +IPA_UTILS_H = ipa-utils.h $(TREE_H) $(CGRAPH_H) +IPA_REFERENCE_H = ipa-reference.h $(BITMAP_H) $(TREE_H) +CGRAPH_H = cgraph.h $(VEC_H) $(TREE_H) $(BASIC_BLOCK_H) $(FUNCTION_H) \ + cif-code.def ipa-ref.h $(LINKER_PLUGIN_API_H) is-a.h +DF_H = df.h $(BITMAP_H) $(REGSET_H) sbitmap.h $(BASIC_BLOCK_H) \ + alloc-pool.h $(TIMEVAR_H) +RESOURCE_H = resource.h hard-reg-set.h $(DF_H) +GCC_H = gcc.h version.h $(DIAGNOSTIC_CORE_H) +GGC_H = ggc.h gtype-desc.h statistics.h +TIMEVAR_H = timevar.h timevar.def +INSN_ATTR_H = insn-attr.h insn-attr-common.h $(INSN_ADDR_H) +INSN_ADDR_H = $(srcdir)/insn-addr.h +C_COMMON_H = c-family/c-common.h c-family/c-common.def $(TREE_H) \ + $(SPLAY_TREE_H) $(CPPLIB_H) $(GGC_H) $(DIAGNOSTIC_CORE_H) +C_PRAGMA_H = c-family/c-pragma.h $(CPPLIB_H) +C_TREE_H = c/c-tree.h $(C_COMMON_H) $(DIAGNOSTIC_H) +SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h \ + $(srcdir)/../include/safe-ctype.h $(srcdir)/../include/filenames.h \ + $(HASHTAB_H) +PREDICT_H = predict.h predict.def +CPPLIB_H = $(srcdir)/../libcpp/include/line-map.h \ + $(srcdir)/../libcpp/include/rich-location.h \ + $(srcdir)/../libcpp/include/label-text.h \ + $(srcdir)/../libcpp/include/cpplib.h +CODYLIB_H = $(srcdir)/../libcody/cody.hh +INPUT_H = $(srcdir)/../libcpp/include/line-map.h input.h +OPTS_H = $(INPUT_H) $(VEC_H) opts.h $(OBSTACK_H) +SYMTAB_H = $(srcdir)/../libcpp/include/symtab.h $(OBSTACK_H) +CPP_INTERNAL_H = $(srcdir)/../libcpp/internal.h +TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H) $(DUMPFILE_H) +TREE_PASS_H = tree-pass.h $(TIMEVAR_H) $(DUMPFILE_H) +TREE_SSA_H = tree-ssa.h tree-ssa-operands.h \ + $(BITMAP_H) sbitmap.h $(BASIC_BLOCK_H) $(GIMPLE_H) \ + $(HASHTAB_H) $(CGRAPH_H) $(IPA_REFERENCE_H) \ + tree-ssa-alias.h +PRETTY_PRINT_H = pretty-print.h $(INPUT_H) $(OBSTACK_H) wide-int-print.h +TREE_PRETTY_PRINT_H = tree-pretty-print.h $(PRETTY_PRINT_H) +GIMPLE_PRETTY_PRINT_H = gimple-pretty-print.h $(TREE_PRETTY_PRINT_H) +DIAGNOSTIC_CORE_H = diagnostic-core.h $(INPUT_H) bversion.h diagnostic.def +DIAGNOSTIC_H = diagnostic.h $(DIAGNOSTIC_CORE_H) $(PRETTY_PRINT_H) +C_PRETTY_PRINT_H = c-family/c-pretty-print.h $(PRETTY_PRINT_H) \ + $(C_COMMON_H) $(TREE_H) +TREE_INLINE_H = tree-inline.h +REAL_H = real.h +LTO_STREAMER_H = lto-streamer.h $(LINKER_PLUGIN_API_H) $(TARGET_H) \ + $(CGRAPH_H) $(VEC_H) $(HASH_TABLE_H) $(TREE_H) $(GIMPLE_H) \ + $(GCOV_IO_H) $(DIAGNOSTIC_H) alloc-pool.h +IPA_PROP_H = ipa-prop.h $(TREE_H) $(VEC_H) $(CGRAPH_H) $(GIMPLE_H) alloc-pool.h +BITMAP_H = bitmap.h $(HASHTAB_H) statistics.h +GCC_PLUGIN_H = gcc-plugin.h highlev-plugin-common.h plugin.def \ + $(CONFIG_H) $(SYSTEM_H) $(HASHTAB_H) +PLUGIN_H = plugin.h $(GCC_PLUGIN_H) +PLUGIN_VERSION_H = plugin-version.h configargs.h +CONTEXT_H = context.h +GENSUPPORT_H = gensupport.h read-md.h optabs.def +RTL_SSA_H = $(PRETTY_PRINT_H) insn-config.h splay-tree-utils.h \ + $(RECOG_H) $(REGS_H) function-abi.h obstack-utils.h \ + mux-utils.h rtlanal.h memmodel.h $(EMIT_RTL_H) \ + rtl-ssa/accesses.h rtl-ssa/insns.h rtl-ssa/blocks.h \ + rtl-ssa/changes.h rtl-ssa/functions.h rtl-ssa/is-a.inl \ + rtl-ssa/access-utils.h rtl-ssa/insn-utils.h rtl-ssa/movement.h \ + rtl-ssa/change-utils.h rtl-ssa/member-fns.inl + +# +# Now figure out from those variables how to compile and link. + +# IN_GCC distinguishes between code compiled into GCC itself and other +# programs built during a bootstrap. +# autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a +# cross compiler which does not use the native headers and libraries. +INTERNAL_CFLAGS = -DIN_GCC + +# This is the variable actually used when we compile. If you change this, +# you probably want to update BUILD_CFLAGS in configure.ac +ALL_CFLAGS = $(T_CFLAGS) $(CFLAGS-$@) \ + $(CFLAGS) $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(WARN_CFLAGS) -DHAVE_CONFIG_H + +# The C++ version. +ALL_CXXFLAGS = $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) $(INTERNAL_CFLAGS) \ + $(COVERAGE_FLAGS) $(ALIASING_FLAGS) $(NOEXCEPTION_FLAGS) \ + $(WARN_CXXFLAGS) -DHAVE_CONFIG_H + +# Likewise. Put INCLUDES at the beginning: this way, if some autoconf macro +# puts -I options in CPPFLAGS, our include files in the srcdir will always +# win against random include files in /usr/include. +ALL_CPPFLAGS = $(INCLUDES) $(CPPFLAGS) + +# This is the variable to use when using $(COMPILER). +ALL_COMPILERFLAGS = $(ALL_CXXFLAGS) $(PICFLAG) + +# This is the variable to use when using $(LINKER). +ALL_LINKERFLAGS = $(ALL_CXXFLAGS) $(LD_PICFLAG) + +# Build and host support libraries. + +# Use the "pic" build of libiberty if --enable-host-shared or --enable-host-pie, +# unless we are building for mingw. +LIBIBERTY_PICDIR=$(if $(findstring mingw,$(target)),,pic) +ifneq ($(enable_host_shared)$(enable_host_pie),) +LIBIBERTY = ../libiberty/$(LIBIBERTY_PICDIR)/libiberty.a +else +LIBIBERTY = ../libiberty/libiberty.a +endif +ifeq ($(enable_host_shared),yes) +BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a +else +BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/libiberty.a +endif + +# Dependencies on the intl and portability libraries. The INTL dep might be +# constructed with a ./ prefix, which GNU Make removes while processing +# prerequisites, so we need to strip it off. +LIBDEPS= libcommon.a $(CPPLIB) $(LIBIBERTY) $(LIBICONV_DEP) $(LIBDECNUMBER) \ + $(LIBBACKTRACE) $(LIBINTL_DEP:./%=%) + +# Likewise, for use in the tools that must run on this machine +# even if we are cross-building GCC. +BUILD_LIBDEPS= $(BUILD_LIBIBERTY) + +# How to link with both our special library facilities +# and the system's installed libraries. +LIBS = libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \ + $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS) +BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ + $(ZLIB) $(ZSTD_LIB) +# Any system libraries needed just for GNAT. +SYSLIBS = + +# Used from ada/gcc-interface/Make-lang.in +GNATBIND = no +GNATMAKE = no + +# Used from d/Make-lang.in +GDC = no +GDCFLAGS = + +# Libs needed (at present) just for jcf-dump. +LDEXP_LIB = + +ZSTD_INC = +ZSTD_LIB = -lzstd + +# Likewise, for use in the tools that must run on this machine +# even if we are cross-building GCC. +BUILD_LIBS = $(BUILD_LIBIBERTY) + +BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o \ + build/vec.o build/min-insn-modes.o build/gensupport.o \ + build/print-rtl.o build/hash-table.o build/sort.o +BUILD_MD = build/read-md.o +BUILD_ERRORS = build/errors.o + +# Specify the directories to be searched for header files. +# Both . and srcdir are used, in that order, +# so that *config.h will be found in the compilation +# subdirectory rather than in the source directory. +# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file +# currently being compiled, in both source trees, to be examined as well. +# libintl.h will be found in ../intl if we are using the included libintl. +INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \ + -I$(srcdir)/../include $(INCINTL) \ + $(CPPINC) $(CODYINC) $(GMPINC) $(DECNUMINC) $(BACKTRACEINC) \ + $(ISLINC) + +COMPILE.base = $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) -o $@ +ifeq ($(CXXDEPMODE),depmode=gcc3) +# Note a subtlety here: we use $(@D) for the directory part, to make +# things like the go/%.o rule work properly; but we use $(*F) for the +# file part, as we just want the file part of the stem, not the entire +# file name. +COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo +POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po +else +COMPILE = source='$<' object='$@' libtool=no \ + DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base) +POSTCOMPILE = +endif + +.cc.o .c.o: + $(COMPILE) $< + $(POSTCOMPILE) + +# +# Support for additional languages (other than C). +# C can be supported this way too (leave for later). + +LANG_CONFIGUREFRAGS = $(srcdir)/ada/gcc-interface/config-lang.in $(srcdir)/c/config-lang.in $(srcdir)/cp/config-lang.in $(srcdir)/d/config-lang.in $(srcdir)/fortran/config-lang.in $(srcdir)/go/config-lang.in $(srcdir)/jit/config-lang.in $(srcdir)/lto/config-lang.in $(srcdir)/m2/config-lang.in $(srcdir)/objc/config-lang.in $(srcdir)/objcp/config-lang.in $(srcdir)/rust/config-lang.in +LANG_MAKEFRAGS = $(srcdir)/c/Make-lang.in $(srcdir)/ada/gcc-interface/Make-lang.in $(srcdir)/cp/Make-lang.in $(srcdir)/d/Make-lang.in $(srcdir)/fortran/Make-lang.in $(srcdir)/go/Make-lang.in $(srcdir)/jit/Make-lang.in $(srcdir)/lto/Make-lang.in $(srcdir)/m2/Make-lang.in $(srcdir)/objc/Make-lang.in $(srcdir)/objcp/Make-lang.in $(srcdir)/rust/Make-lang.in + +# Used by gcc/jit/Make-lang.in +LD_VERSION_SCRIPT_OPTION = --version-script +LD_SONAME_OPTION = -soname +#DARWIN_RPATH = @rpath +DARWIN_RPATH = ${libdir} + +# Flags to pass to recursive makes. +# CC is set by configure. +# ??? The choices here will need some experimenting with. + +export AR_FOR_TARGET +export AR_CREATE_FOR_TARGET +export AR_FLAGS_FOR_TARGET +export AR_EXTRACT_FOR_TARGET +export AWK +export DESTDIR +export GCC_FOR_TARGET +export INCLUDES +export INSTALL_DATA +export LIPO_FOR_TARGET +export MACHMODE_H +export NM_FOR_TARGET +export STRIP_FOR_TARGET +export RANLIB_FOR_TARGET +export libsubdir + +FLAGS_TO_PASS = \ + "ADA_CFLAGS=$(ADA_CFLAGS)" \ + "BISON=$(BISON)" \ + "BISONFLAGS=$(BISONFLAGS)" \ + "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \ + "LDFLAGS=$(LDFLAGS)" \ + "FLEX=$(FLEX)" \ + "FLEXFLAGS=$(FLEXFLAGS)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LN=$(LN)" \ + "LN_S=$(LN_S)" \ + "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \ + "MAKEINFO=$(MAKEINFO)" \ + "MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \ + "MAKEOVERRIDES=" \ + "SHELL=$(SHELL)" \ + "TFLAGS=$(TFLAGS)" \ + "exeext=$(exeext)" \ + "build_exeext=$(build_exeext)" \ + "objext=$(objext)" \ + "exec_prefix=$(exec_prefix)" \ + "prefix=$(prefix)" \ + "local_prefix=$(local_prefix)" \ + "gxx_include_dir=$(gcc_gxx_include_dir)" \ + "gxx_libcxx_include_dir=$(gcc_gxx_libcxx_include_dir)" \ + "build_tooldir=$(build_tooldir)" \ + "gcc_tooldir=$(gcc_tooldir)" \ + "bindir=$(bindir)" \ + "libexecsubdir=$(libexecsubdir)" \ + "datarootdir=$(datarootdir)" \ + "datadir=$(datadir)" \ + "libsubdir=$(libsubdir)" \ + "localedir=$(localedir)" +# +# Lists of files for various purposes. + +# All option source files +ALL_OPT_FILES=$(lang_opt_files) $(extra_opt_files) + +ALL_OPT_URL_FILES=$(patsubst %, %.urls, $(ALL_OPT_FILES)) + +# Target specific, C specific object file +C_TARGET_OBJS=i386-c.o glibc-c.o + +# Target specific, C++ specific object file +CXX_TARGET_OBJS=i386-c.o glibc-c.o + +# Target specific, D specific object file +D_TARGET_OBJS=i386-d.o linux-d.o + +# Target specific, Fortran specific object file +FORTRAN_TARGET_OBJS= + +# Target specific, Rust specific object file +RUST_TARGET_OBJS= i386-rust.o linux-rust.o + +# Object files for gcc many-languages driver. +GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o options-urls.o + +c-family-warn = $(STRICT_WARN) + +# Language-specific object files shared by all C-family front ends. +C_COMMON_OBJS = c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o \ + c-family/c-format.o c-family/c-gimplify.o c-family/c-indentation.o \ + c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o \ + c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o \ + c-family/c-semantics.o c-family/c-ada-spec.o \ + c-family/c-ubsan.o c-family/known-headers.o \ + c-family/c-attribs.o c-family/c-warn.o c-family/c-spellcheck.o \ + c-family/c-type-mismatch.o + +# Analyzer object files +ANALYZER_OBJS = \ + analyzer/access-diagram.o \ + analyzer/analysis-plan.o \ + analyzer/analyzer.o \ + analyzer/analyzer-language.o \ + analyzer/analyzer-logging.o \ + analyzer/analyzer-pass.o \ + analyzer/analyzer-selftests.o \ + analyzer/bar-chart.o \ + analyzer/bounds-checking.o \ + analyzer/call-details.o \ + analyzer/call-info.o \ + analyzer/call-string.o \ + analyzer/call-summary.o \ + analyzer/checker-event.o \ + analyzer/checker-path.o \ + analyzer/complexity.o \ + analyzer/constraint-manager.o \ + analyzer/diagnostic-manager.o \ + analyzer/engine.o \ + analyzer/feasible-graph.o \ + analyzer/function-set.o \ + analyzer/infinite-loop.o \ + analyzer/infinite-recursion.o \ + analyzer/kf.o \ + analyzer/kf-analyzer.o \ + analyzer/kf-lang-cp.o \ + analyzer/known-function-manager.o \ + analyzer/pending-diagnostic.o \ + analyzer/program-point.o \ + analyzer/program-state.o \ + analyzer/ranges.o \ + analyzer/record-layout.o \ + analyzer/region.o \ + analyzer/region-model.o \ + analyzer/region-model-asm.o \ + analyzer/region-model-manager.o \ + analyzer/region-model-reachability.o \ + analyzer/sm.o \ + analyzer/sm-file.o \ + analyzer/sm-fd.o \ + analyzer/sm-malloc.o \ + analyzer/sm-pattern-test.o \ + analyzer/sm-sensitive.o \ + analyzer/sm-signal.o \ + analyzer/sm-taint.o \ + analyzer/state-purge.o \ + analyzer/store.o \ + analyzer/supergraph.o \ + analyzer/svalue.o \ + analyzer/symbol.o \ + analyzer/trimmed-graph.o \ + analyzer/varargs.o + +# Language-independent object files. +# We put the *-match.o and insn-*.o files first so that a parallel make +# will build them sooner, because they are large and otherwise tend to be +# the last objects to finish building. +OBJS = \ + $(GIMPLE_MATCH_PD_SEQ_O) \ + gimple-match-exports.o \ + $(GENERIC_MATCH_PD_SEQ_O) \ + insn-attrtab.o \ + insn-automata.o \ + insn-dfatab.o \ + $(INSNEMIT_SEQ_O) \ + insn-extract.o \ + insn-latencytab.o \ + insn-modes.o \ + insn-opinit.o \ + insn-output.o \ + insn-peep.o \ + insn-preds.o \ + insn-recog.o \ + insn-enums.o \ + ggc-page.o \ + adjust-alignment.o \ + alias.o \ + alloc-pool.o \ + auto-inc-dec.o \ + auto-profile.o \ + bb-reorder.o \ + bitmap.o \ + builtins.o \ + caller-save.o \ + calls.o \ + ccmp.o \ + cfg.o \ + cfganal.o \ + cfgbuild.o \ + cfgcleanup.o \ + cfgexpand.o \ + cfghooks.o \ + cfgloop.o \ + cfgloopanal.o \ + cfgloopmanip.o \ + cfgrtl.o \ + ctfc.o \ + ctfout.o \ + btfout.o \ + symtab.o \ + symtab-thunks.o \ + symtab-clones.o \ + cgraph.o \ + cgraphbuild.o \ + cgraphunit.o \ + cgraphclones.o \ + combine.o \ + combine-stack-adj.o \ + compare-elim.o \ + context.o \ + convert.o \ + coroutine-passes.o \ + coverage.o \ + cppbuiltin.o \ + cppdefault.o \ + cprop.o \ + cse.o \ + cselib.o \ + data-streamer.o \ + data-streamer-in.o \ + data-streamer-out.o \ + dbgcnt.o \ + dce.o \ + ddg.o \ + debug.o \ + df-core.o \ + df-problems.o \ + df-scan.o \ + dfp.o \ + digraph.o \ + dojump.o \ + dominance.o \ + domwalk.o \ + double-int.o \ + dse.o \ + dumpfile.o \ + dwarf2asm.o \ + dwarf2cfi.o \ + dwarf2codeview.o \ + dwarf2ctf.o \ + dwarf2out.o \ + early-remat.o \ + emit-rtl.o \ + et-forest.o \ + except.o \ + explow.o \ + expmed.o \ + expr.o \ + fibonacci_heap.o \ + file-prefix-map.o \ + final.o \ + fixed-value.o \ + fold-const.o \ + fold-const-call.o \ + fold-mem-offsets.o \ + function.o \ + function-abi.o \ + function-tests.o \ + fwprop.o \ + gcc-rich-location.o \ + gcc-urlifier.o \ + gcse.o \ + gcse-common.o \ + ggc-common.o \ + ggc-tests.o \ + gimple.o \ + gimple-array-bounds.o \ + gimple-builder.o \ + gimple-expr.o \ + gimple-if-to-switch.o \ + gimple-iterator.o \ + gimple-fold.o \ + gimple-harden-conditionals.o \ + gimple-harden-control-flow.o \ + gimple-laddress.o \ + gimple-loop-interchange.o \ + gimple-loop-jam.o \ + gimple-loop-versioning.o \ + gimple-low.o \ + gimple-lower-bitint.o \ + gimple-predicate-analysis.o \ + gimple-pretty-print.o \ + gimple-range.o \ + gimple-range-cache.o \ + gimple-range-edge.o \ + gimple-range-fold.o \ + gimple-range-gori.o \ + gimple-range-infer.o \ + gimple-range-op.o \ + gimple-range-phi.o \ + gimple-range-trace.o \ + gimple-ssa-backprop.o \ + gimple-ssa-isolate-paths.o \ + gimple-ssa-nonnull-compare.o \ + gimple-ssa-sccopy.o \ + gimple-ssa-split-paths.o \ + gimple-ssa-store-merging.o \ + gimple-ssa-strength-reduction.o \ + gimple-ssa-sprintf.o \ + gimple-ssa-warn-access.o \ + gimple-ssa-warn-alloca.o \ + gimple-ssa-warn-restrict.o \ + gimple-streamer-in.o \ + gimple-streamer-out.o \ + gimple-walk.o \ + gimple-warn-recursion.o \ + gimplify.o \ + gimplify-me.o \ + godump.o \ + graph.o \ + graphds.o \ + graphviz.o \ + graphite.o \ + graphite-isl-ast-to-gimple.o \ + graphite-dependences.o \ + graphite-optimize-isl.o \ + graphite-poly.o \ + graphite-scop-detection.o \ + graphite-sese-to-poly.o \ + gtype-desc.o \ + haifa-sched.o \ + hash-map-tests.o \ + hash-set-tests.o \ + hw-doloop.o \ + hwint.o \ + ifcvt.o \ + ree.o \ + inchash.o \ + incpath.o \ + init-regs.o \ + internal-fn.o \ + ipa-cp.o \ + ipa-sra.o \ + ipa-devirt.o \ + ipa-fnsummary.o \ + ipa-polymorphic-call.o \ + ipa-split.o \ + ipa-inline.o \ + ipa-comdats.o \ + ipa-free-lang-data.o \ + ipa-visibility.o \ + ipa-inline-analysis.o \ + ipa-inline-transform.o \ + ipa-modref.o \ + ipa-modref-tree.o \ + ipa-predicate.o \ + ipa-profile.o \ + ipa-prop.o \ + ipa-param-manipulation.o \ + ipa-pure-const.o \ + ipa-icf.o \ + ipa-icf-gimple.o \ + ipa-reference.o \ + ipa-ref.o \ + ipa-utils.o \ + ipa-strub.o \ + ipa.o \ + ira.o \ + pair-fusion.o \ + ira-build.o \ + ira-costs.o \ + ira-conflicts.o \ + ira-color.o \ + ira-emit.o \ + ira-lives.o \ + jump.o \ + langhooks.o \ + lcm.o \ + lists.o \ + loop-doloop.o \ + loop-init.o \ + loop-invariant.o \ + loop-iv.o \ + loop-unroll.o \ + lower-subreg.o \ + lra.o \ + lra-assigns.o \ + lra-coalesce.o \ + lra-constraints.o \ + lra-eliminations.o \ + lra-lives.o \ + lra-remat.o \ + lra-spills.o \ + lto-cgraph.o \ + lto-streamer.o \ + lto-streamer-in.o \ + lto-streamer-out.o \ + lto-section-in.o \ + lto-section-out.o \ + lto-opts.o \ + lto-compress.o \ + mcf.o \ + mode-switching.o \ + modulo-sched.o \ + multiple_target.o \ + omp-offload.o \ + omp-expand.o \ + omp-general.o \ + omp-low.o \ + omp-oacc-kernels-decompose.o \ + omp-oacc-neuter-broadcast.o \ + omp-simd-clone.o \ + opt-problem.o \ + optabs.o \ + optabs-libfuncs.o \ + optabs-query.o \ + optabs-tree.o \ + optinfo.o \ + optinfo-emit-json.o \ + options-save.o \ + options-urls.o \ + opts-global.o \ + ordered-hash-map-tests.o \ + passes.o \ + plugin.o \ + pointer-query.o \ + postreload-gcse.o \ + postreload.o \ + predict.o \ + print-rtl.o \ + print-rtl-function.o \ + print-tree.o \ + profile.o \ + profile-count.o \ + range.o \ + range-op.o \ + range-op-float.o \ + range-op-ptr.o \ + read-md.o \ + read-rtl.o \ + read-rtl-function.o \ + real.o \ + realmpfr.o \ + recog.o \ + reg-stack.o \ + regcprop.o \ + reginfo.o \ + regrename.o \ + regstat.o \ + reload.o \ + reload1.o \ + reorg.o \ + resource.o \ + rtl-error.o \ + rtl-ssa/accesses.o \ + rtl-ssa/blocks.o \ + rtl-ssa/changes.o \ + rtl-ssa/functions.o \ + rtl-ssa/insns.o \ + rtl-ssa/movement.o \ + rtl-tests.o \ + rtl.o \ + rtlhash.o \ + rtlanal.o \ + rtlhooks.o \ + rtx-vector-builder.o \ + run-rtl-passes.o \ + sched-deps.o \ + sched-ebb.o \ + sched-rgn.o \ + sel-sched-ir.o \ + sel-sched-dump.o \ + sel-sched.o \ + selftest-rtl.o \ + selftest-run-tests.o \ + sese.o \ + shrink-wrap.o \ + simplify-rtx.o \ + sparseset.o \ + spellcheck.o \ + spellcheck-tree.o \ + splay-tree-utils.o \ + sreal.o \ + stack-ptr-mod.o \ + statistics.o \ + stmt.o \ + stor-layout.o \ + store-motion.o \ + streamer-hooks.o \ + stringpool.o \ + substring-locations.o \ + target-globals.o \ + targhooks.o \ + timevar.o \ + toplev.o \ + tracer.o \ + trans-mem.o \ + tree-affine.o \ + asan.o \ + tsan.o \ + ubsan.o \ + sanopt.o \ + sancov.o \ + tree-call-cdce.o \ + tree-cfg.o \ + tree-cfgcleanup.o \ + tree-chrec.o \ + tree-complex.o \ + tree-data-ref.o \ + tree-dfa.o \ + tree-diagnostic.o \ + tree-diagnostic-client-data-hooks.o \ + tree-diagnostic-path.o \ + tree-dump.o \ + tree-eh.o \ + tree-emutls.o \ + tree-if-conv.o \ + tree-inline.o \ + tree-into-ssa.o \ + tree-iterator.o \ + tree-logical-location.o \ + tree-loop-distribution.o \ + tree-nested.o \ + tree-nrv.o \ + tree-object-size.o \ + tree-outof-ssa.o \ + tree-parloops.o \ + tree-phinodes.o \ + tree-predcom.o \ + tree-pretty-print.o \ + tree-profile.o \ + tree-scalar-evolution.o \ + tree-sra.o \ + tree-switch-conversion.o \ + tree-ssa-address.o \ + tree-ssa-alias.o \ + tree-ssa-ccp.o \ + tree-ssa-coalesce.o \ + tree-ssa-copy.o \ + tree-ssa-dce.o \ + tree-ssa-dom.o \ + tree-ssa-dse.o \ + tree-ssa-forwprop.o \ + tree-ssa-ifcombine.o \ + tree-ssa-live.o \ + tree-ssa-loop-ch.o \ + tree-ssa-loop-im.o \ + tree-ssa-loop-ivcanon.o \ + tree-ssa-loop-ivopts.o \ + tree-ssa-loop-manip.o \ + tree-ssa-loop-niter.o \ + tree-ssa-loop-prefetch.o \ + tree-ssa-loop-split.o \ + tree-ssa-loop-unswitch.o \ + tree-ssa-loop.o \ + tree-ssa-math-opts.o \ + tree-ssa-operands.o \ + gimple-range-path.o \ + tree-ssa-phiopt.o \ + tree-ssa-phiprop.o \ + tree-ssa-pre.o \ + tree-ssa-propagate.o \ + tree-ssa-reassoc.o \ + tree-ssa-sccvn.o \ + tree-ssa-scopedtables.o \ + tree-ssa-sink.o \ + tree-ssa-strlen.o \ + tree-ssa-structalias.o \ + tree-ssa-tail-merge.o \ + tree-ssa-ter.o \ + tree-ssa-threadbackward.o \ + tree-ssa-threadedge.o \ + tree-ssa-threadupdate.o \ + tree-ssa-uncprop.o \ + tree-ssa-uninit.o \ + tree-ssa.o \ + tree-ssanames.o \ + tree-stdarg.o \ + tree-streamer.o \ + tree-streamer-in.o \ + tree-streamer-out.o \ + tree-tailcall.o \ + tree-vect-generic.o \ + gimple-isel.o \ + tree-vect-patterns.o \ + tree-vect-data-refs.o \ + tree-vect-stmts.o \ + tree-vect-loop.o \ + tree-vect-loop-manip.o \ + tree-vect-slp.o \ + tree-vect-slp-patterns.o \ + tree-vectorizer.o \ + tree-vector-builder.o \ + tree-vrp.o \ + tree.o \ + tristate.o \ + typed-splay-tree.o \ + valtrack.o \ + value-pointer-equiv.o \ + value-query.o \ + value-range.o \ + value-range-pretty-print.o \ + value-range-storage.o \ + value-relation.o \ + value-prof.o \ + var-tracking.o \ + varasm.o \ + varpool.o \ + vec-perm-indices.o \ + vmsdbgout.o \ + vr-values.o \ + vtable-verify.o \ + warning-control.o \ + web.o \ + wide-int.o \ + wide-int-print.o \ + test-dump-pass.o \ + $(out_object_file) \ + $(ANALYZER_OBJS) \ + $(EXTRA_OBJS) \ + $(host_hook_obj) + +# Objects in libcommon.a, potentially used by all host binaries and with +# no target dependencies. +OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \ + diagnostic-format-json.o \ + diagnostic-format-sarif.o \ + diagnostic-show-locus.o \ + edit-context.o \ + pretty-print.o intl.o \ + json.o \ + sbitmap.o \ + vec.o input.o hash-table.o ggc-none.o memory-block.o \ + selftest.o selftest-diagnostic.o sort.o \ + text-art/box-drawing.o \ + text-art/canvas.o \ + text-art/ruler.o \ + text-art/selftests.o \ + text-art/style.o \ + text-art/styled-string.o \ + text-art/table.o \ + text-art/theme.o \ + text-art/tree-widget.o \ + text-art/widget.o + +# Objects in libcommon-target.a, used by drivers and by the core +# compiler and containing target-dependent code. +OBJS-libcommon-target = $(common_out_object_file) prefix.o \ + opts.o opts-common.o options.o vec.o hooks.o common/common-targhooks.o \ + hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o \ + options-urls.o + +# This lists all host objects for the front ends. +ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS)) + +ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) $(OBJS-libcommon) \ + $(OBJS-libcommon-target) main.o c-family/cppspec.o \ + $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \ + $(GCOV_TOOL_OBJS) $(GENGTYPE_OBJS) gcc-ar.o gcc-nm.o gcc-ranlib.o \ + lto-wrapper.o collect-utils.o + +# for anything that is shared use the cc1plus profile data, as that +# is likely the most exercised during the build +ifeq ($(if $(wildcard ../stage_current),$(shell cat \ + ../stage_current)),stageautofeedback) +$(ALL_HOST_BACKEND_OBJS): ALL_COMPILERFLAGS += -fauto-profile=cc1plus.fda +$(ALL_HOST_BACKEND_OBJS): cc1plus.fda +endif + +# This lists all host object files, whether they are included in this +# compilation or not. +ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS) + +BACKEND = libbackend.a main.o libcommon-target.a libcommon.a \ + $(CPPLIB) $(LIBDECNUMBER) + +# This is defined to "yes" if Tree checking is enabled, which roughly means +# front-end checking. +TREECHECKING = yes + +# The full name of the driver on installation +FULL_DRIVER_NAME=$(target_noncanonical)-gcc-$(version)$(exeext) + +MOSTLYCLEANFILES = insn-flags.h insn-config.h insn-codes.h \ + insn-output.cc insn-recog.cc $(INSNEMIT_SEQ_SRC) \ + insn-extract.cc insn-peep.cc \ + insn-attr.h insn-attr-common.h insn-attrtab.cc insn-dfatab.cc \ + insn-latencytab.cc insn-opinit.cc insn-opinit.h insn-preds.cc insn-constants.h \ + tm-preds.h tm-constrs.h checksum-options $(GIMPLE_MATCH_PD_SEQ_SRC) \ + $(GENERIC_MATCH_PD_SEQ_SRC) gimple-match-auto.h generic-match-auto.h \ + tree-check.h min-insn-modes.cc insn-modes.cc insn-modes.h insn-modes-inline.h \ + genrtl.h gt-*.h gtype-*.h gtype-desc.cc gtyp-input.list \ + case-cfn-macros.h cfn-operators.pd \ + xgcc$(exeext) cpp$(exeext) $(FULL_DRIVER_NAME) \ + $(EXTRA_PROGRAMS) gcc-cross$(exeext) \ + $(SPECS) collect2$(exeext) gcc-ar$(exeext) gcc-nm$(exeext) \ + gcc-ranlib$(exeext) \ + genversion$(build_exeext) gcov$(exeext) gcov-dump$(exeext) \ + gcov-tool$(exeect) \ + gengtype$(exeext) *.[0-9][0-9].* *.[si] *-checksum.cc libbackend.a \ + libcommon-target.a libcommon.a libgcc.mk perf.data + +# This symlink makes the full installation name of the driver be available +# from within the *build* directory, for use when running the JIT library +# from there (e.g. when running its testsuite). +$(FULL_DRIVER_NAME): ./xgcc$(exeext) + rm -f $@ + $(LN_S) $< $@ + +# +# SELFTEST_DEPS need to be set before including language makefile fragments. +# Otherwise $(SELFTEST_DEPS) is empty when used from /Make-lang.in. +SELFTEST_DEPS = $(GCC_PASSES) stmp-int-hdrs $(srcdir)/testsuite/selftests + +DO_LINK_SERIALIZATION = + +# Language makefile fragments. + +# The following targets define the interface between us and the languages. +# +# all.cross, start.encap, rest.encap, +# install-common, install-info, install-man, +# uninstall, +# mostlyclean, clean, distclean, maintainer-clean, +# +# Each language is linked in with a series of hooks. The name of each +# hooked is "lang.${target_name}" (eg: lang.info). Configure computes +# and adds these here. We use double-colon rules for some of the hooks; +# double-colon rules should be preferred for any new hooks. + +# language hooks, generated by configure +lang.all.cross: c.all.cross +lang.start.encap: c.start.encap +lang.rest.encap: c.rest.encap +lang.tags: c.tags +lang.install-common: c.install-common +lang.install-man: c.install-man +lang.install-info: c.install-info +lang.install-dvi: c.install-dvi +lang.install-pdf: c.install-pdf +lang.install-html: c.install-html +lang.dvi: c.dvi +lang.pdf: c.pdf +lang.html: c.html +lang.uninstall: c.uninstall +lang.info: c.info +lang.man: c.man +lang.srcextra: c.srcextra +lang.srcman: c.srcman +lang.srcinfo: c.srcinfo +lang.mostlyclean: c.mostlyclean +lang.clean: c.clean +lang.distclean: c.distclean +lang.maintainer-clean: c.maintainer-clean +lang.install-plugin: c.install-plugin +ifeq ($(DO_LINK_SERIALIZATION),) +SERIAL_LIST = +else +SERIAL_LIST = $(wordlist $(DO_LINK_SERIALIZATION),0,) +endif +SERIAL_COUNT = 1 +INDEX.c = 0 + +ifeq ($(DO_LINK_SERIALIZATION),) +LINK_PROGRESS = : +else +LINK_PROGRESS = msg="Linking $@ |"; cnt=0; if test "$(2)" = start; then \ + idx=0; cnt2=$(DO_LINK_SERIALIZATION); \ + while test $$cnt2 -le $(1); do msg="$${msg}=="; cnt2=`expr $$cnt2 + 1`; idx=`expr $$idx + 1`; done; \ + cnt=$$idx; \ + while test $$cnt -lt $(1); do msg="$${msg}>>"; cnt=`expr $$cnt + 1`; done; \ + msg="$${msg}--"; cnt=`expr $$cnt + 1`; \ + else \ + idx=`expr $(1) + 1`; \ + while test $$cnt -le $(1); do msg="$${msg}=="; cnt=`expr $$cnt + 1`; done; \ + fi; \ + while test $$cnt -lt $(SERIAL_COUNT); do msg="$${msg} "; cnt=`expr $$cnt + 1`; done; \ + msg="$${msg}| `expr 100 \* $$idx / $(SERIAL_COUNT)`%"; echo "$$msg" +endif + +# Wire in install-gnatlib invocation with `make install' for a configuration +# with top-level libada disabled. +gnat_install_lib = + +# per-language makefile fragments +-include $(LANG_MAKEFRAGS) + +# target and host overrides must follow the per-language makefile fragments +# so they can override or augment language-specific variables + +# target overrides +-include $(tmake_file) + +# host overrides +-include $(xmake_file) + +# all-tree.def includes all the tree.def files. +all-tree.def: s-alltree; @true +s-alltree: Makefile + rm -f tmp-all-tree.def + echo '#include "tree.def"' > tmp-all-tree.def + echo 'END_OF_BASE_TREE_CODES' >> tmp-all-tree.def + echo '#include "c-family/c-common.def"' >> tmp-all-tree.def + ltf="$(lang_tree_files)"; for f in $$ltf; do \ + echo "#include \"$$f\""; \ + done | sed 's|$(srcdir)/||' >> tmp-all-tree.def + $(SHELL) $(srcdir)/../move-if-change tmp-all-tree.def all-tree.def + $(STAMP) s-alltree + +# Now that LANG_MAKEFRAGS are included, we can add special flags to the +# objects that belong to the front ends. We add an extra define that +# causes back-end specific include files to be poisoned, in the hope that +# we can avoid introducing dependencies of the front ends on things that +# no front end should ever look at (e.g. everything RTL related). +$(foreach file,$(ALL_HOST_FRONTEND_OBJS),$(eval CFLAGS-$(file) += -DIN_GCC_FRONTEND)) + +# + +# ----------------------------- +# Rebuilding this configuration +# ----------------------------- + +# On the use of stamps: +# Consider the example of tree-check.h. It is constructed with build/gencheck. +# A simple rule to build tree-check.h would be +# tree-check.h: build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tree-check.h +# +# but tree-check.h doesn't change every time gencheck changes. It would the +# nice if targets that depend on tree-check.h wouldn't be rebuild +# unnecessarily when tree-check.h is unchanged. To make this, tree-check.h +# must not be overwritten with a identical copy. One solution is to use a +# temporary file +# tree-check.h: build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# +# This solution has a different problem. Since the time stamp of tree-check.h +# is unchanged, make will try to update tree-check.h every time it runs. +# To prevent this, one can add a stamp +# tree-check.h: s-check +# s-check : build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# $(STAMP) s-check +# +# The problem with this solution is that make thinks that tree-check.h is +# always unchanged. Make must be deceived into thinking that tree-check.h is +# rebuild by the "tree-check.h: s-check" rule. To do this, add a dummy command: +# tree-check.h: s-check; @true +# s-check : build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# $(STAMP) s-check +# +# This is what is done in this makefile. Note that mkconfig.sh has a +# move-if-change built-in + +Makefile: config.status $(srcdir)/Makefile.in $(LANG_MAKEFRAGS) + LANGUAGES="$(CONFIG_LANGUAGES)" \ + CONFIG_HEADERS= \ + CONFIG_SHELL="$(SHELL)" \ + CONFIG_FILES=$@ $(SHELL) config.status + +config.h: cs-config.h ; @true +bconfig.h: cs-bconfig.h ; @true +tconfig.h: cs-tconfig.h ; @true +tm.h: cs-tm.h ; @true +tm_p.h: cs-tm_p.h ; @true +tm_d.h: cs-tm_d.h ; @true +tm_rust.h: cs-tm_rust.h ; @true + +cs-config.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(host_xm_include_list)" DEFINES="$(host_xm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh config.h + +cs-bconfig.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(build_xm_include_list)" DEFINES="$(build_xm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh bconfig.h + +cs-tconfig.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(xm_include_list)" DEFINES="USED_FOR_TARGET $(xm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh tconfig.h + +cs-tm.h: Makefile + TARGET_CPU_DEFAULT="$(target_cpu_default)" \ + HEADERS="$(tm_include_list)" DEFINES="$(tm_defines)" \ + $(SHELL) $(srcdir)/mkconfig.sh tm.h +# TARGET_CPU_DEFAULT="$(target_cpu_default)" \ +# HEADERS="$(tm_include_list)" DEFINES="$(tm_defines) DARWIN_AT_RPATH=1" \ +# $(SHELL) $(srcdir)/mkconfig.sh tm.h + +cs-tm_p.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(tm_p_include_list)" DEFINES="" \ + $(SHELL) $(srcdir)/mkconfig.sh tm_p.h + +cs-tm_d.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(tm_d_include_list)" DEFINES="" \ + $(SHELL) $(srcdir)/mkconfig.sh tm_d.h + +cs-tm_rust.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(tm_rust_include_list)" DEFINES="" \ + $(SHELL) $(srcdir)/mkconfig.sh tm_rust.h + +# Don't automatically run autoconf, since configure.ac might be accidentally +# newer than configure. Also, this writes into the source directory which +# might be on a read-only file system. If configured for maintainer mode +# then do allow autoconf to be run. + +AUTOCONF = autoconf +ACLOCAL = aclocal +ACLOCAL_AMFLAGS = -I ../config -I .. +aclocal_deps = \ + $(srcdir)/../libtool.m4 \ + $(srcdir)/../ltoptions.m4 \ + $(srcdir)/../ltsugar.m4 \ + $(srcdir)/../ltversion.m4 \ + $(srcdir)/../lt~obsolete.m4 \ + $(srcdir)/../config/acx.m4 \ + $(srcdir)/../config/codeset.m4 \ + $(srcdir)/../config/depstand.m4 \ + $(srcdir)/../config/dfp.m4 \ + $(srcdir)/../config/gcc-plugin.m4 \ + $(srcdir)/../config/gettext-sister.m4 \ + $(srcdir)/../config/iconv.m4 \ + $(srcdir)/../config/lcmessage.m4 \ + $(srcdir)/../config/lead-dot.m4 \ + $(srcdir)/../config/lib-ld.m4 \ + $(srcdir)/../config/lib-link.m4 \ + $(srcdir)/../config/lib-prefix.m4 \ + $(srcdir)/../config/mmap.m4 \ + $(srcdir)/../config/override.m4 \ + $(srcdir)/../config/picflag.m4 \ + $(srcdir)/../config/progtest.m4 \ + $(srcdir)/../config/stdint.m4 \ + $(srcdir)/../config/warnings.m4 \ + $(srcdir)/../config/zlib.m4 \ + $(srcdir)/acinclude.m4 + +$(srcdir)/configure: # $(srcdir)/configure.ac $(srcdir)/aclocal.m4 + (cd $(srcdir) && $(AUTOCONF)) + +$(srcdir)/aclocal.m4 : # $(aclocal_deps) + (cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)) + +# cstamp-h.in controls rebuilding of config.in. +# It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't +# delete it. A stamp file is needed as autoheader won't update the file if +# nothing has changed. +# It remains in the source directory and is part of the distribution. +# This follows what is done in shellutils, fileutils, etc. +# "echo timestamp" is used instead of touch to be consistent with other +# packages that use autoconf (??? perhaps also to avoid problems with patch?). +# ??? Newer versions have a maintainer mode that may be useful here. + +# Don't run autoheader automatically either. +# Only run it if maintainer mode is enabled. +# AUTOHEADER = autoheader +# $(srcdir)/config.in: $(srcdir)/cstamp-h.in +# $(srcdir)/cstamp-h.in: $(srcdir)/configure.ac +# (cd $(srcdir) && $(AUTOHEADER)) +# @rm -f $(srcdir)/cstamp-h.in +# echo timestamp > $(srcdir)/cstamp-h.in +auto-host.h: cstamp-h ; @true +cstamp-h: config.in config.status + CONFIG_HEADERS=auto-host.h:config.in \ + CONFIG_FILES= \ + LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status + +# On configurations that require auto-build.h, it is created while +# running configure, so make config.status depend on it, so that +# config.status --recheck runs and updates or creates it. +# auto-build.h: $(srcdir)/configure $(srcdir)/config.gcc +# @if test -f $@; then echo rerunning config.status to update $@; \ +# else echo rerunning config.status to update $@; fi +# config.status: auto-build.h + +# Really, really stupid make features, such as SUN's KEEP_STATE, may force +# a target to build even if it is up-to-date. So we must verify that +# config.status does not exist before failing. +config.status: $(srcdir)/configure $(srcdir)/config.gcc $(LANG_CONFIGUREFRAGS) + @if [ ! -f config.status ] ; then \ + echo You must configure gcc. Look at http://gcc.gnu.org/install/ for details.; \ + false; \ + else \ + LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status --recheck; \ + fi + +# -------- +# UNSORTED +# -------- + +# Provide quickstrap as a target that people can type into the gcc directory, +# and that fails if you're not into it. +quickstrap: all + cd $(toplevel_builddir) && $(MAKE) all-target-libgcc + +all.internal: start.encap rest.encap doc selftest +# This is what to compile if making a cross-compiler. +all.cross: native gcc-cross$(exeext) cpp$(exeext) specs \ + libgcc-support lang.all.cross doc selftest # srcextra +# This is what must be made before installing GCC and converting libraries. +start.encap: native xgcc$(exeext) cpp$(exeext) specs \ + libgcc-support lang.start.encap # srcextra +# These can't be made until after GCC can run. +rest.encap: lang.rest.encap +# This is what is made with the host's compiler +# whether making a cross compiler or not. +native: config.status auto-host.h build-po $(LANGUAGES) \ + $(EXTRA_PROGRAMS) $(COLLECT2) lto-wrapper$(exeext) \ + gcc-ar$(exeext) gcc-nm$(exeext) gcc-ranlib$(exeext) + +ifeq ($(enable_plugin),yes) +native: gengtype$(exeext) +endif + +# On the target machine, finish building a cross compiler. +# This does the things that can't be done on the host machine. +rest.cross: specs + +# GCC's selftests. +# Specify a dummy input file to placate the driver. +# Specify -nostdinc to work around missing WIND_BASE environment variable +# required for *-wrs-vxworks-* targets. +# Specify -o /dev/null so the output of -S is discarded. More importantly +# It does not try to create a file with the name "null.s" on POSIX and +# "nul.s" on Windows. Because on Windows "nul" is a reserved file name. +# Beware that /dev/null is not available to mingw tools, so directly use +# "nul" instead of "/dev/null" if we're building on a mingw machine. +# Specify the path to gcc/testsuite/selftests within the srcdir +# as an argument to -fself-test. +DEVNULL=$(if $(findstring mingw,$(build)),nul,/dev/null) +SELFTEST_FLAGS = -nostdinc $(DEVNULL) -S -o $(DEVNULL) \ + -fself-test=$(srcdir)/testsuite/selftests + +# Run the selftests during the build once we have a driver and the frontend, +# so that self-test failures are caught as early as possible. +# Use "s-selftest-FE" to ensure that we only run the selftests if the +# driver, frontend, or selftest data change. +.PHONY: selftest + +# Potentially run all selftest-. The various /Make-lang.in can +# require the selftests to be run by defining their selftest- as +# s-selftest-. Otherwise, they should define it as empty. + +SELFTEST_TARGETS = selftest-c +selftest: $(SELFTEST_TARGETS) + +# Recompile all the language-independent object files. +# This is used only if the user explicitly asks for it. +compilations: $(BACKEND) + +# This archive is strictly for the host. +libbackend.a: $(OBJS) + -rm -rf libbackend.a + @# Build libbackend.a as a thin archive if possible, as doing so + @# significantly reduces build times. +ifeq ($(USE_THIN_ARCHIVES),yes) + $(AR) $(AR_FLAGS)T libbackend.a $(OBJS) +else + $(AR) $(AR_FLAGS) libbackend.a $(OBJS) + -$(RANLIB) $(RANLIB_FLAGS) libbackend.a +endif + +libcommon-target.a: $(OBJS-libcommon-target) + -rm -rf libcommon-target.a + $(AR) $(AR_FLAGS) libcommon-target.a $(OBJS-libcommon-target) + -$(RANLIB) $(RANLIB_FLAGS) libcommon-target.a + +libcommon.a: $(OBJS-libcommon) + -rm -rf libcommon.a + $(AR) $(AR_FLAGS) libcommon.a $(OBJS-libcommon) + -$(RANLIB) $(RANLIB_FLAGS) libcommon.a + +# We call this executable `xgcc' rather than `gcc' +# to avoid confusion if the current directory is in the path +# and CC is `gcc'. It is renamed to `gcc' when it is installed. +xgcc$(exeext): $(GCC_OBJS) c/gccspec.o libcommon-target.a $(LIBDEPS) \ + $(EXTRA_GCC_OBJS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) \ + c/gccspec.o $(EXTRA_GCC_OBJS) libcommon-target.a \ + $(EXTRA_GCC_LIBS) $(LIBS) + +# cpp is to cpp0 as e.g. g++ is to cc1plus: Just another driver. +# It is part of c-family because the handled extensions are hard-coded +# and only contain c-family extensions (see known_suffixes). +cpp$(exeext): $(GCC_OBJS) c-family/cppspec.o libcommon-target.a $(LIBDEPS) \ + $(EXTRA_GCC_OBJS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) \ + c-family/cppspec.o $(EXTRA_GCC_OBJS) libcommon-target.a \ + $(EXTRA_GCC_LIBS) $(LIBS) + +# Dump a specs file to make -B./ read these specs over installed ones. +$(SPECS): xgcc$(exeext) + $(GCC_FOR_TARGET) -dumpspecs > tmp-specs + mv tmp-specs $(SPECS) + +# We do want to create an executable named `xgcc', so we can use it to +# compile libgcc2.a. +# Also create gcc-cross, so that install-common will install properly. +gcc-cross$(exeext): xgcc$(exeext) + cp xgcc$(exeext) gcc-cross$(exeext) + +checksum-options: + echo "$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS)" > checksum-options.tmp \ + && $(srcdir)/../move-if-change checksum-options.tmp checksum-options + +# +# Build libgcc.a. + +libgcc-support: libgcc.mvars stmp-int-hdrs $(TCONFIG_H) \ + $(MACHMODE_H) version.h + +libgcc.mvars: config.status Makefile specs xgcc$(exeext) + : > tmp-libgcc.mvars + echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars + echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars + echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars + if test no = yes; then \ + NO_PIE_CFLAGS="-fno-PIE"; \ + else \ + NO_PIE_CFLAGS=; \ + fi; \ + echo NO_PIE_CFLAGS = "$$NO_PIE_CFLAGS" >> tmp-libgcc.mvars + + mv tmp-libgcc.mvars libgcc.mvars + +# Use the genmultilib shell script to generate the information the gcc +# driver program needs to select the library directory based on the +# switches. +multilib.h: s-mlib; @true +s-mlib: $(srcdir)/genmultilib Makefile + if test yes = yes \ + || test -n "$(MULTILIB_OSDIRNAMES)"; then \ + $(SHELL) $(srcdir)/genmultilib \ + "$(MULTILIB_OPTIONS)" \ + "$(MULTILIB_DIRNAMES)" \ + "$(MULTILIB_MATCHES)" \ + "$(MULTILIB_EXCEPTIONS)" \ + "$(MULTILIB_EXTRA_OPTS)" \ + "$(MULTILIB_EXCLUSIONS)" \ + "$(MULTILIB_OSDIRNAMES)" \ + "$(MULTILIB_REQUIRED)" \ + "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \ + "$(MULTILIB_REUSE)" \ + "yes" \ + > tmp-mlib.h; \ + else \ + $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' \ + "$(MULTIARCH_DIRNAME)" '' no \ + > tmp-mlib.h; \ + fi + $(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h + $(STAMP) s-mlib +# +# Compiling object files from source files. + +# Note that dependencies on obstack.h are not written +# because that file is not part of GCC. + +srcextra: gcc.srcextra lang.srcextra + +gcc.srcextra: gengtype-lex.cc + -cp -p $^ $(srcdir) + +AR_OBJS = file-find.o +AR_LIBS = + +gcc-ar$(exeext): gcc-ar.o $(AR_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) gcc-ar.o -o $@ \ + $(AR_OBJS) $(LIBS) $(AR_LIBS) + +gcc-nm$(exeext): gcc-nm.o $(AR_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) gcc-nm.o -o $@ \ + $(AR_OBJS) $(LIBS) $(AR_LIBS) + +gcc-ranlib$(exeext): gcc-ranlib.o $(AR_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) gcc-ranlib.o -o $@ \ + $(AR_OBJS) $(LIBS) $(AR_LIBS) + +CFLAGS-gcc-ar.o += $(DRIVER_DEFINES) \ + -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + -DPERSONALITY=\"ar\" + +CFLAGS-gcc-ranlib.o += $(DRIVER_DEFINES) \ + -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + -DPERSONALITY=\"ranlib\" + +CFLAGS-gcc-nm.o += $(DRIVER_DEFINES) \ + -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + -DPERSONALITY=\"nm\" + +# ??? the implicit rules dont trigger if the source file has a different name +# so copy instead +gcc-ranlib.cc: gcc-ar.cc + cp $^ $@ + +gcc-nm.cc: gcc-ar.cc + cp $^ $@ + +COLLECT2_OBJS = collect2.o collect2-aix.o vec.o ggc-none.o \ + collect-utils.o file-find.o hash-table.o selftest.o +COLLECT2_LIBS = +collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS) +# Don't try modifying collect2 (aka ld) in place--it might be linking this. + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o T$@ \ + $(COLLECT2_OBJS) $(LIBS) $(COLLECT2_LIBS) + mv -f T$@ $@ + +CFLAGS-collect2.o += -DTARGET_MACHINE=\"$(target_noncanonical)\" \ + + +LTO_WRAPPER_OBJS = lto-wrapper.o collect-utils.o ggc-none.o +lto-wrapper$(exeext): $(LTO_WRAPPER_OBJS) libcommon-target.a $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o T$@ \ + $(LTO_WRAPPER_OBJS) libcommon-target.a $(LIBS) + mv -f T$@ $@ + +# Files used by all variants of C or by the stand-alone pre-processor. + +CFLAGS-c-family/c-opts.o += + +CFLAGS-c-family/c-pch.o += -DHOST_MACHINE=\"$(host)\" \ + -DTARGET_MACHINE=\"$(target)\" + +default-c.o: config/default-c.cc + $(COMPILE) $< + $(POSTCOMPILE) + +# Files used by all variants of C and some other languages. + +CFLAGS-prefix.o += -DPREFIX=\"$(prefix)\" -DBASEVER=$(BASEVER_s) +prefix.o: $(BASEVER) + +# Files used by the D language front end. + +default-d.o: config/default-d.cc + $(COMPILE) $< + $(POSTCOMPILE) + +# Files used by the Rust language front end. + +default-rust.o: config/default-rust.cc + $(COMPILE) $< + $(POSTCOMPILE) + +# Language-independent files. + +DRIVER_DEFINES = \ + -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" \ + -DDEFAULT_TARGET_VERSION=\"$(version)\" \ + -DDEFAULT_REAL_TARGET_MACHINE=\"$(real_target_noncanonical)\" \ + -DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\" \ + -DSTANDARD_BINDIR_PREFIX=\"$(bindir)/\" \ + -DTOOLDIR_BASE_PREFIX=\"$(libsubdir_to_prefix)$(prefix_to_exec_prefix)\" \ + -DACCEL_DIR_SUFFIX=\"$(accel_dir_suffix)\" \ + \ + $(VALGRIND_DRIVER_DEFINES) \ + $(if $(SHLIB),$(if $(filter yes,yes),-DENABLE_SHARED_LIBGCC)) \ + -DCONFIGURE_SPECS="\"\"" \ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ + -DNATIVE_SYSTEM_HEADER_DIR=\"$(NATIVE_SYSTEM_HEADER_DIR)\" + +CFLAGS-gcc.o += $(DRIVER_DEFINES) -DBASEVER=$(BASEVER_s) +gcc.o: $(BASEVER) + +specs.h : s-specs ; @true +s-specs : Makefile + lsf="$(lang_specs_files)"; for f in $$lsf; do \ + echo "#include \"$$f\""; \ + done | sed 's|$(srcdir)/||' > tmp-specs.h + $(SHELL) $(srcdir)/../move-if-change tmp-specs.h specs.h + $(STAMP) s-specs + +optionlist: s-options ; @true +s-options: $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) Makefile $(srcdir)/opt-gather.awk + LC_ALL=C ; export LC_ALL ; \ + $(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) > tmp-optionlist + $(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist + $(STAMP) s-options + +options.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \ + $(srcdir)/optc-gen.awk + $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \ + -f $(srcdir)/optc-gen.awk \ + -v header_name="config.h system.h coretypes.h options.h tm.h" < $< > $@ + +options-save.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \ + $(srcdir)/optc-save-gen.awk + $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \ + -f $(srcdir)/optc-save-gen.awk \ + -v header_name="config.h system.h coretypes.h tm.h" < $< > $@ + +options-urls.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \ + $(srcdir)/options-urls-cc-gen.awk + $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \ + -f $(srcdir)/options-urls-cc-gen.awk \ + -v header_name="config.h system.h coretypes.h tm.h" < $< > $@ + +options.h: s-options-h ; @true +s-options-h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \ + $(srcdir)/opth-gen.awk + $(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \ + -f $(srcdir)/opth-gen.awk \ + < $< > tmp-options.h + $(SHELL) $(srcdir)/../move-if-change tmp-options.h options.h + $(STAMP) $@ + +dumpvers: dumpvers.cc + +# lto-compress.o needs $(ZLIBINC) added to the include flags. +CFLAGS-lto-compress.o += $(ZLIBINC) $(ZSTD_INC) + +CFLAGS-lto-streamer-in.o += -DTARGET_MACHINE=\"$(target_noncanonical)\" + +bversion.h: s-bversion; @true +s-bversion: BASE-VER + echo "#define BUILDING_GCC_MAJOR `echo $(BASEVER_c) | sed -e 's/^\([0-9]*\).*$$/\1/'`" > bversion.h + echo "#define BUILDING_GCC_MINOR `echo $(BASEVER_c) | sed -e 's/^[0-9]*\.\([0-9]*\).*$$/\1/'`" >> bversion.h + echo "#define BUILDING_GCC_PATCHLEVEL `echo $(BASEVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/'`" >> bversion.h + echo "#define BUILDING_GCC_VERSION (BUILDING_GCC_MAJOR * 1000 + BUILDING_GCC_MINOR)" >> bversion.h + $(STAMP) s-bversion + +CFLAGS-toplev.o += -DTARGET_NAME=\"$(target_noncanonical)\" +CFLAGS-tree-diagnostic-client-data-hooks.o += -DTARGET_NAME=\"$(target_noncanonical)\" +CFLAGS-optinfo-emit-json.o += -DTARGET_NAME=\"$(target_noncanonical)\" $(ZLIBINC) +CFLAGS-analyzer/engine.o += $(ZLIBINC) + +pass-instances.def: $(srcdir)/passes.def $(PASSES_EXTRA) \ + $(srcdir)/gen-pass-instances.awk + $(AWK) -f $(srcdir)/gen-pass-instances.awk \ + $(srcdir)/passes.def $(PASSES_EXTRA) > pass-instances.def + +$(out_object_file): $(out_file) + $(COMPILE) $< + $(POSTCOMPILE) + +$(common_out_object_file): $(common_out_file) + $(COMPILE) $< + $(POSTCOMPILE) +# +# Generate header and source files from the machine description, +# and compile them. + +.PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \ + $(INSNEMIT_SEQ_SRC) insn-recog.cc insn-extract.cc insn-output.cc \ + insn-peep.cc insn-attr.h insn-attr-common.h insn-attrtab.cc \ + insn-dfatab.cc insn-latencytab.cc insn-preds.cc \ + $(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC) \ + gimple-match-auto.h generic-match-auto.h insn-target-def.h + +# Dependencies for the md file. The first time through, we just assume +# the md file itself and the generated dependency file (in order to get +# it built). The second time through we have the dependency file. +-include mddeps.mk +MD_DEPS = s-mddeps $(md_file) $(MD_INCLUDES) + +s-mddeps: $(md_file) $(MD_INCLUDES) build/genmddeps$(build_exeext) + $(RUN_GEN) build/genmddeps$(build_exeext) $(md_file) > tmp-mddeps + $(SHELL) $(srcdir)/../move-if-change tmp-mddeps mddeps.mk + $(STAMP) s-mddeps + +# For each of the files generated by running a generator program over +# the machine description, the following static pattern rules run the +# generator program only if the machine description has changed, +# but touch the target file only when its contents actually change. +# The "; @true" construct forces Make to recheck the timestamp on +# the target file. + +simple_rtl_generated_h = insn-attr.h insn-attr-common.h insn-codes.h \ + insn-config.h insn-flags.h insn-target-def.h + +simple_rtl_generated_c = insn-automata.cc \ + insn-extract.cc insn-output.cc \ + insn-peep.cc insn-recog.cc + +simple_generated_h = $(simple_rtl_generated_h) insn-constants.h + +simple_generated_c = $(simple_rtl_generated_c) insn-enums.cc + +$(simple_generated_h:insn-%.h=s-%) \ +$(simple_generated_c:insn-%.cc=s-%): s-%: $(MD_DEPS) + +$(simple_rtl_generated_h:insn-%.h=s-%) \ +$(simple_rtl_generated_c:insn-%.cc=s-%): s-%: insn-conditions.md + +$(simple_generated_h): insn-%.h: s-%; @true + +$(simple_generated_h:insn-%.h=s-%): s-%: build/gen%$(build_exeext) + $(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \ + $(filter insn-conditions.md,$^) > tmp-$*.h + $(SHELL) $(srcdir)/../move-if-change tmp-$*.h insn-$*.h + $(STAMP) s-$* + +$(simple_generated_c): insn-%.cc: s-%; @true +$(simple_generated_c:insn-%.cc=s-%): s-%: build/gen%$(build_exeext) + $(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \ + $(filter insn-conditions.md,$^) > tmp-$*.cc + $(SHELL) $(srcdir)/../move-if-change tmp-$*.cc insn-$*.cc + $(STAMP) s-$* + +# genemit splits its output into different files and doesn't write to +# stdout. (but rather to tmp-emit-01.cc..tmp-emit-10.cc) +$(INSNEMIT_SEQ_SRC): s-tmp-emit; @true +s-tmp-emit: build/genemit$(build_exeext) $(MD_DEPS) insn-conditions.md + $(RUN_GEN) build/genemit$(build_exeext) $(md_file) insn-conditions.md \ + $(addprefix -O,${INSNEMIT_SEQ_TMP}) + $(foreach id, $(INSNEMIT_SPLITS_SEQ), \ + $(SHELL) $(srcdir)/../move-if-change tmp-emit-$(id).cc \ + insn-emit-$(id).cc;) + $(STAMP) s-tmp-emit + +# gencheck doesn't read the machine description, and the file produced +# doesn't use the insn-* convention. + +tree-check.h: s-check ; @true +s-check : build/gencheck$(build_exeext) + $(RUN_GEN) build/gencheck$(build_exeext) > tmp-check.h + $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h + $(STAMP) s-check + +# genattrtab produces three files: tmp-{attrtab.cc,dfatab.cc,latencytab.cc} +insn-attrtab.cc insn-dfatab.cc insn-latencytab.cc: s-attrtab ; @true +s-attrtab : $(MD_DEPS) build/genattrtab$(build_exeext) \ + insn-conditions.md + $(RUN_GEN) build/genattrtab$(build_exeext) $(md_file) insn-conditions.md \ + -Atmp-attrtab.cc -Dtmp-dfatab.cc -Ltmp-latencytab.cc + $(SHELL) $(srcdir)/../move-if-change tmp-attrtab.cc insn-attrtab.cc + $(SHELL) $(srcdir)/../move-if-change tmp-dfatab.cc insn-dfatab.cc + $(SHELL) $(srcdir)/../move-if-change tmp-latencytab.cc insn-latencytab.cc + $(STAMP) s-attrtab + +# genopinit produces two files. +insn-opinit.cc insn-opinit.h: s-opinit ; @true +s-opinit: $(MD_DEPS) build/genopinit$(build_exeext) insn-conditions.md + $(RUN_GEN) build/genopinit$(build_exeext) $(md_file) \ + insn-conditions.md -htmp-opinit.h -ctmp-opinit.cc + $(SHELL) $(srcdir)/../move-if-change tmp-opinit.h insn-opinit.h + $(SHELL) $(srcdir)/../move-if-change tmp-opinit.cc insn-opinit.cc + $(STAMP) s-opinit + +# gencondmd doesn't use the standard naming convention. +build/gencondmd.cc: s-conditions; @true +s-conditions: $(MD_DEPS) build/genconditions$(build_exeext) + $(RUN_GEN) build/genconditions$(build_exeext) $(md_file) > tmp-condmd.cc + $(SHELL) $(srcdir)/../move-if-change tmp-condmd.cc build/gencondmd.cc + $(STAMP) s-conditions + +insn-conditions.md: s-condmd; @true +s-condmd: build/gencondmd$(build_exeext) + $(RUN_GEN) build/gencondmd$(build_exeext) > tmp-cond.md + $(SHELL) $(srcdir)/../move-if-change tmp-cond.md insn-conditions.md + $(STAMP) s-condmd + + +# These files are generated by running the same generator more than +# once with different options, so they have custom rules. The +# stampfile idiom is the same. +genrtl.h: s-genrtl-h; @true + +s-genrtl-h: build/gengenrtl$(build_exeext) + $(RUN_GEN) build/gengenrtl$(build_exeext) > tmp-genrtl.h + $(SHELL) $(srcdir)/../move-if-change tmp-genrtl.h genrtl.h + $(STAMP) s-genrtl-h + +insn-modes.cc: s-modes; @true +insn-modes.h: s-modes-h; @true +insn-modes-inline.h: s-modes-inline-h; @true +min-insn-modes.cc: s-modes-m; @true + +s-modes: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) > tmp-modes.cc + $(SHELL) $(srcdir)/../move-if-change tmp-modes.cc insn-modes.cc + $(STAMP) s-modes + +s-modes-h: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) -h > tmp-modes.h + $(SHELL) $(srcdir)/../move-if-change tmp-modes.h insn-modes.h + $(STAMP) s-modes-h + +s-modes-inline-h: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) -i > tmp-modes-inline.h + $(SHELL) $(srcdir)/../move-if-change tmp-modes-inline.h \ + insn-modes-inline.h + $(STAMP) s-modes-inline-h + +s-modes-m: build/genmodes$(build_exeext) + $(RUN_GEN) build/genmodes$(build_exeext) -m > tmp-min-modes.cc + $(SHELL) $(srcdir)/../move-if-change tmp-min-modes.cc min-insn-modes.cc + $(STAMP) s-modes-m + +insn-preds.cc: s-preds; @true +tm-preds.h: s-preds-h; @true +tm-constrs.h: s-constrs-h; @true + +.PHONY: mddump +mddump: $(BUILD_RTL) $(MD_DEPS) build/genmddump$(build_exeext) + $(RUN_GEN) build/genmddump$(build_exeext) $(md_file) > tmp-mddump.md + +s-preds: $(MD_DEPS) build/genpreds$(build_exeext) + $(RUN_GEN) build/genpreds$(build_exeext) $(md_file) > tmp-preds.cc + $(SHELL) $(srcdir)/../move-if-change tmp-preds.cc insn-preds.cc + $(STAMP) s-preds + +s-preds-h: $(MD_DEPS) build/genpreds$(build_exeext) + $(RUN_GEN) build/genpreds$(build_exeext) -h $(md_file) > tmp-preds.h + $(SHELL) $(srcdir)/../move-if-change tmp-preds.h tm-preds.h + $(STAMP) s-preds-h + +s-constrs-h: $(MD_DEPS) build/genpreds$(build_exeext) + $(RUN_GEN) build/genpreds$(build_exeext) -c $(md_file) > tmp-constrs.h + $(SHELL) $(srcdir)/../move-if-change tmp-constrs.h tm-constrs.h + $(STAMP) s-constrs-h + +s-case-cfn-macros: build/gencfn-macros$(build_exeext) + $(RUN_GEN) build/gencfn-macros$(build_exeext) -c \ + > tmp-case-cfn-macros.h + $(SHELL) $(srcdir)/../move-if-change tmp-case-cfn-macros.h \ + case-cfn-macros.h + $(STAMP) s-case-cfn-macros +case-cfn-macros.h: s-case-cfn-macros; @true + +s-cfn-operators: build/gencfn-macros$(build_exeext) + $(RUN_GEN) build/gencfn-macros$(build_exeext) -o \ + > tmp-cfn-operators.pd + $(SHELL) $(srcdir)/../move-if-change tmp-cfn-operators.pd \ + cfn-operators.pd + $(STAMP) s-cfn-operators +cfn-operators.pd: s-cfn-operators; @true + +target-hooks-def.h: s-target-hooks-def-h; @true +# make sure that when we build info files, the used tm.texi is up to date. +$(srcdir)/doc/tm.texi: s-tm-texi; @true + +s-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "Target Hook" \ + > tmp-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-target-hooks-def.h \ + target-hooks-def.h + $(STAMP) s-target-hooks-def-h + +c-family/c-target-hooks-def.h: s-c-target-hooks-def-h; @true + +s-c-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "C Target Hook" \ + > tmp-c-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-c-target-hooks-def.h \ + c-family/c-target-hooks-def.h + $(STAMP) s-c-target-hooks-def-h + +common/common-target-hooks-def.h: s-common-target-hooks-def-h; @true + +s-common-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "Common Target Hook" \ + > tmp-common-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-common-target-hooks-def.h \ + common/common-target-hooks-def.h + $(STAMP) s-common-target-hooks-def-h + +d/d-target-hooks-def.h: s-d-target-hooks-def-h; @true + +s-d-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "D Target Hook" \ + > tmp-d-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-d-target-hooks-def.h \ + d/d-target-hooks-def.h + $(STAMP) s-d-target-hooks-def-h + +rust/rust-target-hooks-def.h: s-rust-target-hooks-def-h; @true + +s-rust-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "Rust Target Hook" \ + > tmp-rust-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-rust-target-hooks-def.h \ + rust/rust-target-hooks-def.h + $(STAMP) s-rust-target-hooks-def-h + +# check if someone mistakenly only changed tm.texi. +# We use a different pathname here to avoid a circular dependency. +s-tm-texi: $(srcdir)/doc/../doc/tm.texi + +# The tm.texi we want to compare against / check into svn should have +# unix-style line endings. To make this work on MinGW, remove \r. +# \r is not portable to Solaris tr, therefore we have a special +# case for ASCII. We use \r for other encodings like EBCDIC. +s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in + $(RUN_GEN) build/genhooks$(build_exeext) -d \ + $(srcdir)/doc/tm.texi.in > tmp-tm.texi + case `echo X|tr X '\101'` in \ + A) tr -d '\015' < tmp-tm.texi > tmp2-tm.texi ;; \ + *) tr -d '\r' < tmp-tm.texi > tmp2-tm.texi ;; \ + esac + mv tmp2-tm.texi tmp-tm.texi + $(SHELL) $(srcdir)/../move-if-change tmp-tm.texi tm.texi + @if cmp -s $(srcdir)/doc/tm.texi tm.texi; then \ + $(STAMP) $@; \ + elif test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/tm.texi.in \ + && ( test $(srcdir)/doc/tm.texi -nt $(srcdir)/target.def \ + || test $(srcdir)/doc/tm.texi -nt $(srcdir)/c-family/c-target.def \ + || test $(srcdir)/doc/tm.texi -nt $(srcdir)/common/common-target.def \ + || test $(srcdir)/doc/tm.texi -nt $(srcdir)/d/d-target.def \ + || test $(srcdir)/doc/tm.texi -nt $(srcdir)/rust/rust-target.def \ + ); then \ + echo >&2 ; \ + echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \ + false; \ + else \ + echo >&2 ; \ + echo Verify that you have permission to grant a GFDL license for all >&2 ; \ + echo new text in $(objdir)/tm.texi, then copy it to $(srcdir)/doc/tm.texi. >&2 ; \ + false; \ + fi + +$(GIMPLE_MATCH_PD_SEQ_SRC): s-gimple-match gimple-match-head.cc; @true +gimple-match-auto.h: s-gimple-match; @true +$(GENERIC_MATCH_PD_SEQ_SRC): s-generic-match generic-match-head.cc; @true +generic-match-auto.h: s-generic-match; @true + +s-gimple-match: build/genmatch$(build_exeext) \ + $(srcdir)/match.pd cfn-operators.pd + $(RUN_GEN) build/genmatch$(build_exeext) --gimple \ + --header=tmp-gimple-match-auto.h --include=gimple-match-auto.h \ + $(srcdir)/match.pd $(patsubst %, tmp-%, $(GIMPLE_MATCH_PD_SEQ_SRC)) + $(foreach id, $(MATCH_SPLITS_SEQ), \ + $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match-$(id).cc \ + gimple-match-$(id).cc;) + $(SHELL) $(srcdir)/../move-if-change tmp-gimple-match-auto.h \ + gimple-match-auto.h + $(STAMP) s-gimple-match + +s-generic-match: build/genmatch$(build_exeext) \ + $(srcdir)/match.pd cfn-operators.pd + $(RUN_GEN) build/genmatch$(build_exeext) --generic \ + --header=tmp-generic-match-auto.h --include=generic-match-auto.h \ + $(srcdir)/match.pd $(patsubst %, tmp-%, $(GENERIC_MATCH_PD_SEQ_SRC)) + $(foreach id, $(MATCH_SPLITS_SEQ), \ + $(SHELL) $(srcdir)/../move-if-change tmp-generic-match-$(id).cc \ + generic-match-$(id).cc;) + $(SHELL) $(srcdir)/../move-if-change tmp-generic-match-auto.h \ + generic-match-auto.h + $(STAMP) s-generic-match + +GTFILES = $(CPPLIB_H) $(srcdir)/input.h $(srcdir)/coretypes.h \ + $(host_xm_file_list) \ + $(OPTIONS_H_EXTRA) \ + $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \ + $(srcdir)/wide-int.h $(srcdir)/alias.h \ + $(srcdir)/coverage.cc $(srcdir)/rtl.h \ + $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/tree-core.h \ + $(srcdir)/libfuncs.h $(SYMTAB_H) \ + $(srcdir)/real.h $(srcdir)/function.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \ + $(srcdir)/fixed-value.h \ + $(srcdir)/function-abi.h \ + $(srcdir)/output.h $(srcdir)/cfgloop.h $(srcdir)/cfg.h $(srcdir)/profile-count.h \ + $(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/ipa-ref.h $(srcdir)/cgraph.h \ + $(srcdir)/symtab-thunks.h $(srcdir)/symtab-thunks.cc \ + $(srcdir)/symtab-clones.h \ + $(srcdir)/reload.h $(srcdir)/caller-save.cc $(srcdir)/symtab.cc \ + $(srcdir)/alias.cc $(srcdir)/attribs.cc \ + $(srcdir)/bitmap.cc $(srcdir)/cselib.cc $(srcdir)/cgraph.cc \ + $(srcdir)/ipa-prop.cc $(srcdir)/ipa-cp.cc $(srcdir)/ipa-utils.h \ + $(srcdir)/ipa-param-manipulation.h $(srcdir)/ipa-sra.cc \ + $(srcdir)/ipa-modref.h $(srcdir)/ipa-modref.cc \ + $(srcdir)/ipa-modref-tree.h \ + $(srcdir)/signop.h \ + $(srcdir)/diagnostic-spec.h $(srcdir)/diagnostic-spec.cc \ + $(srcdir)/dwarf2out.h \ + $(srcdir)/dwarf2asm.cc \ + $(srcdir)/dwarf2cfi.cc \ + $(srcdir)/dwarf2codeview.cc \ + $(srcdir)/dwarf2ctf.cc \ + $(srcdir)/dwarf2out.cc \ + $(srcdir)/ctfc.h \ + $(srcdir)/ctfout.cc \ + $(srcdir)/btfout.cc \ + $(srcdir)/tree-vect-generic.cc \ + $(srcdir)/gimple-isel.cc \ + $(srcdir)/dojump.cc $(srcdir)/emit-rtl.h \ + $(srcdir)/emit-rtl.cc $(srcdir)/except.h $(srcdir)/explow.cc $(srcdir)/expr.cc \ + $(srcdir)/expr.h \ + $(srcdir)/function.cc $(srcdir)/except.cc \ + $(srcdir)/ggc-tests.cc \ + $(srcdir)/gcse.cc $(srcdir)/godump.cc \ + $(srcdir)/lists.cc $(srcdir)/optabs-libfuncs.cc \ + $(srcdir)/profile.cc $(srcdir)/mcf.cc \ + $(srcdir)/reg-stack.cc $(srcdir)/cfgrtl.cc \ + $(srcdir)/stor-layout.cc \ + $(srcdir)/stringpool.cc $(srcdir)/tree.cc $(srcdir)/varasm.cc \ + $(srcdir)/gimple.h \ + $(srcdir)/gimple-ssa.h \ + $(srcdir)/tree-ssanames.cc $(srcdir)/tree-eh.cc $(srcdir)/tree-ssa-address.cc \ + $(srcdir)/tree-cfg.cc $(srcdir)/tree-ssa-loop-ivopts.cc \ + $(srcdir)/tree-dfa.cc \ + $(srcdir)/tree-iterator.cc $(srcdir)/gimple-expr.cc \ + $(srcdir)/tree-chrec.h \ + $(srcdir)/tree-scalar-evolution.cc \ + $(srcdir)/tree-ssa-operands.h \ + $(srcdir)/tree-profile.cc $(srcdir)/tree-nested.cc \ + $(srcdir)/omp-offload.h \ + $(srcdir)/omp-general.cc \ + $(srcdir)/omp-low.cc \ + $(srcdir)/targhooks.cc $(out_file) $(srcdir)/passes.cc \ + $(srcdir)/cgraphclones.cc \ + $(srcdir)/tree-phinodes.cc \ + $(srcdir)/tree-ssa-alias.h \ + $(srcdir)/tree-ssanames.h \ + $(srcdir)/tree-vrp.h \ + $(srcdir)/value-range.h \ + $(srcdir)/value-range-storage.h \ + $(srcdir)/ipa-prop.h \ + $(srcdir)/trans-mem.cc \ + $(srcdir)/lto-streamer.h \ + $(srcdir)/target-globals.h \ + $(srcdir)/ipa-predicate.h \ + $(srcdir)/ipa-fnsummary.h \ + $(srcdir)/vtable-verify.cc \ + $(srcdir)/asan.cc \ + $(srcdir)/ubsan.cc \ + $(srcdir)/tsan.cc \ + $(srcdir)/sanopt.cc \ + $(srcdir)/sancov.cc \ + $(srcdir)/ipa-devirt.cc \ + $(srcdir)/ipa-strub.cc \ + $(srcdir)/internal-fn.h \ + $(srcdir)/calls.cc \ + $(srcdir)/omp-general.h \ + $(srcdir)/analyzer/analyzer-language.cc \ + $(srcdir)/config/i386/i386-builtins.cc $(srcdir)/config/i386/i386-expand.cc $(srcdir)/config/i386/i386-options.cc [ada] $(srcdir)/ada/gcc-interface/ada-tree.h $(srcdir)/ada/gcc-interface/gigi.h $(srcdir)/ada/gcc-interface/decl.cc $(srcdir)/ada/gcc-interface/trans.cc $(srcdir)/ada/gcc-interface/utils.cc $(srcdir)/ada/gcc-interface/misc.cc [c] $(srcdir)/c/c-lang.cc $(srcdir)/c/c-tree.h $(srcdir)/c/c-decl.cc $(srcdir)/c-family/c-common.cc $(srcdir)/c-family/c-common.h $(srcdir)/c-family/c-objc.h $(srcdir)/c-family/c-cppbuiltin.cc $(srcdir)/c-family/c-pragma.h $(srcdir)/c-family/c-pragma.cc $(srcdir)/c-family/c-format.cc $(srcdir)/c/c-objc-common.cc $(srcdir)/c/c-parser.h $(srcdir)/c/c-parser.cc $(srcdir)/c/c-lang.h [cp] $(srcdir)/cp/name-lookup.h $(srcdir)/cp/cp-tree.h $(srcdir)/c-family/c-common.h $(srcdir)/c-family/c-objc.h $(srcdir)/c-family/c-pragma.h $(srcdir)/cp/decl.h $(srcdir)/cp/parser.h $(srcdir)/c-family/c-common.cc $(srcdir)/c-family/c-format.cc $(srcdir)/c-family/c-cppbuiltin.cc $(srcdir)/c-family/c-pragma.cc $(srcdir)/cp/call.cc $(srcdir)/cp/class.cc $(srcdir)/cp/constexpr.cc $(srcdir)/cp/contracts.cc $(srcdir)/cp/constraint.cc $(srcdir)/cp/coroutines.cc $(srcdir)/cp/cp-gimplify.cc $(srcdir)/cp/cp-lang.cc $(srcdir)/cp/cp-objcp-common.cc $(srcdir)/cp/decl.cc $(srcdir)/cp/decl2.cc $(srcdir)/cp/except.cc $(srcdir)/cp/friend.cc $(srcdir)/cp/init.cc $(srcdir)/cp/lambda.cc $(srcdir)/cp/lex.cc $(srcdir)/cp/logic.cc $(srcdir)/cp/mangle.cc $(srcdir)/cp/method.cc $(srcdir)/cp/module.cc $(srcdir)/cp/name-lookup.cc $(srcdir)/cp/parser.cc $(srcdir)/cp/pt.cc $(srcdir)/cp/rtti.cc $(srcdir)/cp/semantics.cc $(srcdir)/cp/tree.cc $(srcdir)/cp/typeck2.cc $(srcdir)/cp/vtable-class-hierarchy.cc [d] $(srcdir)/d/d-tree.h $(srcdir)/d/d-builtins.cc $(srcdir)/d/d-lang.cc $(srcdir)/d/typeinfo.cc [fortran] $(srcdir)/fortran/f95-lang.cc $(srcdir)/fortran/trans-decl.cc $(srcdir)/fortran/trans-intrinsic.cc $(srcdir)/fortran/trans-io.cc $(srcdir)/fortran/trans-stmt.cc $(srcdir)/fortran/trans-types.cc $(srcdir)/fortran/trans-types.h $(srcdir)/fortran/trans.h $(srcdir)/fortran/trans-const.h [go] $(srcdir)/go/go-lang.cc $(srcdir)/go/go-c.h [jit] $(srcdir)/jit/dummy-frontend.cc [lto] $(srcdir)/lto/lto-tree.h $(srcdir)/lto/lto-lang.cc $(srcdir)/lto/lto.cc $(srcdir)/lto/lto.h $(srcdir)/lto/lto-common.h $(srcdir)/lto/lto-common.cc $(srcdir)/lto/lto-dump.cc [m2] $(srcdir)/m2/gm2-lang.cc $(srcdir)/m2/gm2-lang.h $(srcdir)/m2/gm2-gcc/rtegraph.cc $(srcdir)/m2/gm2-gcc/m2block.cc $(srcdir)/m2/gm2-gcc/m2builtins.cc $(srcdir)/m2/gm2-gcc/m2decl.cc $(srcdir)/m2/gm2-gcc/m2except.cc $(srcdir)/m2/gm2-gcc/m2expr.cc $(srcdir)/m2/gm2-gcc/m2statement.cc $(srcdir)/m2/gm2-gcc/m2type.cc [objc] $(srcdir)/objc/objc-map.h $(srcdir)/c-family/c-objc.h $(srcdir)/objc/objc-act.h $(srcdir)/objc/objc-act.cc $(srcdir)/objc/objc-runtime-shared-support.cc $(srcdir)/objc/objc-gnu-runtime-abi-01.cc $(srcdir)/objc/objc-next-runtime-abi-01.cc $(srcdir)/objc/objc-next-runtime-abi-02.cc $(srcdir)/c/c-parser.h $(srcdir)/c/c-parser.cc $(srcdir)/c/c-tree.h $(srcdir)/c/c-decl.cc $(srcdir)/c/c-lang.h $(srcdir)/c/c-objc-common.cc $(srcdir)/c-family/c-common.cc $(srcdir)/c-family/c-common.h $(srcdir)/c-family/c-cppbuiltin.cc $(srcdir)/c-family/c-pragma.h $(srcdir)/c-family/c-pragma.cc $(srcdir)/c-family/c-format.cc [objcp] $(srcdir)/cp/name-lookup.h $(srcdir)/cp/cp-tree.h $(srcdir)/c-family/c-common.h $(srcdir)/c-family/c-objc.h $(srcdir)/c-family/c-pragma.h $(srcdir)/cp/decl.h $(srcdir)/cp/parser.h $(srcdir)/c-family/c-common.cc $(srcdir)/c-family/c-format.cc $(srcdir)/c-family/c-cppbuiltin.cc $(srcdir)/c-family/c-pragma.cc $(srcdir)/cp/call.cc $(srcdir)/cp/class.cc $(srcdir)/cp/constexpr.cc $(srcdir)/cp/contracts.cc $(srcdir)/cp/constraint.cc $(srcdir)/cp/coroutines.cc $(srcdir)/cp/cp-gimplify.cc $(srcdir)/objcp/objcp-lang.cc $(srcdir)/cp/cp-objcp-common.cc $(srcdir)/cp/decl.cc $(srcdir)/cp/decl2.cc $(srcdir)/cp/except.cc $(srcdir)/cp/friend.cc $(srcdir)/cp/init.cc $(srcdir)/cp/lambda.cc $(srcdir)/cp/lex.cc $(srcdir)/cp/logic.cc $(srcdir)/cp/mangle.cc $(srcdir)/cp/method.cc $(srcdir)/cp/module.cc $(srcdir)/cp/name-lookup.cc $(srcdir)/cp/parser.cc $(srcdir)/cp/pt.cc $(srcdir)/cp/rtti.cc $(srcdir)/cp/semantics.cc $(srcdir)/cp/tree.cc $(srcdir)/cp/typeck2.cc $(srcdir)/cp/vtable-class-hierarchy.cc $(srcdir)/objc/objc-act.h $(srcdir)/objc/objc-map.h $(srcdir)/objc/objc-act.cc $(srcdir)/objc/objc-gnu-runtime-abi-01.cc $(srcdir)/objc/objc-next-runtime-abi-01.cc $(srcdir)/objc/objc-next-runtime-abi-02.cc $(srcdir)/objc/objc-runtime-shared-support.cc [rust] $(srcdir)/rust/rust-lang.cc $(srcdir)/rust/backend/rust-constexpr.cc $(srcdir)/rust/backend/rust-tree.h $(srcdir)/rust/backend/rust-tree.cc + +# Compute the list of GT header files from the corresponding C sources, +# possibly nested within config or language subdirectories. Match gengtype's +# behavior in this respect: gt-LANG-file.h for "file" anywhere within a LANG +# language subdir, gt-file.h otherwise (no subdir indication for config/ +# related sources). + +GTFILES_H = $(subst /,-, \ + $(shell echo $(patsubst $(srcdir)/%,gt-%, \ + $(patsubst %.cc,%.h, \ + $(filter %.cc, $(GTFILES)))) \ + | sed -e "s|/[^ ]*/|/|g" -e "s|gt-config/|gt-|g")) + +GTFILES_LANG_H = $(patsubst [%], gtype-%.h, $(filter [%], $(GTFILES))) +ALL_GTFILES_H := $(sort $(GTFILES_H) $(GTFILES_LANG_H)) + +# $(GTFILES) may be too long to put on a command line, so we have to +# write it out to a file (taking care not to do that in a way that +# overflows a command line!) and then have gengtype read the file in. + +$(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h gtype.state: s-gtype ; @true + +### Common flags to gengtype [e.g. -v or -B backupdir] +GENGTYPE_FLAGS= + +gtyp-input.list: s-gtyp-input ; @true +s-gtyp-input: Makefile + @: $(call write_entries_to_file,$(GTFILES),tmp-gi.list) + $(SHELL) $(srcdir)/../move-if-change tmp-gi.list gtyp-input.list + $(STAMP) s-gtyp-input + +s-gtype: $(EXTRA_GTYPE_DEPS) build/gengtype$(build_exeext) \ + $(filter-out [%], $(GTFILES)) gtyp-input.list +# First, parse all files and save a state file. + $(RUN_GEN) build/gengtype$(build_exeext) $(GENGTYPE_FLAGS) \ + -S $(srcdir) -I gtyp-input.list -w tmp-gtype.state +# Second, read the state file and generate all files. This ensure that +# gtype.state is correctly read: + $(SHELL) $(srcdir)/../move-if-change tmp-gtype.state gtype.state + $(RUN_GEN) build/gengtype$(build_exeext) $(GENGTYPE_FLAGS) \ + -r gtype.state + $(STAMP) s-gtype + +generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \ + $(simple_generated_h) specs.h \ + tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \ + tm-preds.h tm-constrs.h \ + $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h version.h \ + options.h target-hooks-def.h insn-opinit.h \ + common/common-target-hooks-def.h pass-instances.def \ + $(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC) \ + gimple-match-auto.h generic-match-auto.h \ + c-family/c-target-hooks-def.h d/d-target-hooks-def.h \ + $(TM_RUST_H) rust/rust-target-hooks-def.h \ + case-cfn-macros.h \ + cfn-operators.pd omp-device-properties.h + +# +# How to compile object files to run on the build machine. + +build/%.o : # dependencies provided by explicit rule later + $(COMPILER_FOR_BUILD) -c $(BUILD_COMPILERFLAGS) $(BUILD_CPPFLAGS) \ + -o $@ $< + +# Header dependencies for the programs that generate source code. +# These are library modules... +build/errors.o : errors.cc $(BCONFIG_H) $(SYSTEM_H) errors.h +build/gensupport.o: gensupport.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) errors.h \ + $(HASHTAB_H) $(READ_MD_H) $(GENSUPPORT_H) $(HASH_TABLE_H) +build/ggc-none.o : ggc-none.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(GGC_H) +build/min-insn-modes.o : min-insn-modes.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) +build/print-rtl.o: print-rtl.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(GTM_H) $(RTL_BASE_H) +build/read-md.o: read-md.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(HASHTAB_H) errors.h $(READ_MD_H) +build/read-rtl.o: read-rtl.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) $(HASHTAB_H) $(READ_MD_H) \ + $(GENSUPPORT_H) +build/rtl.o: rtl.cc $(BCONFIG_H) $(CORETYPES_H) $(GTM_H) $(SYSTEM_H) \ + $(RTL_H) $(GGC_H) errors.h +build/vec.o : vec.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(VEC_H) \ + $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(HASH_TABLE_H) +build/hash-table.o : hash-table.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(HASH_TABLE_H) $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) +build/sort.o : sort.cc $(BCONFIG_H) $(SYSTEM_H) +build/inchash.o : inchash.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + $(HASHTAB_H) inchash.h +build/gencondmd.o : build/gencondmd.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) insn-constants.h \ + $(filter-out insn-flags.h, $(RTL_H) $(TM_P_H) $(FUNCTION_H) $(REGS_H) \ + $(RECOG_H) output.h $(FLAGS_H) $(RESOURCE_H) toplev.h $(DIAGNOSTIC_CORE_H) reload.h \ + $(EXCEPT_H) tm-constrs.h) +# This pulls in tm-pred.h which contains inline functions wrapping up +# predicates from the back-end so those functions must be discarded. +# No big deal since gencondmd.cc is a dummy file for non-GCC compilers. +build/gencondmd.o : \ + BUILD_CFLAGS := $(filter-out -fkeep-inline-functions, $(BUILD_CFLAGS)) + +# ...these are the programs themselves. +build/genattr.o : genattr.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genattr-common.o : genattr-common.cc $(RTL_BASE_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genattrtab.o : genattrtab.cc $(RTL_BASE_H) $(OBSTACK_H) \ + $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(GGC_H) \ + $(READ_MD_H) $(GENSUPPORT_H) $(FNMATCH_H) +build/genautomata.o : genautomata.cc $(RTL_BASE_H) $(OBSTACK_H) \ + $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(VEC_H) \ + $(HASHTAB_H) $(GENSUPPORT_H) $(FNMATCH_H) +build/gencheck.o : gencheck.cc all-tree.def $(BCONFIG_H) $(GTM_H) \ + $(SYSTEM_H) $(CORETYPES_H) tree.def c-family/c-common.def \ + $(lang_tree_files) gimple.def +build/genchecksum.o : genchecksum.cc $(BCONFIG_H) $(SYSTEM_H) $(MD5_H) +build/gencodes.o : gencodes.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) +build/genconditions.o : genconditions.cc $(RTL_BASE_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(HASHTAB_H) \ + $(READ_MD_H) $(GENSUPPORT_H) +build/genconfig.o : genconfig.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) +build/genconstants.o : genconstants.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) errors.h $(READ_MD_H) +build/genemit.o : genemit.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) internal-fn.def +build/genenums.o : genenums.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) errors.h $(READ_MD_H) +build/genextract.o : genextract.cc $(RTL_BASE_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genflags.o : genflags.cc $(RTL_BASE_H) $(OBSTACK_H) $(BCONFIG_H) \ + $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/gentarget-def.o : gentarget-def.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) errors.h $(READ_MD_H) \ + $(GENSUPPORT_H) $(HASH_TABLE_H) target-insns.def +build/gengenrtl.o : gengenrtl.cc $(BCONFIG_H) $(SYSTEM_H) rtl.def + +# The gengtype generator program is special: Two versions are built. +# One is for the build machine, and one is for the host to allow +# plugins to define their types and generate the supporting GGC +# datastructures and routines with GTY markers. +# The host object files depend on CONFIG_H, and the build objects +# on BCONFIG_H. For the build objects, add -DGENERATOR_FILE manually, +# the build-%: rule doesn't apply to them. + +GENGTYPE_OBJS = gengtype.o gengtype-parse.o gengtype-state.o \ + gengtype-lex.o errors.o + +gengtype-lex.o build/gengtype-lex.o : gengtype-lex.cc gengtype.h $(SYSTEM_H) +CFLAGS-gengtype-lex.o += -DHOST_GENERATOR_FILE +build/gengtype-lex.o: $(BCONFIG_H) + +gengtype-parse.o build/gengtype-parse.o : gengtype-parse.cc gengtype.h \ + $(SYSTEM_H) +CFLAGS-gengtype-parse.o += -DHOST_GENERATOR_FILE +build/gengtype-parse.o: $(BCONFIG_H) + +gengtype-state.o build/gengtype-state.o: gengtype-state.cc $(SYSTEM_H) \ + gengtype.h errors.h version.h $(HASHTAB_H) $(OBSTACK_H) \ + $(XREGEX_H) +CFLAGS-gengtype-state.o += -DHOST_GENERATOR_FILE +build/gengtype-state.o: $(BCONFIG_H) +gengtype.o build/gengtype.o : gengtype.cc $(SYSTEM_H) gengtype.h \ + rtl.def insn-notes.def errors.h version.h \ + $(HASHTAB_H) $(OBSTACK_H) $(XREGEX_H) +CFLAGS-gengtype.o += -DHOST_GENERATOR_FILE +build/gengtype.o: $(BCONFIG_H) + +CFLAGS-errors.o += -DHOST_GENERATOR_FILE + +build/genmddeps.o: genmddeps.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + errors.h $(READ_MD_H) +build/genmodes.o : genmodes.cc $(BCONFIG_H) $(SYSTEM_H) errors.h \ + $(HASHTAB_H) machmode.def $(extra_modes_file) +build/genopinit.o : genopinit.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) optabs.def +build/genoutput.o : genoutput.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genpeep.o : genpeep.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) toplev.h \ + $(DIAGNOSTIC_CORE_H) +build/genpreds.o : genpreds.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) $(OBSTACK_H) +build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) \ + $(HASH_TABLE_H) inchash.h +build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF) \ + $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(BCONFIG_H) \ + $(SYSTEM_H) errors.h +build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) +build/genmatch.o : genmatch.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ + errors.h $(HASH_TABLE_H) hash-map.h $(GGC_H) is-a.h ordered-hash-map.h \ + tree.def builtins.def internal-fn.def case-cfn-macros.h $(CPPLIB_H) +build/gencfn-macros.o : gencfn-macros.cc $(BCONFIG_H) $(SYSTEM_H) \ + $(CORETYPES_H) errors.h $(HASH_TABLE_H) hash-set.h builtins.def \ + internal-fn.def + +# Compile the programs that generate insn-* from the machine description. +# They are compiled with $(COMPILER_FOR_BUILD), and associated libraries, +# since they need to run on this machine +# even if GCC is being compiled to run on some other machine. + +# All these programs use the RTL reader ($(BUILD_RTL)). +genprogrtl = attr attr-common attrtab automata codes conditions config emit \ + extract flags mddump opinit output peep preds recog target-def +$(genprogrtl:%=build/gen%$(build_exeext)): $(BUILD_RTL) + +# All these programs use the MD reader ($(BUILD_MD)). +genprogmd = $(genprogrtl) mddeps constants enums +$(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_MD) + +# All these programs need to report errors. +genprogerr = $(genprogmd) genrtl modes gtype hooks cfn-macros condmd +$(genprogerr:%=build/gen%$(build_exeext)): $(BUILD_ERRORS) + +# Remaining build programs. +genprog = $(genprogerr) check checksum match + +# These programs need libs over and above what they get from the above list. +build/genautomata$(build_exeext) : BUILD_LIBS += -lm + +build/genrecog$(build_exeext) : build/hash-table.o build/inchash.o +build/gencfn-macros$(build_exeext) : build/hash-table.o build/vec.o \ + build/ggc-none.o build/sort.o + +# For stage1 and when cross-compiling use the build libcpp which is +# built with NLS disabled. For stage2+ use the host library and +# its dependencies. +ifeq ($(build_objdir),$(build_libobjdir)) +BUILD_CPPLIB = $(build_libobjdir)/libcpp/libcpp.a +else +BUILD_CPPLIB = $(CPPLIB) $(LIBIBERTY) +build/genmatch$(build_exeext): BUILD_LIBDEPS += $(LIBINTL_DEP) $(LIBICONV_DEP) +build/genmatch$(build_exeext): BUILD_LIBS += $(LIBINTL) $(LIBICONV) +endif + +build/genmatch$(build_exeext) : $(BUILD_CPPLIB) \ + $(BUILD_ERRORS) build/vec.o build/hash-table.o build/sort.o + +# These programs are not linked with the MD reader. +build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o \ + build/gengtype-state.o build/errors.o + +gengtype$(exeext) : gengtype.o gengtype-lex.o gengtype-parse.o \ + gengtype-state.o errors.o $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ + $(filter-out $(LIBDEPS), $^) $(LIBS) + +# Rule for the generator programs: +$(genprog:%=build/gen%$(build_exeext)): build/gen%$(build_exeext): build/gen%.o $(BUILD_LIBDEPS) + +$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) -o $@ \ + $(filter-out $(BUILD_LIBDEPS), $^) $(BUILD_LIBS) + +omp-general.o: omp-device-properties.h + +omp_device_properties = +omp-device-properties.h: s-omp-device-properties-h ; @true +s-omp-device-properties-h: + -rm -f tmp-omp-device-properties.h; \ + for kind in kind arch isa; do \ + echo 'const char omp_offload_device_'$${kind}'[] = ' \ + >> tmp-omp-device-properties.h; \ + for prop in none $(omp_device_properties); do \ + [ "$$prop" = "none" ] && continue; \ + tgt=`echo "$$prop" | sed 's/=.*$$//'`; \ + props=`echo "$$prop" | sed 's/.*=//'`; \ + echo "\"$$tgt\\0\"" >> tmp-omp-device-properties.h; \ + sed -n 's/^'$${kind}': //p' $${props} \ + | sed 's/[[:blank:]]/ /g;s/ */ /g;s/^ //;s/ $$//;s/ /\\0/g;s/^/"/;s/$$/\\0\\0"/' \ + >> tmp-omp-device-properties.h; \ + done; \ + echo '"";' >> tmp-omp-device-properties.h; \ + done; \ + $(SHELL) $(srcdir)/../move-if-change tmp-omp-device-properties.h \ + omp-device-properties.h + $(STAMP) s-omp-device-properties-h + +# Generated source files for gengtype. Prepend inclusion of +# config.h/bconfig.h because AIX requires _LARGE_FILES to be defined before +# any system header is included. +gengtype-lex.cc : gengtype-lex.l + -$(FLEX) $(FLEXFLAGS) -o$@ $< && { \ + echo '#ifdef HOST_GENERATOR_FILE' > $@.tmp; \ + echo '#include "config.h"' >> $@.tmp; \ + echo '#else' >> $@.tmp; \ + echo '#include "bconfig.h"' >> $@.tmp; \ + echo '#endif' >> $@.tmp; \ + cat $@ >> $@.tmp; \ + mv $@.tmp $@; \ + } + +# +# Remake internationalization support. +CFLAGS-intl.o += -DLOCALEDIR=\"$(localedir)\" + +# +# Remake cpp. + +PREPROCESSOR_DEFINES = \ + -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \ + -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \ + -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \ + -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \ + -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \ + -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \ + -DGPLUSPLUS_LIBCXX_INCLUDE_DIR=\"$(gcc_gxx_libcxx_include_dir)\" \ + -DGPLUSPLUS_LIBCXX_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_libcxx_include_dir_add_sysroot) \ + -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \ + -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ + -DNATIVE_SYSTEM_HEADER_DIR=\"$(NATIVE_SYSTEM_HEADER_DIR)\" \ + -DPREFIX=\"$(prefix)/\" \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + + +CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) +cppbuiltin.o: $(BASEVER) + +CFLAGS-cppdefault.o += $(PREPROCESSOR_DEFINES) + +# Note for the stamp targets, we run the program `true' instead of +# having an empty command (nothing following the semicolon). + +# genversion.cc is run on the build machine to generate version.h +CFLAGS-build/genversion.o += -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \ + -DREVISION=$(REVISION_s) \ + -DDEVPHASE=$(DEVPHASE_s) -DPKGVERSION=$(PKGVERSION_s) \ + -DBUGURL=$(BUGURL_s) + +build/genversion.o: genversion.cc $(BCONFIG_H) $(SYSTEM_H) $(srcdir)/DATESTAMP + +build/genversion$(build_exeext): build/genversion.o + +$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) \ + build/genversion.o -o $@ + +version.h: s-version; @true +s-version: build/genversion$(build_exeext) + build/genversion$(build_exeext) > tmp-version.h + $(SHELL) $(srcdir)/../move-if-change tmp-version.h version.h + $(STAMP) s-version + +# gcov.o needs $(ZLIBINC) added to the include flags. +CFLAGS-gcov.o += $(ZLIBINC) + +GCOV_OBJS = gcov.o json.o +gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) \ + hash-table.o ggc-none.o $(LIBS) $(ZLIB) -o $@ +GCOV_DUMP_OBJS = gcov-dump.o +gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) \ + hash-table.o ggc-none.o\ + $(LIBS) -o $@ + +GCOV_TOOL_DEP_FILES = $(srcdir)/../libgcc/libgcov-util.c gcov-io.cc $(GCOV_IO_H) \ + $(srcdir)/../libgcc/libgcov-driver.c $(srcdir)/../libgcc/libgcov-driver-system.c \ + $(srcdir)/../libgcc/libgcov-merge.c $(srcdir)/../libgcc/libgcov.h \ + $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H) version.h intl.h $(DIAGNOSTIC_H) +libgcov-util.o: $(srcdir)/../libgcc/libgcov-util.c $(GCOV_TOOL_DEP_FILES) + +$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -o $@ $< +libgcov-driver-tool.o: $(srcdir)/../libgcc/libgcov-driver.c $(GCOV_TOOL_DEP_FILES) + +$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DIN_GCOV_TOOL=1 -o $@ $< +libgcov-merge-tool.o: $(srcdir)/../libgcc/libgcov-merge.c $(GCOV_TOOL_DEP_FILES) + +$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DIN_GCOV_TOOL=1 -o $@ $< +GCOV_TOOL_OBJS = gcov-tool.o libgcov-util.o libgcov-driver-tool.o libgcov-merge-tool.o +gcov-tool$(exeext): $(GCOV_TOOL_OBJS) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_TOOL_OBJS) $(LIBS) -o $@ +# +# Build the include directories. The stamp files are stmp-* rather than +# s-* so that mostlyclean does not force the include directory to +# be rebuilt. + +# Build the include directories. +stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(T_STDINT_GCC_H) $(USER_H) fixinc_list +# Copy in the headers provided with gcc. +# +# The sed command gets just the last file name component; +# this is necessary because VPATH could add a dirname. +# Using basename would be simpler, but some systems don't have it. +# +# The touch command is here to workaround an AIX/Linux NFS bug. +# +# The move-if-change + cp -p twists for limits.h are intended to preserve +# the time stamp when we regenerate, to prevent pointless rebuilds during +# e.g. install-no-fixedincludes. + -if [ -d include ] ; then true; else mkdir include; chmod a+rx include; fi + -if [ -d include-fixed ] ; then true; else mkdir include-fixed; chmod a+rx include-fixed; fi + for file in .. $(USER_H); do \ + if [ X$$file != X.. ]; then \ + realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ + $(STAMP) include/$$realfile; \ + rm -f include/$$realfile; \ + cp $$file include; \ + chmod a+r include/$$realfile; \ + fi; \ + done + for file in .. $(USER_H_INC_NEXT_PRE); do \ + if [ X$$file != X.. ]; then \ + mv include/$$file include/x_$$file; \ + echo "#include_next <$$file>" >include/$$file; \ + cat include/x_$$file >>include/$$file; \ + rm -f include/x_$$file; \ + chmod a+r include/$$file; \ + fi; \ + done + for file in .. $(USER_H_INC_NEXT_POST); do \ + if [ X$$file != X.. ]; then \ + echo "#include_next <$$file>" >>include/$$file; \ + chmod a+r include/$$file; \ + fi; \ + done + rm -f include/stdint.h + if [ $(USE_GCC_STDINT) = wrap ]; then \ + rm -f include/stdint-gcc.h; \ + cp $(srcdir)/ginclude/stdint-gcc.h include/stdint-gcc.h; \ + chmod a+r include/stdint-gcc.h; \ + cp $(srcdir)/ginclude/stdint-wrap.h include/stdint.h; \ + chmod a+r include/stdint.h; \ + elif [ $(USE_GCC_STDINT) = provide ]; then \ + cp $(T_STDINT_GCC_H) include/stdint.h; \ + chmod a+r include/stdint.h; \ + fi + set -e; for ml in `cat fixinc_list`; do \ + sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \ + multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \ + include_dir=include$${multi_dir}; \ + if $(LIMITS_H_TEST) ; then \ + cat $(srcdir)/limitx.h $(T_GLIMITS_H) $(srcdir)/limity.h > tmp-xlimits.h; \ + else \ + cat $(T_GLIMITS_H) > tmp-xlimits.h; \ + fi; \ + $(mkinstalldirs) $${include_dir}; \ + chmod a+rx $${include_dir} || true; \ + $(SHELL) $(srcdir)/../move-if-change \ + tmp-xlimits.h tmp-limits.h; \ + rm -f $${include_dir}/limits.h; \ + cp -p tmp-limits.h $${include_dir}/limits.h; \ + chmod a+r $${include_dir}/limits.h; \ + cp $(srcdir)/gsyslimits.h $${include_dir}/syslimits.h; \ + done +# Install the README + if [ x$(STMP_FIXINC) != x ]; then \ + rm -f include-fixed/README; \ + cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README; \ + chmod a+r include-fixed/README; \ + fi; + $(STAMP) $@ + +.PHONY: install-gcc-tooldir +install-gcc-tooldir: + $(mkinstalldirs) $(DESTDIR)$(gcc_tooldir) + +macro_list: s-macro_list; @true +s-macro_list : $(GCC_PASSES) cc1$(exeext) + echo | $(GCC_FOR_TARGET) -nostdinc -E -dM - | \ + sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \ + -e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \ + sort -u > tmp-macro_list + $(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list + $(STAMP) s-macro_list + +fixinc_list: s-fixinc_list; @true +s-fixinc_list : $(GCC_PASSES) +# Build up a list of multilib directories and corresponding sysroot +# suffixes, in form sysroot;multilib. + if $(GCC_FOR_TARGET) -print-sysroot-headers-suffix > /dev/null 2>&1; then \ + set -e; for ml in `$(GCC_FOR_TARGET) -print-multi-lib`; do \ + multi_dir=`echo $${ml} | sed -e 's/;.*$$//'`; \ + flags=`echo $${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ + sfx=`$(GCC_FOR_TARGET) $${flags} -print-sysroot-headers-suffix`; \ + if [ "$${multi_dir}" = "." ]; \ + then multi_dir=""; \ + else \ + multi_dir=/$${multi_dir}; \ + fi; \ + echo "$${sfx};$${multi_dir}"; \ + done; \ + else \ + echo ";"; \ + fi > tmp-fixinc_list + $(SHELL) $(srcdir)/../move-if-change tmp-fixinc_list fixinc_list + $(STAMP) s-fixinc_list + +# The line below is supposed to avoid accidentally matching the +# built-in suffix rule `.o:' to build fixincl out of fixincl.o. You'd +# expect fixincl to be newer than fixincl.o, such that this situation +# would never come up. As it turns out, if you use ccache with +# CCACHE_HARDLINK enabled, the compiler doesn't embed the current +# working directory in object files (-g absent, or -fno-working-dir +# present), and build and host are the same, fixincl for the host will +# build after fixincl for the build machine, getting a cache hit, +# thereby updating the timestamp of fixincl.o in the host tree. +# Because of CCACHE_HARDLINK, this will also update the timestamp in +# the build tree, and so fixincl in the build tree will appear to be +# out of date. Yuck. +../$(build_subdir)/fixincludes/fixincl: ; @ : + +# Build fixed copies of system files. +# Abort if no system headers available, unless building a crosscompiler. +# FIXME: abort unless building --without-headers would be more accurate and less ugly +stmp-fixinc: gsyslimits.h macro_list fixinc_list \ + $(build_objdir)/fixincludes/fixincl \ + $(build_objdir)/fixincludes/fixinc.sh + rm -rf include-fixed; mkdir include-fixed + -chmod a+rx include-fixed + if [ -d ../prev-gcc ]; then \ + cd ../prev-gcc && \ + $(MAKE) real-$(INSTALL_HEADERS_DIR) DESTDIR=`pwd`/../gcc/ \ + libsubdir=. ; \ + else \ + set -e; for ml in `cat fixinc_list`; do \ + sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \ + multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \ + fix_dir=include-fixed$${multi_dir}; \ + if ! $(inhibit_libc) && test ! -d ${BUILD_SYSTEM_HEADER_DIR}; then \ + echo "The directory (BUILD_SYSTEM_HEADER_DIR) that should contain system headers does not exist:" >&2 ; \ + echo " ${BUILD_SYSTEM_HEADER_DIR}" >&2 ; \ + case ${build_os} in \ + darwin*) \ + echo "(on Darwin this usually means you need to pass the --with-sysroot= flag to point to a valid MacOS SDK)" >&2; \ + ;; \ + esac; \ + tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \ + if test "x${BUILD_SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \ + then sleep 1; else exit 1; fi; \ + fi; \ + $(mkinstalldirs) $${fix_dir}; \ + chmod a+rx $${fix_dir} || true; \ + (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \ + SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \ + gcc_dir=`${PWD_COMMAND}` ; \ + export TARGET_MACHINE srcdir SHELL MACRO_LIST && \ + cd $(build_objdir)/fixincludes && \ + $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \ + $(BUILD_SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \ + done; \ + fi + $(STAMP) stmp-fixinc +# + +# Install with the gcc headers files, not the fixed include files, which we +# are typically not allowed to distribute. The general idea is to: +# - Get to "install" with a bare set of internal headers, not the +# fixed system ones, +# - Prevent rebuilds of what normally depends on the headers, which is +# useless for installation purposes and would rely on improper headers. +# - Restore as much of the original state as possible. + +.PHONY: install-no-fixedincludes + +install-no-fixedincludes: + # Stash the current set of headers away, save stamps we're going to + # alter explicitly, and arrange for fixincludes not to run next time + # we trigger a headers rebuild. + -rm -rf tmp-include + -mv include tmp-include 2>/dev/null + -mv include-fixed tmp-include-fixed 2>/dev/null + -mv stmp-int-hdrs tmp-stmp-int-hdrs 2>/dev/null + -mv stmp-fixinc tmp-stmp-fixinc 2>/dev/null + -mkdir include + -cp -p $(srcdir)/gsyslimits.h include/syslimits.h + -touch stmp-fixinc + + # Rebuild our internal headers, restore the original stamps so that + # "install" doesn't trigger pointless rebuilds because of that update, + # then do install + $(MAKE) $(FLAGS_TO_PASS) stmp-int-hdrs + -mv tmp-stmp-int-hdrs stmp-int-hdrs 2>/dev/null + -mv tmp-stmp-fixinc stmp-fixinc 2>/dev/null + $(MAKE) $(FLAGS_TO_PASS) install + + # Restore the original set of maybe-fixed headers + -rm -rf include; mv tmp-include include 2>/dev/null + -rm -rf include-fixed; mv tmp-include-fixed include-fixed 2>/dev/null + +# Remake the info files. + +doc: $(BUILD_INFO) $(GENERATED_MANPAGES) + +# If BUILD_INFO is set to no-info by configure, we still want to check +# 'info' dependencies even the build rules are no-ops because +# BUILD_INFO != info (see %.info rule) +ifeq ($(BUILD_INFO),no-info) +no-info: info +endif + +INFOFILES = doc/cpp.info doc/gcc.info doc/gccint.info \ + doc/gccinstall.info doc/cppinternals.info + +info: $(INFOFILES) lang.info # srcinfo lang.srcinfo + +srcinfo: $(INFOFILES) + -cp -p $^ $(srcdir)/doc + +TEXI_CPP_FILES = cpp.texi fdl.texi cppenv.texi cppopts.texi \ + gcc-common.texi gcc-vers.texi + +TEXI_GCC_FILES = gcc.texi gcc-common.texi gcc-vers.texi frontends.texi \ + standards.texi invoke.texi extend.texi md.texi objc.texi \ + gcov.texi trouble.texi bugreport.texi service.texi \ + contribute.texi compat.texi funding.texi gnu.texi gpl_v3.texi \ + fdl.texi contrib.texi cppenv.texi cppopts.texi avr-mmcu.texi \ + implement-c.texi implement-cxx.texi gcov-tool.texi gcov-dump.texi \ + lto-dump.texi + +# we explicitly use $(srcdir)/doc/tm.texi here to avoid confusion with +# the generated tm.texi; the latter might have a more recent timestamp, +# but we don't want to rebuild the info files unless the contents of +# the *.texi files have changed. +TEXI_GCCINT_FILES = gccint.texi gcc-common.texi gcc-vers.texi \ + contribute.texi makefile.texi configterms.texi options.texi \ + portability.texi interface.texi passes.texi rtl.texi md.texi \ + $(srcdir)/doc/tm.texi hostconfig.texi fragments.texi \ + configfiles.texi collect2.texi headerdirs.texi funding.texi \ + gnu.texi gpl_v3.texi fdl.texi contrib.texi languages.texi \ + sourcebuild.texi gty.texi libgcc.texi cfg.texi tree-ssa.texi \ + loop.texi generic.texi gimple.texi plugins.texi optinfo.texi \ + match-and-simplify.texi analyzer.texi ux.texi poly-int.texi + +TEXI_GCCINSTALL_FILES = install.texi fdl.texi \ + gcc-common.texi gcc-vers.texi + +TEXI_CPPINT_FILES = cppinternals.texi gcc-common.texi gcc-vers.texi + +# gcc-vers.texi is generated from the version files. +gcc-vers.texi: $(BASEVER) $(DEVPHASE) + (echo "@set version-GCC $(BASEVER_c)"; \ + if [ "$(DEVPHASE_c)" = "experimental" ]; \ + then echo "@set DEVELOPMENT"; \ + else echo "@clear DEVELOPMENT"; \ + fi) > $@T + $(build_file_translate) echo @set srcdir `echo $(abs_srcdir) | sed -e 's|\\([@{}]\\)|@\\1|g'` >> $@T + if [ -n "$(PKGVERSION)" ]; then \ + echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@T; \ + fi + echo "@set BUGURL $(BUGURL_TEXI)" >> $@T; \ + mv -f $@T $@ + + +# The *.1, *.7, *.info, *.dvi, and *.pdf files are being generated from implicit +# patterns. To use them, put each of the specific targets with its +# specific dependencies but no build commands. + +doc/cpp.info: $(TEXI_CPP_FILES) +doc/gcc.info: $(TEXI_GCC_FILES) +doc/gccint.info: $(TEXI_GCCINT_FILES) +doc/cppinternals.info: $(TEXI_CPPINT_FILES) + +doc/%.info: %.texi + if [ x$(BUILD_INFO) = xinfo ]; then \ + $(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(gcc_docdir) \ + -I $(gcc_docdir)/include -o $@ $<; \ + fi + +# Duplicate entry to handle renaming of gccinstall.info +doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES) + if [ x$(BUILD_INFO) = xinfo ]; then \ + $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \ + -I $(gcc_docdir)/include -o $@ $<; \ + fi + +doc/cpp.dvi: $(TEXI_CPP_FILES) +doc/gcc.dvi: $(TEXI_GCC_FILES) +doc/gccint.dvi: $(TEXI_GCCINT_FILES) +doc/cppinternals.dvi: $(TEXI_CPPINT_FILES) + +doc/cpp.pdf: $(TEXI_CPP_FILES) +doc/gcc.pdf: $(TEXI_GCC_FILES) +doc/gccint.pdf: $(TEXI_GCCINT_FILES) +doc/cppinternals.pdf: $(TEXI_CPPINT_FILES) + +$(build_htmldir)/cpp/index.html: $(TEXI_CPP_FILES) +$(build_htmldir)/gcc/index.html: $(TEXI_GCC_FILES) +$(build_htmldir)/gccint/index.html: $(TEXI_GCCINT_FILES) +$(build_htmldir)/cppinternals/index.html: $(TEXI_CPPINT_FILES) + +DVIFILES = doc/gcc.dvi doc/gccint.dvi doc/gccinstall.dvi doc/cpp.dvi \ + doc/cppinternals.dvi + +dvi:: $(DVIFILES) lang.dvi + +doc/%.dvi: %.texi + $(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +# Duplicate entry to handle renaming of gccinstall.dvi +doc/gccinstall.dvi: $(TEXI_GCCINSTALL_FILES) + $(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +PDFFILES = doc/gcc.pdf doc/gccint.pdf doc/gccinstall.pdf doc/cpp.pdf \ + doc/cppinternals.pdf + +pdf:: $(PDFFILES) lang.pdf + +doc/%.pdf: %.texi + $(TEXI2PDF) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +# Duplicate entry to handle renaming of gccinstall.pdf +doc/gccinstall.pdf: $(TEXI_GCCINSTALL_FILES) + $(TEXI2PDF) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< + +# List the directories or single hmtl files which are installed by +# install-html. The lang.html file triggers language fragments to build +# html documentation. +HTMLS_INSTALL=$(build_htmldir)/cpp $(build_htmldir)/gcc \ + $(build_htmldir)/gccinstall $(build_htmldir)/gccint \ + $(build_htmldir)/cppinternals + +# List the html file targets. +HTMLS_BUILD=$(build_htmldir)/cpp/index.html $(build_htmldir)/gcc/index.html \ + $(build_htmldir)/gccinstall/index.html $(build_htmldir)/gccint/index.html \ + $(build_htmldir)/cppinternals/index.html lang.html + +html:: $(HTMLS_BUILD) + +$(build_htmldir)/%/index.html: %.texi + $(mkinstalldirs) $(@D) + rm -f $(@D)/* + $(TEXI2HTML) $(MAKEINFO_TOC_INLINE_FLAG) \ + -I $(abs_docdir) -I $(abs_docdir)/include -o $(@D) $< + +# Duplicate entry to handle renaming of gccinstall +$(build_htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES) + $(mkinstalldirs) $(@D) + echo rm -f $(@D)/* + SOURCEDIR=$(abs_docdir) \ + DESTDIR=$(@D) \ + $(SHELL) $(srcdir)/doc/install.texi2html + +# Regenerate the .opt.urls files from the generated html, and from the .opt +# files. Doing so requires all languages that have their own HTML manuals +# to be enabled. +.PHONY: regenerate-opt-urls +OPT_URLS_HTML_DEPS = $(build_htmldir)/gcc/Option-Index.html \ + $(build_htmldir)/gdc/Option-Index.html \ + $(build_htmldir)/gfortran/Option-Index.html + +regenerate-opt-urls: $(srcdir)/regenerate-opt-urls.py $(OPT_URLS_HTML_DEPS) + $(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir)) + +# Run the unit tests for regenerate-opt-urls.py +.PHONY: regenerate-opt-urls-unit-test +regenerate-opt-urls-unit-test: $(OPT_URLS_HTML_DEPS) + $(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir)) --unit-test + +MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 \ + doc/fsf-funding.7 doc/gcov-tool.1 doc/gcov-dump.1 \ + $(if $(filter yes,),doc/lto-dump.1) + +generated-manpages: man + +man: $(MANFILES) lang.man # srcman lang.srcman + +srcman: $(MANFILES) + -cp -p $^ $(srcdir)/doc + +doc/%.1: %.pod + $(STAMP) $@ + -($(POD2MAN) --section=1 $< > $(@).T$$$$ && \ + mv -f $(@).T$$$$ $@) || \ + (rm -f $(@).T$$$$ && exit 1) + +doc/%.7: %.pod + $(STAMP) $@ + -($(POD2MAN) --section=7 $< > $(@).T$$$$ && \ + mv -f $(@).T$$$$ $@) || \ + (rm -f $(@).T$$$$ && exit 1) + +%.pod: %.texi + $(STAMP) $@ + -$(TEXI2POD) -DBUGURL="$(BUGURL_TEXI)" $< > $@ + +.INTERMEDIATE: cpp.pod gcc.pod gfdl.pod fsf-funding.pod gpl.pod +cpp.pod: cpp.texi cppenv.texi cppopts.texi + +# These next rules exist because the output name is not the same as +# the input name, so our implicit %.pod rule will not work. + +gcc.pod: invoke.texi cppenv.texi cppopts.texi gcc-vers.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ +gfdl.pod: fdl.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ +fsf-funding.pod: funding.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ +gpl.pod: gpl_v3.texi + $(STAMP) $@ + -$(TEXI2POD) $< > $@ + +# +# Deletion of files made during compilation. +# There are four levels of this: +# `mostlyclean', `clean', `distclean' and `maintainer-clean'. +# `mostlyclean' is useful while working on a particular type of machine. +# It deletes most, but not all, of the files made by compilation. +# It does not delete libgcc.a or its parts, so it won't have to be recompiled. +# `clean' deletes everything made by running `make all'. +# `distclean' also deletes the files made by config. +# `maintainer-clean' also deletes everything that could be regenerated +# automatically, except for `configure'. +# We remove as much from the language subdirectories as we can +# (less duplicated code). + +mostlyclean: lang.mostlyclean + -rm -f $(MOSTLYCLEANFILES) + -rm -f *$(objext) c-family/*$(objext) + -rm -f *$(coverageexts) +# Delete build programs + -rm -f build/* + -rm -f mddeps.mk +# Delete other built files. + -rm -f specs.h options.cc options.h options-save.cc +# Delete the stamp and temporary files. + -rm -f s-* tmp-* stamp-* stmp-* + -rm -f */stamp-* */tmp-* +# Delete debugging dump files. + -rm -f *.[0-9][0-9].* */*.[0-9][0-9].* +# Delete some files made during installation. + -rm -f specs $(SPECS) + -rm -f collect collect2 mips-tfile mips-tdump +# Delete unwanted output files from TeX. + -rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg + -rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg +# Delete sorted indices we don't actually use. + -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns +# Delete core dumps. + -rm -f core */core +# Delete file generated for gengtype + -rm -f gtyp-input.list +# Delete files generated by gengtype + -rm -f gtype-* + -rm -f gt-* + -rm -f gtype.state +# Delete genchecksum outputs + -rm -f *-checksum.cc +# Delete lock-and-run bits + -rm -rf linkfe.lck lock-stamp.* + +# Delete all files made by compilation +# that don't exist in the distribution. +clean: mostlyclean lang.clean + -rm -f libgcc.a libgcc_eh.a libgcov.a + -rm -f libgcc_s* + -rm -f libunwind* + -rm -f config.h tconfig.h bconfig.h tm_p.h tm.h + -rm -f options.cc options.h optionlist + -rm -f cs-* + -rm -f doc/*.dvi + -rm -f doc/*.pdf +# Delete the include directories. + -rm -rf include include-fixed + +# Delete all files that users would normally create +# while building and installing GCC. +distclean: clean lang.distclean + -rm -f auto-host.h auto-build.h + -rm -f cstamp-h + -rm -f config.status config.run config.cache config.bak + -rm -f Make-lang Make-hooks Make-host Make-target + -rm -f Makefile *.oaux + -rm -f gthr-default.h + -rm -f TAGS */TAGS + -rm -f *.asm + -rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak + -rm -f testsuite/*.log testsuite/*.sum + -cd testsuite && rm -f x *.x *.x? *.exe *.rpo *.o *.s *.S *.cc + -cd testsuite && rm -f *.out *.gcov *$(coverageexts) + -rm -f .gdbinit configargs.h + -rm -f gcov.pod +# Delete po/*.gmo only if we are not building in the source directory. + -if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi + -rmdir ada cp f java objc intl po testsuite plugin 2>/dev/null + +# Get rid of every file that's generated from some other file, except for `configure'. +# Most of these files ARE PRESENT in the GCC distribution. +maintainer-clean: + @echo 'This command is intended for maintainers to use; it' + @echo 'deletes files that may need special tools to rebuild.' + $(MAKE) lang.maintainer-clean distclean + -rm -f cpp.??s cpp.*aux + -rm -f gcc.??s gcc.*aux + -rm -f $(gcc_docdir)/*.info $(gcc_docdir)/*.1 $(gcc_docdir)/*.7 $(gcc_docdir)/*.dvi $(gcc_docdir)/*.pdf +# +# Entry points `install', `install-strip', and `uninstall'. +# Also use `install-collect2' to install collect2 when the config files don't. + +# Copy the compiler files into directories where they will be run. +# Install the driver last so that the window when things are +# broken is small. +install: install-common $(INSTALL_HEADERS) \ + install-cpp install-man install-info install-po \ + install-driver install-lto-wrapper install-gcc-ar + +ifeq ($(enable_plugin),yes) +install: install-plugin +endif + +install-strip: override INSTALL_PROGRAM = $(INSTALL_STRIP_PROGRAM) +ifneq ($(STRIP),) +install-strip: STRIPPROG = $(STRIP) +export STRIPPROG +endif +install-strip: install + +# Handle cpp installation. +install-cpp: installdirs cpp$(exeext) + -if test "$(enable_as_accelerator)" != "yes" ; then \ + rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext); \ + if [ x$(cpp_install_dir) != x ]; then \ + rm -f $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \ + else true; fi; \ + fi + +# Create the installation directories. +# $(libdir)/gcc/include isn't currently searched by cpp. +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libsubdir) + $(mkinstalldirs) $(DESTDIR)$(libexecsubdir) + $(mkinstalldirs) $(DESTDIR)$(bindir) + $(mkinstalldirs) $(DESTDIR)$(includedir) + $(mkinstalldirs) $(DESTDIR)$(infodir) + $(mkinstalldirs) $(DESTDIR)$(man1dir) + $(mkinstalldirs) $(DESTDIR)$(man7dir) + +PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ + toplev.h $(DIAGNOSTIC_CORE_H) $(BASIC_BLOCK_H) $(HASH_TABLE_H) \ + tree-ssa-alias.h $(INTERNAL_FN_H) gimple-fold.h tree-eh.h gimple-expr.h \ + gimple.h is-a.h memmodel.h $(TREE_PASS_H) $(GCC_PLUGIN_H) \ + $(GGC_H) $(TREE_DUMP_H) $(PRETTY_PRINT_H) $(OPTS_H) $(PARAMS_H) \ + $(tm_file_list) $(tm_include_list) $(tm_p_file_list) $(tm_p_include_list) \ + $(host_xm_file_list) $(host_xm_include_list) $(xm_include_list) \ + intl.h $(PLUGIN_VERSION_H) $(DIAGNOSTIC_H) ${C_TREE_H} \ + $(C_COMMON_H) c-family/c-objc.h $(C_PRETTY_PRINT_H) \ + tree-iterator.h $(PLUGIN_H) $(TREE_SSA_H) langhooks.h incpath.h debug.h \ + $(EXCEPT_H) tree-ssa-sccvn.h real.h output.h $(IPA_UTILS_H) \ + ipa-param-manipulation.h $(C_PRAGMA_H) $(CPPLIB_H) $(FUNCTION_H) \ + cppdefault.h flags.h $(MD5_H) params.def params.h params-enum.h \ + prefix.h tree-inline.h $(GIMPLE_PRETTY_PRINT_H) realmpfr.h \ + $(IPA_PROP_H) $(TARGET_H) $(RTL_H) $(TM_P_H) $(CFGLOOP_H) $(EMIT_RTL_H) \ + version.h stringpool.h gimplify.h gimple-iterator.h gimple-ssa.h \ + fold-const.h fold-const-call.h tree-cfg.h tree-into-ssa.h tree-ssanames.h \ + print-tree.h varasm.h context.h tree-phinodes.h stor-layout.h \ + ssa-iterators.h $(RESOURCE_H) tree-cfgcleanup.h attribs.h calls.h \ + cfgexpand.h diagnostic-color.h gcc-symtab.h gimple-builder.h gimple-low.h \ + gimple-walk.h gimplify-me.h pass_manager.h print-rtl.h stmt.h \ + tree-dfa.h tree-hasher.h tree-nested.h tree-object-size.h tree-outof-ssa.h \ + tree-parloops.h tree-ssa-address.h tree-ssa-coalesce.h tree-ssa-dom.h \ + tree-ssa-loop.h tree-ssa-loop-ivopts.h tree-ssa-loop-manip.h \ + tree-ssa-loop-niter.h tree-ssa-ter.h tree-ssa-threadedge.h \ + tree-ssa-threadupdate.h inchash.h wide-int.h signop.h hash-map.h \ + hash-set.h dominance.h cfg.h cfgrtl.h cfganal.h cfgbuild.h cfgcleanup.h \ + lcm.h cfgloopmanip.h file-prefix-map.h builtins.def $(INSN_ATTR_H) \ + pass-instances.def params.list $(srcdir)/../include/gomp-constants.h \ + $(EXPR_H) $(srcdir)/analyzer/*.h + +# generate the 'build fragment' b-header-vars +s-header-vars: Makefile + rm -f tmp-header-vars +# The first sed gets the list "header variables" as the list variables +# assigned in Makefile and having _H at the end of the name. "sed -n" proved +# more portable than a trailing "-e d" to filter out the uninteresting lines, +# in particular on ia64-hpux where "s/.../p" only prints if -n was requested +# as well. + $(foreach header_var,$(shell sed < Makefile -n -e 's/^\([A-Z0-9_]*_H\)[ ]*=.*/\1/p'),echo $(header_var)=$(shell echo $($(header_var):$(srcdir)/%=.../%) | sed -e 's~\.\.\./config/~config/~' -e 's~\.\.\./common/config/~common/config/~' -e 's~\.\.\.[^ ]*/~~g') >> tmp-header-vars;) + $(SHELL) $(srcdir)/../move-if-change tmp-header-vars b-header-vars + $(STAMP) s-header-vars + +# Install gengtype +install-gengtype: installdirs gengtype$(exeext) gtype.state + $(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir) + $(INSTALL_DATA) gtype.state $(DESTDIR)$(plugin_resourcesdir)/gtype.state + $(mkinstalldirs) $(DESTDIR)$(plugin_bindir) + $(INSTALL_PROGRAM) gengtype$(exeext) $(DESTDIR)$(plugin_bindir)/gengtype$(exeext) + +# Install the headers needed to build a plugin. +install-plugin: installdirs lang.install-plugin s-header-vars install-gengtype +# We keep the directory structure for files in analyzer, config, common/config +# or c-family and .def files. +# All other files are flattened to a single directory. + $(mkinstalldirs) $(DESTDIR)$(plugin_includedir) + headers=`echo $(sort $(PLUGIN_HEADERS)) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \ + for file in $$headers; do \ + if [ -f $$file ] ; then \ + path=$$file; \ + elif [ -f $(srcdir)/$$file ]; then \ + path=$(srcdir)/$$file; \ + else continue; \ + fi; \ + case $$path in \ + "$(srcdir)"/analyzer/* \ + | "$(srcdir)"/config/* | "$(srcdir)"/common/config/* \ + | "$(srcdir)"/c-family/* | "$(srcdir)"/*.def ) \ + base=`echo "$$path" | sed -e "s|$$srcdirstrip/||"`;; \ + *) base=`basename $$path` ;; \ + esac; \ + dest=$(plugin_includedir)/$$base; \ + echo $(INSTALL_DATA) $$path $(DESTDIR)$$dest; \ + dir=`dirname $$dest`; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + $(INSTALL_DATA) $$path $(DESTDIR)$$dest; \ + done + $(INSTALL_DATA) b-header-vars $(DESTDIR)$(plugin_includedir)/b-header-vars + +# Install the compiler executables built during cross compilation. +install-common: native lang.install-common installdirs + for file in $(COMPILERS); do \ + if [ -f $$file ] ; then \ + rm -f $(DESTDIR)$(libexecsubdir)/$$file; \ + $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \ + else true; \ + fi; \ + done + for file in $(EXTRA_PROGRAMS) $(COLLECT2) ..; do \ + if [ x"$$file" != x.. ]; then \ + rm -f $(DESTDIR)$(libexecsubdir)/$$file; \ + $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \ + else true; fi; \ + done +# We no longer install the specs file because its presence makes the +# driver slower, and because people who need it can recreate it by +# using -dumpspecs. We remove any old version because it would +# otherwise override the specs built into the driver. + rm -f $(DESTDIR)$(libsubdir)/specs +# Install gcov if it was compiled. + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ -f gcov$(exeext) ]; \ + then \ + rm -f $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) gcov$(exeext) $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \ + fi; \ + fi +# Install gcov-tool if it was compiled. + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ -f gcov-tool$(exeext) ]; \ + then \ + rm -f $(DESTDIR)$(bindir)/$(GCOV_TOOL_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) \ + gcov-tool$(exeext) $(DESTDIR)$(bindir)/$(GCOV_TOOL_INSTALL_NAME)$(exeext); \ + fi; \ + fi +# Install gcov-dump if it was compiled. + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ -f gcov-dump$(exeext) ]; \ + then \ + rm -f $(DESTDIR)$(bindir)/$(GCOV_DUMP_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) \ + gcov-dump$(exeext) $(DESTDIR)$(bindir)/$(GCOV_DUMP_INSTALL_NAME)$(exeext); \ + fi; \ + fi + +# Install the driver program as $(target_noncanonical)-gcc, +# $(target_noncanonical)-gcc-$(version), and also as gcc if native. +install-driver: installdirs xgcc$(exeext) + -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) + -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) + -if test "$(enable_as_accelerator)" != "yes" ; then \ + if [ "$(GCC_INSTALL_NAME)" != "$(target_noncanonical)-gcc-$(version)" ]; then \ + rm -f $(DESTDIR)$(bindir)/$(FULL_DRIVER_NAME); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GCC_INSTALL_NAME)$(exeext) $(FULL_DRIVER_NAME) ); \ + fi; \ + if [ ! -f gcc-cross$(exeext) ] \ + && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \ + rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-tmp$(exeext) && \ + mv -f $(target_noncanonical)-gcc-tmp$(exeext) $(GCC_TARGET_INSTALL_NAME)$(exeext) ); \ + fi; \ + fi + +# Install the info files. +# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir +# to do the install. +install-info:: doc installdirs \ + $(DESTDIR)$(infodir)/cpp.info \ + $(DESTDIR)$(infodir)/gcc.info \ + $(DESTDIR)$(infodir)/cppinternals.info \ + $(DESTDIR)$(infodir)/gccinstall.info \ + $(DESTDIR)$(infodir)/gccint.info \ + lang.install-info + +$(DESTDIR)$(infodir)/%.info: doc/%.info installdirs + rm -f $@ + if [ -f $< ]; then \ + for f in $(<)*; do \ + realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ + $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$realfile; \ + chmod a-x $(DESTDIR)$(infodir)/$$realfile; \ + done; \ + else true; fi + -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + if [ -f $@ ]; then \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir $@; \ + else true; fi; \ + else true; fi; + +dvi__strip_dir = `echo $$p | sed -e 's|^.*/||'`; + +install-dvi: $(DVIFILES) lang.install-dvi + @$(NORMAL_INSTALL) + test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc" + @list='$(DVIFILES)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(dvi__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \ + done + +pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`; + +install-pdf: $(PDFFILES) lang.install-pdf + @$(NORMAL_INSTALL) + test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc" + @list='$(PDFFILES)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(pdf__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \ + done + +html__strip_dir = `echo $$p | sed -e 's|^.*/||'`; + +install-html: $(HTMLS_BUILD) lang.install-html + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS_INSTALL)'; for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ + f=$(html__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + else \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + fi; \ + done + +# Install the man pages. +install-man: lang.install-man \ + $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(GCOV_TOOL_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man1dir)/$(GCOV_DUMP_INSTALL_NAME)$(man1ext) \ + $(if $(filter yes,),$(DESTDIR)$(man1dir)/$(LTO_DUMP_INSTALL_NAME)$(man1ext)) \ + $(DESTDIR)$(man7dir)/fsf-funding$(man7ext) \ + $(DESTDIR)$(man7dir)/gfdl$(man7ext) \ + $(DESTDIR)$(man7dir)/gpl$(man7ext) + +$(DESTDIR)$(man7dir)/%$(man7ext): doc/%.7 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext): doc/gcc.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext): doc/cpp.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext): doc/gcov.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCOV_TOOL_INSTALL_NAME)$(man1ext): doc/gcov-tool.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(GCOV_DUMP_INSTALL_NAME)$(man1ext): doc/gcov-dump.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +$(DESTDIR)$(man1dir)/$(LTO_DUMP_INSTALL_NAME)$(man1ext): doc/lto-dump.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +# Install all the header files built in the include subdirectory. +install-headers: $(INSTALL_HEADERS_DIR) +# Fix symlinks to absolute paths in the installed include directory to +# point to the installed directory, not the build directory. +# Don't need to use LN_S here since we really do need ln -s and no substitutes. + -files=`cd $(DESTDIR)$(libsubdir)/include-fixed; find . -type l -print 2>/dev/null`; \ + if [ $$? -eq 0 ]; then \ + dir=`cd include-fixed; ${PWD_COMMAND}`; \ + for i in $$files; do \ + dest=`ls -ld $(DESTDIR)$(libsubdir)/include-fixed/$$i | sed -n 's/.*-> //p'`; \ + if expr "$$dest" : "$$dir.*" > /dev/null; then \ + rm -f $(DESTDIR)$(libsubdir)/include-fixed/$$i; \ + ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(DESTDIR)$(libsubdir)/include-fixed/$$i; \ + fi; \ + done; \ + fi + +# Create or recreate the gcc private include file directory. +install-include-dir: installdirs + $(mkinstalldirs) $(DESTDIR)$(libsubdir)/include + -rm -rf $(DESTDIR)$(libsubdir)/include-fixed + mkdir $(DESTDIR)$(libsubdir)/include-fixed + -chmod a+rx $(DESTDIR)$(libsubdir)/include-fixed + +# Create or recreate the install-tools include file directory. +itoolsdir = $(libexecsubdir)/install-tools +itoolsdatadir = $(libsubdir)/install-tools +install-itoolsdirs: installdirs + $(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include + $(mkinstalldirs) $(DESTDIR)$(itoolsdir) + +# Install the include directory using tar. +install-headers-tar: stmp-int-hdrs install-include-dir +# We use `pwd`/include instead of just include to problems with CDPATH +# Unless a full pathname is provided, some shells would print the new CWD, +# found in CDPATH, corrupting the output. We could just redirect the +# output of `cd', but some shells lose on redirection within `()'s + (cd `${PWD_COMMAND}`/include ; \ + tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include; tar xpf - ) + (cd `${PWD_COMMAND}`/include-fixed ; \ + tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include-fixed; tar xpf - ) +# /bin/sh on some systems returns the status of the first tar, +# and that can lose with GNU tar which always writes a full block. +# So use `exit 0' to ignore its exit status. + +# Install the include directory using cpio. +install-headers-cpio: stmp-int-hdrs install-include-dir +# See discussion about the use of `pwd` above + cd `${PWD_COMMAND}`/include ; \ + find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include + cd `${PWD_COMMAND}`/include-fixed ; \ + find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include-fixed + +# Install the include directory using cp. +install-headers-cp: stmp-int-hdrs install-include-dir + cp -p -r include $(DESTDIR)$(libsubdir) + cp -p -r include-fixed $(DESTDIR)$(libsubdir) + +# Targets without dependencies, for use in prev-gcc during bootstrap. +real-install-headers-tar: + (cd `${PWD_COMMAND}`/include-fixed ; \ + tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include-fixed; tar xpf - ) + +real-install-headers-cpio: + cd `${PWD_COMMAND}`/include-fixed ; \ + find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include-fixed + +real-install-headers-cp: + cp -p -r include-fixed $(DESTDIR)$(libsubdir) + +# Install supporting files for fixincludes to be run later. +install-mkheaders: stmp-int-hdrs install-itoolsdirs \ + macro_list fixinc_list + $(INSTALL_DATA) $(srcdir)/gsyslimits.h \ + $(DESTDIR)$(itoolsdatadir)/gsyslimits.h + $(INSTALL_DATA) macro_list $(DESTDIR)$(itoolsdatadir)/macro_list + $(INSTALL_DATA) fixinc_list $(DESTDIR)$(itoolsdatadir)/fixinc_list + set -e; for ml in `cat fixinc_list`; do \ + multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \ + $(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}; \ + $(INSTALL_DATA) include$${multi_dir}/limits.h $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}/limits.h; \ + done + $(INSTALL_SCRIPT) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(itoolsdir)/mkinstalldirs ; \ + sysroot_headers_suffix='$${sysroot_headers_suffix}'; \ + echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \ + > $(DESTDIR)$(itoolsdatadir)/mkheaders.conf + echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \ + >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf + echo 'STMP_FIXINC="$(STMP_FIXINC)"' \ + >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf + +# Use this target to install the program `collect2' under the name `collect2'. +install-collect2: collect2 installdirs + $(INSTALL_PROGRAM) collect2$(exeext) $(DESTDIR)$(libexecsubdir)/collect2$(exeext) +# Install the driver program as $(libsubdir)/gcc for collect2. + $(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(libexecsubdir)/gcc$(exeext) + +# Install lto-wrapper. +install-lto-wrapper: lto-wrapper$(exeext) + $(INSTALL_PROGRAM) lto-wrapper$(exeext) $(DESTDIR)$(libexecsubdir)/lto-wrapper$(exeext) + +install-gcc-ar: installdirs gcc-ar$(exeext) gcc-nm$(exeext) gcc-ranlib$(exeext) + if test "$(enable_as_accelerator)" != "yes" ; then \ + for i in gcc-ar gcc-nm gcc-ranlib; do \ + install_name=`echo $$i|sed '$(program_transform_name)'` ;\ + target_install_name=$(target_noncanonical)-`echo $$i|sed '$(program_transform_name)'` ; \ + rm -f $(DESTDIR)$(bindir)/$$install_name$(exeext) ; \ + $(INSTALL_PROGRAM) $$i$(exeext) $(DESTDIR)$(bindir)/$$install_name$(exeext) ;\ + if test -f gcc-cross$(exeext); then \ + :; \ + else \ + rm -f $(DESTDIR)$(bindir)/$$target_install_name$(exeext); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $$install_name$(exeext) $$target_install_name$(exeext) ) ; \ + fi ; \ + done; \ + fi + +# Cancel installation by deleting the installed files. +uninstall: lang.uninstall + -rm -rf $(DESTDIR)$(libsubdir) + -rm -rf $(DESTDIR)$(libexecsubdir) + -rm -rf $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) + -rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext) + -if [ x$(cpp_install_dir) != x ]; then \ + rm -f $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \ + else true; fi + -rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext) + -rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) + -rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext) + -rm -f $(DESTDIR)$(infodir)/cpp.info* $(DESTDIR)$(infodir)/gcc.info* + -rm -f $(DESTDIR)$(infodir)/cppinternals.info* $(DESTDIR)$(infodir)/gccint.info* + for i in ar nm ranlib ; do \ + install_name=`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ;\ + target_install_name=$(target_noncanonical)-`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ; \ + rm -f $(DESTDIR)$(bindir)/$$install_name ; \ + rm -f $(DESTDIR)$(bindir)/$$target_install_name ; \ + done +# +# These targets are for the dejagnu testsuites. The file site.exp +# contains global variables that all the testsuites will use. + +target_subdir = x86_64-pc-linux-gnu + +site.exp: ./config.status Makefile + @echo "Making a new config file..." + -@rm -f ./site.tmp + @$(STAMP) site.exp + -@mv site.exp site.bak + @echo "## these variables are automatically generated by make ##" > ./site.tmp + @echo "# Do not edit here. If you wish to override these values" >> ./site.tmp + @echo "# add them to the last section" >> ./site.tmp + @echo "set rootme \"`${PWD_COMMAND}`\"" >> ./site.tmp + @echo "set srcdir \"`cd ${srcdir}; ${PWD_COMMAND}`\"" >> ./site.tmp + @echo "set host_triplet $(host)" >> ./site.tmp + @echo "set build_triplet $(build)" >> ./site.tmp + @echo "set target_triplet $(target)" >> ./site.tmp + @echo "set target_alias $(target_noncanonical)" >> ./site.tmp + @echo "set libiconv \"$(LIBICONV)\"" >> ./site.tmp +# CFLAGS is set even though it's empty to show we reserve the right to set it. + @echo "set CFLAGS \"\"" >> ./site.tmp + @echo "set CXXFLAGS \"\"" >> ./site.tmp + @echo "set HOSTCC \"$(CC)\"" >> ./site.tmp + @echo "set HOSTCXX \"$(CXX)\"" >> ./site.tmp + @echo "set HOSTCFLAGS \"$(CFLAGS)\"" >> ./site.tmp + @echo "set HOSTCXXFLAGS \"$(CXXFLAGS)\"" >> ./site.tmp +# TEST_ALWAYS_FLAGS are flags that should be passed to every compilation. +# They are passed first to allow individual tests to override them. + @echo "set TEST_ALWAYS_FLAGS \"$(SYSROOT_CFLAGS_FOR_TARGET)\"" >> ./site.tmp +# When running the tests we set GCC_EXEC_PREFIX to the install tree so that +# files that have already been installed there will be found. The -B option +# overrides it, so use of GCC_EXEC_PREFIX will not result in using GCC files +# from the install tree. + @echo "set TEST_GCC_EXEC_PREFIX \"$(libdir)/gcc/\"" >> ./site.tmp + @echo "set TESTING_IN_BUILD_TREE 1" >> ./site.tmp + @echo "set HAVE_LIBSTDCXX_V3 1" >> ./site.tmp + @if test "no" = "yes" ; then \ + echo "set ENABLE_PLUGIN 1" >> ./site.tmp; \ + echo "set PLUGINCC \"$(PLUGINCC)\"" >> ./site.tmp; \ + echo "set PLUGINCFLAGS \"$(PLUGINCFLAGS)\"" >> ./site.tmp; \ + echo "set GMPINC \"$(GMPINC)\"" >> ./site.tmp; \ + fi +# If newlib has been configured, we need to pass -B to gcc so it can find +# newlib's crt0.o if it exists. This will cause a "path prefix not used" +# message if it doesn't, but the testsuite is supposed to ignore the message - +# it's too difficult to tell when to and when not to pass -B (not all targets +# have crt0's). We could only add the -B if ../newlib/crt0.o exists, but that +# seems like too selective a test. +# ??? Another way to solve this might be to rely on linker scripts. Then +# theoretically the -B won't be needed. +# We also need to pass -L ../ld so that the linker can find ldscripts. + @if [ -d $(objdir)/../$(target_subdir)/newlib ] \ + && [ "${host}" != "${target}" ]; then \ + echo "set newlib_cflags \"-I$(objdir)/../$(target_subdir)/newlib/targ-include -I\$$srcdir/../newlib/libc/include\"" >> ./site.tmp; \ + echo "set newlib_ldflags \"-B$(objdir)/../$(target_subdir)/newlib/\"" >> ./site.tmp; \ + echo "append CFLAGS \" \$$newlib_cflags\"" >> ./site.tmp; \ + echo "append CXXFLAGS \" \$$newlib_cflags\"" >> ./site.tmp; \ + echo "append LDFLAGS \" \$$newlib_ldflags\"" >> ./site.tmp; \ + else true; \ + fi + @if [ -d $(objdir)/../ld ] ; then \ + echo "append LDFLAGS \" -L$(objdir)/../ld\"" >> ./site.tmp; \ + else true; \ + fi + echo "set tmpdir $(objdir)/testsuite" >> ./site.tmp + @echo "set srcdir \"\$${srcdir}/testsuite\"" >> ./site.tmp + @if [ "X$(ALT_CC_UNDER_TEST)" != "X" ] ; then \ + echo "set ALT_CC_UNDER_TEST \"$(ALT_CC_UNDER_TEST)\"" >> ./site.tmp; \ + else true; \ + fi + @if [ "X$(ALT_CXX_UNDER_TEST)" != "X" ] ; then \ + echo "set ALT_CXX_UNDER_TEST \"$(ALT_CXX_UNDER_TEST)\"" >> ./site.tmp; \ + else true; \ + fi + @if [ "X$(COMPAT_OPTIONS)" != "X" ] ; then \ + echo "set COMPAT_OPTIONS \"$(COMPAT_OPTIONS)\"" >> ./site.tmp; \ + else true; \ + fi + @if test "X#" != "X#" ; then \ + echo "set ENABLE_DARWIN_AT_RPATH 1" >> ./site.tmp; \ + fi + @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./site.tmp + @cat ./site.tmp > site.exp + @cat site.bak | sed \ + -e '1,/^## All variables above are.*##/ d' >> site.exp + -@rm -f ./site.tmp + +CHECK_TARGETS = check-c + +check: $(CHECK_TARGETS) + +check-subtargets: $(patsubst %,%-subtargets,$(CHECK_TARGETS)) + +# The idea is to parallelize testing of multilibs, for example: +# make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu} +# will run 3 concurrent sessions of check-gcc, eventually testing +# all 10 combinations. GNU make is required, as is a shell that expands +# alternations within braces. +lang_checks_parallel = $(lang_checks:=//%) +$(lang_checks_parallel): site.exp + target=`echo "$@" | sed 's,//.*,,'`; \ + variant=`echo "$@" | sed 's,^[^/]*//,,'`; \ + vardots=`echo "$$variant" | sed 's,/,.,g'`; \ + $(MAKE) TESTSUITEDIR="testsuite.$$vardots" \ + RUNTESTFLAGS="--target_board=$$variant $(RUNTESTFLAGS)" \ + EXPECT=$(EXPECT) \ + "$$target" + +TESTSUITEDIR = testsuite + +$(TESTSUITEDIR)/site.exp: site.exp + -test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) + -rm -f $@ + sed '/set tmpdir/ s|testsuite$$|$(TESTSUITEDIR)|' < site.exp > $@ + +# This is only used for check-% targets that aren't parallelized. +$(filter-out $(lang_checks_parallelized),$(lang_checks)): check-% : site.exp + -test -d plugin || mkdir plugin + -test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) + test -d $(TESTSUITEDIR)/$* || mkdir $(TESTSUITEDIR)/$* + -(rootme=`${PWD_COMMAND}`; export rootme; \ + srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \ + cd $(TESTSUITEDIR)/$*; \ + rm -f tmp-site.exp; \ + sed '/set tmpdir/ s|testsuite$$|$(TESTSUITEDIR)/$*|' \ + < ../../site.exp > tmp-site.exp; \ + $(SHELL) $${srcdir}/../move-if-change tmp-site.exp site.exp; \ + EXPECT=${EXPECT} ; export EXPECT ; \ + if [ -f $${rootme}/../expect/expect ] ; then \ + TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ + export TCL_LIBRARY ; fi ; \ + $(RUNTEST) --tool $* $(RUNTESTFLAGS)) + +$(patsubst %,%-subtargets,$(lang_checks)): check-%-subtargets: + @echo check-$* + +check_p_tool=$(firstword $(subst _, ,$*)) +check_p_count=$(check_$(check_p_tool)_parallelize) +check_p_subno=$(word 2,$(subst _, ,$*)) +check_p_subdir=$(subst _,,$*) +check_p_subdirs=$(wordlist 1,$(check_p_count),$(wordlist 1, \ + $(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),128), \ + $(one_to_9999))) + +# For parallelized check-% targets, this decides whether parallelization +# is desirable (if -jN is used). If desirable, recursive make is run with +# check-parallel-$lang{,1,2,3,4,5} etc. goals, which can be executed in +# parallel, as they are run in separate directories. +# check-parallel-$lang{,1,2,3,4,5} etc. goals invoke runtest with +# GCC_RUNTEST_PARALLELIZE_DIR var in the environment and runtest_file_p +# dejaGNU procedure is overridden to additionally synchronize through +# a $lang-parallel directory which tests will be run by which runtest instance. +# Afterwards contrib/dg-extract-results.sh is used to merge the sum and log +# files. If parallelization isn't desirable, only one recursive make +# is run with check-parallel-$lang goal and check_$lang_parallelize variable +# cleared to say that no additional arguments beyond $(RUNTESTFLAGS) +# should be passed to runtest. +# +# To parallelize some language check, add the corresponding check-$lang +# to lang_checks_parallelized variable and define check_$lang_parallelize +# variable. This is the upper limit to which it is useful to parallelize the +# check-$lang target. It doesn't make sense to try e.g. 128 goals for small +# testsuites like objc or go. +$(lang_checks_parallelized): check-% : site.exp + -rm -rf $(TESTSUITEDIR)/$*-parallel + @if [ -n "$(filter -j%, $(MFLAGS))" ]; then \ + test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) || true; \ + test -d $(TESTSUITEDIR)/$*-parallel || mkdir $(TESTSUITEDIR)/$*-parallel || true; \ + GCC_RUNTEST_PARALLELIZE_DIR=`${PWD_COMMAND}`/$(TESTSUITEDIR)/$(check_p_tool)-parallel ; \ + export GCC_RUNTEST_PARALLELIZE_DIR ; \ + $(MAKE) TESTSUITEDIR="$(TESTSUITEDIR)" RUNTESTFLAGS="$(RUNTESTFLAGS)" \ + EXPECT=$(EXPECT) \ + check-parallel-$* \ + $(patsubst %,check-parallel-$*_%, $(check_p_subdirs)); \ + sums= ; logs= ; \ + for dir in $(TESTSUITEDIR)/$* \ + $(patsubst %,$(TESTSUITEDIR)/$*%,$(check_p_subdirs));\ + do \ + if [ -d $$dir ]; then \ + mv -f $$dir/$*.sum $$dir/$*.sum.sep; mv -f $$dir/$*.log $$dir/$*.log.sep; \ + sums="$$sums $$dir/$*.sum.sep"; logs="$$logs $$dir/$*.log.sep"; \ + fi; \ + done; \ + $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh $$sums \ + > $(TESTSUITEDIR)/$*/$*.sum; \ + $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh -L $$logs \ + > $(TESTSUITEDIR)/$*/$*.log; \ + rm -rf $(TESTSUITEDIR)/$*-parallel || true; \ + else \ + $(MAKE) TESTSUITEDIR="$(TESTSUITEDIR)" RUNTESTFLAGS="$(RUNTESTFLAGS)" \ + EXPECT=$(EXPECT) \ + check_$*_parallelize= check-parallel-$*; \ + fi + +check-parallel-% : site.exp + -@test -d plugin || mkdir plugin + -@test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR) + @test -d $(TESTSUITEDIR)/$(check_p_subdir) || mkdir $(TESTSUITEDIR)/$(check_p_subdir) + -$(if $(check_p_subno),@)(rootme=`${PWD_COMMAND}`; export rootme; \ + srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \ + if [ -n "$(check_p_subno)" ] \ + && [ -n "$$GCC_RUNTEST_PARALLELIZE_DIR" ] \ + && [ -f $(TESTSUITEDIR)/$(check_p_tool)-parallel/finished ]; then \ + rm -rf $(TESTSUITEDIR)/$(check_p_subdir); \ + else \ + cd $(TESTSUITEDIR)/$(check_p_subdir); \ + rm -f tmp-site.exp; \ + sed '/set tmpdir/ s|testsuite$$|$(TESTSUITEDIR)/$(check_p_subdir)|' \ + < ../../site.exp > tmp-site.exp; \ + $(SHELL) $${srcdir}/../move-if-change tmp-site.exp site.exp; \ + EXPECT=${EXPECT} ; export EXPECT ; \ + if [ -f $${rootme}/../expect/expect ] ; then \ + TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ + export TCL_LIBRARY ; \ + fi ; \ + $(RUNTEST) --tool $(check_p_tool) $(RUNTESTFLAGS); \ + if [ -n "$$GCC_RUNTEST_PARALLELIZE_DIR" ] ; then \ + touch $${rootme}/$(TESTSUITEDIR)/$(check_p_tool)-parallel/finished; \ + fi ; \ + fi ) + +# Run Paranoia on real.cc. + +paranoia.o: $(srcdir)/../contrib/paranoia.cc $(CONFIG_H) $(SYSTEM_H) $(TREE_H) + g++ -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION) + +paranoia: paranoia.o real.o $(LIBIBERTY) + g++ -o $@ paranoia.o real.o $(LIBIBERTY) + +# These exist for maintenance purposes. + +CTAGS=ctags +ETAGS=etags +CSCOPE=cscope + +# Update the tags table. +TAGS: lang.tags + (cd $(srcdir); \ + incs= ; \ + list='$(SUBDIRS)'; for dir in $$list; do \ + if test -f $$dir/TAGS; then \ + incs="$$incs --include $$dir/TAGS.sub"; \ + fi; \ + done; \ + $(ETAGS) -o TAGS.sub c-family/*.h c-family/*.cc \ + *.h *.cc \ + ../include/*.h ../libiberty/*.c \ + ../libcpp/*.cc ../libcpp/include/*.h \ + --language=none --regex="/\(char\|unsigned int\|int\|bool\|void\|HOST_WIDE_INT\|enum [A-Za-z_0-9]+\) [*]?\([A-Za-z_0-9]+\)/\2/" common.opt \ + --language=none --regex="/\(DEF_RTL_EXPR\|DEFTREECODE\|DEFGSCODE\|DEFTIMEVAR\|DEFPARAM\|DEFPARAMENUM5\)[ ]?(\([A-Za-z_0-9]+\)/\2/" rtl.def tree.def gimple.def timevar.def \ + ; \ + $(ETAGS) --include TAGS.sub $$incs) + +# ----------------------------------------------------- +# Rules for generating translated message descriptions. +# Disabled by autoconf if the tools are not available. +# ----------------------------------------------------- + +XGETTEXT = /usr/bin/xgettext +GMSGFMT = /usr/bin/msgfmt +MSGMERGE = msgmerge +CATALOGS = $(patsubst %,po/%, be.gmo da.gmo de.gmo el.gmo es.gmo fi.gmo fr.gmo hr.gmo id.gmo ja.gmo nl.gmo ru.gmo sr.gmo sv.gmo tr.gmo uk.gmo vi.gmo zh_CN.gmo zh_TW.gmo) + +.PHONY: build- install- build-po install-po update-po + +# Dummy rules to deal with dependencies produced by use of +# "build-po" and "install-po" above, when NLS is disabled. +build-: ; @true +install-: ; @true + +build-po: $(CATALOGS) + +# This notation should be acceptable to all Make implementations used +# by people who are interested in updating .po files. +update-po: $(CATALOGS:.gmo=.pox) + +# N.B. We do not attempt to copy these into $(srcdir). The snapshot +# script does that. +.po.gmo: + $(mkinstalldirs) po + $(GMSGFMT) --statistics -o $@ $< + +# The new .po has to be gone over by hand, so we deposit it into +# build/po with a different extension. +# If build/po/gcc.pot exists, use it (it was just created), +# else use the one in srcdir. +.po.pox: + $(mkinstalldirs) po + $(MSGMERGE) $< `if test -f po/gcc.pot; \ + then echo po/gcc.pot; \ + else echo $(srcdir)/po/gcc.pot; fi` -o $@ + +# This rule has to look for .gmo modules in both srcdir and +# the cwd, and has to check that we actually have a catalog +# for each language, in case they weren't built or included +# with the distribution. +install-po: + $(mkinstalldirs) $(DESTDIR)$(datadir) + cats="$(CATALOGS)"; for cat in $$cats; do \ + lang=`basename $$cat | sed 's/\.gmo$$//'`; \ + if [ -f $$cat ]; then :; \ + elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \ + else continue; \ + fi; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + echo $(mkinstalldirs) $(DESTDIR)$$dir; \ + $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \ + echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \ + $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \ + done + +# Rule for regenerating the message template (gcc.pot). +# Instead of forcing everyone to edit POTFILES.in, which proved impractical, +# this rule has no dependencies and always regenerates gcc.pot. This is +# relatively harmless since the .po files do not directly depend on it. +# Note that exgettext has an awk script embedded in it which requires a +# fairly modern (POSIX-compliant) awk. +# The .pot file is left in the build directory. +gcc.pot: po/gcc.pot +po/gcc.pot: force + $(mkinstalldirs) po + $(MAKE) srcextra + AWK=$(AWK) $(SHELL) $(srcdir)/po/exgettext \ + $(XGETTEXT) gcc $(srcdir) + +# + +# Dependency information. + +# In order for parallel make to really start compiling the expensive +# objects from $(OBJS) as early as possible, build all their +# prerequisites strictly before all objects. +$(ALL_HOST_OBJS) : | $(generated_files) + +# Include the auto-generated dependencies for all host objects. +DEPFILES = \ + $(foreach obj,$(ALL_HOST_OBJS),\ + $(dir $(obj))$(DEPDIR)/$(patsubst %.o,%.Po,$(notdir $(obj)))) +-include $(DEPFILES) diff --git a/gcc/ada/Makefile b/gcc/ada/Makefile new file mode 100644 index 0000000000000..5300110481a71 --- /dev/null +++ b/gcc/ada/Makefile @@ -0,0 +1,5 @@ +# All makefile fragments assume that $(srcdir) points to the gcc +# directory, not the language subdir +srcdir = .. +-include ./gcc-interface/Makefile +-include ../gcc-interface/Makefile diff --git a/gcc/ada/gcc-interface/Makefile b/gcc/ada/gcc-interface/Makefile new file mode 100644 index 0000000000000..d2c946b522180 --- /dev/null +++ b/gcc/ada/gcc-interface/Makefile @@ -0,0 +1,978 @@ +# Makefile for GNU Ada Compiler (GNAT). +# Copyright (C) 1994-2024 Free Software Foundation, Inc. + +#This file is part of GCC. + +#GCC is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3, or (at your option) +#any later version. + +#GCC is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. + +#You should have received a copy of the GNU General Public License +#along with GCC; see the file COPYING3. If not see +#. + +# The makefile built from this file lives in the language subdirectory. +# Its purpose is to provide support for: +# +# 1) recursion where necessary, and only then (building .o's), and +# 2) building and debugging cc1 from the language subdirectory, and +# 3) nothing else. +# +# The parent makefile handles all other chores, with help from the +# language makefile fragment, of course. +# +# The targets for external use are: +# all, TAGS, ???mostlyclean, ???clean. + +# This makefile will only work with Gnu make. +# The rules are written assuming a minimum subset of tools are available: +# +# Required: +# MAKE: Only Gnu make will work. +# MV: Must accept (at least) one, maybe wildcard, source argument, +# a file or directory destination, and support creation/ +# modification date preservation. Gnu mv -f works. +# RM: Must accept an arbitrary number of space separated file +# arguments, or one wildcard argument. Gnu rm works. +# RMDIR: Must delete a directory and all its contents. Gnu rm -rf works. +# ECHO: Must support command line redirection. Any Unix-like +# shell will typically provide this, otherwise a custom version +# is trivial to write. +# AR: Gnu ar works. +# MKDIR: Gnu mkdir works. +# CHMOD: Gnu chmod works. +# true: Does nothing and returns a normal successful return code. +# pwd: Prints the current directory on stdout. +# cd: Change directory. +# +# Optional: +# BISON: Gnu bison works. +# FLEX: Gnu flex works. +# Other miscellaneous tools for obscure targets. + +# Suppress smart makes who think they know how to automake Yacc files +.y.c: + +# Variables that exist for you to override. +# See below for how to change them for certain systems. + +# Various ways of specifying flags for compilations: +# CFLAGS is for the user to override to, e.g., do a bootstrap with -O2. +# BOOT_CFLAGS is the value of CFLAGS to pass +# to the stage2 and stage3 compilations +CFLAGS = -g +BOOT_CFLAGS = -O $(CFLAGS) +# These exists to be overridden by the t-* files, respectively. +T_CFLAGS = + +CC = cc +BISON = bison +BISONFLAGS = +ECHO = echo +LEX = flex +LEXFLAGS = +CHMOD = chmod +LN = ln +LN_S = ln -s +CP = cp -p +MV = mv -f +RM = rm -f +RMDIR = rm -rf +MKDIR = mkdir -p +AR = ar +AR_FLAGS = rc +LS = ls +RANLIB = ranlib --plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so +RANLIB_FLAGS = +AWK = gawk +PICFLAG = -fno-PIE + +COMPILER = $(CC) +COMPILER_FLAGS = $(CFLAGS) + +SHELL = /bin/sh +PWD_COMMAND = $${PWDCMD-pwd} +# How to copy preserving the date +INSTALL_DATA_DATE = cp -p +MAKEINFO = makeinfo +TEXI2DVI = texi2dvi +TEXI2PDF = texi2pdf +GNATBIND_FLAGS = -static -x +ADA_CFLAGS = +ADAFLAGS = -W -Wall -gnatpg -gnata -gnatU +FORCE_DEBUG_ADAFLAGS = -g +NO_INLINE_ADAFLAGS = -fno-inline +NO_OMIT_ADAFLAGS = -fno-omit-frame-pointer +NO_SIBLING_ADAFLAGS = -fno-optimize-sibling-calls +NO_REORDER_ADAFLAGS = -fno-toplevel-reorder +GNATLIBFLAGS = -W -Wall -gnatg -nostdinc +GNATLIBCFLAGS = -g -O2 +# Pretend that _Unwind_GetIPInfo is available for the target by default. This +# should be autodetected during the configuration of libada and passed down to +# here, but we need something for --disable-libada and hope for the best. +GNATLIBCFLAGS_FOR_C = \ + -W -Wall $(GNATLIBCFLAGS) -fexceptions -DIN_RTS -DHAVE_GETIPINFO +PICFLAG_FOR_TARGET = -fpic +ALL_ADAFLAGS = $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) +THREAD_KIND = native +THREADSLIB = +GMEM_LIB = +MISCLIB = +OUTPUT_OPTION = -o $@ + +objext = .o +exeext = +arext = .a +soext = .so +shext = +hyphen = - + +# program_transform_name and objdir are set by configure.ac. +program_transform_name = +objdir = . + +target_alias= +target=x86_64-pc-linux-gnu +target_noncanonical=x86_64-pc-linux-gnu +target_cpu=x86_64 +target_vendor=pc +target_os=linux-gnu +host_cpu=x86_64 +host_vendor=pc +host_os=linux-gnu +target_cpu_default = +xmake_file = $(srcdir)/config/i386/x-i386 $(srcdir)/config/x-linux +tmake_file = $(srcdir)/config/t-slibgcc $(srcdir)/config/t-linux $(srcdir)/config/t-glibc $(srcdir)/config/i386/t-linux64 $(srcdir)/config/i386/t-pmm_malloc $(srcdir)/config/i386/t-i386 $(srcdir)/config/i386/t-linux $(srcdir)/config/i386/t-gnu-property +#version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < $(srcdir)/version.c` +#mainversion=`sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/' < $(srcdir)/version.c` + +# Directory where sources are, from where we are. +VPATH = $(srcdir)/ada + +# Full path to top source directory +# In particular this is used to access libgcc headers, so that references to +# these headers from GNAT runtime objects have path names in debugging info +# that are consistent with libgcc objects. Also used for other references to +# the top source directory for consistency. +ftop_srcdir := $(shell cd $(srcdir)/..;${PWD_COMMAND}) + +fsrcdir := $(shell cd $(srcdir);${PWD_COMMAND}) +fsrcpfx := $(shell cd $(srcdir);${PWD_COMMAND})/ +fcurdir := $(shell ${PWD_COMMAND}) +fcurpfx := $(shell ${PWD_COMMAND})/ + +# Top build directory, relative to here. +top_builddir = ../.. + +# Internationalization library. +LIBINTL = +LIBINTL_DEP = + +# Character encoding conversion library. +LIBICONV = +LIBICONV_DEP = + +# Any system libraries needed just for GNAT. +SYSLIBS = + +# List extra gnattools +EXTRA_GNATTOOLS = + +# List of target dependent sources, overridden below as necessary +TARGET_ADA_SRCS = + +# Type of tools build we are doing; default is not compiling tools. +TOOLSCASE = + +# main GNAT source directory +GNAT_SRC=$(fsrcpfx)ada + +# Multilib handling +MULTISUBDIR = +RTSDIR = rts$(subst /,_,$(MULTISUBDIR)) + +# Link flags used to build gnat tools. By default we prefer to statically +# link with libgcc to avoid a dependency on shared libgcc (which is tricky +# to deal with as it may conflict with the libgcc provided by the system). +GCC_LINK_FLAGS=-static-libstdc++ -static-libgcc + +# End of variables for you to override. + +all: all.indirect + +# This tells GNU Make version 3 not to put all variables in the environment. +.NOEXPORT: + +# target overrides +ifneq ($(tmake_file),) +include $(tmake_file) +endif + +# host overrides +ifneq ($(xmake_file),) +include $(xmake_file) +endif + +# Now figure out from those variables how to compile and link. + +all.indirect: Makefile ../gnat1$(exeext) + +# IN_GCC is meant to distinguish between code compiled into GCC itself, i.e. +# for the host, and the rest. But we also use it for the tools (link.c) and +# even break the host/target wall by using it for the library (targext.c). +# autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a cross +# compiler which does not use the native libraries and headers. +INTERNAL_CFLAGS = -DIN_GCC + +# This is the variable actually used when we compile. +ALL_CFLAGS = $(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS) + +# Likewise. +ALL_CPPFLAGS = $(CPPFLAGS) + +# Used with $(COMPILER). +ALL_COMPILERFLAGS = $(ALL_CFLAGS) + +# This is where we get libiberty.a from. +ifneq ($(findstring $(PICFLAG),-fPIC -fPIE),) +LIBIBERTY = ../../libiberty/pic/libiberty.a +else +LIBIBERTY = ../../libiberty/libiberty.a +endif + +# We need to link against libbacktrace because diagnostic.c in +# libcommon.a uses it. +LIBBACKTRACE = ../../libbacktrace/.libs/libbacktrace.a + +# How to link with both our special library facilities +# and the system's installed libraries. +LIBS = $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) $(LIBIBERTY) $(SYSLIBS) +LIBDEPS = $(LIBINTL_DEP) $(LIBICONV_DEP) $(LIBBACKTRACE) $(LIBIBERTY) +# Default is no TGT_LIB; one might be passed down or something +TGT_LIB = +TOOLS_LIBS = ../version.o ../link.o ../targext.o ../../ggc-none.o \ + ../../libcommon-target.a ../../libcommon.a ../../../libcpp/libcpp.a \ + $(LIBGNAT) $(LIBINTL) $(LIBICONV) ../$(LIBBACKTRACE) ../$(LIBIBERTY) \ + $(SYSLIBS) $(TGT_LIB) + +# Add -no-pie to TOOLS_LIBS since some of them are compiled with -fno-PIE. +TOOLS_LIBS += -no-pie + +# Specify the directories to be searched for header files. +# Both . and srcdir are used, in that order, +# so that tm.h and config.h will be found in the compilation +# subdirectory rather than in the source directory. +INCLUDES = -iquote . -iquote .. -iquote $(srcdir)/ada -iquote $(srcdir) \ + -I $(ftop_srcdir)/include $(GMPINC) + +ADA_INCLUDES = -I- -I. -I$(srcdir)/ada + +# Likewise, but valid for subdirectories of the current dir. +# FIXME: for VxWorks, we cannot add $(fsrcdir) because the regs.h file in +# that directory conflicts with a system header file. +ifneq ($(findstring vxworks,$(target_os)),) + INCLUDES_FOR_SUBDIR = -iquote . -iquote .. -iquote ../.. \ + -iquote $(fsrcdir)/ada \ + -I$(ftop_srcdir)/include $(GMPINC) +else + INCLUDES_FOR_SUBDIR = -iquote . -iquote .. -iquote ../.. \ + -iquote $(fsrcdir)/ada -iquote $(fsrcdir) \ + -I$(ftop_srcdir)/include $(GMPINC) +endif + +ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)/ada + +# Avoid a lot of time thinking about remaking Makefile.in and *.def. +.SUFFIXES: .in .def + +# Say how to compile Ada programs. +.SUFFIXES: .ada .adb .ads .asm + +# Always use -I$(srcdir)/config when compiling. +.asm.o: + $(CC) -c -x assembler $< $(OUTPUT_OPTION) + +.c.o: + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) $(ALL_CPPFLAGS) \ + $(INCLUDES) $< $(OUTPUT_OPTION) + +.adb.o: + $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION) + +.ads.o: + $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION) + +# how to regenerate this file +Makefile: ../config.status $(srcdir)/ada/gcc-interface/Makefile.in $(srcdir)/ada/Makefile.in $(srcdir)/ada/version.c + cd ..; \ + LANGUAGES="$(CONFIG_LANGUAGES)" \ + CONFIG_HEADERS= \ + CONFIG_FILES="ada/gcc-interface/Makefile ada/Makefile" $(SHELL) config.status + +# This tells GNU make version 3 not to export all the variables +# defined in this file into the environment. +.NOEXPORT: + +# Lists of files for various purposes. + +GNATLINK_OBJS = gnatlink.o \ + a-except.o ali.o alloc.o butil.o casing.o csets.o debug.o fmap.o fname.o \ + gnatvsn.o hostparm.o indepsw.o interfac.o i-c.o i-cstrin.o namet.o opt.o \ + osint.o output.o rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \ + sdefault.o snames.o stylesw.o switch.o system.o table.o targparm.o \ + types.o validsw.o widechar.o + +GNATMAKE_OBJS = a-except.o ali.o ali-util.o aspects.o s-casuti.o alloc.o \ + atree.o binderr.o butil.o casing.o csets.o debug.o elists.o einfo.o errout.o \ + erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \ + gnatmake.o gnatvsn.o hostparm.o interfac.o i-c.o i-cstrin.o krunch.o lib.o \ + make.o makeusg.o make_util.o namet.o nlists.o opt.o osint.o osint-m.o \ + output.o restrict.o rident.o s-exctab.o \ + s-secsta.o s-stalib.o s-stoele.o scans.o scng.o sdefault.o sfn_scan.o \ + s-purexc.o s-htable.o scil_ll.o sem_aux.o sinfo.o sinput.o sinput-c.o \ + snames.o stand.o stringt.o styleg.o stylesw.o system.o validsw.o \ + switch.o switch-m.o table.o targparm.o tempdir.o types.o uintp.o \ + uname.o urealp.o usage.o widechar.o warnsw.o \ + seinfo.o einfo-entities.o einfo-utils.o sinfo-nodes.o sinfo-utils.o \ + $(EXTRA_GNATMAKE_OBJS) + +# Make arch match the current multilib so that the RTS selection code +# picks up the right files. For a given target this must be coherent +# with MULTILIB_DIRNAMES defined in gcc/config/target/t-*. + +ifeq ($(strip $(filter-out x86_64, $(target_cpu))),) + ifeq ($(strip $(MULTISUBDIR)),/32) + target_cpu:=i686 + else + ifeq ($(strip $(MULTISUBDIR)),/x32) + target_cpu:=x32 + endif + endif +endif + +# The x86_64-linux-gnux32 compiler is actually an x32 compiler +ifeq ($(strip $(filter-out x86_64 linux-gnux32%, $(target_cpu) $(target_os))),) + ifneq ($(strip $(MULTISUBDIR)),/64) + target_cpu:=x32 + endif +endif + +# The SuSE PowerPC64/Linux compiler is actually a 32-bit PowerPC compiler +ifeq ($(strip $(filter-out powerpc64 suse linux%, $(target_cpu) $(target_vendor) $(target_os))),) + target_cpu:=powerpc +endif + +# Configuration of host tools + +# Under linux, host tools need to be linked with -ldl + +ifeq ($(strip $(filter-out linux%,$(host_os))),) + TOOLS1_LIBS=-ldl +endif + +include $(fsrcdir)/ada/Makefile.rtl + +LIBGNAT=../$(RTSDIR)/libgnat.a + +TOOLS_FLAGS_TO_PASS= \ + "CC=$(CC)" \ + "CFLAGS=$(CFLAGS)" \ + "LDFLAGS=$(LDFLAGS)" \ + "ADAFLAGS=$(ADAFLAGS)" \ + "INCLUDES=$(INCLUDES_FOR_SUBDIR)"\ + "ADA_INCLUDES=$(ADA_INCLUDES) $(ADA_INCLUDES_FOR_SUBDIR)"\ + "libsubdir=$(libsubdir)" \ + "exeext=$(exeext)" \ + "fsrcdir=$(fsrcdir)" \ + "srcdir=$(fsrcdir)" \ + "TOOLS_LIBS=$(TOOLS_LIBS) $(TGT_LIB)" \ + "GNATMAKE=$(GNATMAKE)" \ + "GNATLINK=$(GNATLINK)" \ + "GNATBIND=$(GNATBIND)" + +GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(LDFLAGS) + +# Build directory for the tools. We first need to copy the generated files, +# then the target-dependent sources using the same mechanism as for gnatlib. +# The other sources are accessed using the vpath directive below + +GENERATED_FILES_FOR_TOOLS = \ + einfo-entities.ads einfo-entities.adb sdefault.adb seinfo.ads \ + sinfo-nodes.ads sinfo-nodes.adb snames.ads snames.adb + +../stamp-tools: + -$(RM) tools/* + -$(RMDIR) tools + -$(MKDIR) tools + -(cd tools; $(foreach FILE,$(GENERATED_FILES_FOR_TOOLS), \ + $(LN_S) ../$(FILE) $(FILE);)) + -$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \ + $(RM) tools/$(word 1,$(subst <, ,$(PAIR)));\ + $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \ + tools/$(word 1,$(subst <, ,$(PAIR)));) + touch ../stamp-tools + +# when compiling the tools, the runtime has to be first on the path so that +# it hides the runtime files lying with the rest of the sources +ifeq ($(TOOLSCASE),native) + vpath %.ads ../$(RTSDIR) ../ + vpath %.adb ../$(RTSDIR) ../ + vpath %.c ../$(RTSDIR) ../ + vpath %.h ../$(RTSDIR) ../ +endif + +# in the cross tools case, everything is compiled with the native +# gnatmake/link. Therefore only -I needs to be modified in ADA_INCLUDES +ifeq ($(TOOLSCASE),cross) + vpath %.ads ../ + vpath %.adb ../ + vpath %.c ../ + vpath %.h ../ +endif + +# gnatmake/link tools cannot always be built with gnatmake/link for bootstrap +# reasons: gnatmake should be built with a recent compiler, a recent compiler +# may not generate ALI files compatible with an old gnatmake so it is important +# to be able to build gnatmake without a version of gnatmake around. Once +# everything has been compiled once, gnatmake can be recompiled with itself +# (see target gnattools1-re) +gnattools1: ../stamp-tools ../stamp-gnatlib-$(RTSDIR) + $(MAKE) -C tools -f ../Makefile $(TOOLS_FLAGS_TO_PASS) \ + TOOLSCASE=native \ + ../../gnatmake$(exeext) ../../gnatlink$(exeext) + +# gnatmake/link can be built with recent gnatmake/link if they are available. +# This is especially convenient for building cross tools or for rebuilding +# the tools when the original bootstrap has already be done. +gnattools1-re: ../stamp-tools + $(MAKE) -C tools -f ../Makefile $(TOOLS_FLAGS_TO_PASS) \ + TOOLSCASE=cross INCLUDES="" gnatmake-re gnatlink-re + +# these tools are built with gnatmake & are common to native and cross +gnattools2: ../stamp-tools + $(MAKE) -C tools -f ../Makefile $(TOOLS_FLAGS_TO_PASS) \ + TOOLSCASE=native common-tools $(EXTRA_GNATTOOLS) + +common-tools: ../stamp-tools + $(GNATMAKE) -j0 -c -b $(ADA_INCLUDES) \ + --GNATBIND="$(GNATBIND)" --GCC="$(CC) $(ALL_ADAFLAGS)" \ + gnatchop gnatcmd gnatkr gnatls gnatprep gnatname \ + gnatclean -bargs $(ADA_INCLUDES) $(GNATBIND_FLAGS) + $(GNATLINK) -v gnatcmd -o ../../gnat$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + $(GNATLINK) -v gnatchop -o ../../gnatchop$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + $(GNATLINK) -v gnatkr -o ../../gnatkr$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + $(GNATLINK) -v gnatls -o ../../gnatls$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + $(GNATLINK) -v gnatprep -o ../../gnatprep$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + $(GNATLINK) -v gnatname -o ../../gnatname$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + $(GNATLINK) -v gnatclean -o ../../gnatclean$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + +../../gnatdll$(exeext): ../stamp-tools + $(GNATMAKE) -c $(ADA_INCLUDES) gnatdll --GCC="$(CC) $(ALL_ADAFLAGS)" + $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatdll + $(GNATLINK) -v gnatdll -o $@ \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + +gnatmake-re: ../stamp-tools + $(GNATMAKE) -j0 $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)" + $(GNATMAKE) -j0 -c $(ADA_INCLUDES) gnatmake --GCC="$(CC) $(ALL_ADAFLAGS)" + $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmake + $(GNATLINK) -v gnatmake -o ../../gnatmake$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + +# Note the use of the "mv" command in order to allow gnatlink to be linked with +# with the former version of gnatlink itself which cannot override itself. +# gnatlink-re cannot be run at the same time as gnatmake-re, hence the +# dependency +gnatlink-re: ../stamp-tools gnatmake-re + $(GNATMAKE) -j0 -c $(ADA_INCLUDES) gnatlink --GCC="$(CC) $(ALL_ADAFLAGS)" + $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlink + $(GNATLINK) -v gnatlink -o ../../gnatlinknew$(exeext) \ + --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS) + $(MV) ../../gnatlinknew$(exeext) ../../gnatlink$(exeext) + +# Needs to be built with CC=gcc +# Since the RTL should be built with the latest compiler, remove the +# stamp target in the parent directory whenever gnat1 is rebuilt + +# Likewise for the tools +../../gnatmake$(exeext): b_gnatm.o $(GNATMAKE_OBJS) + +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS) $(TOOLS1_LIBS) + +../../gnatlink$(exeext): b_gnatl.o $(GNATLINK_OBJS) + +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS) $(TOOLS1_LIBS) + +../stamp-gnatlib-$(RTSDIR): + @if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \ + then \ + $(ECHO) You must first build the GNAT library: make gnatlib; \ + false; \ + else \ + true; \ + fi + +install-gcc-specs: +# Install all the requested GCC spec files. + + $(foreach f,$(GCC_SPEC_FILES), \ + $(INSTALL_DATA_DATE) $(srcdir)/ada/$(f) $(DESTDIR)$(libsubdir)/;) + +install-gnatlib: ../stamp-gnatlib-$(RTSDIR) install-gcc-specs + $(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR) + $(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR) + -$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR) + -$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR) + for file in $(RTSDIR)/*.ali; do \ + $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \ + done + $(INSTALL_DATA_DATE) $(RTSDIR)/ada_target_properties \ + $(DESTDIR)$(ADA_RTL_OBJ_DIR)/../ + -cd $(RTSDIR); for file in *$(arext);do \ + $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \ + $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \ + done + -$(foreach file, $(EXTRA_ADALIB_OBJS), \ + $(INSTALL_DATA_DATE) $(RTSDIR)/$(file) $(DESTDIR)$(ADA_RTL_OBJ_DIR) && \ + ) true +# Install the shared libraries, if any, using $(INSTALL) instead +# of $(INSTALL_DATA). The latter may force a mode inappropriate +# for shared libraries on some targets, e.g. on HP-UX where the x +# permission is required. +# Also install the .dSYM directories if they exist (these directories +# contain the debug information for the shared libraries on darwin) + for file in gnat gnarl; do \ + if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \ + $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(DESTDIR)$(ADA_RTL_DSO_DIR); \ + fi; \ + if [ -f $(RTSDIR)/lib$${file}$(soext) ]; then \ + $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(DESTDIR)$(ADA_RTL_DSO_DIR)/lib$${file}$(soext); \ + fi; \ + if [ -d $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM ]; then \ + $(CP) -r $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM \ + $(DESTDIR)$(ADA_RTL_DSO_DIR); \ + fi; \ + done +# This copy must be done preserving the date on the original file. + for file in $(RTSDIR)/*.ad[sb]*; do \ + $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_INCLUDE_DIR); \ + done + cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb + cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads + +../stamp-gnatlib2-$(RTSDIR): + $(RM) $(RTSDIR)/s-*.ali + $(RM) $(RTSDIR)/s-*$(objext) + $(RM) $(RTSDIR)/a-*.ali + $(RM) $(RTSDIR)/a-*$(objext) + $(RM) $(RTSDIR)/*.ali + $(RM) $(RTSDIR)/*$(objext) + $(RM) $(RTSDIR)/*$(arext) + $(RM) $(RTSDIR)/*$(soext) + touch ../stamp-gnatlib2-$(RTSDIR) + $(RM) ../stamp-gnatlib-$(RTSDIR) + +../stamp-gnatlib1-$(RTSDIR): Makefile ../stamp-gnatlib2-$(RTSDIR) + $(MAKE) MULTISUBDIR="$(MULTISUBDIR)" THREAD_KIND="$(THREAD_KIND)" LN_S="$(LN_S)" setup-rts +# Copy tsystem.h + $(CP) $(srcdir)/tsystem.h $(RTSDIR) + $(RM) ../stamp-gnatlib-$(RTSDIR) + touch ../stamp-gnatlib1-$(RTSDIR) + +# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to adjust +# for running it from ada/rts. + +GCC_FOR_ADA_RTS=$(subst ./xgcc,../../xgcc,$(subst -B./, -B../../,$(GCC_FOR_TARGET))) + +# The main ada source directory must be on the include path for #include "..." +# because s-oscons-tmplt.c requires adaint.h, gsocket.h, and any file included +# by these headers. However note that we must use -iquote, not -I, so that +# ada/types.h does not conflict with a same-named system header (VxWorks +# has a header). + +OSCONS_CPP=$(GCC_FOR_ADA_RTS) $(GNATLIBCFLAGS_FOR_C) -E -C \ + -DTARGET=\"$(target_noncanonical)\" -iquote $(fsrcpfx)ada $(fsrcpfx)ada/s-oscons-tmplt.c > s-oscons-tmplt.i +OSCONS_EXTRACT=$(GCC_FOR_ADA_RTS) $(GNATLIBCFLAGS_FOR_C) -S s-oscons-tmplt.i + +# Note: if you need to build with a non-GNU compiler, you could adapt the +# following definitions (written for VMS DEC-C) +#OSCONS_CPP=../../../$(DECC) -E /comment=as_is -DNATIVE \ +# -DTARGET='""$(target)""' -I$(OSCONS_SRCDIR) s-oscons-tmplt.c +# +#OSCONS_EXTRACT=../../../$(DECC) -DNATIVE \ +# -DTARGET='""$(target)""' -I$(OSCONS_SRCDIR) s-oscons-tmplt.c ; \ +# ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \ +# ./s-oscons-tmplt.exe > s-oscons-tmplt.s + +./bldtools/oscons/xoscons: xoscons.adb xutil.ads xutil.adb + -$(MKDIR) ./bldtools/oscons + $(RM) $(addprefix ./bldtools/oscons/,$(notdir $^)) + $(CP) $^ ./bldtools/oscons + (cd ./bldtools/oscons ; gnatmake -q xoscons) + +$(RTSDIR)/s-oscons.ads: ../stamp-gnatlib1-$(RTSDIR) s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons + $(RM) $(RTSDIR)/s-oscons-tmplt.i $(RTSDIR)/s-oscons-tmplt.s + (cd $(RTSDIR) ; \ + $(OSCONS_CPP) ; \ + $(OSCONS_EXTRACT) ; \ + ../bldtools/oscons/xoscons s-oscons) + +gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR) $(RTSDIR)/s-oscons.ads + test -f $(RTSDIR)/s-oscons.ads || exit 1 +# C files + $(MAKE) -C $(RTSDIR) \ + CC="$(GCC_FOR_ADA_RTS)" \ + INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \ + CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \ + FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \ + srcdir=$(fsrcdir) \ + -f ../Makefile $(LIBGNAT_OBJS) $(EXTRA_ADALIB_OBJS) +# Ada files + $(MAKE) -C $(RTSDIR) \ + CC="$(GCC_FOR_ADA_RTS)" \ + ADA_INCLUDES="" \ + CFLAGS="$(GNATLIBCFLAGS)" \ + ADAFLAGS="$(GNATLIBFLAGS)" \ + FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \ + srcdir=$(fsrcdir) \ + -f ../Makefile $(GNATRTL_OBJS) + $(RM) $(RTSDIR)/libgnat$(arext) $(RTSDIR)/libgnarl$(arext) + $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnat$(arext) \ + $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS)) + $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnat$(arext) + $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnarl$(arext) \ + $(addprefix $(RTSDIR)/,$(GNATRTL_TASKING_OBJS)) + $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnarl$(arext) + ifeq ($(GMEM_LIB),gmemlib) + $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgmem$(arext) \ + $(RTSDIR)/memtrack.o + $(RANLIB_FOR_TARGET) $(RTSDIR)/libgmem$(arext) + endif + $(CHMOD) a-wx $(RTSDIR)/*.ali + touch ../stamp-gnatlib-$(RTSDIR) + +# Warning: this target assumes that LIBRARY_VERSION has been set correctly. +gnatlib-shared-default: + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET) -fno-lto" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) $(PICFLAG_FOR_TARGET) -fno-lto" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib + $(RM) $(RTSDIR)/libgna*$(soext) + cd $(RTSDIR); $(GCC_FOR_ADA_RTS) -shared $(GNATLIBCFLAGS) \ + $(PICFLAG_FOR_TARGET) \ + -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \ + $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(MISCLIB) -lm + cd $(RTSDIR); $(GCC_FOR_ADA_RTS) -shared $(GNATLIBCFLAGS) \ + $(PICFLAG_FOR_TARGET) \ + -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(GNATRTL_TASKING_OBJS) \ + $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(THREADSLIB) + cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + libgnat$(soext) + cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + libgnarl$(soext) + + # Create static libgnat and libgnarl compiled with -fPIC + $(RM) $(RTSDIR)/libgnat_pic$(arext) $(RTSDIR)/libgnarl_pic$(arext) + $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnat_pic$(arext) \ + $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS)) + $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnat_pic$(arext) + $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnarl_pic$(arext) \ + $(addprefix $(RTSDIR)/,$(GNATRTL_TASKING_OBJS)) + $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnarl_pic$(arext) + +gnatlib-shared-dual: + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + PICFLAG_FOR_TARGET="$(PICFLAG_FOR_TARGET)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib-shared-default + $(MV) $(RTSDIR)/libgna*$(soext) . + $(MV) $(RTSDIR)/libgnat_pic$(arext) . + $(MV) $(RTSDIR)/libgnarl_pic$(arext) . + $(RM) ../stamp-gnatlib2-$(RTSDIR) + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib + $(MV) libgna*$(soext) $(RTSDIR) + $(MV) libgnat_pic$(arext) $(RTSDIR) + $(MV) libgnarl_pic$(arext) $(RTSDIR) + +gnatlib-shared-dual-win32: + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + PICFLAG_FOR_TARGET="$(PICFLAG_FOR_TARGET)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib-shared-win32 + $(MV) $(RTSDIR)/libgna*$(soext) . + $(RM) ../stamp-gnatlib2-$(RTSDIR) + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib + $(MV) libgna*$(soext) $(RTSDIR) + +# ??? we need to add the option to support auto-import of arrays/records to +# the GNATLIBFLAGS when this will be supported by GNAT. At this point we will +# use the gnatlib-shared-dual-win32 target to build the GNAT runtimes on +# Windows. +gnatlib-shared-win32: + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) $(PICFLAG_FOR_TARGET)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib + $(RM) $(RTSDIR)/libgna*$(soext) + $(CP) $(RTSDIR)/libgnat$(arext) $(RTSDIR)/libgnat_pic$(arext) + $(CP) $(RTSDIR)/libgnarl$(arext) $(RTSDIR)/libgnarl_pic$(arext) + cd $(RTSDIR); $(GCC_FOR_ADA_RTS) -shared -shared-libgcc \ + $(PICFLAG_FOR_TARGET) \ + -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \ + $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB) + cd $(RTSDIR); $(GCC_FOR_ADA_RTS) -shared -shared-libgcc \ + $(PICFLAG_FOR_TARGET) \ + -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(GNATRTL_TASKING_OBJS) \ + $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) + +gnatlib-shared-darwin: + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) $(PICFLAG_FOR_TARGET) -fno-common" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib + $(RM) $(RTSDIR)/libgnat$(soext) $(RTSDIR)/libgnarl$(soext) + $(CP) $(RTSDIR)/libgnat$(arext) $(RTSDIR)/libgnat_pic$(arext) + $(CP) $(RTSDIR)/libgnarl$(arext) $(RTSDIR)/libgnarl_pic$(arext) + cd $(RTSDIR); $(GCC_FOR_ADA_RTS) -dynamiclib $(PICFLAG_FOR_TARGET) \ + -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \ + $(SO_OPTS) \ + -Wl,-install_name,@rpath/libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + -nodefaultrpaths -Wl,-rpath,@loader_path/,-rpath,@loader_path/.. \ + -Wl,-rpath,@loader_path/../../../../ $(MISCLIB) + cd $(RTSDIR); $(GCC_FOR_ADA_RTS) -dynamiclib $(PICFLAG_FOR_TARGET) \ + -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(GNATRTL_TASKING_OBJS) \ + $(SO_OPTS) \ + -Wl,-install_name,@rpath/libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + -nodefaultrpaths -Wl,-rpath,@loader_path/,-rpath,@loader_path/.. \ + -Wl,-rpath,@loader_path/../../../../ \ + $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) + cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + libgnat$(soext) + cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + libgnarl$(soext) + cd $(RTSDIR); $(DSYMUTIL_FOR_TARGET) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) + cd $(RTSDIR); $(DSYMUTIL_FOR_TARGET) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) + +gnatlib-shared: + $(MAKE) $(FLAGS_TO_PASS) \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + PICFLAG_FOR_TARGET="$(PICFLAG_FOR_TARGET)" \ + $(GNATLIB_SHARED) + +# When building a SJLJ runtime for VxWorks, we need to ensure that the extra +# linker options needed for ZCX are not passed to prevent the inclusion of +# useless objects and potential troubles from the presence of extra symbols +# and references in some configurations. The inhibition is performed by +# commenting the pragma instead of deleting the line, as the latter might +# result in getting multiple blank lines, hence possible style check errors. +gnatlib-sjlj: + $(MAKE) $(FLAGS_TO_PASS) \ + EH_MECHANISM="" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + ../stamp-gnatlib1-$(RTSDIR) + sed \ + -e 's/Frontend_Exceptions.*/Frontend_Exceptions : constant Boolean := True;/' \ + -e 's/ZCX_By_Default.*/ZCX_By_Default : constant Boolean := False;/' \ + $(RTSDIR)/system.ads > $(RTSDIR)/s.ads + $(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads + $(MAKE) $(FLAGS_TO_PASS) \ + EH_MECHANISM="" \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib + +gnatlib-zcx: + $(MAKE) $(FLAGS_TO_PASS) \ + EH_MECHANISM="-gcc" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + ../stamp-gnatlib1-$(RTSDIR) + sed \ + -e 's/Frontend_Exceptions.*/Frontend_Exceptions : constant Boolean := False;/' \ + -e 's/ZCX_By_Default.*/ZCX_By_Default : constant Boolean := True;/' \ + $(RTSDIR)/system.ads > $(RTSDIR)/s.ads + $(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads + $(MAKE) $(FLAGS_TO_PASS) \ + EH_MECHANISM="-gcc" \ + GNATLIBFLAGS="$(GNATLIBFLAGS)" \ + GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ + GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \ + FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \ + MULTISUBDIR="$(MULTISUBDIR)" \ + THREAD_KIND="$(THREAD_KIND)" \ + LN_S="$(LN_S)" \ + gnatlib + +# Compiling object files from source files. + +# Note that dependencies on obstack.h are not written +# because that file is not part of GCC. +# Dependencies on gvarargs.h are not written +# because all that file does, when not compiling with GCC, +# is include the system varargs.h. + +b_gnatl.adb : $(GNATLINK_OBJS) + $(GNATBIND) $(ADA_INCLUDES) -o b_gnatl.adb gnatlink.ali + +b_gnatl.o : b_gnatl.adb + $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) -gnatws -gnatyN \ + $< $(OUTPUT_OPTION) + +b_gnatm.adb : $(GNATMAKE_OBJS) + $(GNATBIND) $(ADA_INCLUDES) -o b_gnatm.adb gnatmake.ali + +b_gnatm.o : b_gnatm.adb + $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) -gnatws -gnatyN \ + $< $(OUTPUT_OPTION) + +# Provide a `toolexeclibdir' definition for when `gnat-install-lib' is +# wired through gcc/ in a configuration with top-level libada disabled. +# It will be overridden with the value configured when `gnat-install-lib' +# is invoked through libada/. +toolexeclibdir = $(ADA_RTL_OBJ_DIR) + +ADA_INCLUDE_DIR = $(libsubdir)/adainclude +ADA_RTL_OBJ_DIR = $(libsubdir)/adalib +ADA_RTL_DSO_DIR = $(toolexeclibdir) + +# Special flags + +# need to keep the frame pointer in tracebak.o to pop the stack properly on +# some targets. + +tracebak.o : tracebak.c + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) $(ALL_CPPFLAGS) \ + $(INCLUDES) $(NO_OMIT_ADAFLAGS) $< $(OUTPUT_OPTION) + +adadecode.o : adadecode.c adadecode.h +aux-io.o : aux-io.c +argv.o : argv.c +cal.o : cal.c +deftarg.o : deftarg.c +errno.o : errno.c +exit.o : adaint.h exit.c +expect.o : expect.c +final.o : final.c +rtfinal.o : rtfinal.c +rtinit.o : rtinit.c +locales.o : locales.c +mkdir.o : mkdir.c +socket.o : socket.c gsocket.h +sysdep.o : sysdep.c +raise.o : raise.c raise.h +sigtramp-armdroid.o : sigtramp-armdroid.c sigtramp.h +sigtramp-armvxworks.o : sigtramp-armvxworks.c sigtramp.h +sigtramp-ios.o : sigtramp-ios.c sigtramp.h +sigtramp-vxworks.o : sigtramp-vxworks.c $(VX_SIGTRAMP_EXTRA_SRCS) +sigtramp-vxworks-vxsim.o : sigtramp-vxworks-vxsim.c $(VX_SIGTRAMP_EXTRA_SRCS) +terminals.o : terminals.c +vx_stack_info.o : vx_stack_info.c + +raise-gcc.o : raise-gcc.c raise.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) \ + -iquote $(srcdir) -iquote $(ftop_srcdir)/libgcc \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +cio.o : cio.c + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +init.o : init.c adaint.h raise.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +init-vxsim.o : init-vxsim.c + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +initialize.o : initialize.c raise.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +link.o : link.c + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES_FOR_SUBDIR) \ + $< $(OUTPUT_OPTION) + +targext.o : targext.c + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ADA_CFLAGS) \ + -iquote $(srcdir) \ + $(ALL_CPPFLAGS) $(INCLUDES_FOR_SUBDIR) \ + $< $(OUTPUT_OPTION) + +# In GNU Make, ignore whether `stage*' exists. +.PHONY: stage1 stage2 stage3 stage4 clean realclean TAGS bootstrap +.PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4 + +force: diff --git a/gcc/afmv_diagnostic_pass.cc b/gcc/afmv_diagnostic_pass.cc new file mode 100644 index 0000000000000..a38344484cefc --- /dev/null +++ b/gcc/afmv_diagnostic_pass.cc @@ -0,0 +1,69 @@ +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "backend.h" +#include "tree-pass.h" +#include "gimple.h" +#include "timevar.h" + +namespace { + const pass_data pass_data_afmv_diagnostic = { + GIMPLE_PASS, /* type */ + "afmv_diagnostic", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + TV_NONE, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + 0 /* todo_flags_finish */ + }; + + class pass_afmv_diagnostic : public gimple_opt_pass { + public: + pass_afmv_diagnostic(gcc::context * ctxt) : gimple_opt_pass(pass_data_afmv_diagnostic, ctxt) {} + + bool gate(function*) final override { + return true; // Always run this pass for testing + } + + unsigned int execute(function*) final override { + fprintf(stderr, "AFMV Diagnostic: Pass executed\n"); + + // Example diagnostic information + int number_of_clones = 0; + int number_of_prunes = 0; + + // Placeholder for actual diagnostic logic + // Add logic to count clones and prunes + // For example: + // for (basic_block bb : all_bb) { + // for (gimple_stmt_iterator gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi)) { + // gimple* stmt = gsi_stmt(gsi); + // if (is_clone(stmt)) { + // number_of_clones++; + // } + // if (is_pruned(stmt)) { + // number_of_prunes++; + // } + // } + // } + + fprintf(stderr, "Number of cloned functions: %d\n", number_of_clones); + fprintf(stderr, "Number of pruned functions: %d\n", number_of_prunes); + + // Measure time taken for cloning and pruning + auto start_time = std::chrono::high_resolution_clock::now(); + auto end_time = std::chrono::high_resolution_clock::now(); + std::chrono::duration duration = end_time - start_time; + + fprintf(stderr, "Total time taken: %f seconds\n", duration.count()); + + return 0; + } + }; +} + +gimple_opt_pass * make_pass_afmv_diagnostic(gcc::context * ctxt) { + return new pass_afmv_diagnostic(ctxt); +} diff --git a/gcc/as b/gcc/as new file mode 100755 index 0000000000000..6f68f1c07b121 --- /dev/null +++ b/gcc/as @@ -0,0 +1,116 @@ +#! /bin/sh + +# Copyright (C) 2007-2024 Free Software Foundation, Inc. +# This file is part of GCC. + +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# Invoke as, ld or nm from the build tree. + +ORIGINAL_AS_FOR_TARGET="" +ORIGINAL_LD_FOR_TARGET="" +ORIGINAL_LD_BFD_FOR_TARGET="/.bfd" +ORIGINAL_LD_GOLD_FOR_TARGET="/.gold" +ORIGINAL_PLUGIN_LD_FOR_TARGET="" +ORIGINAL_NM_FOR_TARGET="" +ORIGINAL_DSYMUTIL_FOR_TARGET="" +exeext= +fast_install=needless +objdir=.libs + +invoked=`basename "$0"` +id=$invoked +case "$invoked" in + as) + original=$ORIGINAL_AS_FOR_TARGET + prog=as-new$exeext + dir=gas + ;; + collect-ld) + # Check -fuse-ld=bfd and -fuse-ld=gold + case " $* " in + *\ -fuse-ld=bfd\ *) + original=$ORIGINAL_LD_BFD_FOR_TARGET + ;; + *\ -fuse-ld=gold\ *) + original=$ORIGINAL_LD_GOLD_FOR_TARGET + ;; + *) + # when using a linker plugin, gcc will always pass '-plugin' as the + # first or second option to the linker. + if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then + original=$ORIGINAL_PLUGIN_LD_FOR_TARGET + else + original=$ORIGINAL_LD_FOR_TARGET + fi + ;; + esac + prog=ld-new$exeext + if test "$original" = ../gold/ld-new$exeext; then + dir=gold + # No need to handle relink since gold doesn't use libtool. + fast_install=yes + else + dir=ld + fi + id=ld + ;; + nm) + original=$ORIGINAL_NM_FOR_TARGET + prog=nm-new$exeext + dir=binutils + ;; + dsymutil) + original=$ORIGINAL_DSYMUTIL_FOR_TARGET + # We do not build this in tree - but still want to be able to execute + # a configured version from the build dir. + prog= + dir= + ;; +esac + +case "$original" in + ../*) + # compute absolute path of the location of this script + tdir=`dirname "$0"` + scriptdir=`cd "$tdir" && pwd` + + if test -x $scriptdir/../$dir/$prog; then + test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"} + + # if libtool did everything it needs to do, there's a fast path + lt_prog=$scriptdir/../$dir/$objdir/lt-$prog + test -x $lt_prog && exec $lt_prog ${1+"$@"} + + # libtool has not relinked ld-new yet, but we cannot just use the + # previous stage (because then the relinking would just never happen!). + # So we take extra care to use prev-ld/ld-new *on recursive calls*. + eval LT_RCU="\${LT_RCU_$id}" + test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + + eval LT_RCU_$id=1 + export LT_RCU_$id + $scriptdir/../$dir/$prog ${1+"$@"} + result=$? + exit $result + + else + exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + fi + ;; + *) + exec $original ${1+"$@"} + ;; +esac diff --git a/gcc/auto-host.h b/gcc/auto-host.h new file mode 100644 index 0000000000000..32227d6ee3dac --- /dev/null +++ b/gcc/auto-host.h @@ -0,0 +1,2791 @@ +/* auto-host.h. Generated from config.in by configure. */ +/* config.in. Generated from configure.ac by autoheader. */ + +/* Define if this compiler should be built as the offload target compiler. */ +#ifndef USED_FOR_TARGET +/* #undef ACCEL_COMPILER */ +#endif + + +/* Define if building universal (internal helper macro) */ +#ifndef USED_FOR_TARGET +/* #undef AC_APPLE_UNIVERSAL_BUILD */ +#endif + + +/* Define to the assembler option to enable compressed debug sections. */ +#ifndef USED_FOR_TARGET +#define AS_COMPRESS_DEBUG_OPTION "" +#endif + + +/* Define to the assembler option to disable compressed debug sections. */ +#ifndef USED_FOR_TARGET +#define AS_NO_COMPRESS_DEBUG_OPTION "" +#endif + + +/* Define to the root for URLs about GCC changes. */ +#ifndef USED_FOR_TARGET +#define CHANGES_ROOT_URL "https://gcc.gnu.org/" +#endif + + +/* Define as the number of bits in a byte, if `limits.h' doesn't. */ +#ifndef USED_FOR_TARGET +/* #undef CHAR_BIT */ +#endif + + +/* Define to 0/1 if you want more run-time sanity checks. This one gets a grab + bag of miscellaneous but relatively cheap checks. */ +#ifndef USED_FOR_TARGET +#define CHECKING_P 1 +#endif + + +/* Define 0/1 to force the choice for exception handling model. */ +#ifndef USED_FOR_TARGET +/* #undef CONFIG_SJLJ_EXCEPTIONS */ +#endif + + +/* Specify a runpath directory, additional to those provided by the compiler + */ +#ifndef USED_FOR_TARGET +#define DARWIN_ADD_RPATH "" +#endif + + +/* Should add an extra runpath directory */ +#ifndef USED_FOR_TARGET +#define DARWIN_DO_EXTRA_RPATH 0 +#endif + + +/* Define to enable the use of a default assembler. */ +#ifndef USED_FOR_TARGET +/* #undef DEFAULT_ASSEMBLER */ +#endif + + +/* Define to enable the use of a default debug linker. */ +#ifndef USED_FOR_TARGET +/* #undef DEFAULT_DSYMUTIL */ +#endif + + +/* Define to enable the use of a default linker. */ +#ifndef USED_FOR_TARGET +/* #undef DEFAULT_LINKER */ +#endif + + +/* Define to larger than zero set the default stack clash protector size. */ +#ifndef USED_FOR_TARGET +#define DEFAULT_STK_CLASH_GUARD_SIZE 0 +#endif + + +/* Define if you want to use __cxa_atexit, rather than atexit, to register C++ + destructors for local statics and global objects. This is essential for + fully standards-compliant handling of destructors, but requires + __cxa_atexit in libc. */ +#ifndef USED_FOR_TARGET +#define DEFAULT_USE_CXA_ATEXIT 2 +#endif + + +/* The default for -fdiagnostics-color option */ +#ifndef USED_FOR_TARGET +#define DIAGNOSTICS_COLOR_DEFAULT DIAGNOSTICS_COLOR_AUTO +#endif + + +/* The default for -fdiagnostics-urls option */ +#ifndef USED_FOR_TARGET +#define DIAGNOSTICS_URLS_DEFAULT DIAGNOSTICS_URL_AUTO +#endif + + +/* Define to the root for documentation URLs. */ +#ifndef USED_FOR_TARGET +#define DOCUMENTATION_ROOT_URL "https://gcc.gnu.org/onlinedocs/" +#endif + + +/* Define to the dsymutil version. */ +#ifndef USED_FOR_TARGET +/* #undef DSYMUTIL_VERSION */ +#endif + + +/* Define 0/1 if static analyzer feature is enabled. */ +#ifndef USED_FOR_TARGET +#define ENABLE_ANALYZER 1 +#endif + + +/* Define if you want assertions enabled. This is a cheap check. */ +#ifndef USED_FOR_TARGET +#define ENABLE_ASSERT_CHECKING 1 +#endif + + +/* Define to 1 to specify that we are using the BID decimal floating point + format instead of DPD */ +#ifndef USED_FOR_TARGET +#define ENABLE_DECIMAL_BID_FORMAT 1 +#endif + + +/* Define to 1 to enable decimal float extension to C. */ +#ifndef USED_FOR_TARGET +#define ENABLE_DECIMAL_FLOAT 1 +#endif + + +/* Define if your target supports default PIE and it is enabled. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_DEFAULT_PIE */ +#endif + + +/* Define if your target supports default stack protector and it is enabled. + */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_DEFAULT_SSP */ +#endif + + +/* Define if you want more run-time sanity checks for dataflow. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_DF_CHECKING */ +#endif + + +/* Define to 0/1 if you want extra run-time checking that might affect code + generation. */ +#ifndef USED_FOR_TARGET +#define ENABLE_EXTRA_CHECKING 1 +#endif + + +/* Define to 1 to enable fixed-point arithmetic extension to C. */ +#ifndef USED_FOR_TARGET +#define ENABLE_FIXED_POINT 0 +#endif + + +/* Define if you want fold checked that it never destructs its argument. This + is quite expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_FOLD_CHECKING */ +#endif + + +/* Define if you want the garbage collector to operate in maximally paranoid + mode, validating the entire heap and collecting garbage at every + opportunity. This is extremely expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_GC_ALWAYS_COLLECT */ +#endif + + +/* Define if you want the garbage collector to do object poisoning and other + memory allocation checks. This is quite expensive. */ +#ifndef USED_FOR_TARGET +#define ENABLE_GC_CHECKING 1 +#endif + + +/* Define if you want operations on GIMPLE (the basic data structure of the + high-level optimizers) to be checked for dynamic type safety at runtime. + This is moderately expensive. */ +#ifndef USED_FOR_TARGET +#define ENABLE_GIMPLE_CHECKING 1 +#endif + + +/* Define if gcc should always pass --build-id to linker. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_LD_BUILDID */ +#endif + + +/* Define to 1 to enable libquadmath support */ +#ifndef USED_FOR_TARGET +#define ENABLE_LIBQUADMATH_SUPPORT 1 +#endif + + +/* Define to enable LTO support. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_LTO */ +#endif + + +/* If --with-multiarch option is used */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_MULTIARCH */ +#endif + + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#ifndef USED_FOR_TARGET +#define ENABLE_NLS 1 +#endif + + +/* Define this to enable support for offloading. */ +#ifndef USED_FOR_TARGET +#define ENABLE_OFFLOADING 0 +#endif + + +/* Define to enable plugin support. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_PLUGIN */ +#endif + + +/* Define if you want all operations on RTL (the basic data structure of the + optimizer and back end) to be checked for dynamic type safety at runtime. + This is quite expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_RTL_CHECKING */ +#endif + + +/* Define if you want RTL flag accesses to be checked against the RTL codes + that are supported for each access macro. This is relatively cheap. */ +#ifndef USED_FOR_TARGET +#define ENABLE_RTL_FLAG_CHECKING 1 +#endif + + +/* Define if you want runtime assertions enabled. This is a cheap check. */ +#define ENABLE_RUNTIME_CHECKING 1 + +/* Define to enable evaluating float expressions with double precision in + standards-compatible mode on s390 targets. */ +/* #undef ENABLE_S390_EXCESS_FLOAT_PRECISION */ + +/* Define if the -stdlib= option should be enabled. */ +#ifndef USED_FOR_TARGET +#define ENABLE_STDLIB_OPTION 0 +#endif + + +/* Define if you want all operations on trees (the basic data structure of the + front ends) to be checked for dynamic type safety at runtime. This is + moderately expensive. */ +#ifndef USED_FOR_TARGET +#define ENABLE_TREE_CHECKING 1 +#endif + + +/* Define if you want all gimple types to be verified after gimplifiation. + This is cheap. */ +#ifndef USED_FOR_TARGET +#define ENABLE_TYPES_CHECKING 1 +#endif + + +/* Define to get calls to the valgrind runtime enabled. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_VALGRIND_ANNOTATIONS */ +#endif + + +/* Define if you want to run subprograms and generated programs through + valgrind (a memory checker). This is extremely expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_VALGRIND_CHECKING */ +#endif + + +/* Define 0/1 if vtable verification feature is enabled. */ +#ifndef USED_FOR_TARGET +#define ENABLE_VTABLE_VERIFY 0 +#endif + + +/* Define to 1 if installation paths should be looked up in the Windows + Registry. Ignored on non-Windows hosts. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_WIN32_REGISTRY */ +#endif + + +/* Define to the name of a file containing a list of extra machine modes for + this architecture. */ +#ifndef USED_FOR_TARGET +#define EXTRA_MODES_FILE "config/i386/i386-modes.def" +#endif + + +/* Define to enable detailed memory allocation stats gathering. */ +#ifndef USED_FOR_TARGET +#define GATHER_STATISTICS 0 +#endif + + +/* Define to 1 if `TIOCGWINSZ' requires . */ +#ifndef USED_FOR_TARGET +#define GWINSZ_IN_SYS_IOCTL 1 +#endif + + +/* mcontext_t fields start with __ */ +#ifndef USED_FOR_TARGET +/* #undef HAS_MCONTEXT_T_UNDERSCORES */ +#endif + + +/* Define if AF_INET6 supported. */ +#ifndef USED_FOR_TARGET +#define HAVE_AF_INET6 1 +#endif + + +/* Define if AF_UNIX supported. */ +#ifndef USED_FOR_TARGET +#define HAVE_AF_UNIX 1 +#endif + + +/* Define if your assembler supports architecture modifiers. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_ARCHITECTURE_MODIFIERS */ +#endif + + +/* Define if your avr assembler supports -mgcc-isr option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_AVR_MGCCISR_OPTION */ +#endif + + +/* Define if your avr assembler supports --mlink-relax option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_AVR_MLINK_RELAX_OPTION */ +#endif + + +/* Define if your avr assembler supports -mrmw option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_AVR_MRMW_OPTION */ +#endif + + +/* Define to the level of your assembler's compressed debug section support. + */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_COMPRESS_DEBUG no +#endif + + +/* Define if your assembler supports conditional branch relaxation. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_COND_BRANCH_RELAXATION */ +#endif + + +/* Define if your assembler supports the --debug-prefix-map option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DEBUG_PREFIX_MAP */ +#endif + + +/* Define if your assembler supports .module. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DOT_MODULE */ +#endif + + +/* Define if your assembler supports DSPR1 mult. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DSPR1_MULT */ +#endif + + +/* Define if your assembler supports .dtprelword. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DTPRELWORD */ +#endif + + +/* Define if your assembler supports dwarf2 .file/.loc directives, and + preserves file table indices exactly as given. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DWARF2_DEBUG_LINE */ +#endif + + +/* Define if your assembler supports views in dwarf2 .loc directives. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DWARF2_DEBUG_VIEW */ +#endif + + +/* Define if your assembler supports eh_frame pcrel encoding. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_EH_FRAME_PCREL_ENCODING_SUPPORT */ +#endif + + +/* Define if your assembler supports the R_PPC64_ENTRY relocation. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_ENTRY_MARKERS */ +#endif + + +/* Define if your assembler supports explicit relocation. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_EXPLICIT_RELOCS */ +#endif + + +/* Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_FMAF_HPC_VIS3 */ +#endif + + +/* Define if your assembler supports the --gdwarf2 option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_GDWARF2_DEBUG_FLAG */ +#endif + + +/* Define if your assembler supports the --gdwarf-5 option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_GDWARF_5_DEBUG_FLAG */ +#endif + + +/* Define if your assembler supports .gnu_attribute. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_GNU_ATTRIBUTE */ +#endif + + +/* Define true if the assembler supports '.long foo@GOTOFF'. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_GOTOFF_IN_DATA 0 +#endif + + +/* Define if your assembler supports the Sun syntax for cmov. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_CMOV_SUN_SYNTAX */ +#endif + + +/* Define if your assembler supports the subtraction of symbols in different + sections. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_DIFF_SECT_DELTA */ +#endif + + +/* Define if your assembler supports the ffreep mnemonic. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_FFREEP */ +#endif + + +/* Define if your assembler uses fildq and fistq mnemonics. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_FILDQ */ +#endif + + +/* Define if your assembler uses filds and fists mnemonics. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_FILDS */ +#endif + + +/* Define 0/1 if your assembler and linker support @GOT. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_GOT32X 0 +#endif + + +/* Define if your assembler supports HLE prefixes. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_HLE */ +#endif + + +/* Define if your assembler supports interunit movq mnemonic. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_INTERUNIT_MOVQ 0 +#endif + + +/* Define if your assembler supports the .quad directive. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_QUAD */ +#endif + + +/* Define if the assembler supports 'rep , lock '. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_REP_LOCK_PREFIX */ +#endif + + +/* Define if your assembler supports the sahf mnemonic in 64bit mode. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_SAHF */ +#endif + + +/* Define if your assembler supports the swap suffix. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_SWAP */ +#endif + + +/* Define if your assembler and linker support @tlsgdplt. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_TLSGDPLT */ +#endif + + +/* Define to 1 if your assembler and linker support @tlsldm. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_TLSLDM 0 +#endif + + +/* Define to 1 if your assembler and linker support @tlsldmplt. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_TLSLDMPLT 0 +#endif + + +/* Define 0/1 if your assembler and linker support calling ___tls_get_addr via + GOT. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_TLS_GET_ADDR_GOT 0 +#endif + + +/* Define if your assembler supports the 'ud2' mnemonic. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_UD2 */ +#endif + + +/* Define if your assembler supports the lituse_jsrdirect relocation. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_JSRDIRECT_RELOCS */ +#endif + + +/* Define if your assembler supports .sleb128 and .uleb128. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_LEB128 0 +#endif + + +/* Define if your assembler supports LEON instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_LEON */ +#endif + + +/* Define if the assembler won't complain about a line such as # 0 "" 2. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_LINE_ZERO */ +#endif + + +/* Define if your assembler supports ltoffx and ldxmov relocations. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_LTOFFX_LDXMOV_RELOCS */ +#endif + + +/* Define if your assembler supports the -mabi option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MABI_OPTION */ +#endif + + +/* Define if your assembler supports .machine and .machinemode. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MACHINE_MACHINEMODE */ +#endif + + +/* Define if your macOS assembler supports .build_version directives */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MACOS_BUILD_VERSION */ +#endif + + +/* Define if the assembler understands -march=rv*_zifencei. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MARCH_ZIFENCEI */ +#endif + + +/* Define if your assembler supports mfcr field. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MFCRF */ +#endif + + +/* Define if the assembler understands -misa-spec=. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MISA_SPEC */ +#endif + + +/* Define if your macOS assembler supports -mllvm -x86-pad-for-align=false. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MLLVM_X86_PAD_FOR_ALIGN */ +#endif + + +/* Define if your macOS assembler supports the -mmacos-version-min option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MMACOSX_VERSION_MIN_OPTION */ +#endif + + +/* Define if your assembler supports -mrelax option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MRELAX_OPTION */ +#endif + + +/* Define if your assembler supports .mspabi_attribute. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MSPABI_ATTRIBUTE */ +#endif + + +/* Define if the assembler understands -mnan=. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_NAN */ +#endif + + +/* Define if your assembler supports %gotoff relocation syntax. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_NIOS2_GOTOFF_RELOCATION */ +#endif + + +/* Define if your assembler supports the -no-mul-bug-abort option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_NO_MUL_BUG_ABORT_OPTION */ +#endif + + +/* Define if the assembler understands -mno-shared. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_NO_SHARED */ +#endif + + +/* Define if your assembler supports offsetable %lo(). */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_OFFSETABLE_LO10 */ +#endif + + +/* Define if your assembler supports R_PPC*_PLTSEQ relocations. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_PLTSEQ */ +#endif + + +/* Define if your assembler supports htm insns on power10. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_POWER10_HTM */ +#endif + + +/* Define if your assembler supports .ref */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_REF */ +#endif + + +/* Define if your assembler supports R_PPC_REL16 relocs. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_REL16 */ +#endif + + +/* Define if your assembler supports -relax option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_RELAX_OPTION */ +#endif + + +/* Define if your assembler supports .attribute. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_RISCV_ATTRIBUTE */ +#endif + + +/* Define 0/1 if your assembler and linker support R_X86_64_CODE_6_GOTTPOFF. + */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_R_X86_64_CODE_6_GOTTPOFF 0 +#endif + + +/* Define if your assembler supports relocs needed by -fpic. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SMALL_PIC_RELOCS */ +#endif + + +/* Define if your assembler supports SPARC4 instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC4 */ +#endif + + +/* Define if your assembler supports SPARC5 and VIS 4.0 instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC5_VIS4 */ +#endif + + +/* Define if your assembler supports SPARC6 instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC6 */ +#endif + + +/* Define if your assembler and linker support GOTDATA_OP relocs. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC_GOTDATA_OP */ +#endif + + +/* Define if your assembler and linker support unaligned PC relative relocs. + */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC_UA_PCREL */ +#endif + + +/* Define if your assembler and linker support unaligned PC relative relocs + against hidden symbols. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC_UA_PCREL_HIDDEN */ +#endif + + +/* Define if your assembler supports call36 relocation. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SUPPORT_CALL36 */ +#endif + + +/* Define if your assembler and linker support thread-local storage. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_TLS */ +#endif + + +/* Define if your assembler supports tls le relocation. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_TLS_LE_RELAXATION */ +#endif + + +/* Define if your assembler supports vl/vst/vlm/vstm with an optional + alignment hint argument. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS */ +#endif + + +/* Define if your assembler supports vl/vst/vlm/vstm with an optional + alignment hint argument on z13. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13 */ +#endif + + +/* Define if your assembler supports VSX instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_VSX */ +#endif + + +/* Define if your assembler supports --gdwarf-4/--gdwarf-5 even with compiler + generated .debug_line. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_WORKING_DWARF_N_FLAG */ +#endif + + +/* Define if your assembler supports -xbrace_comment option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_XBRACE_COMMENT_OPTION */ +#endif + + +/* Define to 1 if you have the `atoq' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_ATOQ */ +#endif + + +/* Define to 1 if you have the Mac OS X function + CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES */ +#endif + + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ +#endif + + +/* Define to 1 if you have the `clearerr_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_CLEARERR_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `clock' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_CLOCK 1 +#endif + + +/* Define if defines clock_t. */ +#ifndef USED_FOR_TARGET +#define HAVE_CLOCK_T 1 +#endif + + +/* Define 0/1 if your assembler and linker support COMDAT groups. */ +#ifndef USED_FOR_TARGET +#define HAVE_COMDAT_GROUP 0 +#endif + + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DCGETTEXT 1 +#endif + + +/* Define to 1 if we found a declaration for 'abort', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ABORT 1 +#endif + + +/* Define to 1 if we found a declaration for 'asprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ASPRINTF 1 +#endif + + +/* Define to 1 if we found a declaration for 'atof', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ATOF 1 +#endif + + +/* Define to 1 if we found a declaration for 'atol', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ATOL 1 +#endif + + +/* Define to 1 if we found a declaration for 'atoll', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ATOLL 1 +#endif + + +/* Define to 1 if you have the declaration of `basename(const char*)', and to + 0 if you don't. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_BASENAME 1 +#endif + + +/* Define to 1 if we found a declaration for 'calloc', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_CALLOC 1 +#endif + + +/* Define to 1 if we found a declaration for 'clearerr_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_CLEARERR_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'clock', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_CLOCK 1 +#endif + + +/* Define to 1 if we found a declaration for 'errno', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ERRNO 1 +#endif + + +/* Define to 1 if we found a declaration for 'feof_unlocked', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FEOF_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'ferror_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FERROR_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'fflush_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FFLUSH_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'ffs', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FFS 1 +#endif + + +/* Define to 1 if we found a declaration for 'fgetc_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FGETC_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'fgets_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FGETS_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'fileno_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FILENO_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'fprintf_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FPRINTF_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fputc_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FPUTC_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'fputs_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FPUTS_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'fread_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FREAD_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'free', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FREE 1 +#endif + + +/* Define to 1 if we found a declaration for 'fwrite_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FWRITE_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'getchar_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETCHAR_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'getcwd', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETCWD 1 +#endif + + +/* Define to 1 if we found a declaration for 'getc_unlocked', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETC_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'getenv', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETENV 1 +#endif + + +/* Define to 1 if we found a declaration for 'getopt', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETOPT 1 +#endif + + +/* Define to 1 if we found a declaration for 'getpagesize', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETPAGESIZE 1 +#endif + + +/* Define to 1 if we found a declaration for 'getrlimit', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETRLIMIT 1 +#endif + + +/* Define to 1 if we found a declaration for 'getrusage', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETRUSAGE 1 +#endif + + +/* Define to 1 if we found a declaration for 'getwd', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETWD 1 +#endif + + +/* Define to 1 if we found a declaration for 'ldgetname', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_LDGETNAME 0 +#endif + + +/* Define to 1 if we found a declaration for 'madvise', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_MADVISE 1 +#endif + + +/* Define to 1 if we found a declaration for 'mallinfo', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_MALLINFO 1 +#endif + + +/* Define to 1 if we found a declaration for 'mallinfo2', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_MALLINFO2 1 +#endif + + +/* Define to 1 if we found a declaration for 'malloc', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_MALLOC 1 +#endif + + +/* Define to 1 if we found a declaration for 'putchar_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_PUTCHAR_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'putc_unlocked', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_PUTC_UNLOCKED 1 +#endif + + +/* Define to 1 if we found a declaration for 'realloc', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_REALLOC 1 +#endif + + +/* Define to 1 if we found a declaration for 'sbrk', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SBRK 1 +#endif + + +/* Define to 1 if we found a declaration for 'setenv', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SETENV 1 +#endif + + +/* Define to 1 if we found a declaration for 'setrlimit', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SETRLIMIT 1 +#endif + + +/* Define to 1 if we found a declaration for 'sigaltstack', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SIGALTSTACK 1 +#endif + + +/* Define to 1 if we found a declaration for 'snprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SNPRINTF 1 +#endif + + +/* Define to 1 if we found a declaration for 'stpcpy', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STPCPY 1 +#endif + + +/* Define to 1 if we found a declaration for 'strnlen', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRNLEN 1 +#endif + + +/* Define to 1 if we found a declaration for 'strsignal', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRSIGNAL 1 +#endif + + +/* Define to 1 if you have the declaration of `strstr(const char*,const + char*)', and to 0 if you don't. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRSTR 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtol', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtoll', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOLL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtoul', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOUL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtoull', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOULL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strverscmp', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRVERSCMP 1 +#endif + + +/* Define to 1 if we found a declaration for 'times', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_TIMES 1 +#endif + + +/* Define to 1 if we found a declaration for 'unsetenv', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_UNSETENV 1 +#endif + + +/* Define to 1 if we found a declaration for 'vasprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_VASPRINTF 1 +#endif + + +/* Define to 1 if we found a declaration for 'vsnprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_VSNPRINTF 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_DIRECT_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_DLFCN_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_EXT_HASH_MAP 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_FCNTL_H 1 +#endif + + +/* Define to 1 if you have the `feof_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FEOF_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `ferror_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FERROR_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `fflush_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FFLUSH_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `fgetc_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FGETC_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `fgets_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FGETS_UNLOCKED 1 +#endif + + +/* Define 0/1 if -fhardened is supported */ +#ifndef USED_FOR_TARGET +#define HAVE_FHARDENED_SUPPORT 1 +#endif + + +/* Define to 1 if you have the `fileno_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FILENO_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `fork' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FORK 1 +#endif + + +/* Define to 1 if you have the `fprintf_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FPRINTF_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fputc_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FPUTC_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `fputs_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FPUTS_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `fread_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FREAD_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `fstatat' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FSTATAT 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_FTW_H 1 +#endif + + +/* Define to 1 if you have the `fwrite_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_FWRITE_UNLOCKED 1 +#endif + + +/* Define if your assembler supports specifying the alignment of objects + allocated using the GAS .comm command. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_ALIGNED_COMM */ +#endif + + +/* Define if your Arm assembler permits context-specific feature extensions. + */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_ARM_EXTENDED_ARCH */ +#endif + + +/* Define if your assembler supports .balign and .p2align. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_BALIGN_AND_P2ALIGN */ +#endif + + +/* Define 0/1 if your assembler supports CFI directives. */ +#define HAVE_GAS_CFI_DIRECTIVE 0 + +/* Define 0/1 if your assembler supports .cfi_personality. */ +#define HAVE_GAS_CFI_PERSONALITY_DIRECTIVE 0 + +/* Define 0/1 if your assembler supports .cfi_sections. */ +#define HAVE_GAS_CFI_SECTIONS_DIRECTIVE 0 + +/* Define if your assembler supports the .loc discriminator sub-directive. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_DISCRIMINATOR */ +#endif + + +/* Define if your assembler supports @gnu_unique_object. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_GNU_UNIQUE_OBJECT */ +#endif + + +/* Define if your assembler and linker support .hidden. */ +/* #undef HAVE_GAS_HIDDEN */ + +/* Define if your assembler supports .lcomm with an alignment field. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_LCOMM_WITH_ALIGNMENT */ +#endif + + +/* Define if your assembler supports .literal16. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_LITERAL16 */ +#endif + + +/* Define if your assembler supports the .loc is_stmt sub-directive. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_LOC_STMT */ +#endif + + +/* Define if your assembler supports specifying the maximum number of bytes to + skip when using the GAS .p2align command. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_MAX_SKIP_P2ALIGN */ +#endif + + +/* Define if your assembler supports the .set micromips directive */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_MICROMIPS */ +#endif + + +/* Define if your assembler supports .nsubspa comdat option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_NSUBSPA_COMDAT */ +#endif + + +/* Define if your assembler and linker support 32-bit section relative relocs + via '.secrel32 label'. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_PE_SECREL32_RELOC */ +#endif + + +/* Define if your assembler supports specifying the exclude section flag. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_SECTION_EXCLUDE 0 +#endif + + +/* Define 0/1 if your assembler supports 'o' flag in .section directive. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_SECTION_LINK_ORDER 0 +#endif + + +/* Define 0/1 if your assembler supports marking sections with SHF_GNU_RETAIN + flag. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_SHF_GNU_RETAIN 0 +#endif + + +/* Define 0/1 if your assembler supports marking sections with SHF_MERGE flag. + */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_SHF_MERGE 0 +#endif + + +/* Define if your assembler supports .subsection and .subsection -1 starts + emitting at the beginning of your section. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_SUBSECTION_ORDERING */ +#endif + + +/* Define if your assembler supports .weak. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_WEAK */ +#endif + + +/* Define if your assembler supports .weakref. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_WEAKREF */ +#endif + + +/* Define to 1 if you have the `getauxval' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETAUXVAL 1 +#endif + + +/* Define to 1 if you have the `getchar_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETCHAR_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `getc_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETC_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `getrlimit' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETRLIMIT 1 +#endif + + +/* Define to 1 if you have the `getrusage' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETRUSAGE 1 +#endif + + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETTEXT 1 +#endif + + +/* Define to 1 if you have the `gettimeofday' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETTIMEOFDAY 1 +#endif + + +/* Define to 1 if using GNU as. */ +#ifndef USED_FOR_TARGET +#define HAVE_GNU_AS 1 +#endif + + +/* Define if your system supports gnu indirect functions. */ +#ifndef USED_FOR_TARGET +#define HAVE_GNU_INDIRECT_FUNCTION 1 +#endif + + +/* Define to 1 if using GNU ld. */ +#ifndef USED_FOR_TARGET +#define HAVE_GNU_LD 1 +#endif + + +/* Define if the gold linker supports split stack and is available as a + non-default */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GOLD_NON_DEFAULT_SPLIT_STACK */ +#endif + + +/* Define if you have the iconv() function and it works. */ +#ifndef USED_FOR_TARGET +#define HAVE_ICONV 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_ICONV_H 1 +#endif + + +/* Define 0/1 if .init_array/.fini_array sections are available and working. + */ +#ifndef USED_FOR_TARGET +#define HAVE_INITFINI_ARRAY_SUPPORT 1 +#endif + + +/* Define to 1 if the system has the type `intmax_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_INTMAX_T 1 +#endif + + +/* Define to 1 if the system has the type `intptr_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_INTPTR_T 1 +#endif + + +/* Define if you have a working header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_INTTYPES_H 1 +#endif + + +/* Define to 1 if you have the `kill' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_KILL 1 +#endif + + +/* Define if you have and nl_langinfo(CODESET). */ +#ifndef USED_FOR_TARGET +#define HAVE_LANGINFO_CODESET 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_LANGINFO_H 1 +#endif + + +/* Define if your file defines LC_MESSAGES. */ +#ifndef USED_FOR_TARGET +#define HAVE_LC_MESSAGES 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LDFCN_H */ +#endif + + +/* Define if your linker supports --as-needed/--no-as-needed or equivalent + options. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_AS_NEEDED */ +#endif + + +/* Define if your linker supports emulation avrxmega2_flmap. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_AVR_AVRXMEGA2_FLMAP */ +#endif + + +/* Define if your default avr linker script for avrxmega3 leaves .rodata in + flash. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_AVR_AVRXMEGA3_RODATA_IN_FLASH */ +#endif + + +/* Define if your linker supports emulation avrxmega4_flmap. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_AVR_AVRXMEGA4_FLMAP */ +#endif + + +/* Define if your linker supports -z bndplt */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_BNDPLT_SUPPORT */ +#endif + + +/* Define if the PE linker has broken DWARF 5 support. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_BROKEN_PE_DWARF5 */ +#endif + + +/* Define if your linker supports --build-id. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_BUILDID */ +#endif + + +/* Define if the linker supports clearing hardware capabilities via mapfile. + */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_CLEARCAP */ +#endif + + +/* Define to the level of your linker's compressed debug section support. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_COMPRESS_DEBUG 0 +#endif + + +/* Define if your linker supports --demangle option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_DEMANGLE */ +#endif + + +/* Define 0/1 if your linker supports CIE v3 in .eh_frame. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_EH_FRAME_CIEV3 0 +#endif + + +/* Define if your linker supports .eh_frame_hdr. */ +/* #undef HAVE_LD_EH_FRAME_HDR */ + +/* Define if your linker supports garbage collection of sections in presence + of EH frames. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_EH_GC_SECTIONS */ +#endif + + +/* Define if your linker has buggy garbage collection of sections support when + .text.startup.foo like sections are used. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_EH_GC_SECTIONS_BUG */ +#endif + + +/* Define if your PowerPC64 linker supports a large TOC. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_LARGE_TOC */ +#endif + + +/* Define 0/1 if your linker supports -z now */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_NOW_SUPPORT 0 +#endif + + +/* Define if your PowerPC64 linker only needs function descriptor syms. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_NO_DOT_SYMS */ +#endif + + +/* Define if your linker can relax absolute .eh_frame personality pointers + into PC-relative form. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_PERSONALITY_RELAXATION */ +#endif + + +/* Define if the PE linker supports --disable-dynamicbase option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_PE_DISABLE_DYNAMICBASE */ +#endif + + +/* Define if your linker supports PIE option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_PIE */ +#endif + + +/* Define 0/1 if your linker supports -pie option with copy reloc. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_PIE_COPYRELOC 0 +#endif + + +/* Define if your PowerPC linker has .gnu.attributes long double support. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE */ +#endif + + +/* Define if your linker supports --push-state/--pop-state */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_PUSHPOPSTATE_SUPPORT */ +#endif + + +/* Define 0/1 if your linker supports -z relro */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_RELRO_SUPPORT 0 +#endif + + +/* Define if your linker links a mix of read-only and read-write sections into + a read-write section. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_RO_RW_SECTION_MIXING */ +#endif + + +/* Define if your linker supports the *_sol2 emulations. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_SOL2_EMULATION */ +#endif + + +/* Define if your linker supports -Bstatic/-Bdynamic or equivalent options. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_STATIC_DYNAMIC */ +#endif + + +/* Define if your linker supports --sysroot. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_SYSROOT */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_LIMITS_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_LOCALE_H 1 +#endif + + +/* Define to 1 if the system has the type `long long'. */ +#ifndef USED_FOR_TARGET +#define HAVE_LONG_LONG 1 +#endif + + +/* Define to 1 if the system has the type `long long int'. */ +#ifndef USED_FOR_TARGET +#define HAVE_LONG_LONG_INT 1 +#endif + + +/* Define to the level of your linker's plugin support. */ +#ifndef USED_FOR_TARGET +#define HAVE_LTO_PLUGIN 0 +#endif + + +/* Define to 1 if you have the `madvise' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_MADVISE 1 +#endif + + +/* Define to 1 if you have the `mallinfo' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_MALLINFO 1 +#endif + + +/* Define to 1 if you have the `mallinfo2' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_MALLINFO2 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_MALLOC_H 1 +#endif + + +/* Define to 1 if you have the `mbstowcs' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_MBSTOWCS 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_MEMORY_H 1 +#endif + + +/* Define to 1 if you have the `mmap' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_MMAP 1 +#endif + + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#ifndef USED_FOR_TARGET +#define HAVE_MMAP_ANON 1 +#endif + + +/* Define if mmap of /dev/zero works. */ +#ifndef USED_FOR_TARGET +#define HAVE_MMAP_DEV_ZERO 1 +#endif + + +/* Define if read-only mmap of a plain file works. */ +#ifndef USED_FOR_TARGET +#define HAVE_MMAP_FILE 1 +#endif + + +/* Define if GCC has been configured with --enable-newlib-nano-formatted-io. + */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_NEWLIB_NANO_FORMATTED_IO */ +#endif + + +/* Define to 1 if you have the `nl_langinfo' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_NL_LANGINFO 1 +#endif + + +/* Define to 1 if you have the `popen' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_POPEN 1 +#endif + + +/* Define to 1 if you have the `posix_fallocate' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_POSIX_FALLOCATE 1 +#endif + + +/* Define to 1 if you have the `putchar_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_PUTCHAR_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `putc_unlocked' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_PUTC_UNLOCKED 1 +#endif + + +/* Define to 1 if you have the `setlocale' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_SETLOCALE 1 +#endif + + +/* Define to 1 if you have the `setrlimit' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_SETRLIMIT 1 +#endif + + +/* Define if defines sighandler_t */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SIGHANDLER_T */ +#endif + + +/* Define if the system-provided CRTs are present on Solaris. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SOLARIS_CRTS */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STDDEF_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STDINT_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STDLIB_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STRINGS_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STRING_H 1 +#endif + + +/* Define to 1 if you have the `strsignal' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_STRSIGNAL 1 +#endif + + +/* Define if defines struct tms. */ +#ifndef USED_FOR_TARGET +#define HAVE_STRUCT_TMS 1 +#endif + + +/* Define if defines std::swap. */ +#ifndef USED_FOR_TARGET +#define HAVE_SWAP_IN_UTILITY 1 +#endif + + +/* Define to 1 if you have the `sysconf' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYSCONF 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_AUXV_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_FILE_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SYS_LOCKING_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_MMAN_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_PARAM_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_RESOURCE_H 1 +#endif + + +/* Define if your target C library provides sys/sdt.h */ +#define HAVE_SYS_SDT_H 1 + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_STAT_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_TIMES_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_TIME_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_TYPES_H 1 +#endif + + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_WAIT_H 1 +#endif + + +/* Define to 1 if you have the `times' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_TIMES 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_TIME_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_TR1_UNORDERED_MAP 1 +#endif + + +/* Define to 1 if the system has the type `uintmax_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_UINTMAX_T 1 +#endif + + +/* Define to 1 if the system has the type `uintptr_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_UINTPTR_T 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_UNISTD_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_UNORDERED_MAP 1 +#endif + + +/* Define to 1 if the system has the type `unsigned long long int'. */ +#ifndef USED_FOR_TARGET +#define HAVE_UNSIGNED_LONG_LONG_INT 1 +#endif + + +/* Define to 1 if you have the `vfork' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_VFORK 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_VFORK_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_WCHAR_H 1 +#endif + + +/* Define to 1 if you have the `wcswidth' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_WCSWIDTH 1 +#endif + + +/* Define to 1 if `fork' works. */ +#ifndef USED_FOR_TARGET +#define HAVE_WORKING_FORK 1 +#endif + + +/* Define this macro if mbstowcs does not crash when its first argument is + NULL. */ +#ifndef USED_FOR_TARGET +#define HAVE_WORKING_MBSTOWCS 1 +#endif + + +/* Define to 1 if `vfork' works. */ +#ifndef USED_FOR_TARGET +#define HAVE_WORKING_VFORK 1 +#endif + + +/* Define if your assembler supports AIX debug frame section label reference. + */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_XCOFF_DWARF_EXTRAS */ +#endif + + +/* Define if you have a working header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_ZSTD_H 1 +#endif + + +/* Define if isl is in use. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_isl */ +#endif + + +/* Define if F_SETLKW supported by fcntl. */ +#ifndef USED_FOR_TARGET +#define HOST_HAS_F_SETLKW 1 +#endif + + +/* Define if _LK_LOC supported by _locking. */ +#ifndef USED_FOR_TARGET +/* #undef HOST_HAS_LK_LOCK */ +#endif + + +/* Define if O_CLOEXEC supported by fcntl. */ +#ifndef USED_FOR_TARGET +#define HOST_HAS_O_CLOEXEC 1 +#endif + + +/* Define if O_NONBLOCK supported by fcntl. */ +#ifndef USED_FOR_TARGET +#define HOST_HAS_O_NONBLOCK 1 +#endif + + +/* Define which stat syscall is able to handle 64bit indodes. */ +#ifndef USED_FOR_TARGET +/* #undef HOST_STAT_FOR_64BIT_INODES */ +#endif + + +/* Define as const if the declaration of iconv() needs const. */ +#ifndef USED_FOR_TARGET +#define ICONV_CONST +#endif + + +/* Define if int64_t uses long as underlying type. */ +#ifndef USED_FOR_TARGET +#define INT64_T_IS_LONG 1 +#endif + + +/* Define to 1 if ld64 supports '-demangle'. */ +#ifndef USED_FOR_TARGET +/* #undef LD64_HAS_DEMANGLE */ +#endif + + +/* Define to 1 if ld64 supports '-export_dynamic'. */ +#ifndef USED_FOR_TARGET +/* #undef LD64_HAS_EXPORT_DYNAMIC */ +#endif + + +/* Define to 1 if ld64 supports '-platform_version'. */ +#ifndef USED_FOR_TARGET +/* #undef LD64_HAS_PLATFORM_VERSION */ +#endif + + +/* Define to ld64 version. */ +#ifndef USED_FOR_TARGET +/* #undef LD64_VERSION */ +#endif + + +/* Define to the linker option to ignore unused dependencies. */ +#ifndef USED_FOR_TARGET +/* #undef LD_AS_NEEDED_OPTION */ +#endif + + +/* Define to the linker option to enable compressed debug sections. */ +#ifndef USED_FOR_TARGET +#define LD_COMPRESS_DEBUG_OPTION "" +#endif + + +/* Define to the linker option to enable use of shared objects. */ +#ifndef USED_FOR_TARGET +/* #undef LD_DYNAMIC_OPTION */ +#endif + + +/* Define to the linker option to keep unused dependencies. */ +#ifndef USED_FOR_TARGET +/* #undef LD_NO_AS_NEEDED_OPTION */ +#endif + + +/* Define to the linker option to disable use of shared objects. */ +#ifndef USED_FOR_TARGET +/* #undef LD_STATIC_OPTION */ +#endif + + +/* The linker hash style */ +#ifndef USED_FOR_TARGET +/* #undef LINKER_HASH_STYLE */ +#endif + + +/* Define to the name of the LTO plugin DSO that must be passed to the + linker's -plugin=LIB option. */ +#ifndef USED_FOR_TARGET +#define LTOPLUGINSONAME "liblto_plugin.so" +#endif + + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#ifndef USED_FOR_TARGET +#define LT_OBJDIR ".libs/" +#endif + + +/* Define if we should link mingw executables with --large-address-aware */ +#ifndef USED_FOR_TARGET +/* #undef MINGW_DEFAULT_LARGE_ADDR_AWARE */ +#endif + + +/* Value to set mingw's _dowildcard to. */ +#ifndef USED_FOR_TARGET +/* #undef MINGW_DOWILDCARD */ +#endif + + +/* Define if assembler supports %reloc. */ +#ifndef USED_FOR_TARGET +/* #undef MIPS_EXPLICIT_RELOCS */ +#endif + + +/* Define if host mkdir takes a single argument. */ +#ifndef USED_FOR_TARGET +/* #undef MKDIR_TAKES_ONE_ARG */ +#endif + + +/* Define to 1 to if -foffload is defaulted */ +#ifndef USED_FOR_TARGET +/* #undef OFFLOAD_DEFAULTED */ +#endif + + +/* Define to offload targets, separated by commas. */ +#ifndef USED_FOR_TARGET +#define OFFLOAD_TARGETS "" +#endif + + +/* Define to the address where bug reports for this package should be sent. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_BUGREPORT "" +#endif + + +/* Define to the full name of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_NAME "" +#endif + + +/* Define to the full name and version of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_STRING "" +#endif + + +/* Define to the one symbol short name of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_TARNAME "" +#endif + + +/* Define to the home page for this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_URL "" +#endif + + +/* Define to the version of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_VERSION "" +#endif + + +/* Specify plugin linker */ +#ifndef USED_FOR_TARGET +#define PLUGIN_LD_SUFFIX "" +#endif + + +/* Define to .TOC. alignment forced by your linker. */ +#ifndef USED_FOR_TARGET +/* #undef POWERPC64_TOC_POINTER_ALIGNMENT */ +#endif + + +/* Define to PREFIX/include if cpp should also search that directory. */ +#ifndef USED_FOR_TARGET +/* #undef PREFIX_INCLUDE_DIR */ +#endif + + +/* The size of `dev_t', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_DEV_T 8 +#endif + + +/* The size of `ino_t', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_INO_T 8 +#endif + + +/* The size of `int', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_INT 4 +#endif + + +/* The size of `long', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_LONG 8 +#endif + + +/* The size of `long long', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_LONG_LONG 8 +#endif + + +/* The size of `short', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_SHORT 2 +#endif + + +/* The size of `void *', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_VOID_P 8 +#endif + + +/* Define to 1 if you have the ANSI C header files. */ +#ifndef USED_FOR_TARGET +#define STDC_HEADERS 1 +#endif + + +/* Define if you can safely include both and . */ +#ifndef USED_FOR_TARGET +#define STRING_WITH_STRINGS 1 +#endif + + +/* Define if TFmode long double should be the default */ +#ifndef USED_FOR_TARGET +/* #undef TARGET_DEFAULT_LONG_DOUBLE_128 */ +#endif + + +/* Define if your target C library provides the `dl_iterate_phdr' function. */ +/* #undef TARGET_DL_ITERATE_PHDR */ + +/* GNU C Library major version number used on the target, or 0. */ +#ifndef USED_FOR_TARGET +#define TARGET_GLIBC_MAJOR 2 +#endif + + +/* GNU C Library minor version number used on the target, or 0. */ +#ifndef USED_FOR_TARGET +#define TARGET_GLIBC_MINOR 39 +#endif + + +/* Define if your target C Library properly handles PT_GNU_STACK */ +#ifndef USED_FOR_TARGET +/* #undef TARGET_LIBC_GNUSTACK */ +#endif + + +/* Define if your target C Library provides the AT_HWCAP value in the TCB */ +#ifndef USED_FOR_TARGET +/* #undef TARGET_LIBC_PROVIDES_HWCAP_IN_TCB */ +#endif + + +/* Define if your target C library provides stack protector support */ +#ifndef USED_FOR_TARGET +#define TARGET_LIBC_PROVIDES_SSP 1 +#endif + + +/* Define to 1 if you can safely include both and . */ +#ifndef USED_FOR_TARGET +#define TIME_WITH_SYS_TIME 1 +#endif + + +/* Define to the flag used to mark TLS sections if the default (`T') doesn't + work. */ +#ifndef USED_FOR_TARGET +/* #undef TLS_SECTION_ASM_FLAG */ +#endif + + +/* Define if your assembler mis-optimizes .eh_frame data. */ +#ifndef USED_FOR_TARGET +/* #undef USE_AS_TRADITIONAL_FORMAT */ +#endif + + +/* Define if you want to generate code by default that assumes that the Cygwin + DLL exports wrappers to support libstdc++ function replacement. */ +#ifndef USED_FOR_TARGET +/* #undef USE_CYGWIN_LIBSTDCXX_WRAPPERS */ +#endif + + +/* Define to 1 if the 'long long' type is wider than 'long' but still + efficiently supported by the host hardware. */ +#ifndef USED_FOR_TARGET +/* #undef USE_LONG_LONG_FOR_WIDEST_FAST_INT */ +#endif + + +/* Define if we should use leading underscore on 64 bit mingw targets */ +#ifndef USED_FOR_TARGET +/* #undef USE_MINGW64_LEADING_UNDERSCORES */ +#endif + + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Define to be the last component of the Windows registry key under which to + look for installation paths. The full key used will be + HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}. + The default is the GCC version number. */ +#ifndef USED_FOR_TARGET +/* #undef WIN32_REGISTRY_KEY */ +#endif + + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#ifndef USED_FOR_TARGET +/* #undef _FILE_OFFSET_BITS */ +#endif + + +/* Define for large files, on AIX-style hosts. */ +#ifndef USED_FOR_TARGET +/* #undef _LARGE_FILES */ +#endif + + +/* Define to 1 if on MINIX. */ +#ifndef USED_FOR_TARGET +/* #undef _MINIX */ +#endif + + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#ifndef USED_FOR_TARGET +/* #undef _POSIX_1_SOURCE */ +#endif + + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#ifndef USED_FOR_TARGET +/* #undef _POSIX_SOURCE */ +#endif + + +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#ifndef USED_FOR_TARGET +/* #undef _UINT32_T */ +#endif + + +/* Define for Solaris 2.5.1 so the uint64_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#ifndef USED_FOR_TARGET +/* #undef _UINT64_T */ +#endif + + +/* Define for Solaris 2.5.1 so the uint8_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#ifndef USED_FOR_TARGET +/* #undef _UINT8_T */ +#endif + + +/* Define to `char *' if does not define. */ +#ifndef USED_FOR_TARGET +/* #undef caddr_t */ +#endif + + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to the type of a signed integer type of width exactly 16 bits if + such a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef int16_t */ +#endif + + +/* Define to the type of a signed integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef int32_t */ +#endif + + +/* Define to the type of a signed integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef int64_t */ +#endif + + +/* Define to the type of a signed integer type of width exactly 8 bits if such + a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef int8_t */ +#endif + + +/* Define to the widest signed integer type if and do + not define. */ +#ifndef USED_FOR_TARGET +/* #undef intmax_t */ +#endif + + +/* Define to the type of a signed integer type wide enough to hold a pointer, + if such a type exists, and if the system does not define it. */ +#ifndef USED_FOR_TARGET +/* #undef intptr_t */ +#endif + + +/* Define to `int' if does not define. */ +#ifndef USED_FOR_TARGET +/* #undef pid_t */ +#endif + + +/* Define to `long' if doesn't define. */ +#ifndef USED_FOR_TARGET +/* #undef rlim_t */ +#endif + + +/* Define to `int' if does not define. */ +#ifndef USED_FOR_TARGET +/* #undef ssize_t */ +#endif + + +/* Define to the type of an unsigned integer type of width exactly 16 bits if + such a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef uint16_t */ +#endif + + +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef uint32_t */ +#endif + + +/* Define to the type of an unsigned integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef uint64_t */ +#endif + + +/* Define to the type of an unsigned integer type of width exactly 8 bits if + such a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef uint8_t */ +#endif + + +/* Define to the widest unsigned integer type if and + do not define. */ +#ifndef USED_FOR_TARGET +/* #undef uintmax_t */ +#endif + + +/* Define to the type of an unsigned integer type wide enough to hold a + pointer, if such a type exists, and if the system does not define it. */ +#ifndef USED_FOR_TARGET +/* #undef uintptr_t */ +#endif + + +/* Define as `fork' if `vfork' does not work. */ +#ifndef USED_FOR_TARGET +/* #undef vfork */ +#endif + diff --git a/gcc/collect-ld b/gcc/collect-ld new file mode 100755 index 0000000000000..6f68f1c07b121 --- /dev/null +++ b/gcc/collect-ld @@ -0,0 +1,116 @@ +#! /bin/sh + +# Copyright (C) 2007-2024 Free Software Foundation, Inc. +# This file is part of GCC. + +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# Invoke as, ld or nm from the build tree. + +ORIGINAL_AS_FOR_TARGET="" +ORIGINAL_LD_FOR_TARGET="" +ORIGINAL_LD_BFD_FOR_TARGET="/.bfd" +ORIGINAL_LD_GOLD_FOR_TARGET="/.gold" +ORIGINAL_PLUGIN_LD_FOR_TARGET="" +ORIGINAL_NM_FOR_TARGET="" +ORIGINAL_DSYMUTIL_FOR_TARGET="" +exeext= +fast_install=needless +objdir=.libs + +invoked=`basename "$0"` +id=$invoked +case "$invoked" in + as) + original=$ORIGINAL_AS_FOR_TARGET + prog=as-new$exeext + dir=gas + ;; + collect-ld) + # Check -fuse-ld=bfd and -fuse-ld=gold + case " $* " in + *\ -fuse-ld=bfd\ *) + original=$ORIGINAL_LD_BFD_FOR_TARGET + ;; + *\ -fuse-ld=gold\ *) + original=$ORIGINAL_LD_GOLD_FOR_TARGET + ;; + *) + # when using a linker plugin, gcc will always pass '-plugin' as the + # first or second option to the linker. + if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then + original=$ORIGINAL_PLUGIN_LD_FOR_TARGET + else + original=$ORIGINAL_LD_FOR_TARGET + fi + ;; + esac + prog=ld-new$exeext + if test "$original" = ../gold/ld-new$exeext; then + dir=gold + # No need to handle relink since gold doesn't use libtool. + fast_install=yes + else + dir=ld + fi + id=ld + ;; + nm) + original=$ORIGINAL_NM_FOR_TARGET + prog=nm-new$exeext + dir=binutils + ;; + dsymutil) + original=$ORIGINAL_DSYMUTIL_FOR_TARGET + # We do not build this in tree - but still want to be able to execute + # a configured version from the build dir. + prog= + dir= + ;; +esac + +case "$original" in + ../*) + # compute absolute path of the location of this script + tdir=`dirname "$0"` + scriptdir=`cd "$tdir" && pwd` + + if test -x $scriptdir/../$dir/$prog; then + test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"} + + # if libtool did everything it needs to do, there's a fast path + lt_prog=$scriptdir/../$dir/$objdir/lt-$prog + test -x $lt_prog && exec $lt_prog ${1+"$@"} + + # libtool has not relinked ld-new yet, but we cannot just use the + # previous stage (because then the relinking would just never happen!). + # So we take extra care to use prev-ld/ld-new *on recursive calls*. + eval LT_RCU="\${LT_RCU_$id}" + test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + + eval LT_RCU_$id=1 + export LT_RCU_$id + $scriptdir/../$dir/$prog ${1+"$@"} + result=$? + exit $result + + else + exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + fi + ;; + *) + exec $original ${1+"$@"} + ;; +esac diff --git a/gcc/configargs.h b/gcc/configargs.h new file mode 100644 index 0000000000000..e23f63de56008 --- /dev/null +++ b/gcc/configargs.h @@ -0,0 +1,7 @@ +/* Generated automatically. */ +static const char configuration_arguments[] = ""; +static const char thread_model[] = "posix"; + +static const struct { + const char *name, *value; +} configure_default_options[] = { { "cpu", "generic" }, { "arch", "x86-64" } }; diff --git a/gcc/cstamp-h b/gcc/cstamp-h new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/gcc/cstamp-h @@ -0,0 +1 @@ + diff --git a/gcc/dsymutil b/gcc/dsymutil new file mode 100755 index 0000000000000..6f68f1c07b121 --- /dev/null +++ b/gcc/dsymutil @@ -0,0 +1,116 @@ +#! /bin/sh + +# Copyright (C) 2007-2024 Free Software Foundation, Inc. +# This file is part of GCC. + +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# Invoke as, ld or nm from the build tree. + +ORIGINAL_AS_FOR_TARGET="" +ORIGINAL_LD_FOR_TARGET="" +ORIGINAL_LD_BFD_FOR_TARGET="/.bfd" +ORIGINAL_LD_GOLD_FOR_TARGET="/.gold" +ORIGINAL_PLUGIN_LD_FOR_TARGET="" +ORIGINAL_NM_FOR_TARGET="" +ORIGINAL_DSYMUTIL_FOR_TARGET="" +exeext= +fast_install=needless +objdir=.libs + +invoked=`basename "$0"` +id=$invoked +case "$invoked" in + as) + original=$ORIGINAL_AS_FOR_TARGET + prog=as-new$exeext + dir=gas + ;; + collect-ld) + # Check -fuse-ld=bfd and -fuse-ld=gold + case " $* " in + *\ -fuse-ld=bfd\ *) + original=$ORIGINAL_LD_BFD_FOR_TARGET + ;; + *\ -fuse-ld=gold\ *) + original=$ORIGINAL_LD_GOLD_FOR_TARGET + ;; + *) + # when using a linker plugin, gcc will always pass '-plugin' as the + # first or second option to the linker. + if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then + original=$ORIGINAL_PLUGIN_LD_FOR_TARGET + else + original=$ORIGINAL_LD_FOR_TARGET + fi + ;; + esac + prog=ld-new$exeext + if test "$original" = ../gold/ld-new$exeext; then + dir=gold + # No need to handle relink since gold doesn't use libtool. + fast_install=yes + else + dir=ld + fi + id=ld + ;; + nm) + original=$ORIGINAL_NM_FOR_TARGET + prog=nm-new$exeext + dir=binutils + ;; + dsymutil) + original=$ORIGINAL_DSYMUTIL_FOR_TARGET + # We do not build this in tree - but still want to be able to execute + # a configured version from the build dir. + prog= + dir= + ;; +esac + +case "$original" in + ../*) + # compute absolute path of the location of this script + tdir=`dirname "$0"` + scriptdir=`cd "$tdir" && pwd` + + if test -x $scriptdir/../$dir/$prog; then + test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"} + + # if libtool did everything it needs to do, there's a fast path + lt_prog=$scriptdir/../$dir/$objdir/lt-$prog + test -x $lt_prog && exec $lt_prog ${1+"$@"} + + # libtool has not relinked ld-new yet, but we cannot just use the + # previous stage (because then the relinking would just never happen!). + # So we take extra care to use prev-ld/ld-new *on recursive calls*. + eval LT_RCU="\${LT_RCU_$id}" + test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + + eval LT_RCU_$id=1 + export LT_RCU_$id + $scriptdir/../$dir/$prog ${1+"$@"} + result=$? + exit $result + + else + exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + fi + ;; + *) + exec $original ${1+"$@"} + ;; +esac diff --git a/gcc/gcc-driver-name.h b/gcc/gcc-driver-name.h new file mode 100644 index 0000000000000..c693c6ec2625f --- /dev/null +++ b/gcc/gcc-driver-name.h @@ -0,0 +1 @@ +#define GCC_DRIVER_NAME "x86_64-pc-linux-gnu-gcc-15.0.0" diff --git a/gcc/m2/Make-maintainer b/gcc/m2/Make-maintainer new file mode 100644 index 0000000000000..6fa58975c58d5 --- /dev/null +++ b/gcc/m2/Make-maintainer @@ -0,0 +1,1443 @@ +# Make-maintainer.in subsidiary -*- makefile -*- build support for GNU M2 tools. + +# Copyright (C) 2022-2024 Free Software Foundation, Inc. + +#This file is part of GCC. + +#GCC is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3, or (at your option) +#any later version. + +#GCC is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. + +#You should have received a copy of the GNU General Public License +#along with GCC; see the file COPYING3. If not see +#. + +# QUIAT=@ +XGCC = ./xgcc -B./ +GM2_2 = ./gm2 -B./m2/m2obj2 -g -fm2-g + +# m2/ppg$(exeext) is the recursive descent parser generator. + +PPG-INTERFACE-C = libc.c mcrts.c Selective.c termios.c \ + SysExceptions.c wrapc.c \ + SYSTEM.c errno.c + +PPG-INTERFACE-CC = UnixArgs.cc ldtoa.cc dtoa.cc + +# Implementation modules found in the gm2-compiler directory. + +PPG-MODS = SymbolKey.mod NameKey.mod Lists.mod bnflex.mod Output.mod + +PPG-DEFS = SymbolKey.def NameKey.def Lists.def bnflex.def Output.def + +# Core library definition modules used by ppg found in the gm2-libs directory. + +PPG-LIB-DEFS = Args.def Assertion.def ASCII.def Debug.def \ + DynamicStrings.def FIO.def Indexing.def IO.def \ + NumberIO.def PushBackInput.def \ + M2Dependent.def \ + M2EXCEPTION.def M2RTS.def \ + RTExceptions.def \ + StdIO.def SFIO.def StrIO.def StrLib.def \ + Storage.def StrCase.def SysStorage.def + +# Core library implementation modules used by ppg found in the gm2-libs directory. + +PPG-LIB-MODS = ASCII.mod \ + Args.mod \ + Assertion.mod \ + Debug.mod \ + DynamicStrings.mod \ + FIO.mod \ + IO.mod \ + Indexing.mod \ + M2Dependent.mod \ + M2EXCEPTION.mod \ + M2RTS.mod \ + NumberIO.mod \ + PushBackInput.mod \ + RTExceptions.mod \ + SFIO.mod \ + StdIO.mod \ + Storage.mod \ + StrCase.mod \ + StrIO.mod \ + StrLib.mod \ + SysStorage.mod + +# Program module ppg.mod from which pge.mod is created. ppg.mod is +# where changes should be made and then you should run pge-maintainer +# to recreate the C++ version of pge. + +PPG-SRC = ppg.mod + +# m2/pg$(exext) is the 2nd generation parser generator built from the +# ebnf src without error recovery + +PG-SRC = pg.mod +PGE-DEF = ASCII.def \ + Args.def \ + Assertion.def \ + bnflex.def \ + Break.def \ + COROUTINES.def \ + CmdArgs.def \ + Debug.def \ + DynamicStrings.def \ + Environment.def \ + FIO.def \ + FormatStrings.def \ + FpuIO.def \ + IO.def \ + M2Dependent.def \ + M2EXCEPTION.def \ + M2RTS.def \ + MemUtils.def \ + NumberIO.def \ + Output.def \ + PushBackInput.def \ + RTExceptions.def \ + RTco.def \ + RTentity.def \ + RTint.def \ + SArgs.def \ + SFIO.def \ + SYSTEM.def \ + Selective.def \ + StdIO.def \ + Storage.def \ + StrCase.def \ + StrIO.def \ + StrLib.def \ + StringConvert.def \ + SymbolKey.def \ + SysExceptions.def \ + SysStorage.def \ + TimeString.def \ + UnixArgs.def \ + dtoa.def \ + errno.def \ + ldtoa.def \ + libc.def \ + libm.def \ + termios.def \ + wrapc.def \ + +PGE-DEPS = Gabort.cc \ + GArgs.cc \ + GArgs.h \ + GASCII.cc \ + GASCII.h \ + GAssertion.cc \ + GAssertion.h \ + Gbnflex.cc \ + Gbnflex.h \ + GBreak.h \ + GBuiltins.cc \ + Gcbuiltin.cc \ + GCmdArgs.h \ + GDebug.cc \ + GDebug.h \ + Gdtoa.cc \ + Gdtoa.h \ + GDynamicStrings.cc \ + GDynamicStrings.h \ + GEnvironment.h \ + Gerrno.cc \ + Gerrno.h \ + GFIO.cc \ + GFIO.h \ + GFormatStrings.h \ + GFpuIO.h \ + GIndexing.cc \ + GIndexing.h \ + GIO.cc \ + GIO.h \ + Gldtoa.cc \ + Gldtoa.h \ + Glibc.cc \ + Glibc.h \ + Glibm.cc \ + Glibm.h \ + GLists.cc \ + GLists.h \ + GM2Dependent.cc \ + GM2Dependent.h \ + GM2EXCEPTION.cc \ + GM2EXCEPTION.h \ + GM2RTS.cc \ + GM2RTS.h \ + Gmcrts.cc \ + Gmcrts.h \ + GNameKey.cc \ + GNameKey.h \ + Gnetwork.h \ + GNumberIO.cc \ + GNumberIO.h \ + GOutput.cc \ + GOutput.h \ + Gpge.cc \ + GPushBackInput.cc \ + GPushBackInput.h \ + GRTco.cc \ + GRTco.h \ + GRTentity.cc \ + GRTentity.h \ + GRTExceptions.cc \ + GRTExceptions.h \ + GSArgs.h \ + GScan.h \ + GSelective.cc \ + GSEnvironment.h \ + GSFIO.cc \ + GSFIO.h \ + GStdIO.cc \ + GStdIO.h \ + GStorage.cc \ + GStorage.h \ + GStrCase.cc \ + GStrCase.h \ + GStringConvert.h \ + GStrIO.cc \ + GStrIO.h \ + GStrLib.cc \ + GStrLib.h \ + GSymbolKey.cc \ + GSymbolKey.h \ + GSysExceptions.cc \ + GSysExceptions.h \ + GSysStorage.cc \ + GSysStorage.h \ + GSYSTEM.cc \ + GSYSTEM.h \ + Gtermios.cc \ + Gtermios.h \ + GTimeString.h \ + GUnixArgs.cc \ + GUnixArgs.h \ + Gwrapc.cc \ + Gwrapc.h + +BUILD-PPG-O = $(PPG-INTERFACE-C:%.c=m2/gm2-ppg-boot/$(SRC_PREFIX)%.o) \ + $(PPG-INTERFACE-CC:%.cc=m2/gm2-ppg-boot/$(SRC_PREFIX)%.o) \ + $(PPG-MODS:%.mod=m2/gm2-ppg-boot/$(SRC_PREFIX)%.o) \ + $(PPG-LIB-MODS:%.mod=m2/gm2-ppg-boot/$(SRC_PREFIX)%.o) \ + $(PPG-SRC:%.mod=m2/gm2-ppg-boot/$(SRC_PREFIX)%.o) + +MCC_ARGS= --olang=c++ \ + --quiet \ + --h-file-prefix=$(SRC_PREFIX) \ + -I$(srcdir)/m2/gm2-libs \ + -I$(srcdir)/m2/gm2-compiler \ + -I$(srcdir)/m2/gm2-libiberty \ + -I$(srcdir)/m2/gm2-gcc + +MCC=m2/boot-bin/mc$(exeext) $(MCC_ARGS) + +BUILD-PPG-LIBS-H = $(PPG-LIB-DEFS:%.def=m2/gm2-ppg-boot/$(SRC_PREFIX)%.h) + +BUILD-PPG-H = m2/boot-bin/mc$(exeext) $(BUILD-PPG-LIBS-H) + +BUILD-BOOT-PPG-H = $(BUILD-BOOT-H) \ + m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.h \ + m2/gm2-ppg-boot/$(SRC_PREFIX)M2Dependent.h \ + $(PGE-DEF:%.def=m2/gm2-ppg-boot/$(SRC_PREFIX)%.h) \ + $(PPG-DEFS:%.def=m2/gm2-ppg-boot/$(SRC_PREFIX)%.h) \ + $(PPG-LIB-DEFS:%.def=m2/gm2-ppg-boot/$(SRC_PREFIX)%.h) + +# BUILD-BOOT-PPG-H = $(BUILD-BOOT-H) $(PGE-DEF:%.def=m2/gm2-ppg-boot/$(SRC_PREFIX)%.h) + +m2/gm2-ppg-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-libs/$*.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)libc.o: $(srcdir)/m2/mc-boot-ch/Glibc.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)mcrts.o: $(srcdir)/m2/mc-boot-ch/Gmcrts.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)UnixArgs.o: $(srcdir)/m2/mc-boot-ch/GUnixArgs.cc + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)Selective.o: $(srcdir)/m2/mc-boot-ch/GSelective.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -Im2/gm2-libs -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)termios.o: $(srcdir)/m2/mc-boot-ch/Gtermios.cc m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)SysExceptions.o: $(srcdir)/m2/mc-boot-ch/GSysExceptions.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)ldtoa.o: $(srcdir)/m2/mc-boot-ch/Gldtoa.cc m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)dtoa.o: $(srcdir)/m2/mc-boot-ch/Gdtoa.cc m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)wrapc.o: $(srcdir)/m2/mc-boot-ch/Gwrapc.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)SYSTEM.o: $(srcdir)/m2/mc-boot-ch/GSYSTEM.c $(BUILD-BOOT-PPG-H) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)errno.o: $(srcdir)/m2/mc-boot-ch/Gerrno.cc + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.o: $(srcdir)/m2/gm2-libs/M2RTS.mod $(MCDEPS) $(BUILD-BOOT-PPG-H) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.cc $(srcdir)/m2/gm2-libs/M2RTS.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)SymbolKey.h: $(srcdir)/m2/gm2-compiler/SymbolKey.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/SymbolKey.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)SymbolKey.o: $(srcdir)/m2/gm2-compiler/SymbolKey.mod \ + $(MCDEPS) $(BUILD-BOOT-PPG-H) \ + m2/gm2-ppg-boot/$(SRC_PREFIX)SymbolKey.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)SymbolKey.cc $(srcdir)/m2/gm2-compiler/SymbolKey.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)SymbolKey.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)NameKey.h: $(srcdir)/m2/gm2-compiler/NameKey.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/NameKey.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)NameKey.o: $(srcdir)/m2/gm2-compiler/NameKey.mod \ + $(MCDEPS) $(BUILD-BOOT-PPG-H) \ + m2/gm2-ppg-boot/$(SRC_PREFIX)NameKey.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)NameKey.cc $(srcdir)/m2/gm2-compiler/NameKey.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)NameKey.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)Lists.h: $(srcdir)/m2/gm2-compiler/Lists.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/Lists.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)Lists.o: $(srcdir)/m2/gm2-compiler/Lists.mod \ + $(MCDEPS) $(BUILD-BOOT-PPG-H) \ + m2/gm2-ppg-boot/$(SRC_PREFIX)Lists.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)Lists.cc $(srcdir)/m2/gm2-compiler/Lists.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)Lists.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)Output.h: $(srcdir)/m2/gm2-compiler/Output.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/Output.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)Output.o: $(srcdir)/m2/gm2-compiler/Output.mod \ + $(MCDEPS) $(BUILD-BOOT-PPG-H) \ + m2/gm2-ppg-boot/$(SRC_PREFIX)Output.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)Output.cc $(srcdir)/m2/gm2-compiler/Output.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)Output.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)bnflex.h: $(srcdir)/m2/gm2-compiler/bnflex.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/bnflex.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)bnflex.o: $(srcdir)/m2/gm2-compiler/bnflex.mod \ + $(MCDEPS) $(BUILD-BOOT-PPG-H) \ + m2/gm2-ppg-boot/$(SRC_PREFIX)bnflex.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)bnflex.cc $(srcdir)/m2/gm2-compiler/bnflex.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)bnflex.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)RTco.h: $(srcdir)/m2/gm2-libs-iso/RTco.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $(srcdir)/m2/gm2-libs-iso/RTco.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)RTentity.h: $(srcdir)/m2/gm2-libs-iso/RTentity.def $(MCDEPS) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=$@ -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $(srcdir)/m2/gm2-libs-iso/RTentity.def + +m2/gm2-ppg-boot/$(SRC_PREFIX)RTco.o: $(srcdir)/m2/gm2-libs-iso/RTcodummy.c + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c $< -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)RTentity.o: $(srcdir)/m2/gm2-libs-iso/RTentity.mod \ + $(MCDEPS) $(BUILD-BOOT-PPG-H) \ + m2/gm2-ppg-boot/$(SRC_PREFIX)RTentity.h + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)RTentity.cc $(srcdir)/m2/gm2-libs-iso/RTentity.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)RTentity.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-PPG-H) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-libs/$*.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc -o $@ + +m2/gm2-ppg-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-compiler/%.mod $(MCDEPS) $(BUILD-BOOT-PPG-H) + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + $(MCC) -o=m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-compiler/$*.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot -Im2/gm2-compiler-boot \ + -Im2/gm2-libs-boot -Im2/gm2-ppg-boot \ + -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc -o $@ + +m2/ppg$(exeext): m2/boot-bin/mc $(BUILD-PPG-O) $(BUILD-MC-INTERFACE-O) m2/gm2-ppg-boot/main.o \ + m2/gm2-libs-boot/RTcodummy.o m2/mc-boot-ch/$(SRC_PREFIX)abort.o + -test -d m2 || $(mkinstalldirs) m2 + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PPG-O) m2/gm2-ppg-boot/main.o \ + m2/gm2-libs-boot/RTcodummy.o m2/mc-boot-ch/$(SRC_PREFIX)abort.o -lm + +m2/gm2-ppg-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit + -test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot + unset CC ; $(M2LINK) -s --langc++ --exit --name mainppginit.cc $(srcdir)/m2/init/ppginit + mv mainppginit.cc m2/gm2-ppg-boot/main.cc + $(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-ppg-boot/main.cc + +m2/gm2-auto: + -test -d $@ || $(mkinstalldirs) $@ + +c-family/m2pp.o : $(srcdir)/m2/m2pp.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + + +BUILD-PG-O = $(PPG-INTERFACE-C:%.c=m2/gm2-pg-boot/$(SRC_PREFIX)%.o) \ + $(PPG-INTERFACE-CC:%.cc=m2/gm2-pg-boot/$(SRC_PREFIX)%.o) \ + $(PPG-MODS:%.mod=m2/gm2-pg-boot/$(SRC_PREFIX)%.o) \ + $(PPG-LIB-MODS:%.mod=m2/gm2-pg-boot/$(SRC_PREFIX)%.o) \ + $(PG-SRC:%.mod=m2/gm2-pg-boot/$(SRC_PREFIX)%.o) + +BUILD-BOOT-PG-H = $(BUILD-BOOT-H) \ + m2/gm2-pg-boot/$(SRC_PREFIX)M2RTS.h \ + m2/gm2-pg-boot/$(SRC_PREFIX)M2Dependent.h \ + $(PGE-DEF:%.def=m2/gm2-pg-boot/$(SRC_PREFIX)%.h) \ + $(PPG-DEFS:%.def=m2/gm2-pg-boot/$(SRC_PREFIX)%.h) \ + $(PPG-LIB-DEFS:%.def=m2/gm2-pg-boot/$(SRC_PREFIX)%.h) + +m2/gm2-pg-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-libs/$*.def $< + +m2/gm2-pg-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler/%.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-compiler $< + +m2/gm2-pg-boot/$(SRC_PREFIX)SymbolKey.h: $(srcdir)/m2/gm2-compiler/SymbolKey.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/SymbolKey.def + +m2/gm2-pg-boot/$(SRC_PREFIX)SymbolKey.o: $(srcdir)/m2/gm2-compiler/SymbolKey.mod \ + $(MCDEPS) $(BUILD-BOOT-PG-H) \ + m2/gm2-pg-boot/$(SRC_PREFIX)SymbolKey.h + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pg-boot/$(SRC_PREFIX)SymbolKey.cc $(srcdir)/m2/gm2-compiler/SymbolKey.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)SymbolKey.cc -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)NameKey.h: $(srcdir)/m2/gm2-compiler/NameKey.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/NameKey.def + +m2/gm2-pg-boot/$(SRC_PREFIX)NameKey.o: $(srcdir)/m2/gm2-compiler/NameKey.mod \ + $(MCDEPS) $(BUILD-BOOT-PG-H) \ + m2/gm2-pg-boot/$(SRC_PREFIX)NameKey.h + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pg-boot/$(SRC_PREFIX)NameKey.cc $(srcdir)/m2/gm2-compiler/NameKey.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)NameKey.cc -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)Lists.h: $(srcdir)/m2/gm2-compiler/Lists.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/Lists.def + +m2/gm2-pg-boot/$(SRC_PREFIX)Lists.o: $(srcdir)/m2/gm2-compiler/Lists.mod \ + $(MCDEPS) $(BUILD-BOOT-PG-H) \ + m2/gm2-pg-boot/$(SRC_PREFIX)Lists.h + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pg-boot/$(SRC_PREFIX)Lists.cc $(srcdir)/m2/gm2-compiler/Lists.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)Lists.cc -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)Output.h: $(srcdir)/m2/gm2-compiler/Output.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/Output.def + +m2/gm2-pg-boot/$(SRC_PREFIX)Output.o: $(srcdir)/m2/gm2-compiler/Output.mod \ + $(MCDEPS) $(BUILD-BOOT-PG-H) \ + m2/gm2-pg-boot/$(SRC_PREFIX)Output.h + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pg-boot/$(SRC_PREFIX)Output.cc $(srcdir)/m2/gm2-compiler/Output.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)Output.cc -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)bnflex.h: $(srcdir)/m2/gm2-compiler/bnflex.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/bnflex.def + +m2/gm2-pg-boot/$(SRC_PREFIX)bnflex.o: $(srcdir)/m2/gm2-compiler/bnflex.mod \ + $(MCDEPS) $(BUILD-BOOT-PG-H) \ + m2/gm2-pg-boot/$(SRC_PREFIX)bnflex.h + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pg-boot/$(SRC_PREFIX)bnflex.cc $(srcdir)/m2/gm2-compiler/bnflex.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)bnflex.cc -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)RTco.h: $(srcdir)/m2/gm2-libs-iso/RTco.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $(srcdir)/m2/gm2-libs-iso/RTco.def + +m2/gm2-pg-boot/$(SRC_PREFIX)RTentity.h: $(srcdir)/m2/gm2-libs-iso/RTentity.def $(MCDEPS) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=$@ -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $(srcdir)/m2/gm2-libs-iso/RTentity.def + +m2/gm2-pg-boot/$(SRC_PREFIX)RTco.o: $(srcdir)/m2/gm2-libs-iso/RTcodummy.c + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)RTentity.o: $(srcdir)/m2/gm2-libs-iso/RTentity.mod \ + $(MCDEPS) $(BUILD-BOOT-PG-H) \ + m2/gm2-pg-boot/$(SRC_PREFIX)RTentity.h + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pg-boot/$(SRC_PREFIX)RTentity.cc $(srcdir)/m2/gm2-libs-iso/RTentity.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)RTentity.cc -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.c m2/gm2-libs/gm2-libs-host.h $(BUILD-BOOT-PG-H) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h $(BUILD-BOOT-PG-H) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)M2RTS.o: $(srcdir)/m2/gm2-libs/M2RTS.mod $(MCDEPS) $(BUILD-BOOT-PG-H) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pg-boot/$(SRC_PREFIX)M2RTS.cc $(srcdir)/m2/gm2-libs/M2RTS.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)M2RTS.cc -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-PG-H) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=m2/gm2-pg-boot/$(SRC_PREFIX)$*.c $(srcdir)/m2/gm2-libs/$*.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -Im2/gm2-pg-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch \ + -Im2/gm2-libs-boot $(INCLUDES) \ + -g -c m2/gm2-pg-boot/$(SRC_PREFIX)$*.c -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-compiler/%.mod $(MCDEPS) $(BUILD-BOOT-PG-H) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=m2/gm2-pg-boot/$(SRC_PREFIX)$*.c $(srcdir)/m2/gm2-compiler/$*.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot -Im2/gm2-compiler-boot -Im2/gm2-libs-boot \ + -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)$*.c -o $@ + +m2/gm2-pg-boot/$(SRC_PREFIX)pg.o: m2/gm2-auto/pg.mod $(MCDEPS) $(BUILD-BOOT-PG-H) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + $(MCC) -o=m2/gm2-pg-boot/$(SRC_PREFIX)pg.c m2/gm2-auto/pg.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot -Im2/gm2-compiler-boot -Im2/gm2-libs-boot \ + -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pg-boot/$(SRC_PREFIX)pg.c -o $@ + +m2/pg$(exeext): m2/boot-bin/mc \ + $(BUILD-PG-O) $(GM2-PPG-MODS:%.mod=m2/gm2-pg-boot/%.o) \ + $(BUILD-MC-INTERFACE-O) m2/gm2-pg-boot/main.o m2/gm2-libs-boot/RTcodummy.o \ + m2/mc-boot-ch/$(SRC_PREFIX)abort.o + -test -d m2 || $(mkinstalldirs) m2 + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PG-O) \ + m2/gm2-pg-boot/main.o m2/gm2-libs-boot/RTcodummy.o \ + m2/mc-boot-ch/$(SRC_PREFIX)abort.o -lm + +m2/gm2-auto/pginit: + -test -d m2/gm2-auto || $(mkinstalldirs) m2/gm2-auto + sed -e 's/ppg/pg/' < $(srcdir)/m2/init/ppginit > $@ + +m2/gm2-pg-boot/main.o: m2/gm2-auto/pginit $(M2LINK) + -test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot + unset CC ; $(M2LINK) -s --langc++ --exit --name mainpginit.cc m2/gm2-auto/pginit + mv mainpginit.cc m2/gm2-pg-boot/main.cc + $(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-pg-boot/main.cc + +m2/pg-e$(exeext): m2/pg$(exeext) + -test -d m2 || $(mkinstalldirs) m2 + $(CP) m2/pg$(exeext) m2/pg-e$(exeext) + $(SHELL) $(srcdir)/m2/tools-src/buildpg $(srcdir)/m2/gm2-compiler/ppg.mod pg -e > m2/gm2-auto/t.bnf + ./m2/pg-e$(exeext) -e -l m2/gm2-auto/t.bnf | sed -e 's/t\.bnf/pg\.bnf/' > m2/gm2-auto/t.mod + $(QUIAT)if ! diff m2/gm2-auto/t.mod m2/gm2-auto/pg.mod > /dev/null ; then \ + echo "pg failed during self build" ; \ + exit 1 ; \ + fi + $(RM) m2/gm2-auto/t.bnf m2/gm2-auto/t.mod + +m2/gm2-auto/pg.mod: m2/ppg$(exeext) + -test -d m2/gm2-auto || $(mkinstalldirs) m2/gm2-auto + $(SHELL) $(srcdir)/m2/tools-src/buildpg $(srcdir)/m2/gm2-compiler/ppg.mod pg -e > m2/gm2-auto/pg.bnf + ./m2/ppg$(exeext) -e -l m2/gm2-auto/pg.bnf > m2/gm2-auto/pg.mod + +# pge is the recursive descent parser with first/followset error recovery. + +PGE-SRC = pge.mod + +BUILD-PGE-O = $(PPG-INTERFACE-C:%.c=m2/gm2-pge-boot/$(SRC_PREFIX)%.o) \ + $(PPG-INTERFACE-CC:%.cc=m2/gm2-pge-boot/$(SRC_PREFIX)%.o) \ + $(PPG-MODS:%.mod=m2/gm2-pge-boot/$(SRC_PREFIX)%.o) \ + $(PPG-LIB-MODS:%.mod=m2/gm2-pge-boot/$(SRC_PREFIX)%.o) \ + $(PGE-SRC:%.mod=m2/gm2-pge-boot/$(SRC_PREFIX)%.o) + +BUILD-BOOT-PGE-H = $(BUILD-BOOT-H) $(PGE-DEF:%.def=m2/gm2-pge-boot/$(SRC_PREFIX)%.h) + +m2/gm2-auto/pge.mod: m2/pg$(exeext) + -test -d m2/gm2-auto || $(mkinstalldirs) m2/gm2-auto + $(SHELL) $(srcdir)/m2/tools-src/buildpg $(srcdir)/m2/gm2-compiler/ppg.mod pge > m2/gm2-auto/pge.bnf + ./m2/pg$(exeext) -l m2/gm2-auto/pge.bnf -o m2/gm2-auto/pge.mod + +m2/gm2-pge-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-libs/$*.def + +m2/gm2-pge-boot/$(SRC_PREFIX)libc.o: $(srcdir)/m2/mc-boot-ch/Glibc.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)mcrts.o: $(srcdir)/m2/mc-boot-ch/Gmcrts.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)UnixArgs.o: $(srcdir)/m2/mc-boot-ch/GUnixArgs.cc + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)Selective.o: $(srcdir)/m2/mc-boot-ch/GSelective.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -Im2/gm2-libs -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)termios.o: $(srcdir)/m2/mc-boot-ch/Gtermios.cc m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)SysExceptions.o: $(srcdir)/m2/mc-boot-ch/GSysExceptions.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)ldtoa.o: $(srcdir)/m2/mc-boot-ch/Gldtoa.cc m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)dtoa.o: $(srcdir)/m2/mc-boot-ch/Gdtoa.cc m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)wrapc.o: $(srcdir)/m2/mc-boot-ch/Gwrapc.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)SYSTEM.o: $(srcdir)/m2/mc-boot-ch/GSYSTEM.c $(BUILD-BOOT-PGE-H) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)errno.o: $(srcdir)/m2/mc-boot-ch/Gerrno.cc + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.o: $(srcdir)/m2/gm2-libs/M2RTS.mod $(MCDEPS) $(BUILD-BOOT-PGE-H) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.cc $(srcdir)/m2/gm2-libs/M2RTS.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)SymbolKey.h: $(srcdir)/m2/gm2-compiler/SymbolKey.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/SymbolKey.def + +m2/gm2-pge-boot/$(SRC_PREFIX)SymbolKey.o: $(srcdir)/m2/gm2-compiler/SymbolKey.mod \ + $(MCDEPS) $(BUILD-BOOT-PGE-H) \ + m2/gm2-pge-boot/$(SRC_PREFIX)SymbolKey.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)SymbolKey.cc $(srcdir)/m2/gm2-compiler/SymbolKey.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)SymbolKey.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)NameKey.h: $(srcdir)/m2/gm2-compiler/NameKey.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/NameKey.def + +m2/gm2-pge-boot/$(SRC_PREFIX)NameKey.o: $(srcdir)/m2/gm2-compiler/NameKey.mod \ + $(MCDEPS) $(BUILD-BOOT-PGE-H) \ + m2/gm2-pge-boot/$(SRC_PREFIX)NameKey.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)NameKey.cc $(srcdir)/m2/gm2-compiler/NameKey.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)NameKey.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)Lists.h: $(srcdir)/m2/gm2-compiler/Lists.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/Lists.def + +m2/gm2-pge-boot/$(SRC_PREFIX)Lists.o: $(srcdir)/m2/gm2-compiler/Lists.mod \ + $(MCDEPS) $(BUILD-BOOT-PGE-H) \ + m2/gm2-pge-boot/$(SRC_PREFIX)Lists.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)Lists.cc $(srcdir)/m2/gm2-compiler/Lists.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)Lists.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)Output.h: $(srcdir)/m2/gm2-compiler/Output.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/Output.def + +m2/gm2-pge-boot/$(SRC_PREFIX)Output.o: $(srcdir)/m2/gm2-compiler/Output.mod \ + $(MCDEPS) $(BUILD-BOOT-PGE-H) \ + m2/gm2-pge-boot/$(SRC_PREFIX)Output.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)Output.cc $(srcdir)/m2/gm2-compiler/Output.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)Output.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)bnflex.h: $(srcdir)/m2/gm2-compiler/bnflex.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ $(srcdir)/m2/gm2-compiler/bnflex.def + +m2/gm2-pge-boot/$(SRC_PREFIX)bnflex.o: $(srcdir)/m2/gm2-compiler/bnflex.mod \ + $(MCDEPS) $(BUILD-BOOT-PGE-H) \ + m2/gm2-pge-boot/$(SRC_PREFIX)bnflex.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)bnflex.cc $(srcdir)/m2/gm2-compiler/bnflex.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)bnflex.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)RTco.h: $(srcdir)/m2/gm2-libs-iso/RTco.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $(srcdir)/m2/gm2-libs-iso/RTco.def + +m2/gm2-pge-boot/$(SRC_PREFIX)RTentity.h: $(srcdir)/m2/gm2-libs-iso/RTentity.def $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=$@ -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $(srcdir)/m2/gm2-libs-iso/RTentity.def + +m2/gm2-pge-boot/$(SRC_PREFIX)RTco.o: $(srcdir)/m2/gm2-libs-iso/RTcodummy.c + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c $< -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)RTentity.o: $(srcdir)/m2/gm2-libs-iso/RTentity.mod \ + $(MCDEPS) $(BUILD-BOOT-PGE-H) \ + m2/gm2-pge-boot/$(SRC_PREFIX)RTentity.h + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)RTentity.cc $(srcdir)/m2/gm2-libs-iso/RTentity.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)RTentity.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-PGE-H) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-libs/$*.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \ + -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \ + $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-compiler/%.mod $(MCDEPS) $(BUILD-BOOT-PGE-H) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-compiler/$*.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot -Im2/gm2-compiler-boot \ + -Im2/gm2-libs-boot -Im2/gm2-pge-boot \ + -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc -o $@ + +m2/gm2-pge-boot/$(SRC_PREFIX)pge.o: m2/gm2-auto/pge.mod $(MCDEPS) $(BUILD-BOOT-PGE-H) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)pge.cc m2/gm2-auto/pge.mod + $(CXX) -I. -I$(srcdir)/../include -I$(srcdir) \ + -I$(srcdir)/m2/mc-boot -Im2/gm2-compiler-boot -Im2/gm2-libs-boot \ + -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)pge.cc -o $@ + +m2/pge$(exeext): m2/boot-bin/mc \ + $(BUILD-PGE-O) $(GM2-PPG-MODS:%.mod=m2/gm2-pge-boot/%.o) \ + $(BUILD-MC-INTERFACE-O) m2/gm2-pge-boot/main.o m2/gm2-libs-boot/RTcodummy.o \ + m2/mc-boot-ch/$(SRC_PREFIX)abort.o + -test -d m2 || $(mkinstalldirs) m2 + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PGE-O) \ + m2/gm2-pge-boot/main.o m2/gm2-libs-boot/RTcodummy.o \ + m2/mc-boot-ch/$(SRC_PREFIX)abort.o -lm + $(SHELL) $(srcdir)/m2/tools-src/buildpg $(srcdir)/m2/gm2-compiler/ppg.mod t > m2/gm2-auto/t.bnf + ./m2/pge$(exeext) m2/gm2-auto/t.bnf -o m2/gm2-auto/t1.mod + ./m2/pg$(exeext) m2/gm2-auto/t.bnf -o m2/gm2-auto/t2.mod + $(QUIAT)if ! diff m2/gm2-auto/t1.mod m2/gm2-auto/t2.mod > /dev/null ; then \ + echo "failure: pg (with error recovery) failed" ; \ + $(RM) m2/pge$(exeext) ; \ + exit 1 ; \ + fi + $(RM) m2/gm2-auto/t.mod m2/gm2-auto/t1.mod m2/gm2-auto/t2.mod + +m2/gm2-auto/pgeinit: + -test -d m2/gm2-auto || $(mkinstalldirs) m2/gm2-auto + sed -e 's/ppg/pge/' < $(srcdir)/m2/init/ppginit > $@ + +m2/gm2-pge-boot/main.o: m2/gm2-auto/pgeinit $(M2LINK) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + unset CC ; $(M2LINK) -s --langc++ --exit --name mainpgeinit.cc m2/gm2-auto/pgeinit + mv mainpgeinit.cc m2/gm2-pge-boot/main.cc + $(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-pge-boot/main.cc + +$(objdir)/m2/gm2-ppg-boot: + -test -d $@ || $(mkinstalldirs) $@ + +$(objdir)/m2/gm2-pg-boot: + -test -d $@ || $(mkinstalldirs) $@ + +$(objdir)/m2/gm2-pge-boot: + -test -d $@ || $(mkinstalldirs) $@ + +m2/gm2-auto/pg.o: m2/gm2-auto/pg.mod $(MCDEPS) + -test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot + $(MC) --quiet -o=m2/gm2-auto/pg.c m2/gm2-auto/pg.mod + $(COMPILER) -c $(CFLAGS) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) m2/gm2-auto/pg.c -o $@ + +m2/gm2-auto/pge.o: m2/gm2-auto/pge.mod $(MCDEPS) + -test -d m2/gm2-auto || $(mkinstalldirs) m2/gm2-auto + $(MC) --quiet -o=m2/gm2-auto/pge.c m2/gm2-auto/pge.mod + $(COMPILER) -c $(CFLAGS) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) m2/gm2-auto/pge.c -o $@ + +pge-help: force + @echo "The pge maintainer commands are:" + @echo " " + @echo " make pge-maintainer" + @echo " make pge-verify" + @echo " make pge-push # copy pge C++ sources (app and libs) into srcdir/m2/pge-boot" + @echo " make pge-libs-push # copy C++ libraries which pge uses into srcdir/m2/pge-boot" + @echo " make pge-app-push # copy pge C++ application modules into srcdir/m2/pge-boot" + @echo " make pge-clean" + +# pge-maintainer: $(PGE) +pge-maintainer: pge-clean $(PGE) pge-verify pge-push + +# Copy the C++ sources for ppe.mod into $(srcdir)/pge-boot. + +pge-push: pge-libs-push pge-app-push + +pge-libs-push: force + for i in ${PGE-DEPS} ; do \ + if [ -f ${srcdir}/m2/gm2-libs-ch/$${i} ] ; then \ + echo cp ${srcdir}/m2/gm2-libs-ch/$${i} ${srcdir}/m2/pge-boot ; \ + cp ${srcdir}/m2/gm2-libs-ch/$${i} ${srcdir}/m2/pge-boot ; \ + elif [ -f m2/gm2-pge-boot/$${i} ] ; then \ + echo cp m2/gm2-pge-boot/$${i} ${srcdir}/m2/pge-boot ; \ + cp m2/gm2-pge-boot/$${i} ${srcdir}/m2/pge-boot ; \ + elif [ -f m2/gm2-compiler-boot/$${i} ] ; then \ + echo cp m2/gm2-compiler-boot/$${i} ${srcdir}/m2/pge-boot ; \ + cp m2/gm2-compiler-boot/$${i} ${srcdir}/m2/pge-boot ; \ + elif [ -f m2/gm2-libs-boot/$${i} ] ; then \ + echo cp m2/gm2-libs-boot/$${i} ${srcdir}/m2/pge-boot ; \ + cp m2/gm2-libs-boot/$${i} ${srcdir}/m2/pge-boot ; \ + else \ + echo "not found $${i}" ; \ + fi ; \ + done + +pge-app-push: force + cp m2/gm2-pge-boot/*.c* $(srcdir)/m2/pge-boot + +# Perform sanity checks. + +pge-verify: force + +# Remove pge build files. + +pge-clean: force + $(RM) -f m2/gm2-pg-boot/* m2/gm2-ppg-boot/* m2/gm2-pge-boot/* + + +# The rest of the Make-lang.in handles the bootstrap tool (maintained +# mode) and also provides testing between the bootstrapped and the +# non-bootstrapped compilers. + +# Rules for mc + +# The default rule used generate mc, eventually it will be replaced by mc-bootstrap. + +BOOTGM2=gm2 + +MCOPTIONS=-g -c -fsources -fsoft-check-all -fm2-g # -fauto-init +MCLINK=-g # use -g -fmodules -c if you are debugging and wish to see missing modules. + +# This is only needed in maintainer mode by 'make mc-maintainer' when regenerating the C +# version of mc. We need a working Modula-2 compiler to run mc-maintainer. + +GM2PATH=-I$(srcdir)/m2/mc \ + -I$(srcdir)/m2 -Im2/gm2-auto \ + -fm2-pathname=m2pim -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-ch \ + -fm2-pathname=m2iso -I$(srcdir)/m2/gm2-libs-iso -fm2-pathname=- + +mc: mc-clean mc-devel + +mc-basetest: force + $(SHELL) $(srcdir)/testsuite/gm2/base-lang/pass/base-lang-test.sh ./mc $(srcdir) `pwd` $(COMPILER) + +mc-devel-basetest: force + $(SHELL) $(srcdir)/testsuite/gm2/base-lang/pass/base-lang-test.sh m2/boot-bin/mc-devel$(exeext) $(srcdir) `pwd` $(COMPILER) + +mc-push: force + cp -p m2/mc-boot-gen/*.cc $(srcdir)/m2/mc-boot/ + cp -p m2/mc-boot-gen/*.h $(srcdir)/m2/mc-boot/ + +mc-clean: force m2/mc-obj + $(RM) m2/mc-boot-gen/*.{cc,h} m2/boot-bin/* m2/mc-boot/* m2/mc-boot-ch/* mc + +mc-maintainer: mc-clean mc-autogen mc-push mc-clean mc-bootstrap + +mc-clean-libs: force + $(RM) m2/gm2-libs-boot/* + +mc-continue: mc-clean mc-bootstrap mc-clean-libs mc-fresh $(BUILD-MC-INTERFACE-O) $(BUILD-LIBS-BOOT) $(BUILD-COMPILER-BOOT) + +mc-fresh: force + $(RM) m2/gm2-auto/* m2/gm2-compiler-boot/* m2/gm2-libs-boot/* + +mc-help: force + @echo "mc-maintainer produces a new mc C version in the source tree (takes longer)" + @echo "mc-continue builds the mc from the C version and attempts to build gm2 libraries and gm2 compiler" + @echo "mc-verify builds mc from Modula-2 sources and mc from C sources and run both on all sources diffing the output" + @echo "mc builds mc from Modula-2 sources, quickly" + @echo "m2/pge build the parser generator (needed by mc-maintainer)" + +m2/mc-obj: + $(mkinstalldirs) $@ + +mc-verify: mc-clean mc-bootstrap mc + mv mc m2/boot-bin/mc.m2 + @echo "verifying the two generations of mc" + for i in $(GM2-VERIFY-MODS) ; do \ + echo -n "$$i " ; \ + m2/boot-bin/mc $(MC_ARGS) -o=mcout.cc $(srcdir)/m2/gm2-compiler/$$i > /dev/null ; \ + echo -n "[1]" ; \ + m2/boot-bin/mc.m2 $(MC_ARGS) -o=mcout.m2 $(srcdir)/m2/gm2-compiler/$$i > /dev/null ; \ + echo -n "[2]" ; \ + $(RM) $$i.mc-diff ; \ + if [ -f mcout.cc -a -f mcout.m2 ] ; then \ + if diff mcout.cc mcout.m2 > /dev/null ; then \ + echo "[passed]" ; \ + else \ + echo "[*** failed ***]" ; \ + diff mcout.cc mcout.m2 > $$i.mc-diff ; \ + fi \ + fi ; \ + $(RM) mcout.cc mcout.m2 ; \ + done + +mc-stage2: force + m2/boot-bin/mc$(exeext) -I$(srcdir)/m2/mc:$(srcdir)/m2/gm2-libs:$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=m2/mc-boot-gen/GmcStream.cc $(srcdir)/m2/mc/mcStream.mod + m2/boot-bin/mc$(exeext) -I$(srcdir)/m2/mc:$(srcdir)/m2/gm2-libs:$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=m2/mc-boot-gen/Gdecl.cc $(srcdir)/m2/mc/decl.mod + if diff m2/mc-boot-gen/Gdecl.cc $(srcdir)/m2/mc-boot/Gdecl.cc ; then echo "passed" ; else echo "failed" ; fi + + + +# mc-devel - compiles mc using gm2 + +mc-devel: m2/boot-bin/mc-devel$(exeext) + +m2/boot-bin/mc-devel$(exeext): m2/mc-obj/mcp1.mod \ + m2/mc-obj/mcp2.mod \ + m2/mc-obj/mcp3.mod \ + m2/mc-obj/mcp4.mod \ + m2/mc-obj/mcp5.mod \ + mcflex.c \ + m2/mc-boot-ch/Gabort.o \ + m2/mc-boot-ch/Gm2rtsdummy.o + $(RM) -rf mc-obj + $(mkinstalldirs) mc-obj + $(CC) -I$(srcdir)/m2/mc -c -g mcflex.c -o mc-obj/mcflex.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/decl.mod -o mc-obj/decl.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcStream.mod -o mc-obj/mcStream.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcPretty.mod -o mc-obj/mcPretty.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcStack.mod -o mc-obj/mcStack.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/varargs.mod -o mc-obj/varargs.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcMetaError.mod -o mc-obj/mcMetaError.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcOptions.mod -o mc-obj/mcOptions.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcComp.mod -o mc-obj/mcComp.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) m2/mc-obj/mcp1.mod -o mc-obj/mcp1.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) m2/mc-obj/mcp2.mod -o mc-obj/mcp2.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) m2/mc-obj/mcp3.mod -o mc-obj/mcp3.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) m2/mc-obj/mcp4.mod -o mc-obj/mcp4.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) m2/mc-obj/mcp5.mod -o mc-obj/mcp5.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/wlists.mod -o mc-obj/wlists.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/alists.mod -o mc-obj/alists.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/symbolKey.mod -o mc-obj/symbolKey.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcReserved.mod -o mc-obj/mcReserved.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/nameKey.mod -o mc-obj/nameKey.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcSearch.mod -o mc-obj/mcSearch.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcFileName.mod -o mc-obj/mcFileName.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcLexBuf.mod -o mc-obj/mcLexBuf.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcQuiet.mod -o mc-obj/mcQuiet.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcError.mod -o mc-obj/mcError.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcDebug.mod -o mc-obj/mcDebug.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcPrintf.mod -o mc-obj/mcPrintf.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/Indexing.mod -o mc-obj/Indexing.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcPreprocess.mod -o mc-obj/mcPreprocess.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/keyc.mod -o mc-obj/keyc.o + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) $(srcdir)/m2/mc/mcComment.mod -o mc-obj/mcComment.o + $(BOOTGM2) $(MCLINK) -I. -fscaffold-static -fscaffold-main $(GM2PATH) \ + -fuse-list=$(srcdir)/m2/init/mcinit $(srcdir)/m2/mc/top.mod -o mc \ + m2/gm2-libs-boot/RTcodummy.o \ + m2/gm2-libs-boot/dtoa.o m2/gm2-libs-boot/ldtoa.o mc-obj/*o \ + m2/mc-boot-ch/Gabort.o m2/mc-boot-ch/Gm2rtsdummy.o + +m2/boot-bin/mc-opt$(exeext): m2/mc-obj/mcp1.mod \ + m2/mc-obj/mcp2.mod \ + m2/mc-obj/mcp3.mod \ + m2/mc-obj/mcp4.mod \ + m2/mc-obj/mcp5.mod \ + mcflex.c + -test -d m2/boot-bin || $(mkinstalldirs) m2/boot-bin + g++ -I$(srcdir)/m2/mc -c -g mcflex.c + $(BOOTGM2) -fsources -fm2-whole-program -g -I$(srcdir)/m2/mc -I$(objdir)/m2/mc-obj -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/mc $(srcdir)/m2/mc/top.mod + +m2/mc/decl.o: $(srcdir)/m2/mc/decl.mod + -test -d m2/mc || $(mkinstalldirs) m2/mc + $(BOOTGM2) $(MCOPTIONS) $(GM2PATH) -o $@ $(srcdir)/m2/mc/decl.mod + +m2/mc-obj/%.mod: $(srcdir)/m2/mc/%.bnf $(PGE) + -test -d m2/mc-obj || $(mkinstalldirs) m2/mc-obj + $(PGE) -l $< -o $@ + +gm2-bootstrap: mc-devel + for i in $(srcdir)/m2/gm2-libs/*.def ; do echo $$i ; ./mc --gcc-config-system -I$(srcdir)/m2/gm2-libs $$i ; done + for i in $(srcdir)/m2/gm2-compiler/*.def ; do echo $$i ; ./mc --gcc-config-system -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-gcc $$i ; done + for i in $(srcdir)/m2/gm2-libs/*.mod ; do echo $$i ; ./mc --gcc-config-system -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-gcc $$i ; done + + +$(objdir)/plugin: + -test -d $@ || $(mkinstalldirs) $@ + +$(objdir)/m2/mc-boot: + -test -d $@ || $(mkinstalldirs) $@ + +$(objdir)/m2/mc-boot-ch: + -test -d $@ || $(mkinstalldirs) $@ + +$(objdir)/m2/mc-boot-gen: + -test -d $@ || $(mkinstalldirs) $@ + +mc-autogen: mc-clean mc-devel \ + $(BUILD-MC-BOOT-H) $(BUILD-MC-BOOT-CC) \ + $(BUILD-MC-BOOT-AUTO-CC) + for i in m2/mc-boot-gen/*.cc ; do \ + echo $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/mc-boot-gen/ $$i -o m2/mc-boot-gen/`basename $$i .cc`.o ; \ + $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/mc-boot-gen/ $$i -o m2/mc-boot-gen/`basename $$i .cc`.o ; done + @echo -n "built " + @cd m2/mc-boot-gen ; ls *.o | wc -l + @echo -n "out of " + @cd m2/mc-boot-gen ; ls *.cc | wc -l + @echo "modules" + +# EXTENDED_OPAQUE = --extended-opaque +EXTENDED_OPAQUE = +MC_OPTIONS = $(MC_COPYRIGHT) --gcc-config-system --olang=c++ + +m2/mc-boot-gen/$(SRC_PREFIX)%.h: $(srcdir)/m2/mc/%.def + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs-iso/%.def + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)decl.cc: $(srcdir)/m2/mc/decl.mod + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) $(EXTENDED_OPAQUE) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)%.cc: $(srcdir)/m2/mc/%.mod + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)%.cc: $(srcdir)/m2/gm2-libs/%.mod + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)%.cc: $(srcdir)/m2/gm2-libs-iso/%.mod + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs-iso/%.def + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +m2/mc-boot-gen/$(SRC_PREFIX)%.cc: m2/mc-obj/%.mod + -test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen + ./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $< + +# mc-bootstrap compiles mc using the C version previously generated by mc-autogen. +# These autogenerated files will be checked into git by the maintainer. + +mc-bootstrap: mc-clean m2/boot-bin/mc$(exeext) + +gm2.maintainer-reconfigure: force + autoconf $(srcdir)/m2/gm2-libs/config-host.in > $(srcdir)/m2/gm2-libs/config-host + ( cd $(srcdir)/m2/gm2-libs ; autoheader config-host.in ) + ( cd $(srcdir)/m2 ; autoconf configure.in > configure ) + +gm2.maintainer-help: force + @echo "make knows about:" + @echo " " + @echo "make gm2.maintainer-help this command" + @echo "make gm2.maintainer-reconfigure rebuild the configure scripts" + @echo "make gm2.maintainer-tools rebuild mc and ppg bootstrap tools" + @echo " note gm2.maintainer-tools requires a working gm2 to be in your path" + @echo "make gm2.maintainer-doc rebuild target independent documentation sections" + @echo "make pge-help sub commands to build pge" + @echo "make mc-help sub commands to build mc" + +gm2.maintainer-tools: mc-maintainer pge-maintainer + +gm2.maintainer-doc: m2-target-independent-doc + + +# verify the compiler can be built across three generations of cc1gm2 diffing assembly output. +# m2/stage1/cc1gm2 built by translating all M2 sources into C++. +# m2/m2obj2/cc1gm2 built from m2/stage1/cc1gm2. +# m2/m2obj3/cc1gm2 built from m2/m2obj2/cc1gm2. +# +# This test only makes sense if host = target = build + +# GM2-VERIFY-MODS is a list of modules which have no __DATE__ stamp inside them +# and thus they can be built by the different versions of gm2. +# This list is used for testing only. + +GM2-VERIFY-MODS = FifoQueue.mod M2AsmUtil.mod M2Optimize.mod \ + M2StackWord.mod M2Pass.mod M2Batch.mod \ + M2Quads.mod M2Comp.mod M2Reserved.mod \ + M2Debug.mod M2Defaults.mod NameKey.mod \ + M2FileName.mod P0SymBuild.mod P1SymBuild.mod P2SymBuild.mod \ + P3SymBuild.mod \ + SymbolKey.mod SymbolTable.mod M2Error.mod \ + M2StackAddress.mod \ + M2Students.mod \ + M2BasicBlock.mod M2Code.mod M2GenGCC.mod M2GCCDeclare.mod\ + M2ALU.mod M2System.mod M2Base.mod Lists.mod \ + M2Search.mod bnflex.mod ppg.mod Output.mod \ + SymbolConversion.mod \ + M2Preprocess.mod M2Printf.mod M2LexBuf.mod M2Quiet.mod \ + M2Bitset.mod M2Size.mod CLexBuf.mod M2Scope.mod \ + M2Range.mod M2Swig.mod M2MetaError.mod Sets.mod \ + M2CaseList.mod PCSymBuild.mod M2Const.mod \ + M2DebugStack.mod ObjectFiles.mod M2ColorString.mod M2Emit.mod + +GM2-VERIFY-AUTO = P1Build.mod P2Build.mod PCBuild.mod P3Build.mod \ + PHBuild.mod pg.mod P0SyntaxCheck.mod + +GM2_LIBS_PARANOID = m2/gm2-compiler-paranoid/gm2.a \ + m2/gm2-libs-paranoid/libgm2.a # build it again using GM2_LIBS + +gm2.paranoid: m2/m2obj3/cc1gm2$(exeext) gm2.verifyparanoid + +m2/m2obj3/cc1gm2$(exeext): m2/m2obj2/cc1gm2$(exeext) m2/gm2-compiler-paranoid/m2flex.o \ + $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS_PARANOID) \ + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so + -test -d m2/m2obj3 || $(mkinstalldirs) m2/m2obj3 + @$(call LINK_PROGRESS,$(INDEX.m2),start) + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-paranoid/m2flex.o \ + attribs.o \ + $(GM2_LIBS_PARANOID) \ + $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \ + $(BACKENDLIBS) $(LIBSTDCXX) -lm + @$(call LINK_PROGRESS,$(INDEX.m2),end) + + +# gm2.verifyparanoid diffs the output of all three compilers with the compiler source code + +gm2.verifyparanoid: m2/stage1/cc1gm2$(exeext) m2/m2obj2/cc1gm2$(exeext) m2/m2obj3/cc1gm2$(exeext) force + @echo "verifying the three generations of GNU Modula-2 compilers - it may take some time.." + $(QUIAT)for i in $(GM2-VERIFY-MODS) ; do \ + echo -n "$$i " ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./stage1/m2 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $(srcdir)/m2/gm2-compiler/$$i -o m2/gm2-compiler-verify/1.s ; \ + echo -n "[1]" ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./stage2/m2 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $(srcdir)/m2/gm2-compiler/$$i -o m2/gm2-compiler-verify/2.s ; \ + echo -n "[2]" ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./stage3/m2 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $(srcdir)/m2/gm2-compiler/$$i -o m2/gm2-compiler-verify/3.s ; \ + echo -n "[3]" ; \ + if ! diff m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/2.s > m2/gm2-compiler-verify/1_2.diff 2>&1 ; then \ + echo -n " [stage 1 and stage 2 differ]" ; \ + cp m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.1.lst ; \ + cp m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.2.lst ; \ + echo " " ; \ + exit 1 ; \ + fi ; \ + if ! diff m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/3.s > m2/gm2-compiler-verify/2_3.diff 2>&1 ; then \ + echo -n " [stage 2 and stage 3 differ]" ; \ + cp m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.2.lst ; \ + cp m2/gm2-compiler-verify/3.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.3.lst ; \ + fi ; \ + echo " " ; \ + done + $(QUIAT)echo "now verifying automatically built modules" + $(QUIAT)for i in x $(GM2-VERIFY-AUTO) ; do \ + if [ -f m2/gm2-auto/$$i ] ; then \ + echo -n "$$i " ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./m2/stage1 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty m2/gm2-auto/$$i -o m2/gm2-compiler-verify/1.s ; \ + echo -n "[1]" ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./m2/m2obj2 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty m2/gm2-auto/$$i -o m2/gm2-compiler-verify/2.s ; \ + echo -n "[2]" ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./m2/m2obj3 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty m2/gm2-auto/$$i -o m2/gm2-compiler-verify/3.s ; \ + echo -n "[3]" ; \ + if ! diff m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/2.s > m2/gm2-compiler-verify/1_2.diff 2>&1 ; then \ + echo -n " [stage 1 and stage 2 differ]" ; \ + cp m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.1.lst ; \ + cp m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.2.lst ; \ + echo " " ; \ + exit 1 ; \ + fi ; \ + if ! diff m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/3.s > m2/gm2-compiler-verify/2_3.diff 2>&1 ; then \ + echo -n " [stage 2 and stage 3 differ]" ; \ + cp m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.2.lst ; \ + cp m2/gm2-compiler-verify/3.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.3.lst ; \ + fi ; \ + echo " " ; \ + fi ; \ + done ; \ + $(RM) -f m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/3.s m2/gm2-compiler-verify/2_3.diff m2/gm2-compiler-verify/1_2.diff + + +# gm2.verifystage12 diffs the output of the stage1 and stage2 compilers with the compiler source code + +gm2.verifystage12: force m2/stage1/cc1gm2$(exeext) m2/m2obj2/cc1gm2$(exeext) + @echo "verifying stage1 and stage2 generations of GNU Modula-2 compilers - it may take some time.." + $(QUIAT)for i in $(GM2-VERIFY-MODS) ; do \ + echo -n "$$i " ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./stage1/m2 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $(srcdir)/m2/gm2-compiler/$$i -o m2/gm2-compiler-verify/1.s ; \ + echo -n "[1]" ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./stage2/m2 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $(srcdir)/m2/gm2-compiler/$$i -o m2/gm2-compiler-verify/2.s ; \ + echo -n "[2]" ; \ + if ! diff m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/2.s > m2/gm2-compiler-verify/1_2.diff 2>&1 ; then \ + echo -n " [stage 1 and stage 2 differ]" ; \ + cp m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.1.lst ; \ + cp m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.2.lst ; \ + echo " " ; \ + fi ; \ + echo " " ; \ + done + $(QUIAT)echo "now verifying automatically built modules" + $(QUIAT)for i in x $(GM2-VERIFY-AUTO) ; do \ + if [ -f m2/gm2-auto/$$i ] ; then \ + echo -n "$$i " ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./m2/stage1 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty m2/gm2-auto/$$i -o m2/gm2-compiler-verify/1.s ; \ + echo -n "[1]" ; \ + ./gm2 -S $(GM2_FLAGS) -c -B./m2/m2obj2 -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty m2/gm2-auto/$$i -o m2/gm2-compiler-verify/2.s ; \ + echo -n "[2]" ; \ + if ! diff m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/2.s > m2/gm2-compiler-verify/1_2.diff 2>&1 ; then \ + echo -n " [stage 1 and stage 2 differ]" ; \ + cp m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.1.lst ; \ + cp m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/t.s | as -ahl m2/gm2-compiler-verify/t.s > m2/gm2-compiler-verify/$$i.2.lst ; \ + echo " " ; \ + fi ; \ + echo " " ; \ + fi ; \ + done ; \ + $(RM) -f m2/gm2-compiler-verify/1.s m2/gm2-compiler-verify/2.s m2/gm2-compiler-verify/3.s m2/gm2-compiler-verify/2_3.diff m2/gm2-compiler-verify/1_2.diff + + +# The rules which build objects in the gm2-compiler-paranoid gm2-libs-paranoid directories. + +m2/gm2-libs-paranoid/%.o: m2/gm2-libs-ch/%.c + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(XGCC) -c -g $(GM2_O_S3) $(GM2_O) -I./ -Im2/gm2-libs -Wall $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/%.o: $(srcdir)/m2/gm2-libs/%.mod + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/%.o: $(srcdir)/m2/gm2-compiler/%.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/%.o: m2/gm2-compiler-paranoid/%.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/P0SyntaxCheck.o: m2/gm2-compiler-paranoid/P0SyntaxCheck.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/P1Build.o: m2/gm2-compiler-paranoid/P1Build.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/P2Build.o: m2/gm2-compiler-paranoid/P2Build.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/P3Build.o: m2/gm2-compiler-paranoid/P3Build.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/PHBuild.o: m2/gm2-compiler-paranoid/PHBuild.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-compiler-paranoid/PCBuild.o: m2/gm2-compiler-paranoid/PCBuild.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_O_S3) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@ + +m2/gm2-libs-paranoid/host.o: $(srcdir)/m2/gm2-libs-ch/host.c m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c $(GM2_O_S3) $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/wrapc.o: $(srcdir)/m2/gm2-libs-ch/wrapc.c m2/gm2-libs-boot/$(SRC_PREFIX)wrapc.h m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c -DIN_GCC $(GM2_O_S3) $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/UnixArgs.o: $(srcdir)/m2/gm2-libs-ch/UnixArgs.cc \ + m2/gm2-libs-boot/$(SRC_PREFIX)UnixArgs.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c -DIN_GCC $(GM2_O_S3) $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/errno.o: $(srcdir)/m2/gm2-libs-ch/errno.c \ + m2/gm2-libs-boot/$(SRC_PREFIX)errno.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c -DIN_GCC $(GM2_O_S3) $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/Selective.o: $(srcdir)/m2/gm2-libs-ch/Selective.c \ + m2/gm2-libs-boot/$(SRC_PREFIX)Selective.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(COMPILER) -c -DIN_GCC $(GM2_O_S3) $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/choosetemp.o: $(srcdir)/m2/gm2-libs-ch/choosetemp.c \ + m2/gm2-libiberty/$(SRC_PREFIX)choosetemp.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c -DIN_GCC $(GM2_O_S3) $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/SysExceptions.o: $(srcdir)/m2/gm2-libs-ch/SysExceptions.c \ + m2/gm2-libs-boot/$(SRC_PREFIX)SysExceptions.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c -DIN_GCC $(GM2_O_S3) $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-compiler-paranoid/m2flex.o: m2/gm2-compiler/m2flex.c $(TIMEVAR_H) + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(COMPILER) -c $(GM2_O_S3) -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(GM2GCC) -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@ + +m2/gm2-libs-paranoid/dtoa.o: $(srcdir)/m2/gm2-libs-ch/dtoa.cc \ + m2/gm2-libs-boot/$(SRC_PREFIX)dtoa.h \ + m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c $(GM2_O_S3) $(CFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/ldtoa.o: $(srcdir)/m2/gm2-libs-ch/ldtoa.cc \ + m2/gm2-libs-boot/$(SRC_PREFIX)ldtoa.h \ + m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c $(GM2_O_S3) $(CFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@ + +m2/gm2-libs-paranoid/termios.o: $(srcdir)/m2/gm2-libs-ch/termios.c \ + m2/gm2-libs-boot/$(SRC_PREFIX)termios.h \ + m2/gm2-libs/gm2-libs-host.h + -test -d m2/gm2-libs-paranoid || $(mkinstalldirs) m2/gm2-libs-paranoid + $(CXX) -c $(GM2_O_S3) $(CFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@ + + +# The rules which build the paranoid version of gm2. + +BUILD-LIBS-PARANOID-H = $(GM2-LIBS-BOOT-DEFS:%.def=m2/gm2-libs-boot/$(SRC_PREFIX)%.h) + +BUILD-LIBS-PARANOID = $(BUILD-LIBS-PARANOID-H) \ + $(GM2-LIBS-MODS:%.mod=m2/gm2-libs-paranoid/%.o) \ + $(GM2-LIBS-CC:%.cc=m2/gm2-libs-paranoid/%.o) \ + $(GM2-LIBS-C:%.c=m2/gm2-libs-paranoid/%.o) + +m2/gm2-libs-paranoid/libgm2.a: m2/boot-bin/mc$(exeext) $(BUILD-LIBS-PARANOID) + $(AR) cr $@ $(GM2-LIBS-MODS:%.mod=m2/gm2-libs-paranoid/%.o) \ + $(GM2-LIBS-CC:%.cc=m2/gm2-libs-paranoid/%.o) \ + $(GM2-LIBS-C:%.c=m2/gm2-libs-paranoid/%.o) + $(RANLIB) $@ + +m2/gm2-compiler-paranoid/gm2.a: \ + $(GM2-COMP-MODS:%.mod=m2/gm2-compiler-paranoid/%.o) \ + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-paranoid/%.o) \ + m2/gm2-compiler-paranoid/M2Version.o \ + m2/gm2-compiler-paranoid/m2flex.o + $(AR) cr $@ $(GM2-COMP-MODS:%.mod=m2/gm2-compiler-paranoid/%.o) \ + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-paranoid/%.o) \ + m2/gm2-compiler-paranoid/M2Version.o + $(RANLIB) $@ + +m2/gm2-compiler-paranoid/M2Version.mod: + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(SHELL) $(srcdir)/m2/tools-src/makeversion -m $(srcdir) m2/gm2-compiler-paranoid + +m2/gm2-compiler-paranoid/M2Version.o: m2/gm2-compiler-paranoid/M2Version.mod + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(GM2_2) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc $< -o $@ + +m2/gm2-compiler-paranoid/%.mod: $(srcdir)/m2/gm2-compiler/%.bnf $(PGE) + -test -d m2/gm2-compiler-paranoid || $(mkinstalldirs) m2/gm2-compiler-paranoid + $(PGE) -k -l $< -o $@ + +# Recreate the target independent copies of the documentation which is +# used during the build if Python3 is unavailable. + +# m2-target-independent-doc-rst should be enabled once +# tools-src/def2doc.py is completed (module hyperlinks need rst +# treatment). + +m2-target-independent-doc: m2-target-independent-doc-texi # m2-target-independent-doc-rst + +m2-target-independent-doc-texi: force +ifeq ($(HAVE_PYTHON),yes) + python3 $(srcdir)/m2/tools-src/def2doc.py -t -b$(srcdir)/m2 -f$(srcdir)/m2/gm2-libs-iso/SYSTEM.def -o $(srcdir)/m2/target-independent/m2/SYSTEM-iso.texi + python3 $(srcdir)/m2/tools-src/def2doc.py -t -b$(srcdir)/m2 -f$(srcdir)/m2/gm2-libs/SYSTEM.def -o $(srcdir)/m2/target-independent/m2/SYSTEM-pim.texi + python3 $(srcdir)/m2/tools-src/def2doc.py -t -b$(srcdir)/m2 -f$(srcdir)/m2/gm2-libs/Builtins.def -o $(srcdir)/m2/target-independent/m2/Builtins.texi + python3 $(srcdir)/m2/tools-src/def2doc.py -t -uLibraries -s$(srcdir)/m2 -b$(srcdir)/m2 -o $(srcdir)/m2/target-independent/m2/gm2-libs.texi +else + echo "m2-target-independent-doc-texi will only work if Python3 was detected during configure" +endif + +m2-target-independent-doc-rst: force +ifeq ($(HAVE_PYTHON),yes) + python3 $(srcdir)/m2/tools-src/def2doc.py -x -b$(srcdir)/m2 -f$(srcdir)/m2/gm2-libs-iso/SYSTEM.def -o $(srcdir)/m2/target-independent/m2/SYSTEM-iso.rst + python3 $(srcdir)/m2/tools-src/def2doc.py -x -b$(srcdir)/m2 -f$(srcdir)/m2/gm2-libs/SYSTEM.def -o $(srcdir)/m2/target-independent/m2/SYSTEM-pim.rst + python3 $(srcdir)/m2/tools-src/def2doc.py -x -b$(srcdir)/m2 -f$(srcdir)/m2/gm2-libs/Builtins.def -o $(srcdir)/m2/target-independent/m2/Builtins.rst + python3 $(srcdir)/m2/tools-src/def2doc.py -x -uLibraries -s$(srcdir)/m2 -b$(srcdir)/m2 -o $(srcdir)/m2/target-independent/m2/gm2-libs.rst +else + echo "m2-target-independent-doc-rst will only work if Python3 was detected during configure" +endif diff --git a/gcc/m2/config-make b/gcc/m2/config-make new file mode 100644 index 0000000000000..f6c8c9e14f3d5 --- /dev/null +++ b/gcc/m2/config-make @@ -0,0 +1,10 @@ +# Target libraries are put under this directory: +TARGET_SUBDIR = x86_64-pc-linux-gnu +# Python3 executable name if it exists +PYTHON = python3 +# Does Python3 exist? (yes/no). +HAVE_PYTHON = yes +# target cpu +TEST_TARGET_CPU_DEFAULT = x86_64-pc-linux-gnu +# host cpu +TEST_HOST_CPU_DEFAULT = x86_64-pc-linux-gnu diff --git a/gcc/nm b/gcc/nm new file mode 100755 index 0000000000000..6f68f1c07b121 --- /dev/null +++ b/gcc/nm @@ -0,0 +1,116 @@ +#! /bin/sh + +# Copyright (C) 2007-2024 Free Software Foundation, Inc. +# This file is part of GCC. + +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# Invoke as, ld or nm from the build tree. + +ORIGINAL_AS_FOR_TARGET="" +ORIGINAL_LD_FOR_TARGET="" +ORIGINAL_LD_BFD_FOR_TARGET="/.bfd" +ORIGINAL_LD_GOLD_FOR_TARGET="/.gold" +ORIGINAL_PLUGIN_LD_FOR_TARGET="" +ORIGINAL_NM_FOR_TARGET="" +ORIGINAL_DSYMUTIL_FOR_TARGET="" +exeext= +fast_install=needless +objdir=.libs + +invoked=`basename "$0"` +id=$invoked +case "$invoked" in + as) + original=$ORIGINAL_AS_FOR_TARGET + prog=as-new$exeext + dir=gas + ;; + collect-ld) + # Check -fuse-ld=bfd and -fuse-ld=gold + case " $* " in + *\ -fuse-ld=bfd\ *) + original=$ORIGINAL_LD_BFD_FOR_TARGET + ;; + *\ -fuse-ld=gold\ *) + original=$ORIGINAL_LD_GOLD_FOR_TARGET + ;; + *) + # when using a linker plugin, gcc will always pass '-plugin' as the + # first or second option to the linker. + if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then + original=$ORIGINAL_PLUGIN_LD_FOR_TARGET + else + original=$ORIGINAL_LD_FOR_TARGET + fi + ;; + esac + prog=ld-new$exeext + if test "$original" = ../gold/ld-new$exeext; then + dir=gold + # No need to handle relink since gold doesn't use libtool. + fast_install=yes + else + dir=ld + fi + id=ld + ;; + nm) + original=$ORIGINAL_NM_FOR_TARGET + prog=nm-new$exeext + dir=binutils + ;; + dsymutil) + original=$ORIGINAL_DSYMUTIL_FOR_TARGET + # We do not build this in tree - but still want to be able to execute + # a configured version from the build dir. + prog= + dir= + ;; +esac + +case "$original" in + ../*) + # compute absolute path of the location of this script + tdir=`dirname "$0"` + scriptdir=`cd "$tdir" && pwd` + + if test -x $scriptdir/../$dir/$prog; then + test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"} + + # if libtool did everything it needs to do, there's a fast path + lt_prog=$scriptdir/../$dir/$objdir/lt-$prog + test -x $lt_prog && exec $lt_prog ${1+"$@"} + + # libtool has not relinked ld-new yet, but we cannot just use the + # previous stage (because then the relinking would just never happen!). + # So we take extra care to use prev-ld/ld-new *on recursive calls*. + eval LT_RCU="\${LT_RCU_$id}" + test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + + eval LT_RCU_$id=1 + export LT_RCU_$id + $scriptdir/../$dir/$prog ${1+"$@"} + result=$? + exit $result + + else + exec $scriptdir/../prev-$dir/$prog ${1+"$@"} + fi + ;; + *) + exec $original ${1+"$@"} + ;; +esac diff --git a/gcc/option-includes.mk b/gcc/option-includes.mk new file mode 100644 index 0000000000000..deb789206f06c --- /dev/null +++ b/gcc/option-includes.mk @@ -0,0 +1 @@ +OPTIONS_H_EXTRA += $(srcdir)/config/i386/i386-opts.h diff --git a/gcc/passes.defnano tree-pass.h b/gcc/passes.defnano tree-pass.h new file mode 100644 index 0000000000000..0f8c6cd572aff --- /dev/null +++ b/gcc/passes.defnano tree-pass.h @@ -0,0 +1,565 @@ +/* Description of pass structure + Copyright (C) 1987-2024 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +/* + Macros that should be defined when using this file: + INSERT_PASSES_AFTER (PASS) + PUSH_INSERT_PASSES_WITHIN (PASS) + POP_INSERT_PASSES () + NEXT_PASS (PASS) + TERMINATE_PASS_LIST (PASS) + */ + + /* All passes needed to lower the function into shape optimizers can + operate on. These passes are always run first on the function, but + backend might produce already lowered functions that are not processed + by these passes. */ + INSERT_PASSES_AFTER (all_lowering_passes) + NEXT_PASS (pass_warn_unused_result); + NEXT_PASS (pass_diagnose_omp_blocks); + NEXT_PASS (pass_diagnose_tm_blocks); + NEXT_PASS (pass_omp_oacc_kernels_decompose); + NEXT_PASS (pass_lower_omp); + NEXT_PASS (pass_lower_cf); + NEXT_PASS (pass_lower_tm); + NEXT_PASS (pass_refactor_eh); + NEXT_PASS (pass_lower_eh); + NEXT_PASS (pass_coroutine_lower_builtins); + NEXT_PASS (pass_build_cfg); + NEXT_PASS (pass_warn_function_return); + NEXT_PASS (pass_coroutine_early_expand_ifns); + NEXT_PASS (pass_expand_omp); + NEXT_PASS (pass_build_cgraph_edges); + NEXT_PASS (pass_diagnostic_dump); + NEXT_PASS (make_pass_afmv_diagnostic); + TERMINATE_PASS_LIST (all_lowering_passes) + + /* Interprocedural optimization passes. */ + INSERT_PASSES_AFTER (all_small_ipa_passes) + NEXT_PASS (pass_ipa_free_lang_data); + NEXT_PASS (pass_ipa_function_and_variable_visibility); + NEXT_PASS (pass_ipa_strub_mode); + NEXT_PASS (pass_build_ssa_passes); + PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes) + NEXT_PASS (pass_fixup_cfg); + NEXT_PASS (pass_build_ssa); + NEXT_PASS (pass_walloca, /*strict_mode_p=*/true); + NEXT_PASS (pass_warn_printf); + NEXT_PASS (pass_warn_nonnull_compare); + NEXT_PASS (pass_early_warn_uninitialized); + NEXT_PASS (pass_warn_access, /*early=*/true); + NEXT_PASS (pass_ubsan); + NEXT_PASS (pass_nothrow); + NEXT_PASS (pass_rebuild_cgraph_edges); + POP_INSERT_PASSES () + + NEXT_PASS (pass_local_optimization_passes); + PUSH_INSERT_PASSES_WITHIN (pass_local_optimization_passes) + NEXT_PASS (pass_fixup_cfg); + NEXT_PASS (pass_rebuild_cgraph_edges); + NEXT_PASS (pass_local_fn_summary); + NEXT_PASS (pass_early_inline); + NEXT_PASS (pass_warn_recursion); + NEXT_PASS (pass_all_early_optimizations); + PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations) + NEXT_PASS (pass_remove_cgraph_callee_edges); + NEXT_PASS (pass_early_object_sizes); + /* Don't record nonzero bits before IPA to avoid + using too much memory. */ + NEXT_PASS (pass_ccp, false /* nonzero_p */); + /* After CCP we rewrite no longer addressed locals into SSA + form if possible. */ + NEXT_PASS (pass_forwprop); + NEXT_PASS (pass_early_thread_jumps, /*first=*/true); + NEXT_PASS (pass_sra_early); + /* pass_build_ealias is a dummy pass that ensures that we + execute TODO_rebuild_alias at this point. */ + NEXT_PASS (pass_build_ealias); + /* Do phiprop before FRE so we optimize std::min and std::max well. */ + NEXT_PASS (pass_phiprop); + NEXT_PASS (pass_fre, true /* may_iterate */); + NEXT_PASS (pass_early_vrp); + NEXT_PASS (pass_merge_phi); + NEXT_PASS (pass_dse); + NEXT_PASS (pass_cd_dce, false /* update_address_taken_p */); + NEXT_PASS (pass_phiopt, true /* early_p */); + NEXT_PASS (pass_tail_recursion); + NEXT_PASS (pass_if_to_switch); + NEXT_PASS (pass_convert_switch); + NEXT_PASS (pass_cleanup_eh); + NEXT_PASS (pass_sccopy); + NEXT_PASS (pass_profile); + NEXT_PASS (pass_local_pure_const); + NEXT_PASS (pass_modref); + /* Split functions creates parts that are not run through + early optimizations again. It is thus good idea to do this + late. */ + NEXT_PASS (pass_split_functions); + NEXT_PASS (pass_strip_predict_hints, true /* early_p */); + POP_INSERT_PASSES () + NEXT_PASS (pass_release_ssa_names); + NEXT_PASS (pass_rebuild_cgraph_edges); + NEXT_PASS (pass_local_fn_summary); + POP_INSERT_PASSES () + + NEXT_PASS (pass_ipa_remove_symbols); + NEXT_PASS (pass_ipa_strub); + NEXT_PASS (pass_ipa_oacc); + PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc) + NEXT_PASS (pass_ipa_pta); + /* Pass group that runs when the function is an offloaded function + containing oacc kernels loops. */ + NEXT_PASS (pass_ipa_oacc_kernels); + PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc_kernels) + NEXT_PASS (pass_oacc_kernels); + PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels) + NEXT_PASS (pass_ch); + NEXT_PASS (pass_fre, true /* may_iterate */); + /* We use pass_lim to rewrite in-memory iteration and reduction + variable accesses in loops into local variables accesses. */ + NEXT_PASS (pass_lim); + NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */); + NEXT_PASS (pass_dce); + NEXT_PASS (pass_parallelize_loops, true /* oacc_kernels_p */); + NEXT_PASS (pass_expand_omp_ssa); + NEXT_PASS (pass_rebuild_cgraph_edges); + POP_INSERT_PASSES () + POP_INSERT_PASSES () + POP_INSERT_PASSES () + + NEXT_PASS (pass_target_clone); + NEXT_PASS (pass_ipa_auto_profile); + NEXT_PASS (pass_ipa_tree_profile); + PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile) + NEXT_PASS (pass_feedback_split_functions); + POP_INSERT_PASSES () + NEXT_PASS (pass_ipa_free_fn_summary, true /* small_p */); + NEXT_PASS (pass_ipa_increase_alignment); + NEXT_PASS (pass_ipa_tm); + NEXT_PASS (pass_ipa_lower_emutls); + TERMINATE_PASS_LIST (all_small_ipa_passes) + + INSERT_PASSES_AFTER (all_regular_ipa_passes) + NEXT_PASS (pass_analyzer); + NEXT_PASS (pass_ipa_odr); + NEXT_PASS (pass_ipa_whole_program_visibility); + NEXT_PASS (pass_ipa_profile); + NEXT_PASS (pass_ipa_icf); + NEXT_PASS (pass_ipa_devirt); + NEXT_PASS (pass_ipa_cp); + NEXT_PASS (pass_ipa_sra); + NEXT_PASS (pass_ipa_cdtor_merge); + NEXT_PASS (pass_ipa_fn_summary); + NEXT_PASS (pass_ipa_inline); + NEXT_PASS (pass_ipa_pure_const); + NEXT_PASS (pass_ipa_modref); + NEXT_PASS (pass_ipa_free_fn_summary, false /* small_p */); + NEXT_PASS (pass_ipa_reference); + /* This pass needs to be scheduled after any IP code duplication. */ + NEXT_PASS (pass_ipa_single_use); + /* Comdat privatization come last, as direct references to comdat local + symbols are not allowed outside of the comdat group. Privatizing early + would result in missed optimizations due to this restriction. */ + NEXT_PASS (pass_ipa_comdats); + TERMINATE_PASS_LIST (all_regular_ipa_passes) + + /* Simple IPA passes executed after the regular passes. In WHOPR mode the + passes are executed after partitioning and thus see just parts of the + compiled unit. */ + INSERT_PASSES_AFTER (all_late_ipa_passes) + NEXT_PASS (pass_ipa_pta); + NEXT_PASS (pass_omp_simd_clone); + TERMINATE_PASS_LIST (all_late_ipa_passes) + + /* These passes are run after IPA passes on every function that is being + output to the assembler file. */ + INSERT_PASSES_AFTER (all_passes) + NEXT_PASS (pass_fixup_cfg); + NEXT_PASS (pass_lower_eh_dispatch); + NEXT_PASS (pass_oacc_loop_designation); + NEXT_PASS (pass_omp_oacc_neuter_broadcast); + NEXT_PASS (pass_oacc_device_lower); + NEXT_PASS (pass_omp_device_lower); + NEXT_PASS (pass_omp_target_link); + NEXT_PASS (pass_adjust_alignment); + NEXT_PASS (pass_harden_control_flow_redundancy); + NEXT_PASS (pass_all_optimizations); + PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations) + NEXT_PASS (pass_remove_cgraph_callee_edges); + /* Initial scalar cleanups before alias computation. + They ensure memory accesses are not indirect wherever possible. */ + NEXT_PASS (pass_strip_predict_hints, false /* early_p */); + NEXT_PASS (pass_ccp, true /* nonzero_p */); + /* After CCP we rewrite no longer addressed locals into SSA + form if possible. */ + NEXT_PASS (pass_object_sizes); + NEXT_PASS (pass_post_ipa_warn); + /* Must run before loop unrolling. */ + NEXT_PASS (pass_warn_access, /*early=*/true); + /* Profile count may overflow as a result of inlinining very large + loop nests. This pass should run before any late pass that makes + use of profile. */ + NEXT_PASS (pass_rebuild_frequencies); + NEXT_PASS (pass_complete_unrolli); + NEXT_PASS (pass_backprop); + NEXT_PASS (pass_phiprop); + NEXT_PASS (pass_forwprop); + /* pass_build_alias is a dummy pass that ensures that we + execute TODO_rebuild_alias at this point. */ + NEXT_PASS (pass_build_alias); + NEXT_PASS (pass_return_slot); + NEXT_PASS (pass_fre, true /* may_iterate */); + NEXT_PASS (pass_merge_phi); + NEXT_PASS (pass_thread_jumps_full, /*first=*/true); + NEXT_PASS (pass_vrp, false /* final_p*/); + NEXT_PASS (pass_array_bounds); + NEXT_PASS (pass_dse); + NEXT_PASS (pass_dce); + /* pass_stdarg is always run and at this point we execute + TODO_remove_unused_locals to prune CLOBBERs of dead + variables which are otherwise a churn on alias walkings. */ + NEXT_PASS (pass_stdarg); + NEXT_PASS (pass_call_cdce); + NEXT_PASS (pass_cselim); + NEXT_PASS (pass_copy_prop); + NEXT_PASS (pass_tree_ifcombine); + NEXT_PASS (pass_merge_phi); + NEXT_PASS (pass_phiopt, false /* early_p */); + NEXT_PASS (pass_tail_recursion); + NEXT_PASS (pass_ch); + NEXT_PASS (pass_lower_complex); + NEXT_PASS (pass_lower_bitint); + NEXT_PASS (pass_sra); + /* The dom pass will also resolve all __builtin_constant_p calls + that are still there to 0. This has to be done after some + propagations have already run, but before some more dead code + is removed, and this place fits nicely. Remember this when + trying to move or duplicate pass_dominator somewhere earlier. */ + NEXT_PASS (pass_thread_jumps, /*first=*/true); + NEXT_PASS (pass_dominator, true /* may_peel_loop_headers_p */); + /* Threading can leave many const/copy propagations in the IL. + Clean them up. Failure to do so well can lead to false + positives from warnings for erroneous code. */ + NEXT_PASS (pass_copy_prop); + /* Identify paths that should never be executed in a conforming + program and isolate those paths. */ + NEXT_PASS (pass_isolate_erroneous_paths); + NEXT_PASS (pass_reassoc, true /* early_p */); + NEXT_PASS (pass_dce); + NEXT_PASS (pass_forwprop); + NEXT_PASS (pass_phiopt, false /* early_p */); + NEXT_PASS (pass_ccp, true /* nonzero_p */); + /* After CCP we rewrite no longer addressed locals into SSA + form if possible. */ + NEXT_PASS (pass_expand_powcabs); + NEXT_PASS (pass_optimize_bswap); + NEXT_PASS (pass_laddress); + NEXT_PASS (pass_lim); + NEXT_PASS (pass_walloca, false); + NEXT_PASS (pass_pre); + NEXT_PASS (pass_sink_code, false /* unsplit edges */); + NEXT_PASS (pass_sancov); + NEXT_PASS (pass_asan); + NEXT_PASS (pass_tsan); + NEXT_PASS (pass_dse, true /* use DR analysis */); + NEXT_PASS (pass_dce); + /* Pass group that runs when 1) enabled, 2) there are loops + in the function. Make sure to run pass_fix_loops before + to discover/remove loops before running the gate function + of pass_tree_loop. */ + NEXT_PASS (pass_fix_loops); + NEXT_PASS (pass_tree_loop); + PUSH_INSERT_PASSES_WITHIN (pass_tree_loop) + /* Before loop_init we rewrite no longer addressed locals into SSA + form if possible. */ + NEXT_PASS (pass_tree_loop_init); + NEXT_PASS (pass_tree_unswitch); + NEXT_PASS (pass_loop_split); + NEXT_PASS (pass_scev_cprop); + NEXT_PASS (pass_loop_versioning); + NEXT_PASS (pass_loop_jam); + /* All unswitching, final value replacement and splitting can expose + empty loops. Remove them now. */ + NEXT_PASS (pass_cd_dce, false /* update_address_taken_p */); + NEXT_PASS (pass_iv_canon); + NEXT_PASS (pass_loop_distribution); + NEXT_PASS (pass_linterchange); + NEXT_PASS (pass_copy_prop); + NEXT_PASS (pass_graphite); + PUSH_INSERT_PASSES_WITHIN (pass_graphite) + NEXT_PASS (pass_graphite_transforms); + NEXT_PASS (pass_lim); + NEXT_PASS (pass_copy_prop); + NEXT_PASS (pass_dce); + POP_INSERT_PASSES () + NEXT_PASS (pass_parallelize_loops, false /* oacc_kernels_p */); + NEXT_PASS (pass_expand_omp_ssa); + NEXT_PASS (pass_ch_vect); + NEXT_PASS (pass_if_conversion); + /* pass_vectorize must immediately follow pass_if_conversion. + Please do not add any other passes in between. */ + NEXT_PASS (pass_vectorize); + PUSH_INSERT_PASSES_WITHIN (pass_vectorize) + NEXT_PASS (pass_dce); + POP_INSERT_PASSES () + NEXT_PASS (pass_predcom); + NEXT_PASS (pass_complete_unroll); + NEXT_PASS (pass_pre_slp_scalar_cleanup); + PUSH_INSERT_PASSES_WITHIN (pass_pre_slp_scalar_cleanup) + NEXT_PASS (pass_fre, false /* may_iterate */); + NEXT_PASS (pass_dse); + POP_INSERT_PASSES () + NEXT_PASS (pass_slp_vectorize); + NEXT_PASS (pass_loop_prefetch); + /* Run IVOPTs after the last pass that uses data-reference analysis + as that doesn't handle TARGET_MEM_REFs. */ + NEXT_PASS (pass_iv_optimize); + NEXT_PASS (pass_lim); + NEXT_PASS (pass_tree_loop_done); + POP_INSERT_PASSES () + /* Pass group that runs when pass_tree_loop is disabled or there + are no loops in the function. */ + NEXT_PASS (pass_tree_no_loop); + PUSH_INSERT_PASSES_WITHIN (pass_tree_no_loop) + NEXT_PASS (pass_slp_vectorize); + POP_INSERT_PASSES () + NEXT_PASS (pass_simduid_cleanup); + NEXT_PASS (pass_lower_vector_ssa); + NEXT_PASS (pass_lower_switch); + NEXT_PASS (pass_cse_sincos); + NEXT_PASS (pass_cse_reciprocals); + NEXT_PASS (pass_reassoc, false /* early_p */); + NEXT_PASS (pass_strength_reduction); + NEXT_PASS (pass_split_paths); + NEXT_PASS (pass_tracer); + NEXT_PASS (pass_fre, false /* may_iterate */); + /* After late FRE we rewrite no longer addressed locals into SSA + form if possible. */ + NEXT_PASS (pass_thread_jumps, /*first=*/false); + NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */); + NEXT_PASS (pass_strlen); + NEXT_PASS (pass_thread_jumps_full, /*first=*/false); + NEXT_PASS (pass_vrp, true /* final_p */); + /* Run CCP to compute alignment and nonzero bits. */ + NEXT_PASS (pass_ccp, true /* nonzero_p */); + NEXT_PASS (pass_warn_restrict); + NEXT_PASS (pass_dse); + NEXT_PASS (pass_dce, true /* update_address_taken_p */); + /* After late DCE we rewrite no longer addressed locals into SSA + form if possible. */ + NEXT_PASS (pass_forwprop); + NEXT_PASS (pass_sink_code, true /* unsplit edges */); + NEXT_PASS (pass_phiopt, false /* early_p */); + NEXT_PASS (pass_fold_builtins); + NEXT_PASS (pass_optimize_widening_mul); + NEXT_PASS (pass_store_merging); + /* If DCE is not run before checking for uninitialized uses, + we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c). + However, this also causes us to misdiagnose cases that should be + real warnings (e.g., testsuite/gcc.dg/pr18501.c). */ + NEXT_PASS (pass_cd_dce, false /* update_address_taken_p */); + NEXT_PASS (pass_sccopy); + NEXT_PASS (pass_tail_calls); + /* Split critical edges before late uninit warning to reduce the + number of false positives from it. */ + NEXT_PASS (pass_split_crit_edges); + NEXT_PASS (pass_late_warn_uninitialized); + NEXT_PASS (pass_local_pure_const); + NEXT_PASS (pass_modref); + /* uncprop replaces constants by SSA names. This makes analysis harder + and thus it should be run last. */ + NEXT_PASS (pass_uncprop); + POP_INSERT_PASSES () + NEXT_PASS (pass_all_optimizations_g); + PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations_g) + /* The idea is that with -Og we do not perform any IPA optimization + so post-IPA work should be restricted to semantically required + passes and all optimization work is done early. */ + NEXT_PASS (pass_remove_cgraph_callee_edges); + NEXT_PASS (pass_strip_predict_hints, false /* early_p */); + /* Lower remaining pieces of GIMPLE. */ + NEXT_PASS (pass_lower_complex); + NEXT_PASS (pass_lower_bitint); + NEXT_PASS (pass_lower_vector_ssa); + NEXT_PASS (pass_lower_switch); + /* Perform simple scalar cleanup which is constant/copy propagation. */ + NEXT_PASS (pass_ccp, true /* nonzero_p */); + NEXT_PASS (pass_post_ipa_warn); + NEXT_PASS (pass_object_sizes); + /* Fold remaining builtins. */ + NEXT_PASS (pass_fold_builtins); + NEXT_PASS (pass_strlen); + /* Copy propagation also copy-propagates constants, this is necessary + to forward object-size and builtin folding results properly. */ + NEXT_PASS (pass_copy_prop); + NEXT_PASS (pass_dce); + /* Profile count may overflow as a result of inlinining very large + loop nests. This pass should run before any late pass that makes + use of profile. */ + NEXT_PASS (pass_rebuild_frequencies); + NEXT_PASS (pass_sancov); + NEXT_PASS (pass_asan); + NEXT_PASS (pass_tsan); + /* ??? We do want some kind of loop invariant motion, but we possibly + need to adjust LIM to be more friendly towards preserving accurate + debug information here. */ + /* Split critical edges before late uninit warning to reduce the + number of false positives from it. */ + NEXT_PASS (pass_split_crit_edges); + NEXT_PASS (pass_late_warn_uninitialized); + /* uncprop replaces constants by SSA names. This makes analysis harder + and thus it should be run last. */ + NEXT_PASS (pass_uncprop); + POP_INSERT_PASSES () + NEXT_PASS (pass_assumptions); + NEXT_PASS (pass_tm_init); + PUSH_INSERT_PASSES_WITHIN (pass_tm_init) + NEXT_PASS (pass_tm_mark); + NEXT_PASS (pass_tm_memopt); + NEXT_PASS (pass_tm_edges); + POP_INSERT_PASSES () + NEXT_PASS (pass_simduid_cleanup); + NEXT_PASS (pass_vtable_verify); + NEXT_PASS (pass_lower_vaarg); + NEXT_PASS (pass_lower_vector); + NEXT_PASS (pass_lower_complex_O0); + NEXT_PASS (pass_lower_bitint_O0); + NEXT_PASS (pass_sancov_O0); + NEXT_PASS (pass_lower_switch_O0); + NEXT_PASS (pass_asan_O0); + NEXT_PASS (pass_tsan_O0); + NEXT_PASS (pass_sanopt); + NEXT_PASS (pass_cleanup_eh); + NEXT_PASS (pass_lower_resx); + NEXT_PASS (pass_nrv); + NEXT_PASS (pass_gimple_isel); + NEXT_PASS (pass_harden_conditional_branches); + NEXT_PASS (pass_harden_compares); + NEXT_PASS (pass_warn_access, /*early=*/false); + NEXT_PASS (pass_cleanup_cfg_post_optimizing); + NEXT_PASS (pass_warn_function_noreturn); + + NEXT_PASS (pass_expand); + + NEXT_PASS (pass_rest_of_compilation); + PUSH_INSERT_PASSES_WITHIN (pass_rest_of_compilation) + NEXT_PASS (pass_instantiate_virtual_regs); + NEXT_PASS (pass_into_cfg_layout_mode); + NEXT_PASS (pass_jump); + NEXT_PASS (pass_lower_subreg); + NEXT_PASS (pass_df_initialize_opt); + NEXT_PASS (pass_cse); + NEXT_PASS (pass_rtl_fwprop); + NEXT_PASS (pass_rtl_cprop); + NEXT_PASS (pass_rtl_pre); + NEXT_PASS (pass_rtl_hoist); + NEXT_PASS (pass_rtl_cprop); + NEXT_PASS (pass_rtl_store_motion); + NEXT_PASS (pass_cse_after_global_opts); + NEXT_PASS (pass_rtl_ifcvt); + NEXT_PASS (pass_reginfo_init); + /* Perform loop optimizations. It might be better to do them a bit + sooner, but we want the profile feedback to work more + efficiently. */ + NEXT_PASS (pass_loop2); + PUSH_INSERT_PASSES_WITHIN (pass_loop2) + NEXT_PASS (pass_rtl_loop_init); + NEXT_PASS (pass_rtl_move_loop_invariants); + NEXT_PASS (pass_rtl_unroll_loops); + NEXT_PASS (pass_rtl_doloop); + NEXT_PASS (pass_rtl_loop_done); + POP_INSERT_PASSES () + NEXT_PASS (pass_lower_subreg2); + NEXT_PASS (pass_web); + NEXT_PASS (pass_rtl_cprop); + NEXT_PASS (pass_cse2); + NEXT_PASS (pass_rtl_dse1); + NEXT_PASS (pass_rtl_fwprop_addr); + NEXT_PASS (pass_inc_dec); + NEXT_PASS (pass_initialize_regs); + NEXT_PASS (pass_ud_rtl_dce); + NEXT_PASS (pass_combine); + NEXT_PASS (pass_if_after_combine); + NEXT_PASS (pass_jump_after_combine); + NEXT_PASS (pass_partition_blocks); + NEXT_PASS (pass_outof_cfg_layout_mode); + NEXT_PASS (pass_split_all_insns); + NEXT_PASS (pass_lower_subreg3); + NEXT_PASS (pass_df_initialize_no_opt); + NEXT_PASS (pass_stack_ptr_mod); + NEXT_PASS (pass_mode_switching); + NEXT_PASS (pass_match_asm_constraints); + NEXT_PASS (pass_sms); + NEXT_PASS (pass_live_range_shrinkage); + NEXT_PASS (pass_sched); + NEXT_PASS (pass_early_remat); + NEXT_PASS (pass_ira); + NEXT_PASS (pass_reload); + NEXT_PASS (pass_postreload); + PUSH_INSERT_PASSES_WITHIN (pass_postreload) + NEXT_PASS (pass_postreload_cse); + NEXT_PASS (pass_gcse2); + NEXT_PASS (pass_split_after_reload); + NEXT_PASS (pass_ree); + NEXT_PASS (pass_compare_elim_after_reload); + NEXT_PASS (pass_thread_prologue_and_epilogue); + NEXT_PASS (pass_rtl_dse2); + NEXT_PASS (pass_stack_adjustments); + NEXT_PASS (pass_jump2); + NEXT_PASS (pass_duplicate_computed_gotos); + NEXT_PASS (pass_sched_fusion); + NEXT_PASS (pass_peephole2); + NEXT_PASS (pass_if_after_reload); + NEXT_PASS (pass_regrename); + NEXT_PASS (pass_fold_mem_offsets); + NEXT_PASS (pass_cprop_hardreg); + NEXT_PASS (pass_fast_rtl_dce); + NEXT_PASS (pass_reorder_blocks); + NEXT_PASS (pass_leaf_regs); + NEXT_PASS (pass_split_before_sched2); + NEXT_PASS (pass_sched2); + NEXT_PASS (pass_stack_regs); + PUSH_INSERT_PASSES_WITHIN (pass_stack_regs) + NEXT_PASS (pass_split_before_regstack); + NEXT_PASS (pass_stack_regs_run); + POP_INSERT_PASSES () + POP_INSERT_PASSES () + NEXT_PASS (pass_late_thread_prologue_and_epilogue); + /* No target-independent code motion is allowed beyond this point, + excepting the legacy delayed-branch pass. */ + NEXT_PASS (pass_late_compilation); + PUSH_INSERT_PASSES_WITHIN (pass_late_compilation) + NEXT_PASS (pass_zero_call_used_regs); + NEXT_PASS (pass_compute_alignments); + NEXT_PASS (pass_variable_tracking); + NEXT_PASS (pass_free_cfg); + NEXT_PASS (pass_machine_reorg); + NEXT_PASS (pass_cleanup_barriers); + NEXT_PASS (pass_delay_slots); + NEXT_PASS (pass_split_for_shorten_branches); + NEXT_PASS (pass_convert_to_eh_region_ranges); + NEXT_PASS (pass_shorten_branches); + NEXT_PASS (pass_set_nothrow_function_flags); + NEXT_PASS (pass_dwarf2_frame); + NEXT_PASS (pass_final); + POP_INSERT_PASSES () + NEXT_PASS (pass_df_finish); + POP_INSERT_PASSES () + NEXT_PASS (pass_clean_state); + TERMINATE_PASS_LIST (all_passes) diff --git a/gcc/plugin-version.h b/gcc/plugin-version.h new file mode 100644 index 0000000000000..b52d06a150f92 --- /dev/null +++ b/gcc/plugin-version.h @@ -0,0 +1,18 @@ +#include "configargs.h" + +#define GCCPLUGIN_VERSION_MAJOR 15 +#define GCCPLUGIN_VERSION_MINOR 0 +#define GCCPLUGIN_VERSION_PATCHLEVEL 0 +#define GCCPLUGIN_VERSION (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR) + +static char basever[] = "15.0.0"; +static char datestamp[] = "20240611"; +static char devphase[] = "experimental"; +static char revision[] = ""; + +/* FIXME plugins: We should make the version information more precise. + One way to do is to add a checksum. */ + +static struct plugin_gcc_version gcc_version = {basever, datestamp, + devphase, revision, + configuration_arguments};