From: Tom Tromey Date: Tue, 14 Sep 2010 19:08:30 +0000 (+0000) Subject: gdb X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=515ed532307e751b26e34347ee7258f164eb053f;p=binutils-gdb.git gdb PR exp/11803: * value.c (value_static_field): Use value_of_variable. gdb/testsuite PR exp/11803: * gdb.threads/tls.exp: Use C++. (check_thread_local): Use K::another_thread_local. * gdb.threads/tls.c (class K): New. (another_thread_local): Now a member of K. (spin): Update. No longer K&R C. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 75c5bfe7af7..f6dd013db64 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-09-14 Tom Tromey + + PR exp/11803: + * value.c (value_static_field): Use value_of_variable. + 2010-09-14 Pierre Muller * m32r-rom.c: Replace winsock.h with winsock2.h header. diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0bcaa7e4147..3e5533bb257 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2010-09-14 Tom Tromey + + PR exp/11803: + * gdb.threads/tls.exp: Use C++. + (check_thread_local): Use K::another_thread_local. + * gdb.threads/tls.c (class K): New. + (another_thread_local): Now a member of K. + (spin): Update. No longer K&R C. + 2010-09-13 Sami Wagiaalla * gdb.cp/koenig.cc: created class for testing member lookup. diff --git a/gdb/testsuite/gdb.threads/tls.c b/gdb/testsuite/gdb.threads/tls.c index 8f2443c074c..9a87e91baa2 100644 --- a/gdb/testsuite/gdb.threads/tls.c +++ b/gdb/testsuite/gdb.threads/tls.c @@ -18,7 +18,13 @@ /* Thread-local storage. */ __thread int a_thread_local; -__thread int another_thread_local; + +class K { + public: + static __thread int another_thread_local; +}; + +__thread int K::another_thread_local; /* psymtabs->symtabs resolving check. */ extern __thread int file2_thread_local; @@ -64,8 +70,7 @@ void print_error () } /* Routine for each thread to run, does nothing. */ -void *spin( vp ) - void * vp; +void *spin( void *vp ) { int me = (long) vp; int i; @@ -74,19 +79,19 @@ void *spin( vp ) a_global++; a_thread_local = 0; - another_thread_local = me; + K::another_thread_local = me; for( i = 0; i <= me; i++ ) { a_thread_local += i; } - another_thread_local_val[me] = another_thread_local; + another_thread_local_val[me] = K::another_thread_local; thread_local_val[ me ] = a_thread_local; /* here we know tls value */ if (sem_post (&tell_main) == -1) { fprintf (stderr, "th %d post on sem tell_main failed\n", me); print_error (); - return; + return NULL; } #ifdef START_DEBUG fprintf (stderr, "th %d post on tell main\n", me); @@ -111,7 +116,7 @@ void *spin( vp ) { fprintf (stderr, "th %d wait on sem tell_thread failed\n", me); print_error (); - return; + return NULL; } } @@ -119,6 +124,7 @@ void *spin( vp ) fprintf (stderr, "th %d Wait on tell_thread\n", me); #endif + return NULL; } void diff --git a/gdb/testsuite/gdb.threads/tls.exp b/gdb/testsuite/gdb.threads/tls.exp index 00991b8086d..343b98586fe 100644 --- a/gdb/testsuite/gdb.threads/tls.exp +++ b/gdb/testsuite/gdb.threads/tls.exp @@ -27,7 +27,7 @@ if [istarget "*-*-linux"] then { set target_cflags "" } -if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } { +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" "${binfile}" executable [list c++ debug "incdir=${objdir}"]] != "" } { return -1 } @@ -75,7 +75,7 @@ proc check_thread_local {number} { "= $expected_value" \ "${number} thread local storage" - gdb_test "p another_thread_local" \ + gdb_test "p K::another_thread_local" \ "= $me_variable" \ "${number} another thread local storage" @@ -83,7 +83,7 @@ proc check_thread_local {number} { ".*a_thread_local.*a thread-local variable at offset.*" \ "${number} info address a_thread_local" - gdb_test "info address another_thread_local" \ + gdb_test "info address K::another_thread_local" \ ".*another_thread_local.*a thread-local variable at offset.*" \ "${number} info address another_thread_local" } diff --git a/gdb/value.c b/gdb/value.c index e5754d062bc..c189930e967 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -1903,17 +1903,7 @@ value_static_field (struct type *type, int fieldno) } } else - { - /* SYM should never have a SYMBOL_CLASS which will require - read_var_value to use the FRAME parameter. */ - if (symbol_read_needs_frame (sym)) - warning (_("static field's value depends on the current " - "frame - bad debug info?")); - retval = read_var_value (sym, NULL); - } - if (retval && VALUE_LVAL (retval) == lval_memory) - SET_FIELD_PHYSADDR (TYPE_FIELD (type, fieldno), - value_address (retval)); + retval = value_of_variable (sym, NULL); break; } default: