diff options
author | Aleksandar Ristovski <aristovski@qnx.com> | 2008-08-14 20:55:21 +0000 |
---|---|---|
committer | Aleksandar Ristovski <aristovski@qnx.com> | 2008-08-14 20:55:21 +0000 |
commit | ebd67d8768df87db261949f9d3b459f303ea20c3 (patch) | |
tree | fd0a8aa08b994f079a54546e400b781d2eb352fb /gdb/nto-tdep.c | |
parent | 886a217cf4ad31024cf799bf2803c39c07ad1d15 (diff) | |
download | gdb-ebd67d8768df87db261949f9d3b459f303ea20c3.zip gdb-ebd67d8768df87db261949f9d3b459f303ea20c3.tar.gz gdb-ebd67d8768df87db261949f9d3b459f303ea20c3.tar.bz2 |
* nto-tdep.c (lm_info): Updated struct lm_info definition from
solib-svr4.c
(LM_ADDR): Use l_addr if available; if not, use link map and set l_addr.
Diffstat (limited to 'gdb/nto-tdep.c')
-rw-r--r-- | gdb/nto-tdep.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/gdb/nto-tdep.c b/gdb/nto-tdep.c index c9a02df..bf321b8 100644 --- a/gdb/nto-tdep.c +++ b/gdb/nto-tdep.c @@ -253,21 +253,39 @@ nto_parse_redirection (char *pargv[], const char **pin, const char **pout, solib-svr4.c to support nto_relocate_section_addresses which is different from the svr4 version. */ +/* Link map info to include in an allocated so_list entry */ + struct lm_info -{ - /* Pointer to copy of link map from inferior. The type is char * - rather than void *, so that we may use byte offsets to find the - various fields without the need for a cast. */ - char *lm; -}; + { + /* Pointer to copy of link map from inferior. The type is char * + rather than void *, so that we may use byte offsets to find the + various fields without the need for a cast. */ + gdb_byte *lm; + + /* Amount by which addresses in the binary should be relocated to + match the inferior. This could most often be taken directly + from lm, but when prelinking is involved and the prelink base + address changes, we may need a different offset, we want to + warn about the difference and compute it only once. */ + CORE_ADDR l_addr; + + /* The target location of lm. */ + CORE_ADDR lm_addr; + }; + static CORE_ADDR LM_ADDR (struct so_list *so) { - struct link_map_offsets *lmo = nto_fetch_link_map_offsets (); + if (so->lm_info->l_addr == (CORE_ADDR)-1) + { + struct link_map_offsets *lmo = nto_fetch_link_map_offsets (); - return extract_typed_address (so->lm_info->lm + lmo->l_addr_offset, - builtin_type_void_data_ptr); + so->lm_info->l_addr = + extract_typed_address (so->lm_info->lm + lmo->l_addr_offset, + builtin_type_void_data_ptr); + } + return so->lm_info->l_addr; } static CORE_ADDR |