diff options
author | Daniel Jacobowitz <dan@debian.org> | 2006-10-10 03:17:53 +0000 |
---|---|---|
committer | Daniel Jacobowitz <dan@debian.org> | 2006-10-10 03:17:53 +0000 |
commit | e87e493d73ddf98635afb81422f0c56bbff0957a (patch) | |
tree | 1b89f2b13a903dbce0d895cbbd63d0d09e47e070 /gdb/eval.c | |
parent | 9882179dac6a75ec376faa67e92b5cf269232438 (diff) | |
download | gdb-e87e493d73ddf98635afb81422f0c56bbff0957a.tar.gz |
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/eval.c')
-rw-r--r-- | gdb/eval.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gdb/eval.c b/gdb/eval.c index d5d8969a7be..e1076e1efd4 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -2019,6 +2019,21 @@ evaluate_subexp_standard (struct type *expect_type, return value_at_lazy (exp->elts[pc + 1].type, value_as_address (arg1)); + case UNOP_MEMVAL_TLS: + (*pos) += 3; + arg1 = evaluate_subexp (expect_type, exp, pos, noside); + if (noside == EVAL_SKIP) + goto nosideret; + if (noside == EVAL_AVOID_SIDE_EFFECTS) + return value_zero (exp->elts[pc + 2].type, lval_memory); + else + { + CORE_ADDR tls_addr; + tls_addr = target_translate_tls_address (exp->elts[pc + 1].objfile, + value_as_address (arg1)); + return value_at_lazy (exp->elts[pc + 2].type, tls_addr); + } + case UNOP_PREINCREMENT: arg1 = evaluate_subexp (expect_type, exp, pos, noside); if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS) |