gdb
authorTom Tromey <tromey@redhat.com>
Tue, 14 Sep 2010 19:08:30 +0000 (19:08 +0000)
committerTom Tromey <tromey@redhat.com>
Tue, 14 Sep 2010 19:08:30 +0000 (19:08 +0000)
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.

gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/tls.c
gdb/testsuite/gdb.threads/tls.exp
gdb/value.c

index 75c5bfe..f6dd013 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-14  Tom Tromey  <tromey@redhat.com>
+
+       PR exp/11803:
+       * value.c (value_static_field): Use value_of_variable.
+
 2010-09-14  Pierre Muller  <muller@ics.u-strasbg.fr>
 
        * m32r-rom.c: Replace winsock.h with winsock2.h header.
index 0bcaa7e..3e5533b 100644 (file)
@@ -1,3 +1,12 @@
+2010-09-14  Tom Tromey  <tromey@redhat.com>
+
+       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  <swagiaal@redhat.com>
 
        * gdb.cp/koenig.cc: created class for testing member lookup.
index 8f2443c..9a87e91 100644 (file)
 
 /* 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
index 00991b8..343b985 100644 (file)
@@ -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"
 }
index e5754d0..c189930 100644 (file)
@@ -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: