From f7a80099bdb0a835a35df02093e2f52420d2cfcd Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 9 Jan 2001 01:08:53 +0000 Subject: [PATCH] Fix memory leak From-SVN: r38811 --- gcc/ChangeLog | 7 +++++++ gcc/config/arm/arm.c | 20 ++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4e28f236eef..45338c36419 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2001-01-08 Nick Clifton + + * config/arm/arm.c (arm_mark_machine_status): Check to see if + the machine structure has been allocated. + (arm_free_machine_status): New function: Free the machine + specific function structure. + 2001-01-08 Richard Henderson * jump.c (simplejump_p): Revert last change. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 54017732889..4a3436909bb 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -76,6 +76,7 @@ static Mmode select_dominance_cc_mode PARAMS ((rtx, rtx, Hint)); static Ccstar shift_op PARAMS ((rtx, Hint *)); static void arm_init_machine_status PARAMS ((struct function *)); static void arm_mark_machine_status PARAMS ((struct function *)); +static void arm_free_machine_status PARAMS ((struct function *)); static int number_of_first_bit_set PARAMS ((int)); static void replace_symbols_in_block PARAMS ((tree, rtx, rtx)); static void thumb_exit PARAMS ((FILE *, int, rtx)); @@ -9587,8 +9588,11 @@ arm_mark_machine_status (p) { machine_function *machine = p->machine; - ggc_mark_rtx (machine->ra_rtx); - ggc_mark_rtx (machine->eh_epilogue_sp_ofs); + if (machine) + { + ggc_mark_rtx (machine->ra_rtx); + ggc_mark_rtx (machine->eh_epilogue_sp_ofs); + } } static void @@ -9603,6 +9607,17 @@ arm_init_machine_status (p) #endif } +static void +arm_free_machine_status (p) + struct function * p; +{ + if (p->machine) + { + free (p->machine); + p->machine = NULL; + } +} + /* Return an RTX indicating where the return address to the calling function can be found. */ rtx @@ -9650,6 +9665,7 @@ arm_init_expanders () /* Arrange to initialize and mark the machine per-function status. */ init_machine_status = arm_init_machine_status; mark_machine_status = arm_mark_machine_status; + free_machine_status = arm_free_machine_status; } /* Generate the rest of a function's prologue. */ -- 2.30.2