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

Reply via email to