2008-12-15 Paul Pluzhnikov <ppluzhnikov@google.com>
* dbxread.c (read_ofile_symtab): Sign-extend 32-bit N_LSYM and N_PSYM STABS values for 64-bit GDB.
This commit is contained in:
parent
2e9de9fa1e
commit
7b1f21e5c4
2 changed files with 18 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2008-12-15 Paul Pluzhnikov <ppluzhnikov@google.com>
|
||||
|
||||
* dbxread.c (read_ofile_symtab): Sign-extend 32-bit N_LSYM and
|
||||
N_PSYM STABS values for 64-bit GDB.
|
||||
|
||||
2008-12-15 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* dwarf2expr.c (execute_stack_op): Handle DW_OP_swap.
|
||||
|
|
|
@ -2597,6 +2597,19 @@ read_ofile_symtab (struct partial_symtab *pst)
|
|||
|
||||
if (type & N_STAB)
|
||||
{
|
||||
if (sizeof (nlist.n_value) > 4
|
||||
/* We are a 64-bit debugger debugging a 32-bit program. */
|
||||
&& (type == N_LSYM || type == N_PSYM))
|
||||
/* We have to be careful with the n_value in the case of N_LSYM
|
||||
and N_PSYM entries, because they are signed offsets from frame
|
||||
pointer, but we actually read them as unsigned 32-bit values.
|
||||
This is not a problem for 32-bit debuggers, for which negative
|
||||
values end up being interpreted correctly (as negative
|
||||
offsets) due to integer overflow.
|
||||
But we need to sign-extend the value for 64-bit debuggers,
|
||||
or we'll end up interpreting negative values as very large
|
||||
positive offsets. */
|
||||
nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000;
|
||||
process_one_symbol (type, nlist.n_desc, nlist.n_value,
|
||||
namestring, section_offsets, objfile);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue