import gcc-toolset-10-dyninst-10.2.1-2.el8
This commit is contained in:
		
							parent
							
								
									accf2de848
								
							
						
					
					
						commit
						b7d84976ce
					
				| @ -1,2 +1,2 @@ | ||||
| 02029d0224460f866f92ef54221efa37ee1ba164 SOURCES/dyninst-10.1.0.tar.gz | ||||
| 3e842456203d4702acd4771ae648f4cf382b9a12 SOURCES/dyninst-10.2.1.tar.gz | ||||
| cbafd2da77de24180cb9c2fb5b600fd8d2cb2fa1 SOURCES/testsuite-10.1.0.tar.gz | ||||
|  | ||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +1,2 @@ | ||||
| SOURCES/dyninst-10.1.0.tar.gz | ||||
| SOURCES/dyninst-10.2.1.tar.gz | ||||
| SOURCES/testsuite-10.1.0.tar.gz | ||||
|  | ||||
| @ -1,28 +0,0 @@ | ||||
| --- dyninst-10.1.0/dyninst-10.1.0/instructionAPI/h/Result.h.sv	2018-11-09 11:48:08.000000000 -0500
 | ||||
| +++ dyninst-10.1.0/dyninst-10.1.0/instructionAPI/h/Result.h	2018-12-04 22:12:47.369579566 -0500
 | ||||
| @@ -449,10 +449,10 @@
 | ||||
|  	    snprintf(hex, 20, "%x", val.s32val); | ||||
|  	    break; | ||||
|  	  case u64: | ||||
| -	    snprintf(hex, 20, "%lx", val.u64val);
 | ||||
| +	    snprintf(hex, 20, "%" PRIx64, val.u64val);
 | ||||
|  	    break; | ||||
|  	  case s64: | ||||
| -	    snprintf(hex, 20, "%lx", val.s64val);
 | ||||
| +	    snprintf(hex, 20, "%" PRIx64, val.s64val);
 | ||||
|  	    break; | ||||
|  	  case sp_float: | ||||
|  	    snprintf(hex, 20, "%f", val.floatval); | ||||
| @@ -464,10 +464,10 @@
 | ||||
|  	    snprintf(hex, 20, "%x", val.bitval); | ||||
|  	    break; | ||||
|  	  case u48: | ||||
| -	    snprintf(hex, 20, "%lx", val.s48val);
 | ||||
| +	    snprintf(hex, 20, "%" PRIx64, val.s48val);
 | ||||
|  	    break; | ||||
|  	  case s48: | ||||
| -	    snprintf(hex, 20, "%lx", val.s48val);
 | ||||
| +	    snprintf(hex, 20, "%" PRIx64, val.s48val);
 | ||||
|  	    break; | ||||
|       case m512: | ||||
|  	    snprintf(hex, 20, "%p", val.m512val); | ||||
| @ -1,11 +0,0 @@ | ||||
| --- dyninst-10.1.0/dyninst-10.1.0/cmake/ThreadingBuildingBlocks.cmake.orig	2019-05-16 14:40:05.000000000 -0400
 | ||||
| +++ dyninst-10.1.0/dyninst-10.1.0/cmake/ThreadingBuildingBlocks.cmake	2019-05-30 10:45:15.128872098 -0400
 | ||||
| @@ -43,7 +43,7 @@
 | ||||
|  set(TBB_USE_DEBUG_BUILD OFF CACHE BOOL "Use debug versions of TBB libraries") | ||||
|   | ||||
|  # Minimum version of TBB (assumes a dotted-decimal format: YYYY.XX) | ||||
| -set(_tbb_min_version 2018.6)
 | ||||
| +set(_tbb_min_version 2018.0)
 | ||||
|  set(TBB_MIN_VERSION ${_tbb_min_version} CACHE STRING "Minimum version of TBB (assumes a dotted-decimal format: YYYY.XX)") | ||||
|   | ||||
|  if(${TBB_MIN_VERSION} VERSION_LESS ${_tbb_min_version}) | ||||
							
								
								
									
										317
									
								
								SOURCES/dyninst-10.2.1-dbid.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										317
									
								
								SOURCES/dyninst-10.2.1-dbid.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,317 @@ | ||||
| Debuginfod is a lightweight web service that indexes ELF/DWARF debugging | ||||
| resources by build-id and serves them over HTTP. | ||||
| 
 | ||||
| This patch enables dyninst to query debuginfod servers for a file's | ||||
| separate debuginfo when it otherwise cannot be found. | ||||
| 
 | ||||
| This patch also adds a cmake option -DENABLE_DEBUGINFOD to control | ||||
| whether dyninst is built with debuginfod support. | ||||
| 
 | ||||
| This requires having the debuginfod client library (libdebuginfod) | ||||
| and header installed. | ||||
| 
 | ||||
| Debuginfod is distributed with elfutils, for more information see | ||||
| https://sourceware.org/elfutils/Debuginfod.html | ||||
| ---
 | ||||
|  cmake/ElfUtils.cmake                  | 37 ++++++++--- | ||||
|  cmake/Modules/FindLibDebuginfod.cmake | 76 +++++++++++++++++++++ | ||||
|  cmake/options.cmake                   |  2 + | ||||
|  elf/CMakeLists.txt                    |  3 + | ||||
|  elf/src/Elf_X.C                       | 95 ++++++++++++++++++++------- | ||||
|  5 files changed, 178 insertions(+), 35 deletions(-) | ||||
|  create mode 100644 cmake/Modules/FindLibDebuginfod.cmake | ||||
| 
 | ||||
| --- dyninst-10.2.1/dyninst-10.2.1/cmake/ElfUtils.cmake
 | ||||
| +++ dyninst-10.2.1/dyninst-10.2.1/cmake/ElfUtils.cmake
 | ||||
| @@ -28,7 +28,7 @@
 | ||||
|  # | ||||
|  #====================================================================================== | ||||
|   | ||||
| -if(LibElf_FOUND AND LibDwarf_FOUND)
 | ||||
| +if(LibElf_FOUND AND LibDwarf_FOUND AND (LibDebuginfod_FOUND OR NOT ENABLE_DEBUGINFOD))
 | ||||
|    return() | ||||
|  endif() | ||||
|   | ||||
| @@ -37,7 +37,12 @@ if(NOT UNIX)
 | ||||
|  endif() | ||||
|   | ||||
|  # Minimum acceptable version of elfutils | ||||
| -set(_min_version 0.178)
 | ||||
| +if(ENABLE_DEBUGINFOD)
 | ||||
| +  set(_min_version 0.179)
 | ||||
| +else()
 | ||||
| +  set(_min_version 0.178)
 | ||||
| +endif()
 | ||||
| +
 | ||||
|  set(ElfUtils_MIN_VERSION ${_min_version} | ||||
|      CACHE STRING "Minimum acceptable elfutils version") | ||||
|  if(${ElfUtils_MIN_VERSION} VERSION_LESS ${_min_version}) | ||||
| @@ -62,7 +67,7 @@ set(ElfUtils_LIBRARYDIR "${ElfUtils_ROOT_DIR}/lib"
 | ||||
|      CACHE PATH "Hint directory that contains the elfutils library files") | ||||
|   | ||||
|  # libelf/dwarf-specific directory hints | ||||
| -foreach(l LibElf LibDwarf)
 | ||||
| +foreach(l LibElf LibDwarf LibDebuginfod)
 | ||||
|    foreach(d ROOT_DIR INCLUDEDIR LIBRARYDIR) | ||||
|      set(${l}_${d} ${ElfUtils_${d}}) | ||||
|    endforeach() | ||||
| @@ -72,18 +77,30 @@ endforeach()
 | ||||
|   | ||||
|  find_package(LibElf ${ElfUtils_MIN_VERSION}) | ||||
|   | ||||
| -# Don't search for libdw if we didn't find a suitable libelf
 | ||||
| +# Don't search for libdw or libdebuginfod if we didn't find a suitable libelf
 | ||||
|  if(LibElf_FOUND) | ||||
|    find_package(LibDwarf ${ElfUtils_MIN_VERSION}) | ||||
| +  if (ENABLE_DEBUGINFOD)
 | ||||
| +    find_package(LibDebuginfod ${ElfUtils_MIN_VERSION})
 | ||||
| +  endif()
 | ||||
|  endif() | ||||
|   | ||||
|  # -------------- SOURCE BUILD ------------------------------------------------- | ||||
| -if(LibElf_FOUND AND LibDwarf_FOUND)
 | ||||
| -  set(_eu_root ${ElfUtils_ROOT_DIR})
 | ||||
| -  set(_eu_inc_dirs ${LibElf_INCLUDE_DIRS} ${LibDwarf_INCLUDE_DIRS})
 | ||||
| -  set(_eu_lib_dirs ${LibElf_LIBRARY_DIRS} ${LibDwarf_LIBRARY_DIRS})
 | ||||
| -  set(_eu_libs ${LibElf_LIBRARIES} ${LibDwarf_LIBRARIES})
 | ||||
| +if(LibElf_FOUND AND LibDwarf_FOUND AND (NOT ENABLE_DEBUGINFOD OR LibDebuginfod_FOUND))
 | ||||
| +  if(ENABLE_DEBUGINFOD AND LibDebuginfod_FOUND)
 | ||||
| +    set(_eu_root ${ElfUtils_ROOT_DIR})
 | ||||
| +    set(_eu_inc_dirs ${LibElf_INCLUDE_DIRS} ${LibDwarf_INCLUDE_DIRS} ${LibDebuginfod_INCLUDE_DIRS})
 | ||||
| +    set(_eu_lib_dirs ${LibElf_LIBRARY_DIRS} ${LibDwarf_LIBRARY_DIRS} ${LibDebuginfod_LIBRARY_DIRS})
 | ||||
| +    set(_eu_libs ${LibElf_LIBRARIES} ${LibDwarf_LIBRARIES} ${LibDebuginfod_LIBRARIES})
 | ||||
| +  else()
 | ||||
| +    set(_eu_root ${ElfUtils_ROOT_DIR})
 | ||||
| +    set(_eu_inc_dirs ${LibElf_INCLUDE_DIRS} ${LibDwarf_INCLUDE_DIRS})
 | ||||
| +    set(_eu_lib_dirs ${LibElf_LIBRARY_DIRS} ${LibDwarf_LIBRARY_DIRS})
 | ||||
| +    set(_eu_libs ${LibElf_LIBRARIES} ${LibDwarf_LIBRARIES})
 | ||||
| +  endif()
 | ||||
|    add_library(ElfUtils SHARED IMPORTED) | ||||
| +elseif(ENABLE_DEBUGINFOD AND NOT LibDebuginfod_FOUND)
 | ||||
| +  message(FATAL_ERROR "Debuginfod enabled but not found")
 | ||||
|  elseif(NOT (LibElf_FOUND AND LibDwarf_FOUND) AND STERILE_BUILD) | ||||
|    message(FATAL_ERROR "Elfutils not found and cannot be downloaded because build is sterile.") | ||||
|  else() | ||||
| 
 | ||||
| --- /dev/null
 | ||||
| +++ dyninst-10.2.1/dyninst-10.2.1/cmake/Modules/FindLibDebuginfod.cmake
 | ||||
| @@ -0,0 +1,76 @@
 | ||||
| +#========================================================================================
 | ||||
| +# FindDebuginfod
 | ||||
| +# -----------
 | ||||
| +#
 | ||||
| +# Find debuginfod library and headers
 | ||||
| +#
 | ||||
| +# The module defines the following variables:
 | ||||
| +#
 | ||||
| +# This module reads hints about search locations from variables::
 | ||||
| +#
 | ||||
| +#       LibDebuginfod_ROOT_DIR         - Base directory the of libdebuginfod installation
 | ||||
| +#       LibDebuginfod_INCLUDEDIR       - Hint directory that contains the libdebuginfod headers files
 | ||||
| +#       LibDebuginfod_LIBRARYDIR       - Hint directory that contains the libdebuginfod library files
 | ||||
| +#
 | ||||
| +# and saves search results persistently in CMake cache entries::
 | ||||
| +#
 | ||||
| +#       LibDebuginfod_FOUND            - True if headers and requested libraries were found
 | ||||
| +#       LibDebuginfod_INCLUDE_DIRS     - libdebuginfod include directories
 | ||||
| +#       LibDebuginfod_LIBRARY_DIRS     - Link directories for libdebuginfod libraries
 | ||||
| +#       LibDebuginfod_LIBRARIES        - libdebuginfod library files
 | ||||
| +#
 | ||||
| +# Utilize package config (e.g. /usr/lib64/pkgconfig/libdebuginfod.pc) to fetch
 | ||||
| +# version information.
 | ||||
| +#
 | ||||
| +#========================================================================================
 | ||||
| +
 | ||||
| +find_package(PkgConfig QUIET)
 | ||||
| +pkg_check_modules(PC_Debuginfod QUIET REQUIRED libdebuginfod>=${ElfUtils_MIN_VERSION})
 | ||||
| +set(LibDebuginfod_VERSION "${PC_Debuginfod_VERSION}")
 | ||||
| +
 | ||||
| +find_path(LibDebuginfod_INCLUDE_DIRS
 | ||||
| +          NAMES
 | ||||
| +            debuginfod.h
 | ||||
| +          HINTS
 | ||||
| +            ${PC_Debuginfod_INCLUDEDIR}
 | ||||
| +            ${PC_Debuginfod_INCLUDE_DIRS}
 | ||||
| +            ${LibDebuginfod_ROOT_DIR}/include
 | ||||
| +            ${LibDebuginfod_ROOT_DIR}
 | ||||
| +            ${LibDebuginfod_INCLUDEDIR}
 | ||||
| +          PATHS
 | ||||
| +            ${DYNINST_SYSTEM_INCLUDE_PATHS}
 | ||||
| +          PATH_SUFFIXES
 | ||||
| +            ${_path_suffixes}
 | ||||
| +          DOC
 | ||||
| +            "libdebuginfod include directories")
 | ||||
| +
 | ||||
| +find_library(LibDebuginfod_LIBRARIES
 | ||||
| +             NAMES
 | ||||
| +               libdebuginfod.so.1 libdebuginfod.so
 | ||||
| +             HINTS
 | ||||
| +               ${PC_Debuginfod_LIBDIR}
 | ||||
| +               ${PC_Debuginfod_LIBRARY_DIRS}
 | ||||
| +               ${LibDebuginfod_ROOT_DIR}/lib
 | ||||
| +               ${LibDebuginfod_ROOT_DIR}
 | ||||
| +               ${LibDebuginfod_LIBRARYDIR}
 | ||||
| +             PATHS
 | ||||
| +               ${DYNINST_SYSTEM_LIBRARY_PATHS}
 | ||||
| +             PATH_SUFFIXES
 | ||||
| +               ${_path_suffixes})
 | ||||
| +
 | ||||
| +include(FindPackageHandleStandardArgs)
 | ||||
| +find_package_handle_standard_args(LibDebuginfod
 | ||||
| +                                  FOUND_VAR
 | ||||
| +                                    LibDebuginfod_FOUND
 | ||||
| +                                  REQUIRED_VARS
 | ||||
| +                                    LibDebuginfod_INCLUDE_DIRS
 | ||||
| +                                    LibDebuginfod_LIBRARIES
 | ||||
| +                                  VERSION_VAR
 | ||||
| +                                    LibDebuginfod_VERSION)
 | ||||
| +
 | ||||
| +if(LibDebuginfod_FOUND)
 | ||||
| +  set(LibDebuginfod_INCLUDE_DIRS ${LibDebuginfod_INCLUDE_DIRS})
 | ||||
| +  set(LibDebuginfod_LIBRARIES ${LibDebuginfod_LIBRARIES})
 | ||||
| +  get_filename_component(_debuginfod_dir ${LibDebuginfod_LIBRARIES} DIRECTORY)
 | ||||
| +  set(LibDebuginfod_LIBRARY_DIRS ${_debuginfod_dir} "${_debuginfod_dir}/elfutils")
 | ||||
| +endif()
 | ||||
| 
 | ||||
| --- dyninst-10.2.1/dyninst-10.2.1/cmake/options.cmake
 | ||||
| +++ dyninst-10.2.1/dyninst-10.2.1/cmake/options.cmake
 | ||||
| @@ -16,6 +16,8 @@ option(USE_COTIRE "Enable Cotire precompiled headers")
 | ||||
|   | ||||
|  option (ENABLE_LTO "Enable Link-Time Optimization" OFF) | ||||
|   | ||||
| +option(ENABLE_DEBUGINFOD "Enable debuginfod support" OFF)
 | ||||
| +
 | ||||
|  # Some global on/off switches | ||||
|  if (LIGHTWEIGHT_SYMTAB) | ||||
|  add_definitions (-DWITHOUT_SYMTAB_API -DWITH_SYMLITE) | ||||
| 
 | ||||
| --- dyninst-10.2.1/dyninst-10.2.1/elf/CMakeLists.txt
 | ||||
| +++ dyninst-10.2.1/dyninst-10.2.1/elf/CMakeLists.txt
 | ||||
| @@ -27,5 +27,8 @@ endif()
 | ||||
|  add_dependencies(dynElf ElfUtils) | ||||
|  target_link_private_libraries(dynElf ${ElfUtils_LIBRARIES}) | ||||
|   | ||||
| +if (ENABLE_DEBUGINFOD AND LibDebuginfod_FOUND)
 | ||||
| +  add_definitions(-DDEBUGINFOD_LIB)
 | ||||
| +endif()
 | ||||
|   | ||||
|  add_definitions(-DDYNELF_LIB) | ||||
| 
 | ||||
| 
 | ||||
| --- dyninst-10.2.1/dyninst-10.2.1/elf/src/Elf_X.C
 | ||||
| +++ dyninst-10.2.1/dyninst-10.2.1/elf/src/Elf_X.C
 | ||||
| @@ -47,6 +47,9 @@
 | ||||
|  #include <sstream> | ||||
|  #include <libelf.h> | ||||
|   | ||||
| +#if DEBUGINFOD_LIB
 | ||||
| +#include <elfutils/debuginfod.h>
 | ||||
| +#endif
 | ||||
|   | ||||
|  using namespace std; | ||||
|  using boost::crc_32_type; | ||||
| @@ -1722,37 +1725,79 @@ bool Elf_X::findDebugFile(std::string origfilename, string &output_name, char* &
 | ||||
|       } | ||||
|    } | ||||
|   | ||||
| -  if (debugFileFromDebugLink.empty())
 | ||||
| -     return false;
 | ||||
| +  if (!debugFileFromDebugLink.empty()) {
 | ||||
| +     char *mfPathNameCopy = strdup(origfilename.c_str());
 | ||||
| +     string objectFileDirName = dirname(mfPathNameCopy);
 | ||||
|   | ||||
| -  char *mfPathNameCopy = strdup(origfilename.c_str());
 | ||||
| -  string objectFileDirName = dirname(mfPathNameCopy);
 | ||||
| +     vector<string> fnames = list_of
 | ||||
| +       (objectFileDirName + "/" + debugFileFromDebugLink)
 | ||||
| +       (objectFileDirName + "/.debug/" + debugFileFromDebugLink)
 | ||||
| +       ("/usr/lib/debug/" + objectFileDirName + "/" + debugFileFromDebugLink);
 | ||||
|   | ||||
| -  vector<string> fnames = list_of
 | ||||
| -    (objectFileDirName + "/" + debugFileFromDebugLink)
 | ||||
| -    (objectFileDirName + "/.debug/" + debugFileFromDebugLink)
 | ||||
| -    ("/usr/lib/debug/" + objectFileDirName + "/" + debugFileFromDebugLink);
 | ||||
| +     free(mfPathNameCopy);
 | ||||
|   | ||||
| -  free(mfPathNameCopy);
 | ||||
| +     for(unsigned i = 0; i < fnames.size(); i++) {
 | ||||
| +        bool result = loadDebugFileFromDisk(fnames[i], output_buffer, output_buffer_size);
 | ||||
| +        if (!result)
 | ||||
| +           continue;
 | ||||
|   | ||||
| -  for(unsigned i = 0; i < fnames.size(); i++) {
 | ||||
| -     bool result = loadDebugFileFromDisk(fnames[i], output_buffer, output_buffer_size);
 | ||||
| -     if (!result)
 | ||||
| -        continue;
 | ||||
| -    
 | ||||
| -    boost::crc_32_type crcComputer;
 | ||||
| -    crcComputer.process_bytes(output_buffer, output_buffer_size);
 | ||||
| -    if(crcComputer.checksum() != debugFileCrc) {
 | ||||
| -       munmap(output_buffer, output_buffer_size);
 | ||||
| -       continue;
 | ||||
| -    }
 | ||||
| +        boost::crc_32_type crcComputer;
 | ||||
| +        crcComputer.process_bytes(output_buffer, output_buffer_size);
 | ||||
| +        if(crcComputer.checksum() != debugFileCrc) {
 | ||||
| +           munmap(output_buffer, output_buffer_size);
 | ||||
| +           continue;
 | ||||
| +        }
 | ||||
| +
 | ||||
| +        output_name = fnames[i];
 | ||||
| +        cached_debug_buffer = output_buffer;
 | ||||
| +        cached_debug_size = output_buffer_size;
 | ||||
| +        cached_debug_name = output_name;
 | ||||
| +        return true;
 | ||||
| +     }
 | ||||
| +  }
 | ||||
|   | ||||
| -    output_name = fnames[i];
 | ||||
| -    cached_debug_buffer = output_buffer;
 | ||||
| -    cached_debug_size = output_buffer_size;
 | ||||
| -    cached_debug_name = output_name;
 | ||||
| -    return true;
 | ||||
| +#ifdef DEBUGINFOD_LIB
 | ||||
| +  if (!debugFileFromBuildID.empty()) {
 | ||||
| +     // Given /usr/lib/debug/.buildid/XX/YYYYYY.debug, isolate XXYYYYYY.
 | ||||
| +     size_t idx1 = debugFileFromBuildID.find_last_of("/");
 | ||||
| +     size_t idx2 = debugFileFromBuildID.find_last_of(".");
 | ||||
| +
 | ||||
| +     if (idx1 == string::npos || idx2 == string::npos
 | ||||
| +         || idx1 < 2 || idx1 > idx2)
 | ||||
| +        return false;
 | ||||
| +
 | ||||
| +     idx1 -= 2;
 | ||||
| +     string buildid(debugFileFromBuildID.substr(idx1, idx2 - idx1));
 | ||||
| +     buildid.erase(2, 1);
 | ||||
| +
 | ||||
| +     debuginfod_client *client = debuginfod_begin();
 | ||||
| +     if (client == NULL)
 | ||||
| +        return false;
 | ||||
| +
 | ||||
| +     char *filename;
 | ||||
| +     int fd = debuginfod_find_debuginfo(client,
 | ||||
| +                                        (const unsigned char *)buildid.c_str(),
 | ||||
| +                                        0, &filename);
 | ||||
| +     debuginfod_end(client);
 | ||||
| +
 | ||||
| +     if (fd >= 0) {
 | ||||
| +        string fname = string(filename);
 | ||||
| +        free(filename);
 | ||||
| +        close(fd);
 | ||||
| +
 | ||||
| +        bool result = loadDebugFileFromDisk(fname,
 | ||||
| +                                            output_buffer,
 | ||||
| +                                            output_buffer_size);
 | ||||
| +        if (result) {
 | ||||
| +           output_name = fname;
 | ||||
| +           cached_debug_buffer = output_buffer;
 | ||||
| +           cached_debug_size = output_buffer_size;
 | ||||
| +           cached_debug_name = output_name;
 | ||||
| +           return true;
 | ||||
| +        }
 | ||||
| +     }
 | ||||
|    } | ||||
| +#endif
 | ||||
|   | ||||
|    return false; | ||||
|  } | ||||
							
								
								
									
										11
									
								
								SOURCES/dyninst-10.2.1-tbb.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								SOURCES/dyninst-10.2.1-tbb.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| --- dyninst-10.2.1/dyninst-10.2.1/cmake/ThreadingBuildingBlocks.cmake.orig	2019-05-16 14:40:05.000000000 -0400
 | ||||
| +++ dyninst-10.2.1/dyninst-10.2.1/cmake/ThreadingBuildingBlocks.cmake	2019-05-30 10:45:15.128872098 -0400
 | ||||
| @@ -50,7 +50,7 @@
 | ||||
|  if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") | ||||
|    set(_tbb_min_version 2019.7) | ||||
|  else() | ||||
| -  set(_tbb_min_version 2018.6)
 | ||||
| +  set(_tbb_min_version 2018.0)
 | ||||
|  endif() | ||||
|   | ||||
|  set(TBB_MIN_VERSION ${_tbb_min_version} CACHE STRING "Minimum version of TBB (assumes a dotted-decimal format: YYYY.XX)") | ||||
							
								
								
									
										13
									
								
								SOURCES/dyninst-gcc11.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								SOURCES/dyninst-gcc11.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff --git a/testsuite-10.1.0/src/dyninst/test1_3.C b/testsuite-10.1.0/src/dyninst/test1_3.C
 | ||||
| index d32f630..b9bd0ba 100644
 | ||||
| --- a/testsuite-10.1.0/src/dyninst/test1_3.C
 | ||||
| +++ b/testsuite-10.1.0/src/dyninst/test1_3.C
 | ||||
| @@ -134,7 +134,7 @@ test_results_t test1_3_Mutator::executeTest()
 | ||||
|  	} | ||||
|   | ||||
|  	// see if we can find the address | ||||
| -	if (expr3_1->getBaseAddr() <= 0) 
 | ||||
| +	if (expr3_1->getBaseAddr() == 0)
 | ||||
|  	{ | ||||
|  		logerror("*Error*: address %p for %s is not valid\n", | ||||
|  				expr3_1->getBaseAddr(), globalVar); | ||||
| @ -1,5 +1,20 @@ | ||||
| --- dyninst-10.1.0/testsuite-10.1.0/src/instruction/test_instruction_farcall.C
 | ||||
| +++ dyninst-10.1.0/testsuite-10.1.0/src/instruction/test_instruction_farcall.C
 | ||||
| --- dyninst-10.2.0/testsuite-10.1.0/CMakeLists.txt
 | ||||
| +++ dyninst-10.2.0/testsuite-10.1.0/CMakeLists.txt
 | ||||
| @@ -111,7 +111,8 @@
 | ||||
|  if(UNIX) | ||||
|    enable_language(ASM-ATT) | ||||
| -  if("${DYNINST_PLATFORM}" MATCHES "i386")
 | ||||
| -    enable_language(ASM_NASM)
 | ||||
| -  endif()
 | ||||
| +# nasm/yasm are deprecated
 | ||||
| +#  if("${DYNINST_PLATFORM}" MATCHES "i386")
 | ||||
| +#    enable_language(ASM_NASM)
 | ||||
| +#  endif()
 | ||||
|  elseif(WIN32) | ||||
|    enable_language(ASM_MASM) | ||||
| 
 | ||||
| --- dyninst-10.2.0/testsuite-10.1.0/src/instruction/test_instruction_farcall.C
 | ||||
| +++ dyninst-10.2.0/testsuite-10.1.0/src/instruction/test_instruction_farcall.C
 | ||||
| @@ -96,21 +96,21 @@ test_results_t test_instruction_farcall_Mutator::executeTest()
 | ||||
|    if(decodedInsns.size() != expectedInsns) // six valid, one invalid | ||||
|    { | ||||
|  | ||||
							
								
								
									
										15
									
								
								SOURCES/testsuite-10.1.0-gettid.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								SOURCES/testsuite-10.1.0-gettid.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| --- dyninst-10.1.0/testsuite-10.1.0/src/proccontrol/pcontrol_mutatee_tools.c.orig	2019-05-31 05:20:00.492379706 +0200
 | ||||
| +++ dyninst-10.1.0/testsuite-10.1.0/src/proccontrol/pcontrol_mutatee_tools.c	2019-05-31 05:10:11.354826668 +0200
 | ||||
| @@ -62,9 +62,9 @@
 | ||||
|  #if !defined(os_windows_test) | ||||
|  #include <poll.h> | ||||
|   | ||||
| -static unsigned int gettid(){
 | ||||
| -    return (unsigned int)pthread_self();
 | ||||
| -}
 | ||||
| +// static unsigned int gettid(){
 | ||||
| +//     return (unsigned int)pthread_self();
 | ||||
| +// }
 | ||||
|  #endif | ||||
|   | ||||
|  thread_t threads[MAX_POSSIBLE_THREADS]; | ||||
							
								
								
									
										14
									
								
								SOURCES/testsuite-10.1.0-throw.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								SOURCES/testsuite-10.1.0-throw.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| --- dyninst-10.2.0/testsuite-10.1.0/src/test_lib.h
 | ||||
| +++ dyninst-10.2.0/testsuite-10.1.0/src/test_lib.h
 | ||||
| @@ -158,3 +158,3 @@
 | ||||
|   | ||||
| -	TESTLIB_DLL_EXPORT virtual ~LocErr() THROW; 
 | ||||
| +	TESTLIB_DLL_EXPORT virtual ~LocErr() throw(); 
 | ||||
|   | ||||
| --- dyninst-10.2.0/testsuite-10.1.0/src/test_lib.C
 | ||||
| +++ dyninst-10.2.0/testsuite-10.1.0/src/test_lib.C
 | ||||
| @@ -112,3 +112,3 @@
 | ||||
|   | ||||
| -LocErr::~LocErr() THROW
 | ||||
| +LocErr::~LocErr() throw()
 | ||||
|  {} | ||||
| @ -9,25 +9,30 @@ Name: %{?scl_prefix}dyninst | ||||
| Group: Development/Libraries | ||||
| Release: 2%{?dist} | ||||
| URL: http://www.dyninst.org | ||||
| Version: 10.1.0 | ||||
| Version: 10.2.1 | ||||
| Exclusiveos: linux | ||||
| ExclusiveArch: %{ix86} x86_64 ppc64le aarch64 | ||||
| 
 | ||||
| %define __testsuite_version 10.1.0 | ||||
| Source0: https://github.com/dyninst/dyninst/archive/v%{version}/dyninst-%{version}.tar.gz | ||||
| Source1: https://github.com/dyninst/testsuite/archive/v%{version}/testsuite-%{version}.tar.gz | ||||
| Source1: https://github.com/dyninst/testsuite/archive/v%{__testsuite_version}/testsuite-%{__testsuite_version}.tar.gz | ||||
| 
 | ||||
| Patch1: dyninst-10.1.0-tbb.patch | ||||
| Patch2: dyninst-10.1.0-result.patch | ||||
| Patch3: testsuite-10.1.0-386.patch | ||||
| Patch1: dyninst-gcc11.patch | ||||
| Patch2: dyninst-10.2.1-dbid.patch | ||||
| Patch3: testsuite-10.1.0-gettid.patch | ||||
| Patch4: testsuite-10.1.0-386.patch | ||||
| Patch5: testsuite-10.1.0-throw.patch | ||||
| Patch6: dyninst-10.2.1-tbb.patch | ||||
| 
 | ||||
| %global dyninst_base dyninst-%{version} | ||||
| %global testsuite_base testsuite-%{version} | ||||
| %global testsuite_base testsuite-%{__testsuite_version} | ||||
| 
 | ||||
| 
 | ||||
| BuildRequires: zlib-devel | ||||
| BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||
| BuildRequires: elfutils-devel | ||||
| BuildRequires: elfutils-libelf-devel | ||||
| BuildRequires: elfutils-debuginfod-client-devel | ||||
| BuildRequires: boost-devel | ||||
| BuildRequires: binutils-devel | ||||
| BuildRequires: cmake | ||||
| @ -41,7 +46,7 @@ BuildRequires: tbb tbb-devel | ||||
| %if 0%{?rhel} >= 7 | ||||
| BuildRequires: libstdc++-static | ||||
| %endif | ||||
| BuildRequires: gcc-gfortran glibc-static nasm libxml2-devel | ||||
| BuildRequires: gcc-gfortran glibc-static libxml2-devel | ||||
| %if 0%{?rhel} == 6 | ||||
| # C++11 requires devtoolset gcc. | ||||
| BuildRequires: %{?scl_prefix}gcc-c++ | ||||
| @ -105,9 +110,12 @@ making sure that dyninst works properly. | ||||
| %setup -q -n %{name}-%{version} -c | ||||
| %setup -q -T -D -a 1 | ||||
| 
 | ||||
| %patch1 -p1 -b.tbb | ||||
| %patch2 -p1 -b.result | ||||
| %patch3 -p1 -b.386 | ||||
| %patch1 -p1 -b .gcc11 | ||||
| %patch2 -p1 -b .dbid | ||||
| %patch3 -p1 -b .gettid | ||||
| %patch4 -p1 -b .386 | ||||
| %patch5 -p1 -b .throw | ||||
| %patch6 -p1 -b .tbb | ||||
| 
 | ||||
| # cotire seems to cause non-deterministic gcc errors | ||||
| # https://bugzilla.redhat.com/show_bug.cgi?id=1420551 | ||||
| @ -123,22 +131,33 @@ cd %{dyninst_base} | ||||
| %{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} | ||||
| %endif | ||||
| 
 | ||||
| CFLAGS="$CFLAGS $RPM_OPT_FLAGS" | ||||
| LDFLAGS="$LDFLAGS $RPM_LD_FLAGS" | ||||
| %ifarch %{ix86} | ||||
|     CFLAGS="$CFLAGS -fno-lto -march=i686" | ||||
|     LDFLAGS="$LDFLAGS -fno-lto" | ||||
| %endif     | ||||
| CXXFLAGS="$CFLAGS" | ||||
| export CFLAGS CXXFLAGS LDFLAGS | ||||
| 
 | ||||
| %cmake \ | ||||
|  -DENABLE_STATIC_LIBS=1 \ | ||||
|  -DENABLE_DEBUGINFOD=1 \ | ||||
|  -DCMAKE_BUILD_TYPE:STRING=None \ | ||||
|  -DINSTALL_LIB_DIR:PATH=%{_libdir}/dyninst \ | ||||
|  -DINSTALL_INCLUDE_DIR:PATH=%{_includedir}/dyninst \ | ||||
|  -DINSTALL_CMAKE_DIR:PATH=%{_libdir}/cmake/Dyninst \ | ||||
|  -DLIBDWARF_LIBRARIES:FILEPATH="$libdwarf_builddir/libdwarf.a;-lz" \ | ||||
|  -DLIBDWARF_INCLUDE_DIR:PATH=$libdwarf_builddir \ | ||||
|  -DBoost_NO_BOOST_CMAKE=ON \ | ||||
|  -DCMAKE_SKIP_RPATH:BOOL=YES | ||||
| make %{?_smp_mflags} | ||||
|  -DCMAKE_SKIP_RPATH:BOOL=YES \ | ||||
|  . | ||||
| %make_build | ||||
| 
 | ||||
| # Hack to install dyninst nearby, so the testsuite can use it | ||||
| make DESTDIR=../install install | ||||
| find ../install -name '*.cmake' -execdir \ | ||||
|   sed -i -e 's!%{_prefix}!../install&!' '{}' '+' | ||||
| # cmake mistakenly looks for libtbb.so in the dyninst install dir | ||||
| sed -i '/libtbb.so/ s/".*usr/"\/usr/' $PWD/../install%{_libdir}/cmake/Dyninst/commonTargets.cmake | ||||
| 
 | ||||
| cd ../%{testsuite_base} | ||||
| %cmake \ | ||||
| @ -146,20 +165,28 @@ cd ../%{testsuite_base} | ||||
|  -DINSTALL_DIR:PATH=%{_libdir}/dyninst/testsuite \ | ||||
|  -DCMAKE_BUILD_TYPE:STRING=Debug \ | ||||
|  -DBoost_NO_BOOST_CMAKE=ON \ | ||||
|  -DCMAKE_SKIP_RPATH:BOOL=YES | ||||
| make %{?_smp_mflags} | ||||
|  -DCMAKE_SKIP_RPATH:BOOL=YES \ | ||||
|  . | ||||
| %make_build | ||||
| 
 | ||||
| %install | ||||
| 
 | ||||
| cd %{dyninst_base} | ||||
| make DESTDIR=$RPM_BUILD_ROOT install | ||||
| %make_install | ||||
| 
 | ||||
| # It doesn't install docs the way we want, so remove them. | ||||
| # We'll just grab the pdfs later, directly from the build dir. | ||||
| rm -v %{buildroot}%{_docdir}/*-%{version}.pdf | ||||
| 
 | ||||
| cd ../%{testsuite_base} | ||||
| make DESTDIR=$RPM_BUILD_ROOT install | ||||
| %make_install | ||||
| 
 | ||||
| # Ugly hack to mask testsuite files from debuginfo extraction.  Running the | ||||
| # testsuite requires debuginfo, so extraction is useless.  However, debuginfo | ||||
| # extraction is still nice for the main libraries, so we don't want to disable | ||||
| # it package-wide.  The permissions are restored by attr(755,-,-) in files. | ||||
| find %{buildroot}%{_libdir}/dyninst/testsuite/ \ | ||||
|   -type f '!' -name '*.a' -execdir chmod 644 '{}' '+' | ||||
| 
 | ||||
| %files | ||||
| %defattr(-,root,root,-) | ||||
| @ -172,8 +199,6 @@ make DESTDIR=$RPM_BUILD_ROOT install | ||||
| %doc %{dyninst_base}/COPYRIGHT | ||||
| %doc %{dyninst_base}/LICENSE.md | ||||
| 
 | ||||
| # %config(noreplace) /etc/ld.so.conf.d/* | ||||
| 
 | ||||
| %files doc | ||||
| %defattr(-,root,root,-) | ||||
| %doc %{dyninst_base}/dataflowAPI/doc/dataflowAPI.pdf | ||||
| @ -199,23 +224,17 @@ make DESTDIR=$RPM_BUILD_ROOT install | ||||
| %files testsuite | ||||
| %defattr(-,root,root,-) | ||||
| %{_bindir}/parseThat | ||||
| 
 | ||||
| # Remove example tools packaged with dyninst | ||||
| %exclude %{_bindir}/cfg_to_dot | ||||
| %exclude %{_bindir}/codeCoverage | ||||
| %exclude %{_bindir}/unstrip | ||||
| %exclude %{_bindir}/ddb.db | ||||
| %exclude %{_bindir}/params.db | ||||
| %exclude %{_bindir}/unistd.db | ||||
| # and the corresponding debuginfo | ||||
| %exclude /usr/lib/debug/%{_bindir}/codeCoverage*debug | ||||
| %exclude /usr/lib/debug/%{_bindir}/unstrip*debug | ||||
| 
 | ||||
| %dir %{_libdir}/dyninst/testsuite/ | ||||
| %attr(755,root,root) %{_libdir}/dyninst/testsuite/*[!a] | ||||
| %attr(644,root,root) %{_libdir}/dyninst/testsuite/*.a | ||||
| 
 | ||||
| %changelog | ||||
| * Fri Nov 06 2020 Stan Cox <scox@redhat.com> - 10.2.1-2 | ||||
| - Enable debuginfod | ||||
| 
 | ||||
| * Wed Oct 28 2020 Stan Cox <scox@redhat.com> - 10.2.1-1 | ||||
| - Update to 10.2.1 | ||||
| 
 | ||||
| * Mon Jun 1 2020 Martin Cermak <mcermak@redhat.com> - 10.1.0-2 | ||||
| - NVR Bump and rebuild | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user