This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Ping 5! [PATCH, revised]: Track uninitialized variables



On Jun 8, 2007, at 10:07 AM, Caroline Tice wrote:



On Jun 1, 2007, at 10:24 AM, Caroline Tice wrote:


Thank you for the suggestion.  The link to the original
posting for this unreviewed patch is:

http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01240.html

On Jun 1, 2007, at 10:13 AM, Manuel López-Ibáñez wrote:

Hi Caroline,

I think that giving a link to the original mail in the archives will
increase the chances of getting a reviewer. And as a rule of thumb,
anything that makes easier the life of a reviewer will increase the
chances of getting a patch reviewed.

Cheers,

Manuel.

On 01/06/07, Caroline Tice <ctice@apple.com> wrote:

Still waiting to be reviewed...


On May 25, 2007, at 1:53 PM, Caroline Tice wrote:

>
> On May 18, 2007, at 12:48 PM, Caroline Tice wrote:
>
>> As a point of interest: The GDB side of this patch has been
>> accepted and
>> committed to FSF GDB.
>>
>> -- Caroline
>>
>> On May 11, 2007, at 12:13 PM, Caroline Tice wrote:
>>
>>> Here is a revised version of my patch for tracking uninitialized
>>> variables (see description in original posting copied below). I
>>> added
>>> the comments Ian asked for, and I changed the way it is turned on/
>>> off.
>>> Instead of the macro in my previous patch, it is now controlled by a
>>> command line option, -fvar-tracking-uninit, which turns on
>>> var-tracking, just like -fvar-tracking, but also turns on the
>>> uninitialized variable tracking. I added the same feasibility
>>> checks to
>>> it that are used for -fvar-tracking. I also turned it on by default
>>> on darwin systems running 10.5 or later (when var-tracking is on).
>>>
>>> I tested this patch by bootstrapping it and running the dejagnu
>>> testsuite without any regressions, on a ppc running apple- darwin, an
>>> x86 running apple-darwin, and an x86 64 running 64-bit linux. I
>>> also
>>> ran it on a small test case containing uninitialized variables, to
>>> verify that it turns on when the command line option is passed, or
>>> when running on the correct version of darwin, and is off at all
>>> other
>>> times.
>>>
>>> Is this patch okay to commit to mainline?
>>>
>>> --Caroline Tice
>>> ctice@apple.com
>>>
>>>
>>> On May 1, 2007, at 5:02 PM, Caroline Tice wrote:
>>>
>>>>
>>>> As part of some work I've been doing on improving debugging of
>>>> optimized code, I have developed the following patch which, while
>>>> tracking the locations of variables, also keeps track of whether
>>>> the
>>>> variables are initialized or not (it makes conservative assumptions
>>>> where it can't be sure). For those places where it is sure the
>>>> variables are unintialized, it adds an annotation to the
>>>> var_location_note, which the dwarf writer later translates to a new
>>>> DW_OP (an extension) that indicates a variable is uninitialized
>>>> (DW_OP_GNU_uninit).
>>>
>>>> Since this work requires that GDB be able to read and do something
>>>> reasonable with the new DW_OP, I have also created a GDB patch to
>>>> deal
>>>> with the new op, and to inform the user that a particular value is
>>>> unintialized when the user asks to see it. As the two patches
>>>> really
>>>> go together, I am attaching both of them to this message. (I will
>>>> also be sending the GDB patch to the gdb patches list).
>>>
>>>> Because using the new DW_OP is sensitive to whether or not the user
>>>> has a version of GDB that can handle it, I have added a macro,
>>>> TARGET_DWARF_UNINIT_VARS, which defaults to 0, and which controls
>>>> whether the uninitialized variable tracking is done.
>>>
>>>> I have bootstrapped and run the dejagnu testsuite on this patch,
>>>> with
>>>> no regressions, on a ppc running apple-darwin, an x86 running
>>>> apple-darwin, and an x86 64 running 64-bit linux.
>>>
>>>> Is this patch okay to commit to mainline?
>>>> -- Caroline Tice
>>>> ctice@apple.com
>>>>
>>>
>>> 2007-05-11 Caroline Tice <ctice@apple.com>
>>>
>>> * toplev.c (process_options): Turn flag_var_tracking_uninit
>>> off when
>>> flag_var_tracking is explicitly turned off (i.e. when variable
>>> tracking is not feasible); otherwise, turn flag_var_tracking
>>> on when
>>> flag_var_tracking_uninit is on.
>>> * rtl.def (VAR_LOCATION): Add a new integer subfield to
>>> VAR_LOCATION
>>> note definitions, to allow recording of initialization status
>>> in the
>>> notes.
>>> * dwarf2out.c (dwarf_stack_op_name): Add case for
>>> DW_OP_GNU_uninit.
>>> (add_var_loc_to_decl): Add comparison of
>>> NOTE_VAR_LOCATION_STATUS to
>>> determine if two note locations are equal.
>>> (output_loc_list): Don't output list entries whose start &
>>> end labels
>>> are the same.
>>> (reg_loc_descriptor): Add parameter for initialization
>>> status; pass it
>>> to other loc descriptor functions.
>>> (one_reg_loc_descriptor): Add parameter for initialization
>>> status;
>>> check its value and add DW_OP_GNU_uninit to returned loc
>>> descr if
>>> appropriate.
>>> (multiple_reg_loc_descriptor): Add parameter for initialization
>>> status;
>>> pass init status argument to other loc descriptor functions;
>>> check
>>> value of intialization parameter and add DW_OP_GNU_uninit to
>>> returned
>>> loc descr if appropriate.
>>> (based_loc_descr): Add parameter for initialization status;
>>> add new
>>> variable for return value; check value of initialization
>>> parameter and
>>> add DW_OP_GNU_uninit to returned loc descr if appropriate.
>>> (concatn_mem_loc_descriptor): Add parameter for
>>> initialization status;
>>> pass init status argument to other loc descriptor functions;
>>> check
>>> value of intialization parameter and add DW_OP_GNU_uninit to
>>> returned
>>> loc descr if appropriate.
>>> (mem_loc_descriptor): Likewise.
>>> (concat_loc_descriptor): Likewise.
>>> (concatn_loc_descriptor): Likewise.
>>> (loc_descriptor): Add parameter for initialization status;
>>> pass it as
>>> argument to other loc descriptor function calls.
>>> (loc_descriptor_from_tree_1): Add appropriate initialization
>>> status
>>> to loc descriptor function calls.
>>> (add_location_or_const_value_attribute): Get initialization
>>> status
>>> from VAR_LOCATION note; add initialization status to loc
>>> descriptor
>>> function calls.
>>> * dwarf2.h (enum dwarf_location_atom): New op,
>>> DW_OP_GNU_uninit.
>>> * print-rtl.c (print_rtx): When printing a VAR_LOCATION note,
>>> if
>>> status is uninitialized, add "[uninint]" to output.
>>> * common.opt (fvar-tracking-uninit): New option, similar to
>>> fvar-tracking, to turn on tracking of uninitialized
>>> variables; creates
>>> a new global flag, flag_var_tracking_uninit.
>>> * rtl.h (NOTE_VAR_LOCATION_STATUS): New macro for accessing
>>> new field.
>>> (enum var_init_status): New type, for var initialization
>>> status field.
>>> * var-tracking.c (struct location_chain_def): Two new fields,
>>> init,
>>> for initialization status, and set_src for the assignment
>>> value expr.
>>> (unshare_variable): New parameter for initialization status;
>>> initialize new init and set_src fields.
>>> (var_reg_set): New parameters for initialization status and
>>> value;
>>> pass them to set_variable_part.
>>> (var_mem_set): Likewise.
>>> (get_init_value): New function.
>>> (var_reg_delete_and_set): New initialization status & value
>>> parameters; add call to get_init_value if status is unknown;
>>> pass new
>>> parameters to clobber_variable_part and var_reg_set.
>>> (var_mem_delete_and_set): Likewise.
>>> (var_reg_delete): Pass null set_src value to
>>> clobber_variable_part.
>>> (var_mem_delete): Likewise.
>>> (variable_union): Pass status to unshare_variable; initialize
>>> new init
>>> and set_src fields. If flag_var_tracking_uninit is not set,
>>> force
>>> status to initialized.
>>> (add_stores): Store insn, rather than NEXT_INSN(insn), so it
>>> can be
>>> used later to get the set_src value.
>>> (find_src_status): New function.
>>> (find_src_set_src): New function.
>>> (compute_bb_dataflow): Pass init status to calls to
>>> var_reg_set,
>>> var_mem_set, var_reg_delete_and_set and
>>> var_mem_delete_and_set; for
>>> MO_SET, get set_src value and pass it to
>>> var_reg_delete_and_set
>>> and var_mem_delete_and_set.
>>> (dump_variable): Print out "[uninit]" if appropriate.
>>> (set_variable_part): Add new initialization and set_src
>>> parameters;
>>> pass status to unshare_variable; set node->init and node-
>>> >set_src
>>> fields and modify slot in hash table appropriately; save the
>>> init and
>>> set_src values if appropriate and assign to the new node.
>>> (clobber_variable_part): New set_src parameter; if two nodes
>>> have
>>> same variable and same location but different set_src
>>> (assignment)
>>> values, clobber old node.
>>> (delete_variable_part): Pass init status to unshare_variable.
>>> (emit_note_insn_var_location): Add initialized var; assign
>>> var's init
>>> status to new 'initialized'; pass new init status field to
>>> calls to
>>> gen_rtx_VAR_LOCATION. If flag_var_tracking_uninit is not
>>> set, force
>>> status to initialized.
>>> (emit_notes_in_bb): Pass initialization status to calls to
>>> var_reg_set, var_mem_set, var_reg_delete_and_set and
>>> var_mem_delete_and_set; for MO_SET, get set_src value and
>>> pass it to
>>> var_reg_delete_and_set and var_mem_delete_and_set; call
>>> emit_notes_for_changes on NEXT_INSN(insn) rather than on
>>> insn, to
>>> make up for change in add_stores.
>>> (vt_add_function_parameters): Add status to calls to
>>> set_variable_part.
>>> * config/darwin.c (darwin_override_options): Turn on
>>> uninitialized
>>> tracking automatically, if var_tracking is on and the system is
>>> 10.5 or higher.
>>>
>>>
>>> <fsf-gcc-patch.v2.txt>
>>
>







Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]