> 
> Also why does the lldb_private::Variable() class take a DWARFExpression to 
> its constructor?  Seems like this is wrong in the face of non-DWARF debug 
> information.

They are powerful enough to handle any variable location. More powerful than 
any other format I have seen. You have two choices:

- make a new lldb_private::Location class and have DWARFExpression implement 
the pure virtuals you need
- convert PDB locations into DWARF

Personally the second sounds easier as the DWARF expressions are well 
documented and they are easy to construct. If you have the spec for the PDB 
locations and can point me at this, I can take a look to see how well things 
would map.

Variables that are in registers use a DWARF location expression like:

DW_OP_reg12

that means the value is register number 12.

DW_OP_addr(0x10000) means the value is a global variable whose value lives at 
"file address 0x10000 inside of the module from which is originates". We 
translate the file address into a load address if we are running and if that 
resolves to a load address, we can read the variable value.

DW_OP_fbreg32(32) means the value is 32 bytes off of register 32.

So the locations expression are often this simple: in a register, in .data at a 
file address, or on the stack. So depending on how complex locations are in 
PDB, it might be easier to just create a simple DWARF expression and be done 
with it.

Greg Clayton



_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to