From ebd67d8768df87db261949f9d3b459f303ea20c3 Mon Sep 17 00:00:00 2001 From: Aleksandar Ristovski Date: Thu, 14 Aug 2008 20:55:21 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 7 +++++++ gdb/nto-tdep.c | 36 +++++++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3973634a39..2269d443b6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2008-08-14 Aleksandar Ristovski + + * 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. + 2008-08-14 Tom Tromey * macrocmd.c (macro_define_command): Check for NULL argument. diff --git a/gdb/nto-tdep.c b/gdb/nto-tdep.c index c9a02df9e1..bf321b8601 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 -- 2.34.1