[compiler-rt] r271349 - [profile] Fix PR/27917

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 1 10:19:37 PDT 2016


I can see that it's tricky to check in a regression test for this.

Would having a linux bot that tests the "x86-64 + -m32" configuration help?

E.g:

--- a/cmake/config-ix.cmake
+++ b/cmake/config-ix.cmake
@@ -93,13 +93,17 @@ set(COMPILER_RT_SUPPORTED_ARCH)
 set(SIMPLE_SOURCE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/simple.cc)
 file(WRITE ${SIMPLE_SOURCE} "#include <stdlib.h>\n#include <limits>\nint main() {}\n")
 
-# Add $arch as supported with no additional flags.
-macro(add_default_target_arch arch)
-  set(TARGET_${arch}_CFLAGS "")
+# Add $arch as supported.
+macro(add_default_target_arch arch cflags)
+  set(TARGET_${arch}_CFLAGS ${cflags})
   set(CAN_TARGET_${arch} 1)
   list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
 endmacro()
 
+macro(add_default_target_arch arch)
+  add_target_arch(arch "")
+endmacro()
+
 macro(detect_target_arch)
   check_symbol_exists(__arm__ "" __ARM)
   check_symbol_exists(__aarch64__ "" __AARCH64)
@@ -117,6 +121,7 @@ macro(detect_target_arch)
     add_default_target_arch(aarch64)
   elseif(__X86_64)
     add_default_target_arch(x86_64)
+    add_target_arch(x86_64_m32 "-m32")
   elseif(__I686)
     add_default_target_arch(i686)
   elseif(__I386)

vedant

> On May 31, 2016, at 4:12 PM, Xinliang David Li via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: davidxl
> Date: Tue May 31 18:12:13 2016
> New Revision: 271349
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=271349&view=rev
> Log:
> [profile] Fix PR/27917
> 
> Skip the last (possibly) incomplete node from padding bytes.
> 
> 
> Modified:
>    compiler-rt/trunk/lib/profile/InstrProfilingValue.c
> 
> Modified: compiler-rt/trunk/lib/profile/InstrProfilingValue.c
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfilingValue.c?rev=271349&r1=271348&r2=271349&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/profile/InstrProfilingValue.c (original)
> +++ compiler-rt/trunk/lib/profile/InstrProfilingValue.c Tue May 31 18:12:13 2016
> @@ -111,7 +111,7 @@ static ValueProfNode *allocateOneNode(__
>     return (ValueProfNode *)calloc(1, sizeof(ValueProfNode));
> 
>   /* Early check to avoid value wrapping around.  */
> -  if (CurrentVNode >= EndVNode) {
> +  if (CurrentVNode + 1 > EndVNode) {
>     if (OutOfNodesWarnings++ < INSTR_PROF_MAX_VP_WARNS) {
>       PROF_WARN("Unable to track new values: %s. "
>                 " Consider using option -mllvm -vp-counters-per-site=<n> to "
> @@ -122,7 +122,9 @@ static ValueProfNode *allocateOneNode(__
>     return 0;
>   }
>   Node = COMPILER_RT_PTR_FETCH_ADD(ValueProfNode, CurrentVNode, 1);
> -  if (Node >= EndVNode)
> +  /* Due to section padding, EndVNode point to a byte which is one pass
> +   * an incomplete VNode, so we need to skip the last incomplete node. */
> +  if (Node + 1 > EndVNode)
>     return 0;
> 
>   return Node;
> @@ -201,7 +203,6 @@ __llvm_profile_instrument_target(uint64_
>   CurVNode = allocateOneNode(PData, CounterIndex, TargetValue);
>   if (!CurVNode)
>     return;
> -
>   CurVNode->Value = TargetValue;
>   CurVNode->Count++;
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list