diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-10-10 03:17:53 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-10-10 03:17:53 +0000 |
commit | 9e35dae42503f6cef9a1f87e31a6f1111f3cb508 (patch) | |
tree | e6cff422c66aa30f070da5269292b7dd67684bb4 /gdb/dwarf2loc.c | |
parent | a48251ed04471c0294aead9ee7be8ed9d3a9ad9e (diff) | |
download | gdb-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.c | 80 |
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 |