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 | 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 | 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.2.0/testsuite-10.1.0/CMakeLists.txt
 | ||||||
| +++ dyninst-10.1.0/testsuite-10.1.0/src/instruction/test_instruction_farcall.C
 | +++ 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()
 | @@ -96,21 +96,21 @@ test_results_t test_instruction_farcall_Mutator::executeTest()
 | ||||||
|    if(decodedInsns.size() != expectedInsns) // six valid, one invalid |    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 | Group: Development/Libraries | ||||||
| Release: 2%{?dist} | Release: 2%{?dist} | ||||||
| URL: http://www.dyninst.org | URL: http://www.dyninst.org | ||||||
| Version: 10.1.0 | Version: 10.2.1 | ||||||
| Exclusiveos: linux | Exclusiveos: linux | ||||||
| ExclusiveArch: %{ix86} x86_64 ppc64le aarch64 | 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 | 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 | Patch1: dyninst-gcc11.patch | ||||||
| Patch2: dyninst-10.1.0-result.patch | Patch2: dyninst-10.2.1-dbid.patch | ||||||
| Patch3: testsuite-10.1.0-386.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 dyninst_base dyninst-%{version} | ||||||
| %global testsuite_base testsuite-%{version} | %global testsuite_base testsuite-%{__testsuite_version} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BuildRequires: zlib-devel | BuildRequires: zlib-devel | ||||||
| BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||||
| BuildRequires: elfutils-devel | BuildRequires: elfutils-devel | ||||||
| BuildRequires: elfutils-libelf-devel | BuildRequires: elfutils-libelf-devel | ||||||
|  | BuildRequires: elfutils-debuginfod-client-devel | ||||||
| BuildRequires: boost-devel | BuildRequires: boost-devel | ||||||
| BuildRequires: binutils-devel | BuildRequires: binutils-devel | ||||||
| BuildRequires: cmake | BuildRequires: cmake | ||||||
| @ -41,7 +46,7 @@ BuildRequires: tbb tbb-devel | |||||||
| %if 0%{?rhel} >= 7 | %if 0%{?rhel} >= 7 | ||||||
| BuildRequires: libstdc++-static | BuildRequires: libstdc++-static | ||||||
| %endif | %endif | ||||||
| BuildRequires: gcc-gfortran glibc-static nasm libxml2-devel | BuildRequires: gcc-gfortran glibc-static libxml2-devel | ||||||
| %if 0%{?rhel} == 6 | %if 0%{?rhel} == 6 | ||||||
| # C++11 requires devtoolset gcc. | # C++11 requires devtoolset gcc. | ||||||
| BuildRequires: %{?scl_prefix}gcc-c++ | BuildRequires: %{?scl_prefix}gcc-c++ | ||||||
| @ -105,9 +110,12 @@ making sure that dyninst works properly. | |||||||
| %setup -q -n %{name}-%{version} -c | %setup -q -n %{name}-%{version} -c | ||||||
| %setup -q -T -D -a 1 | %setup -q -T -D -a 1 | ||||||
| 
 | 
 | ||||||
| %patch1 -p1 -b.tbb | %patch1 -p1 -b .gcc11 | ||||||
| %patch2 -p1 -b.result | %patch2 -p1 -b .dbid | ||||||
| %patch3 -p1 -b.386 | %patch3 -p1 -b .gettid | ||||||
|  | %patch4 -p1 -b .386 | ||||||
|  | %patch5 -p1 -b .throw | ||||||
|  | %patch6 -p1 -b .tbb | ||||||
| 
 | 
 | ||||||
| # cotire seems to cause non-deterministic gcc errors | # cotire seems to cause non-deterministic gcc errors | ||||||
| # https://bugzilla.redhat.com/show_bug.cgi?id=1420551 | # https://bugzilla.redhat.com/show_bug.cgi?id=1420551 | ||||||
| @ -123,22 +131,33 @@ cd %{dyninst_base} | |||||||
| %{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} | %{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} | ||||||
| %endif | %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 \ | %cmake \ | ||||||
|  -DENABLE_STATIC_LIBS=1 \ |  -DENABLE_STATIC_LIBS=1 \ | ||||||
|  |  -DENABLE_DEBUGINFOD=1 \ | ||||||
|  -DCMAKE_BUILD_TYPE:STRING=None \ |  -DCMAKE_BUILD_TYPE:STRING=None \ | ||||||
|  -DINSTALL_LIB_DIR:PATH=%{_libdir}/dyninst \ |  -DINSTALL_LIB_DIR:PATH=%{_libdir}/dyninst \ | ||||||
|  -DINSTALL_INCLUDE_DIR:PATH=%{_includedir}/dyninst \ |  -DINSTALL_INCLUDE_DIR:PATH=%{_includedir}/dyninst \ | ||||||
|  -DINSTALL_CMAKE_DIR:PATH=%{_libdir}/cmake/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 \ |  -DBoost_NO_BOOST_CMAKE=ON \ | ||||||
|  -DCMAKE_SKIP_RPATH:BOOL=YES |  -DCMAKE_SKIP_RPATH:BOOL=YES \ | ||||||
| make %{?_smp_mflags} |  . | ||||||
|  | %make_build | ||||||
| 
 | 
 | ||||||
| # Hack to install dyninst nearby, so the testsuite can use it | # Hack to install dyninst nearby, so the testsuite can use it | ||||||
| make DESTDIR=../install install | make DESTDIR=../install install | ||||||
| find ../install -name '*.cmake' -execdir \ | find ../install -name '*.cmake' -execdir \ | ||||||
|   sed -i -e 's!%{_prefix}!../install&!' '{}' '+' |   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} | cd ../%{testsuite_base} | ||||||
| %cmake \ | %cmake \ | ||||||
| @ -146,20 +165,28 @@ cd ../%{testsuite_base} | |||||||
|  -DINSTALL_DIR:PATH=%{_libdir}/dyninst/testsuite \ |  -DINSTALL_DIR:PATH=%{_libdir}/dyninst/testsuite \ | ||||||
|  -DCMAKE_BUILD_TYPE:STRING=Debug \ |  -DCMAKE_BUILD_TYPE:STRING=Debug \ | ||||||
|  -DBoost_NO_BOOST_CMAKE=ON \ |  -DBoost_NO_BOOST_CMAKE=ON \ | ||||||
|  -DCMAKE_SKIP_RPATH:BOOL=YES |  -DCMAKE_SKIP_RPATH:BOOL=YES \ | ||||||
| make %{?_smp_mflags} |  . | ||||||
|  | %make_build | ||||||
| 
 | 
 | ||||||
| %install | %install | ||||||
| 
 | 
 | ||||||
| cd %{dyninst_base} | cd %{dyninst_base} | ||||||
| make DESTDIR=$RPM_BUILD_ROOT install | %make_install | ||||||
| 
 | 
 | ||||||
| # It doesn't install docs the way we want, so remove them. | # It doesn't install docs the way we want, so remove them. | ||||||
| # We'll just grab the pdfs later, directly from the build dir. | # We'll just grab the pdfs later, directly from the build dir. | ||||||
| rm -v %{buildroot}%{_docdir}/*-%{version}.pdf | rm -v %{buildroot}%{_docdir}/*-%{version}.pdf | ||||||
| 
 | 
 | ||||||
| cd ../%{testsuite_base} | 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 | %files | ||||||
| %defattr(-,root,root,-) | %defattr(-,root,root,-) | ||||||
| @ -172,8 +199,6 @@ make DESTDIR=$RPM_BUILD_ROOT install | |||||||
| %doc %{dyninst_base}/COPYRIGHT | %doc %{dyninst_base}/COPYRIGHT | ||||||
| %doc %{dyninst_base}/LICENSE.md | %doc %{dyninst_base}/LICENSE.md | ||||||
| 
 | 
 | ||||||
| # %config(noreplace) /etc/ld.so.conf.d/* |  | ||||||
| 
 |  | ||||||
| %files doc | %files doc | ||||||
| %defattr(-,root,root,-) | %defattr(-,root,root,-) | ||||||
| %doc %{dyninst_base}/dataflowAPI/doc/dataflowAPI.pdf | %doc %{dyninst_base}/dataflowAPI/doc/dataflowAPI.pdf | ||||||
| @ -199,23 +224,17 @@ make DESTDIR=$RPM_BUILD_ROOT install | |||||||
| %files testsuite | %files testsuite | ||||||
| %defattr(-,root,root,-) | %defattr(-,root,root,-) | ||||||
| %{_bindir}/parseThat | %{_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/ | %dir %{_libdir}/dyninst/testsuite/ | ||||||
| %attr(755,root,root) %{_libdir}/dyninst/testsuite/*[!a] | %attr(755,root,root) %{_libdir}/dyninst/testsuite/*[!a] | ||||||
| %attr(644,root,root) %{_libdir}/dyninst/testsuite/*.a | %attr(644,root,root) %{_libdir}/dyninst/testsuite/*.a | ||||||
| 
 | 
 | ||||||
| %changelog | %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 | * Mon Jun 1 2020 Martin Cermak <mcermak@redhat.com> - 10.1.0-2 | ||||||
| - NVR Bump and rebuild | - NVR Bump and rebuild | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user