diff options
author | Kung Hsu <kung@cygnus> | 1993-10-19 21:20:37 +0000 |
---|---|---|
committer | Kung Hsu <kung@cygnus> | 1993-10-19 21:20:37 +0000 |
commit | dcd8fd8c17c0e3b6d178a5254c7b71db380bcc8c (patch) | |
tree | 246ae2c94246b0d37c561ffde8df2b81f7086e52 | |
parent | fd1aec331c5d3e3540c92039b04f4a26f0fc1842 (diff) | |
download | gdb-dcd8fd8c17c0e3b6d178a5254c7b71db380bcc8c.zip gdb-dcd8fd8c17c0e3b6d178a5254c7b71db380bcc8c.tar.gz gdb-dcd8fd8c17c0e3b6d178a5254c7b71db380bcc8c.tar.bz2 |
Modified Files:
values.c eval.c
* values.c (value_virtual_fn_field): Fix the offset calculation
when calling virtual functions. (gdb.t22/virtfunc.exp).
* eval.c (evaluate_subexp): same as above.
-rw-r--r-- | gdb/values.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/gdb/values.c b/gdb/values.c index f8a059e..d36bfcd 100644 --- a/gdb/values.c +++ b/gdb/values.c @@ -811,8 +811,9 @@ value_fn_field (arg1p, f, j, type, offset) *arg1p = value_ind (value_cast (lookup_pointer_type (type), value_addr (*arg1p))); - /* Move the `this' pointer according to the offset. */ + /* Move the `this' pointer according to the offset. VALUE_OFFSET (*arg1p) += offset; + */ } return v; @@ -876,8 +877,9 @@ value_virtual_fn_field (arg1p, f, j, type, offset) a virtual function. */ entry = value_subscript (vtbl, vi); - /* Move the `this' pointer according to the virtual function table. */ - VALUE_OFFSET (arg1) += value_as_long (value_field (entry, 0)) + offset; + /* Move the `this' pointer according to the virtual function table. */ + VALUE_OFFSET (arg1) += value_as_long (value_field (entry, 0))/* + offset*/; + if (! VALUE_LAZY (arg1)) { VALUE_LAZY (arg1) = 1; @@ -962,7 +964,7 @@ value_headof (in_arg, btype, dtype) * But we leave it in for future use, when we will hopefully * have optimizes the vtable to use thunks instead of offsets. */ /* Use the name of vtable itself to extract a base type. */ - demangled_name += 4; /* Skip _vt$ prefix. */ + demangled_name += 4; /* Skip vt$ prefix. */ } else { @@ -1019,10 +1021,10 @@ vb_match (type, index, basetype) if (*name != '_') return 0; - /* gcc 2.4 uses _vb$. */ + /* gcc 2.4 uses vb$. */ if (name[1] == 'v' && name[2] == 'b' && name[3] == CPLUS_MARKER) field_class_name = name + 4; - /* gcc 2.5 will use __vb_. */ + /* gcc 2.5 will use _vb_. */ if (name[1] == '_' && name[2] == 'v' && name[3] == 'b' && name[4] == '_') field_class_name = name + 5; |