From 9d774e4455679ce9e35acbcb9abb6704b49cc47f Mon Sep 17 00:00:00 2001 From: Elena Zannoni Date: Mon, 21 Oct 2002 19:11:50 +0000 Subject: 2002-10-21 Jim Blandy Elena Zannoni * symtab.h (address_class): Re-add LOC_THREAD_LOCAL_STATIC for thread local storage locations. (struct symbol): Add objfile field. (SYMBOL_OBJFILE): Define. * dwarf2read.c (is_thread_local): New static variable. (new_symbol): If variable is in thread local fill in address class and objfile appropriately. (decode_locdesc): Recognize and handle DW_OP_GNU_push_tls_address stack operation. * printcmd.c (address_info): Print the information for thread local storage variable. * findvar.c (read_var_value): In case of thread local variable, defer to the target vector code to compute address. --- gdb/symtab.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'gdb/symtab.h') diff --git a/gdb/symtab.h b/gdb/symtab.h index 520e81e..b84cac6 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -629,6 +629,14 @@ enum address_class LOC_HP_THREAD_LOCAL_STATIC, + /* Value is at a thread-specific location calculated by a + target-specific method. SYMBOL_OBJFILE gives the object file + in which the symbol is defined; the symbol's value is the + offset into that objfile's thread-local storage for the current + thread. */ + + LOC_THREAD_LOCAL_STATIC, + /* The variable does not actually exist in the program. The value is ignored. */ @@ -698,6 +706,12 @@ struct symbol { /* Used by LOC_BASEREG and LOC_BASEREG_ARG. */ short basereg; + + /* Used by LOC_THREAD_LOCAL_STATIC. The objfile in which this + symbol is defined. To find a thread-local variable (e.g., a + variable declared with the `__thread' storage class), we may + need to know which object file it's in. */ + struct objfile *objfile; } aux_value; @@ -719,6 +733,7 @@ struct symbol #define SYMBOL_TYPE(symbol) (symbol)->type #define SYMBOL_LINE(symbol) (symbol)->line #define SYMBOL_BASEREG(symbol) (symbol)->aux_value.basereg +#define SYMBOL_OBJFILE(symbol) (symbol)->aux_value.objfile #define SYMBOL_ALIASES(symbol) (symbol)->aliases #define SYMBOL_RANGES(symbol) (symbol)->ranges -- cgit v1.1