On 05/13/2011 03:03 AM, Rong Xu wrote:
        * gcc/coverage.c        (revision 173717): set a flag if building for 
Linux kernel.
        * gcc/tree-profile.c    (revision 173717): don't emit TLS declarations 
for Linux kernel builds.

I think this should be done without touching at all the profiling machinery in GCC.

1) add a new TLS model -ftls-model=none and make the kernel uses it. The model would simply force targetm.have_tls to false.

2) as Richi mentioned, gcov-io and libgcov changes then can move to the kernel, and GCC needs no change at all here.

BTW, these parts of LIPO:

+      if (!is_kernel_build)
+        DECL_TLS_MODEL (dc_gcov_type_ptr_var) =
+         decl_default_tls_model (dc_gcov_type_ptr_var);

       dc_void_ptr_var =
        build_decl (UNKNOWN_LOCATION, VAR_DECL,
@@ -1488,8 +1493,9 @@
                    ptr_void);
       DECL_ARTIFICIAL (dc_void_ptr_var) = 1;
       DECL_EXTERNAL (dc_void_ptr_var) = 1;
-      DECL_TLS_MODEL (dc_void_ptr_var) =
-       decl_default_tls_model (dc_void_ptr_var);
+      if (!is_kernel_build)
+        DECL_TLS_MODEL (dc_void_ptr_var) =
+         decl_default_tls_model (dc_void_ptr_var);

Probably are missing a !targetm.have_tls.

Paolo

Reply via email to