I know how refcount internally work on strings and dyn array.
I am thinking about formulating a request to the DWARF specs. So I want
to check the details, and also get information how they
- will work for smart pointers,
- where else they may occur?
Background, refcounts may be of interest for the debugger in at least
the following cases.
- A user modifies a variable (or an indexed value) via the debugger.
~ The debugger may additionally need info, if it should "copy on
write" / though that can be derived....
~ The debugger could inform the user about "side effects on other
references to the value"
- The user may want to explicitly see the refcount.
~ A user may have "pchar" access to a string, and the user wants to
ensure the string was correctly "uniquestring" treated.
- A user wants to call a function that has a string/array as
argument/result.
~ The debugger must deal with that, without introducing mem leaks.
If I am correct, then the following dwarf tags may need information
DW_TAG_Array (string and array)
DW_TAG_string_type
DW_TAG_structure // or class / interface => for smart pointers
// other types? base type, e.g. a refcounted char or integer???
The last assumes that the info can be encoded to the "smart pointed to"
structure?
- Are there non-structure values that could be affected?
- Should maybe the DW_TAG_Pointer hold the refcount info instead?
I would expect the ref-count to be in the target value? Unless you can
have a non-ref-counted structure, but have a ref-counted pointer to it????
------------------
The "copy on write" can be known by checking if it is a string. That is,
as long as smart pointers will not look like a string.
The debugger likely will need some knowledge on the producer (and then
such type based decisions can be allowed)>
This is because the debugger must also know how to call
fpc_ansistring_decref etc...
And trying to encode what functions to call (including where to pass
which data as parameter =>probably way to complex)
So my current idea is to request a simple
DW_AT_refcount // location, reference, constant // maybe flag
maybe
DW_AT_refcount_size / bit_size
(And maybe similar for the encoding field... any idea on what other
fields may be of interest, or any that are going to be added soon-ish?)
------------------
I am not sure yet which methods the debugger may have to call on smart
pointers, or what else it would need to know.
Any feedback on that part would be welcome
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel