diff options
Diffstat (limited to 'gcc-4.9/gcc/tree-profile.c')
-rw-r--r-- | gcc-4.9/gcc/tree-profile.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/gcc-4.9/gcc/tree-profile.c b/gcc-4.9/gcc/tree-profile.c index b165251..6e1d643 100644 --- a/gcc-4.9/gcc/tree-profile.c +++ b/gcc-4.9/gcc/tree-profile.c @@ -96,6 +96,11 @@ static GTY(()) tree dc_gcov_type_ptr_var; static GTY(()) tree ptr_void; static GTY(()) tree gcov_info_decl; +/* When -D__KERNEL__ is in the option list, we assume this is a + compilation for Linux Kernel. This is checked and set in + coverage.c. */ +bool is_kernel_build; + /* Do initialization work for the edge profiler. */ /* Add code: @@ -123,7 +128,7 @@ init_ic_make_global_vars (void) ptr_void); TREE_PUBLIC (ic_void_ptr_var) = 1; DECL_EXTERNAL (ic_void_ptr_var) = 1; - if (targetm.have_tls) + if (targetm.have_tls && !is_kernel_build) DECL_TLS_MODEL (ic_void_ptr_var) = decl_default_tls_model (ic_void_ptr_var); gcov_type_ptr = build_pointer_type (get_gcov_type ()); @@ -133,7 +138,7 @@ init_ic_make_global_vars (void) gcov_type_ptr); TREE_PUBLIC (ic_gcov_type_ptr_var) = 1; DECL_EXTERNAL (ic_gcov_type_ptr_var) = 1; - if (targetm.have_tls) + if (targetm.have_tls && !is_kernel_build) DECL_TLS_MODEL (ic_gcov_type_ptr_var) = decl_default_tls_model (ic_gcov_type_ptr_var); } @@ -164,7 +169,7 @@ init_ic_make_global_vars (void) TREE_STATIC (ic_void_ptr_var) = 1; DECL_ARTIFICIAL (ic_void_ptr_var) = 1; DECL_INITIAL (ic_void_ptr_var) = NULL; - if (targetm.have_tls) + if (targetm.have_tls && !is_kernel_build) DECL_TLS_MODEL (ic_void_ptr_var) = decl_default_tls_model (ic_void_ptr_var); @@ -195,7 +200,7 @@ init_ic_make_global_vars (void) TREE_STATIC (ic_gcov_type_ptr_var) = 1; DECL_ARTIFICIAL (ic_gcov_type_ptr_var) = 1; DECL_INITIAL (ic_gcov_type_ptr_var) = NULL; - if (targetm.have_tls) + if (targetm.have_tls && !is_kernel_build) DECL_TLS_MODEL (ic_gcov_type_ptr_var) = decl_default_tls_model (ic_gcov_type_ptr_var); @@ -259,6 +264,9 @@ static tree GTY(()) gcov_lipo_strict_inclusion = NULL_TREE; /* extern gcov_unsigned_t __gcov_lipo_comdat_algorithm */ static tree GTY(()) gcov_lipo_comdat_algorithm = NULL_TREE; +/* extern gcov_unsigned_t __gcov_lipo_sampling_period */ +static tree GTY(()) gcov_lipo_sampling_period = NULL_TREE; + /* Insert STMT_IF around given sequence of consecutive statements in the same basic block starting with STMT_START, ending with STMT_END. PROB is the probability of the taken branch. */ @@ -503,6 +511,13 @@ tree_init_dyn_ipa_parameters (void) get_gcov_unsigned_t ()); init_comdat_decl (gcov_lipo_comdat_algorithm, PARAM_LIPO_COMDAT_ALGORITHM); + gcov_lipo_sampling_period = build_decl ( + UNKNOWN_LOCATION, + VAR_DECL, + get_identifier ("__gcov_lipo_sampling_period"), + get_gcov_unsigned_t ()); + init_comdat_decl (gcov_lipo_sampling_period, + PARAM_LIPO_SAMPLING_PERIOD); } } @@ -639,7 +654,7 @@ tree_init_instrumentation_sampling (void) TREE_PUBLIC (gcov_sample_counter_decl) = 1; DECL_EXTERNAL (gcov_sample_counter_decl) = 1; DECL_ARTIFICIAL (gcov_sample_counter_decl) = 1; - if (targetm.have_tls) + if (targetm.have_tls && !is_kernel_build) DECL_TLS_MODEL (gcov_sample_counter_decl) = decl_default_tls_model (gcov_sample_counter_decl); } @@ -1404,8 +1419,9 @@ direct_call_profiling (void) build_pointer_type (gcov_type_node)); DECL_ARTIFICIAL (dc_gcov_type_ptr_var) = 1; DECL_EXTERNAL (dc_gcov_type_ptr_var) = 1; - DECL_TLS_MODEL (dc_gcov_type_ptr_var) = - decl_default_tls_model (dc_gcov_type_ptr_var); + if (targetm.have_tls && !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, @@ -1413,8 +1429,9 @@ direct_call_profiling (void) 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 (targetm.have_tls && !is_kernel_build) + DECL_TLS_MODEL (dc_void_ptr_var) = + decl_default_tls_model (dc_void_ptr_var); } if (!DECL_STATIC_CONSTRUCTOR (current_function_decl)) |