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/eval.c | |
parent | a48251ed04471c0294aead9ee7be8ed9d3a9ad9e (diff) | |
download | binutils-gdb-9e35dae42503f6cef9a1f87e31a6f1111f3cb508.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) |