Re: [PATCH 2/2] Testsuite for varobj updation after symbol removal

Vladimir Prus
2015-04-27T18:45:55Z

On 04/23/2015 11:04 AM, Taimoor wrote:
> Hi Vladimir,
>
> Thanks for reviewing the patch.
>
> On 04/17/2015 08:18 PM, Vladimir Prus wrote:
>>
>>
>> On 04/16/2015 06:32 AM, Taimoor Mirza wrote:
>> > This patch provides testcases for variable object updation after
>> removing
>> > symbols. Test programs are same as used for testing remove-symbol-file
>> > command in gdb.base. sym-file-main.c is modified to just add a global
>> > variable for which varible object is created in testsuite.
>> >
>>
>> Taimoor,
>>
>> thanks for the patch, and testsuite change. Looking at it, it appears
>> that 'count' is
>> a global variable, and it's modified in one place, in the main function,
>> and after that
>> you do 'remove-symbol-files' and verify that var-update reports reports
>> 'count' as
>> changed. But what does it test exactly? Since count is explicitly
>> modified in the
>> test, I'd imagine that -var-update will report it as changed even without
>> 'remove-symbol-file'. In other words, does this testcase fail if the
>> code patch is not
>> applied?
>
> Yes. This testcase fails without applying this patch. Below is problematic scenario:
>
>
> 1) Run GDB session and load symbols from file a.
> 2) Create varobj for some global variable test.
> 3) put some breakpoint in some function and run to that breakpoint.
> 4) Use add-symbol-file to load symbols of file b.
> 5) Put breakpoint on some other function that is called after updating
> global variable test.
> 6) When this breakpoint gets hit, remove symbols of b using
> 'remove-symbol-file'.
> 7) print value of test. Its updated and different from initial value.
> 8) give 'var-update' command for variable object of 'test' and
> changelist will be empty.
>
> I know its not a common scenario but as long as it is valid
> according to individual command specifications we have all the right to
> expect it will produce the intended results.
>
>>
>> Even if so, does it test exactly what is your real case? It's easy to
>> see why 'remove-symbol-files'
>> can make some global variables no longer present. But how it can change
>> value of some expression?
>
> Its not the case of global variable not present. Its problem with properly displaying changeset for a valid global variable whose value is
> changed.
> Step 7 in above scenario displays updated value of variable but -var-update for varobj of that variable gives empty changeset. The reason
> for this is mentioned in source code patch [PATCH 1/2].

Hi Taimoor,

thanks, so the issue is that removing a symbol file recreates *all* global varobjs, and in the process clears any change of value
since the last update. I agree the patch is fixing that.

There's a second change, it seems - to invalidate varobj that refers to types in unloaded objfile - is there a test for that?

Thanks,

--
Vladimir Prus
CodeSourcery / Mentor Embedded