aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2loc.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-10-10 03:17:53 +0000
committerDaniel Jacobowitz <drow@false.org>2006-10-10 03:17:53 +0000
commit9e35dae42503f6cef9a1f87e31a6f1111f3cb508 (patch)
treee6cff422c66aa30f070da5269292b7dd67684bb4 /gdb/dwarf2loc.c
parenta48251ed04471c0294aead9ee7be8ed9d3a9ad9e (diff)
downloadgdb-9e35dae42503f6cef9a1f87e31a6f1111f3cb508.zip
gdb-9e35dae42503f6cef9a1f87e31a6f1111f3cb508.tar.gz
gdb-9e35dae42503f6cef9a1f87e31a6f1111f3cb508.tar.bz2
2006-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
Daniel Jacobowitz <dan@codesourcery.com> * Makefile.in (expprint.o, parse.o, target.o): Update. * dwarf2loc.c (dwarf_expr_tls_address): Move body to target_translate_tls_address. Call it. * eval.c (evaluate_subexp_standard): Handle UNOP_MEMVAL_TLS. * expprint.c (print_subexp_standard): Likewise. (op_name_standard, dump_subexp_body_standard): Likewise. * expression.h (enum exp_opcode): Add UNOP_MEMVAL_TLS. (union exp_element): Add objfile. * parse.c (write_exp_elt_objfile): New function. (msym_tls_symbol_type): New. (write_exp_msymbol): Handle TLS. (operator_length_standard): Handle UNOP_MEMVAL_TLS. (build_parse): Initialize msym_tls_symbol_type. * parser-defs.h (write_exp_elt_objfile): New prototype. * target.c (target_translate_tls_address): New. * target.h (target_translate_tls_address): Add prototype. 2006-10-09 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.threads/tls-nodebug.c, gdb.threads/tls-nodebug.exp: New test.
Diffstat (limited to 'gdb/dwarf2loc.c')
-rw-r--r--gdb/dwarf2loc.c80
1 files changed, 1 insertions, 79 deletions
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 76a99fa..841fb8f 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -189,86 +189,8 @@ static CORE_ADDR
dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
{
struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
- volatile CORE_ADDR addr = 0;
- if (target_get_thread_local_address_p ()
- && gdbarch_fetch_tls_load_module_address_p (current_gdbarch))
- {
- ptid_t ptid = inferior_ptid;
- struct objfile *objfile = debaton->objfile;
- volatile struct gdb_exception ex;
-
- TRY_CATCH (ex, RETURN_MASK_ALL)
- {
- CORE_ADDR lm_addr;
-
- /* Fetch the load module address for this objfile. */
- lm_addr = gdbarch_fetch_tls_load_module_address (current_gdbarch,
- objfile);
- /* If it's 0, throw the appropriate exception. */
- if (lm_addr == 0)
- throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
- _("TLS load module not found"));
-
- addr = target_get_thread_local_address (ptid, lm_addr, offset);
- }
- /* If an error occurred, print TLS related messages here. Otherwise,
- throw the error to some higher catcher. */
- if (ex.reason < 0)
- {
- int objfile_is_library = (objfile->flags & OBJF_SHARED);
-
- switch (ex.error)
- {
- case TLS_NO_LIBRARY_SUPPORT_ERROR:
- error (_("Cannot find thread-local variables in this thread library."));
- break;
- case TLS_LOAD_MODULE_NOT_FOUND_ERROR:
- if (objfile_is_library)
- error (_("Cannot find shared library `%s' in dynamic"
- " linker's load module list"), objfile->name);
- else
- error (_("Cannot find executable file `%s' in dynamic"
- " linker's load module list"), objfile->name);
- break;
- case TLS_NOT_ALLOCATED_YET_ERROR:
- if (objfile_is_library)
- error (_("The inferior has not yet allocated storage for"
- " thread-local variables in\n"
- "the shared library `%s'\n"
- "for %s"),
- objfile->name, target_pid_to_str (ptid));
- else
- error (_("The inferior has not yet allocated storage for"
- " thread-local variables in\n"
- "the executable `%s'\n"
- "for %s"),
- objfile->name, target_pid_to_str (ptid));
- break;
- case TLS_GENERIC_ERROR:
- if (objfile_is_library)
- error (_("Cannot find thread-local storage for %s, "
- "shared library %s:\n%s"),
- target_pid_to_str (ptid),
- objfile->name, ex.message);
- else
- error (_("Cannot find thread-local storage for %s, "
- "executable file %s:\n%s"),
- target_pid_to_str (ptid),
- objfile->name, ex.message);
- break;
- default:
- throw_exception (ex);
- break;
- }
- }
- }
- /* It wouldn't be wrong here to try a gdbarch method, too; finding
- TLS is an ABI-specific thing. But we don't do that yet. */
- else
- error (_("Cannot find thread-local variables on this target"));
-
- return addr;
+ return target_translate_tls_address (debaton->objfile, offset);
}
/* Evaluate a location description, starting at DATA and with length