hi Mark,

Thanks for you reply!

First, sorry but I'm cutting and pasting below your response from off the
list archive below since I didn't receive an email with your reply.

As far as your question about the tool I'm building...I'm building a C code
tracing tool for educational purposes, and using valgrind as the backend of
this tool.  The resulting tool will be similar to Python tutor but with
some differences.  We also have an assembly code tracing tool that uses
valgrind as the backend that we are close to completing.   It doesn't work
for ARM due to what I think is a vex bug in the ARM version (
https://bugs.kde.org/show_bug.cgi?id=460951), but it works for x86
architectures.

The StackBlock and GlobalBlock structs and the interface for getting these
are very useful for the tool I'm building.  I really like the interfaces
you were about to remove, but I'd like to add an TyEnt * entry to
StackBlock and GlobalBlock to get detailed type information so that I can
interpret and print out bytes of variables, and the memory they point to in
some cases, in terms of the variable's specific C type.   I believe the
TyEnt has all the information I would need, but perhaps I am mistaken.

What are your thoughts?

Thanks,
Tia


Hi Tia,

On Tue, 2023-08-01 at 08:56 -0500, Tia Newhall wrote:
> I'm building a valgrind tool, and as part of its functionality I need
to get (and ultimately print out) local and global variable values
based on their C types. However, I do not see a way to get detailed
type information for locals and globals via the tool public interface.
>
> The stack and global structs exported
via VG_(di_get_global_blocks_from_dihandle)
and VG_(di_get_stack_blocks_at_ip) give me back structs that include
the variable name, the address, total size in bytes, and if it is an
array or not, but this is not sufficient for my purposes.  For example,
if the variable is an array of 16 bytes I have no idea if it is an
array of char, short, int, unsigned int, int *, etc., and if it is a
struct or union I have no idea where the field types are, their names,
nor their offsets and sizes from the base address, and if it is an
array of structs or unions I have no idea if there is padding between
elements or not, and enum and typedefs I'd just be out of luck.   Even
for non-array base types, I don't know if the value is signed or
unsigned (ex. if 1 byte variable's value is 0xa1 is it -95 (char) or
161 (unsigned char)), and for Word sized values it could be a pointer
or not, in which case I would want to display a pointer's value in hex,
but if it is a long long I'd want to display it as a signed decimal.
>
> Since code in coregrind/m_debuginfo/ is parsing .debug to get the
correct and detailed type information, offset, sizes, field names,
etc., I'd like to get that info from coregrind for globals and locals
through the public tool interface: it looks like the TyEnt struct has
what I need.

Good you write about this, because I was just about to commit the
proposed patch from https://bugs.kde.org/show_bug.cgi?id=472512
"Remove Stack and Global Blocks from debuginfo handling"

The VG_(di_get_stack_blocks_at_ip) and
VG_(di_get_global_blocks_from_dihandle) functions
were only used by the exp-sgcheck tool.

Since this tool was removed a couple of years back this code hasn't
been used or tested. Lets remove it to reduce the complexity of
dealing with debuginfo.

This code confused me till I realized it isn't actually used (and was
last changed in 2008). So I think it is best to just remove it so it
doesn't confuse others.

But... now it seems you do want to use it.

> First, is there a tool interface to this detailed type information
about variables that I am missing (like info in TyEnt structs) and if
so, can someone please point me to it?
>
> If not (and I think this is the case), I would have to add something
new to the public tool interface to get the information I need, adding
or modifying code in coregrind/m_debuginfo/ to do it. I can build my
own custom version of valgrind with the functionality I need, but this
is obviously not ideal for keeping up with new version releases.
>
> Is there developer interest in expanding the valgrind public tool
interface to export the kind of detailed type information that I need
for my tool?  If so, I'd be happy to discuss with someone the best way
to design and implement it and help work on its implementation.

I think you would have to create a new interface. Unless you believe
the current one is still useful. What does your tool do precisely?

Cheers,

Mark
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to