Skip to content
  • Jonathan Peyton's avatar
    [OMPT] Windows Support for OMPT · 69e596a5
    Jonathan Peyton authored
    The problem is that the ompt_tool() function (which must be implemented by a
    performance tool) should be defined in the RTL as well to cover the case when
    the tool is not present in the address space of the process. This functionality
    is accomplished with weak symbols in Unices. Unfortunately, Windows does not
    support weak symbols.
    
    The solution in these changes is to grab the list of all modules loaded by the
    process and then search for symbol "ompt_tool()" within them. The function
    ompt_tool_windows() performs the search of the ompt_tool symbol. If ompt_tool is
    found, then its return value is used to initialize the tool. If ompt_tool is not
    found, then ompt_tool_windows() returns NULL and OMPT is thus, disabled.
    
    While doing these changes, the OMPT_SUPPORT detection in CMake was changed to
    test for the required featuers for OMPT_SUPPORT, namely: builtin_frame_address()
    existence, weak attribute existence and psapi.dll existence. For
    LIBOMP_HAVE_OMPT_SUPPORT to be true, it must be that the builtin_frame_address()
    intrinsic exists AND one of: either weak attributes exist or psapi.dll exists.
    
    Also, since Process Status API is used I had to add new dependency -- psapi.dll
    to the library dependency micro test.
    
    Differential Revision: http://reviews.llvm.org/D14027
    
    llvm-svn: 251654
    69e596a5
Loading