| Fix for handling applications that have no __llvm_prf_data surviving --gc-sections. |
| This patch includes: |
| https://reviews.llvm.org/D96902 |
| https://reviews.llvm.org/D96936 |
| https://reviews.llvm.org/D97648 |
| |
| diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c |
| index c9fb481f8e90..07f3578dc43b 100644 |
| --- a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c |
| +++ b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c |
| @@ -26,25 +26,17 @@ |
| /* Declare section start and stop symbols for various sections |
| * generated by compiler instrumentation. |
| */ |
| -extern __llvm_profile_data PROF_DATA_START COMPILER_RT_VISIBILITY; |
| -extern __llvm_profile_data PROF_DATA_STOP COMPILER_RT_VISIBILITY; |
| -extern uint64_t PROF_CNTS_START COMPILER_RT_VISIBILITY; |
| -extern uint64_t PROF_CNTS_STOP COMPILER_RT_VISIBILITY; |
| -extern uint32_t PROF_ORDERFILE_START COMPILER_RT_VISIBILITY; |
| -extern char PROF_NAME_START COMPILER_RT_VISIBILITY; |
| -extern char PROF_NAME_STOP COMPILER_RT_VISIBILITY; |
| -extern ValueProfNode PROF_VNODES_START COMPILER_RT_VISIBILITY; |
| -extern ValueProfNode PROF_VNODES_STOP COMPILER_RT_VISIBILITY; |
| - |
| -/* Add dummy data to ensure the section is always created. */ |
| -__llvm_profile_data |
| - __prof_data_sect_data[0] COMPILER_RT_SECTION(INSTR_PROF_DATA_SECT_NAME); |
| -uint64_t |
| - __prof_cnts_sect_data[0] COMPILER_RT_SECTION(INSTR_PROF_CNTS_SECT_NAME); |
| -uint32_t |
| - __prof_orderfile_sect_data[0] COMPILER_RT_SECTION(INSTR_PROF_ORDERFILE_SECT_NAME); |
| -const char __prof_nms_sect_data[0] COMPILER_RT_SECTION(INSTR_PROF_NAME_SECT_NAME); |
| -ValueProfNode __prof_vnodes_sect_data[0] COMPILER_RT_SECTION(INSTR_PROF_VNODES_SECT_NAME); |
| +extern __llvm_profile_data PROF_DATA_START COMPILER_RT_VISIBILITY |
| + COMPILER_RT_WEAK; |
| +extern __llvm_profile_data PROF_DATA_STOP COMPILER_RT_VISIBILITY |
| + COMPILER_RT_WEAK; |
| +extern uint64_t PROF_CNTS_START COMPILER_RT_VISIBILITY COMPILER_RT_WEAK; |
| +extern uint64_t PROF_CNTS_STOP COMPILER_RT_VISIBILITY COMPILER_RT_WEAK; |
| +extern uint32_t PROF_ORDERFILE_START COMPILER_RT_VISIBILITY COMPILER_RT_WEAK; |
| +extern char PROF_NAME_START COMPILER_RT_VISIBILITY COMPILER_RT_WEAK; |
| +extern char PROF_NAME_STOP COMPILER_RT_VISIBILITY COMPILER_RT_WEAK; |
| +extern ValueProfNode PROF_VNODES_START COMPILER_RT_VISIBILITY COMPILER_RT_WEAK; |
| +extern ValueProfNode PROF_VNODES_STOP COMPILER_RT_VISIBILITY COMPILER_RT_WEAK; |
| |
| COMPILER_RT_VISIBILITY const __llvm_profile_data * |
| __llvm_profile_begin_data(void) { |