diff options
author | Kevin Buettner <kevinb@redhat.com> | 2006-03-15 23:38:09 +0000 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2006-03-15 23:38:09 +0000 |
commit | 7c699b811153b584e042d858ca4647f00d7093ec (patch) | |
tree | c490de3e4e6862f90732fe603017cc655ce0c2c7 /gdb/solib-frv.c | |
parent | 4546b4af9521bdbcf723264787d0240c94fdc82a (diff) | |
download | gdb-7c699b811153b584e042d858ca4647f00d7093ec.zip gdb-7c699b811153b584e042d858ca4647f00d7093ec.tar.gz gdb-7c699b811153b584e042d858ca4647f00d7093ec.tar.bz2 |
Add FR-V Linux core file support.
Diffstat (limited to 'gdb/solib-frv.c')
-rw-r--r-- | gdb/solib-frv.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index abdef8f..128a543 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -421,6 +421,22 @@ frv_current_sos (void) struct so_list *sos_head = NULL; struct so_list **sos_next_ptr = &sos_head; + /* Make sure that the main executable has been relocated. This is + required in order to find the address of the global offset table, + which in turn is used to find the link map info. (See lm_base() + for details.) + + Note that the relocation of the main executable is also performed + by SOLIB_CREATE_INFERIOR_HOOK(), however, in the case of core + files, this hook is called too late in order to be of benefit to + SOLIB_ADD. SOLIB_ADD eventually calls this this function, + frv_current_sos, and also precedes the call to + SOLIB_CREATE_INFERIOR_HOOK(). (See post_create_inferior() in + infcmd.c.) */ + if (main_executable_lm_info == 0 && core_bfd != NULL) + frv_relocate_main_executable (); + + /* Fetch the GOT corresponding to the main executable. */ mgot = main_got (); /* Locate the address of the first link map struct. */ @@ -960,6 +976,14 @@ frv_clear_solib (void) enable_break1_done = 0; enable_break2_done = 0; main_lm_addr = 0; + if (main_executable_lm_info != 0) + { + xfree (main_executable_lm_info->map); + xfree (main_executable_lm_info->dyn_syms); + xfree (main_executable_lm_info->dyn_relocs); + xfree (main_executable_lm_info); + main_executable_lm_info = 0; + } } static void |