Patch for oneTBB (#2036372)
Update FindTBB.cmake to look in the new version.h header. Fix the incorrect allocator used with tbb::concurrent_hash_map. Define a tbb_hash_compare specialization for std::pair to cope with the deprecated tbb_hasher function being removed. Adjust tbb_hash_compare specialization to account for TBB 2021.x defining it in a different namespace.
This commit is contained in:
		
							parent
							
								
									df818674e3
								
							
						
					
					
						commit
						afaa35c98c
					
				| @ -2,7 +2,7 @@ Summary: An API for Run-time Code Generation | |||||||
| License: LGPLv2+ | License: LGPLv2+ | ||||||
| Name: dyninst | Name: dyninst | ||||||
| Group: Development/Libraries | Group: Development/Libraries | ||||||
| Release: 4%{?dist} | Release: 5%{?dist} | ||||||
| URL: http://www.dyninst.org | URL: http://www.dyninst.org | ||||||
| Version: 12.2.0 | Version: 12.2.0 | ||||||
| ExclusiveArch: %{ix86} x86_64 ppc64le aarch64 | ExclusiveArch: %{ix86} x86_64 ppc64le aarch64 | ||||||
| @ -14,6 +14,7 @@ Source1: https://github.com/dyninst/testsuite/archive/%{__testsuite_version}/tes | |||||||
| Patch1: dwarf-error.patch | Patch1: dwarf-error.patch | ||||||
| Patch2: cmdline.patch | Patch2: cmdline.patch | ||||||
| Patch3: rhbz2173030.patch | Patch3: rhbz2173030.patch | ||||||
|  | Patch4: onetbb.patch | ||||||
| 
 | 
 | ||||||
| %global dyninst_base dyninst-%{version} | %global dyninst_base dyninst-%{version} | ||||||
| %global testsuite_base testsuite-%{__testsuite_version} | %global testsuite_base testsuite-%{__testsuite_version} | ||||||
| @ -91,6 +92,7 @@ popd | |||||||
| 
 | 
 | ||||||
| pushd %{dyninst_base} | pushd %{dyninst_base} | ||||||
| %patch3 -p1 | %patch3 -p1 | ||||||
|  | %patch4 -p1 | ||||||
| popd | popd | ||||||
| 
 | 
 | ||||||
| # cotire seems to cause non-deterministic gcc errors | # cotire seems to cause non-deterministic gcc errors | ||||||
| @ -193,6 +195,9 @@ find %{buildroot}%{_libdir}/dyninst/testsuite/ \ | |||||||
| %attr(644,root,root) %{_libdir}/dyninst/testsuite/*.a | %attr(644,root,root) %{_libdir}/dyninst/testsuite/*.a | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Jun 27 2023 Jonathan Wakely <jwakely@fedoraproject.org> - 12.2.0-5 | ||||||
|  | - Patch for oneTBB (#2036372) | ||||||
|  | 
 | ||||||
| * Thu Feb 23 2023 Frank Ch. Eigler <fche@redhat.com> - 12.2.0-4 | * Thu Feb 23 2023 Frank Ch. Eigler <fche@redhat.com> - 12.2.0-4 | ||||||
| - rhbz2173030: ftbfs with gcc 13 | - rhbz2173030: ftbfs with gcc 13 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										89
									
								
								onetbb.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								onetbb.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | |||||||
|  | --- dyninst-12.2.0/cmake/Modules/FindTBB.cmake~	2023-06-27 22:52:25.396598265 +0100
 | ||||||
|  | +++ dyninst-12.2.0/cmake/Modules/FindTBB.cmake	2023-06-27 22:52:27.776601825 +0100
 | ||||||
|  | @@ -154,7 +154,8 @@
 | ||||||
|  |  if(TBB_INCLUDE_DIRS) | ||||||
|  |      # Starting in 2020.1.1, tbb_stddef.h is replaced by version.h | ||||||
|  |      set(_version_files "${TBB_INCLUDE_DIRS}/tbb/tbb_stddef.h" | ||||||
|  | -                       "${TBB_INCLUDE_DIRS}/tbb/version.h")
 | ||||||
|  | +                       "${TBB_INCLUDE_DIRS}/tbb/version.h"
 | ||||||
|  | +                       "${TBB_INCLUDE_DIRS}/oneapi/tbb/version.h")
 | ||||||
|  |      foreach(f IN ITEMS ${_version_files}) | ||||||
|  |          if(EXISTS ${f}) | ||||||
|  |              set(_version_file ${f}) | ||||||
|  | --- dyninst-12.2.0/common/h/concurrent.h~	2023-06-27 23:31:35.971166585 +0100
 | ||||||
|  | +++ dyninst-12.2.0/common/h/concurrent.h	2023-06-27 23:32:31.889253848 +0100
 | ||||||
|  | @@ -41,6 +41,22 @@
 | ||||||
|  |  #include <tbb/concurrent_vector.h> | ||||||
|  |  #include <tbb/concurrent_queue.h> | ||||||
|  |   | ||||||
|  | +#if __has_include(<tbb/version.h>)
 | ||||||
|  | +#include <tbb/version.h>
 | ||||||
|  | +#if TBB_INTERFACE_VERSION_MAJOR >= 12
 | ||||||
|  | +// oneTBB version of tbb_hash_compare doesn't work for std::pair.
 | ||||||
|  | +template<typename T, typename U>
 | ||||||
|  | +struct tbb::tbb_hash_compare<std::pair<T, U>> {
 | ||||||
|  | +    static size_t hash(const std::pair<T, U>& p) {
 | ||||||
|  | +      return tbb_hash_compare<T>().hash(p.first) ^ tbb_hash_compare<U>().hash(p.second);
 | ||||||
|  | +    }
 | ||||||
|  | +    static bool equal(const std::pair<T, U>& p1, const std::pair<T, U>& p2) {
 | ||||||
|  | +      return p1 == p2;
 | ||||||
|  | +    }
 | ||||||
|  | +};
 | ||||||
|  | +#endif
 | ||||||
|  | +#endif
 | ||||||
|  | +
 | ||||||
|  |  namespace Dyninst { | ||||||
|  |   | ||||||
|  |  namespace dyn_c_annotations { | ||||||
|  | @@ -54,10 +70,10 @@
 | ||||||
|  |   | ||||||
|  |  template<typename K, typename V> | ||||||
|  |  class dyn_c_hash_map : protected tbb::concurrent_hash_map<K, V, | ||||||
|  | -    tbb::tbb_hash_compare<K>, std::allocator<std::pair<K,V>>> {
 | ||||||
|  | +    tbb::tbb_hash_compare<K>, std::allocator<std::pair<const K,V>>> {
 | ||||||
|  |   | ||||||
|  |      typedef tbb::concurrent_hash_map<K, V, | ||||||
|  | -        tbb::tbb_hash_compare<K>, std::allocator<std::pair<K,V>>> base;
 | ||||||
|  | +        tbb::tbb_hash_compare<K>, std::allocator<std::pair<const K,V>>> base;
 | ||||||
|  |  public: | ||||||
|  |      using typename base::value_type; | ||||||
|  |      using typename base::mapped_type; | ||||||
|  | --- dyninst-12.2.0/symtabAPI/src/dwarfWalker.h~	2023-06-27 23:49:03.290956830 +0100
 | ||||||
|  | +++ dyninst-12.2.0/symtabAPI/src/dwarfWalker.h	2023-06-28 09:12:36.672398326 +0100
 | ||||||
|  | @@ -35,22 +35,20 @@
 | ||||||
|  |  } | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -namespace tbb {
 | ||||||
|  | -    using namespace Dyninst::SymtabAPI;
 | ||||||
|  | -    template<>
 | ||||||
|  | -    struct tbb_hash_compare<type_key> {
 | ||||||
|  | -        static size_t hash(const type_key& k) {
 | ||||||
|  | -            size_t seed = 0;
 | ||||||
|  | -            boost::hash_combine(seed, k.off);
 | ||||||
|  | -            boost::hash_combine(seed, k.file);
 | ||||||
|  | -            boost::hash_combine(seed, static_cast<void *>(k.m));
 | ||||||
|  | -            return seed;
 | ||||||
|  | -        }
 | ||||||
|  | -        static bool equal(const type_key& k1, const type_key& k2) {
 | ||||||
|  | -            return (k1.off==k2.off && k1.file==k2.file && k1.m==k2.m);
 | ||||||
|  | -        }
 | ||||||
|  | -    };
 | ||||||
|  | -}
 | ||||||
|  | +template<>
 | ||||||
|  | +struct tbb::tbb_hash_compare<Dyninst::SymtabAPI::type_key> {
 | ||||||
|  | +    using type_key = Dyninst::SymtabAPI::type_key;
 | ||||||
|  | +    static size_t hash(const type_key& k) {
 | ||||||
|  | +        size_t seed = 0;
 | ||||||
|  | +        boost::hash_combine(seed, k.off);
 | ||||||
|  | +        boost::hash_combine(seed, k.file);
 | ||||||
|  | +        boost::hash_combine(seed, static_cast<void *>(k.m));
 | ||||||
|  | +        return seed;
 | ||||||
|  | +    }
 | ||||||
|  | +    static bool equal(const type_key& k1, const type_key& k2) {
 | ||||||
|  | +        return (k1.off==k2.off && k1.file==k2.file && k1.m==k2.m);
 | ||||||
|  | +    }
 | ||||||
|  | +};
 | ||||||
|  |   | ||||||
|  |  namespace Dyninst { | ||||||
|  |  namespace SymtabAPI { | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user