Compare commits

...
Sign in to create a new pull request.

71 commits

Author SHA1 Message Date
Jonathan Wakely
238a2d5e59 Rebuilt for Boost 1.90 2026-01-12 17:11:49 +00:00
Jerry James
2c3bf3ff72 Rebuild for tbb 2022.2.0 2025-08-20 13:21:18 -06:00
Fedora Release Engineering
1aaacf00c0 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-23 19:38:49 +00:00
Frank Ch. Eigler
4d320a0508 update .spec to remove deprecated project web site url 2025-07-14 17:07:51 -04:00
Frank Ch. Eigler
75a479c9cc Backport https://github.com/dyninst/dyninst/issues/1730 for ctor ordering 2025-02-06 08:48:17 -05:00
Frank Ch. Eigler
e8cdcd672a disable i686 again, ftbfs 2025-01-24 18:53:01 -05:00
Frank Ch. Eigler
6600f8b882 try with i686++ 2025-01-24 18:43:11 -05:00
Frank Ch. Eigler
1e4aa1f8f9 chain-build prep 2025-01-24 17:20:25 -05:00
Frank Ch. Eigler
05fb71cf62 add another cstdint 2025-01-24 14:08:51 -05:00
Frank Ch. Eigler
9dde4656ab more cstdint 2025-01-23 21:51:33 -05:00
Frank Ch. Eigler
1a6e35086a one more <cstdint> patch 2025-01-23 21:38:27 -05:00
Frank Ch. Eigler
ba863fce9d Add PR1880 patch too. 2025-01-23 21:12:48 -05:00
Frank Ch. Eigler
a0b8b3efb5
rebase to 13.0.0 + fedora-cmake patch 2025-01-23 20:59:46 -05:00
Frank Ch. Eigler
83283f30bb exclude i686 2025-01-23 15:48:44 -05:00
Frank Ch. Eigler
bd527a689e cont'd 2025-01-23 15:05:18 -05:00
Frank Ch. Eigler
15cf32d088 rhbz2339725: work around dyninst ftbfs on rawhide
- switch to a recent git/master snapshot, after v13.0
- also: eliminating dyninst-testsuite
2025-01-23 14:55:53 -05:00
Fedora Release Engineering
0139cfdb77 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-16 16:29:54 +00:00
Fedora Release Engineering
407d316605 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-17 21:35:55 +00:00
William Eden Cohen
4415a5d270 Merge #6 Fix CI gating plan 2024-02-08 15:10:54 +00:00
Fedora Release Engineering
7262c85591 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-24 10:01:19 +00:00
Fedora Release Engineering
a4ccd30890 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-19 17:44:17 +00:00
Jonathan Wakely
6b692d8ea3 Fix CI gating plan
Remove obsolete options.
2024-01-19 00:15:32 +00:00
Jonathan Wakely
b958d1d861 Rebuilt for Boost 1.83 2024-01-17 22:41:15 +00:00
Fedora Release Engineering
6fd6035841 Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-19 18:05:53 +00:00
Frank Ch. Eigler
8c06128c9f release bump 2023-07-11 19:29:04 -04:00
Frank Ch. Eigler
3c9bcecebd
dyninst.spec: approximate SPDX License tag migration 2023-07-04 17:24:24 -04:00
Orion Poplawski
5613a7798b Update to 12.3.0
Add patch for cmake 3.27 support
2023-07-04 17:07:45 -04:00
Jonathan Wakely
afaa35c98c 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.
2023-06-28 11:29:09 +01:00
Orion Poplawski
05e041c920 Update to 12.3.0
Add patch for cmake 3.27 support
2023-06-09 20:11:41 -06:00
Frank Ch. Eigler
df818674e3 rhbz2173030 cont'd
- backport dyninst upstream commits 0cd2b8b7858 358db4610e49 2e3bf92eedf575
2023-02-23 15:53:39 -05:00
Frank Ch. Eigler
765f434830 rhbz2173030 2023-02-23 15:26:31 -05:00
Jonathan Wakely
511a74a18b Rebuilt for Boost 1.81 2023-02-20 21:53:20 +00:00
Fedora Release Engineering
7ff5c1b1b5 Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-19 01:58:54 +00:00
William Cohen
6f56eaefa4 Update to 12.2.0 2022-10-04 09:56:25 -04:00
Stan Cox
c69dd4f6e2 Explicitly include time.h when building the testsuite 2022-08-03 11:45:04 -04:00
Fedora Release Engineering
6d48c36717 Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-21 01:29:24 +00:00
Thomas Rodgers
0b66d3bae3 Rebuilt for Boost 1.78 2022-05-04 11:38:17 +02:00
William Cohen
c7e910447c Update to 12.1.0 2022-03-10 13:52:19 -05:00
Orion Poplawski
c2951e4bc5 Fix cmake build dir 2022-03-05 14:37:16 -07:00
Stan Cox
5c6c00a9e5 Quiesce dwarf 5 warnings 2022-02-07 17:01:36 -05:00
Fedora Release Engineering
e350d4cd07 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-20 01:31:00 +00:00
Martin Cermak
7d4fab42a8 CI Gating: Use upstream testsuite as a gating test 2022-01-19 13:17:19 +01:00
Stan Cox
43c3301e82 Update to 12.0.1 2022-01-10 14:15:28 -05:00
Stan Cox
52366e3364 Build dyninst-testsuite with -j1 2021-11-10 10:15:35 -05:00
Stan Cox
a10ca5be63 Do not create relocs for aarch64 static calls 2021-11-09 10:44:20 -05:00
Jonathan Wakely
ce2957123d Rebuilt for Boost 1.76 2021-08-06 23:08:02 +01:00
Fedora Release Engineering
489f2de661 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-21 21:32:23 +00:00
Stan Cox
90c81439ea Update to 11.0.1 2021-07-08 16:50:43 -04:00
Stan Cox
77d455a6b5 Update to 11.0.0 2021-04-30 10:09:49 -04:00
Martin Cermak
9ebd1d0187 Don't require kernel rebuild test for gating 2021-04-21 15:30:02 +02:00
Martin Cermak
2eb398d8d5 Enable CI gating 2021-04-21 15:27:19 +02:00
Jonathan Wakely
36f9c5a1f5 Rebuilt for removed libstdc++ symbol (#1937698) 2021-03-30 19:35:59 +01:00
Frank Ch. Eigler
63c540813b respin 2021-01-29 13:35:40 -05:00
Fedora Release Engineering
d64c178af3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-26 04:10:51 +00:00
Jonathan Wakely
9821229e2e Rebuilt for Boost 1.75 2021-01-22 20:51:35 +00:00
Tom Stellard
570c7ab5bb Add BuildRequires: make
https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot
2020-12-17 04:51:12 +00:00
Stan Cox
922809d739 Resolves: #1889545 2020-11-10 16:14:43 -05:00
Stan Cox
07af1b4b2a Update to 10.2.1 2020-10-29 17:34:54 -04:00
Jeff Law
a0e0736c47 Commit the patch 2020-10-27 15:47:20 -06:00
Jeff Law
99f8c32710 Fix C++17 caught by gcc-11 2020-10-27 15:39:31 -06:00
Stan Cox
67da9764dd Update to 10.2.0 2020-09-09 14:06:45 -04:00
Stan Cox
da6c061ac3 Update to 10.2.0 2020-09-02 16:33:16 -04:00
Stan Cox
d51e94a73e Update to 10.2.0 2020-09-02 15:35:29 -04:00
Orion Poplawski
23090e1213 Add BR tex-latex for doc build 2020-08-13 09:01:19 -06:00
Orion Poplawski
66ba00f012 Use new cmake macros (FTBFS bz#1863463) 2020-08-10 08:55:07 -06:00
Fedora Release Engineering
95a7fc891e - Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-08-01 00:42:56 +00:00
Fedora Release Engineering
47be053248 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-27 16:10:23 +00:00
Stan Cox
f60d737b8b Do not build static versions of the dyninst libraries. 2020-07-16 12:58:26 -04:00
Jonathan Wakely
6e750a9e9c Rebuilt for Boost 1.73 2020-05-29 20:19:20 +01:00
Fedora Release Engineering
a450040450 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-01-28 16:47:52 +00:00
Stan Cox
e9fd51e453 Fix rhbz963475 dyninst must be ported to aarch64 2019-11-17 12:49:02 -05:00
38 changed files with 1258 additions and 476 deletions

1
.fmf/version Normal file
View file

@ -0,0 +1 @@
1

16
.gitignore vendored
View file

@ -21,3 +21,19 @@
/testsuite-9.4.0.tar.gz
/testsuite-10.1.0.tar.gz
/dyninst-10.1.0.tar.gz
/dyninst-10.2.0.tar.gz
/dyninst-10.2.1.tar.gz
/dyninst-11.0.0.tar.gz
/testsuite-11.0.0.tar.gz
/dyninst-11.0.1.tar.gz
/testsuite-11.0.1.tar.gz
/dyninst-12.0.1.tar.gz
/testsuite-12.0.0.tar.gz
/dyninst-12.1.0.tar.gz
/testsuite-12.1.0.tar.gz
/dyninst-12.2.0.tar.gz
/testsuite-12.2.0.tar.gz
/dyninst-12.3.0.tar.gz
/testsuite-12.3.0.tar.gz
/dyninst-13.snap.20250123.g80e1adaf.tar.gz
/dyninst-13.0.0.tar.gz

View file

@ -1,29 +0,0 @@
# workaround for https://github.com/dyninst/dyninst/issues/396
--- ./dyninst-9.3.2/symtabAPI/src/Object-elf.C.sv 2017-09-27 21:43:18.399429243 -0400
+++ ./dyninst-9.3.2/symtabAPI/src/Object-elf.C 2017-09-27 21:56:14.485125928 -0400
@@ -1445,6 +1445,24 @@
if (fbt_iter == -1) { // Create new relocation entry.
relocationEntry re( next_plt_entry_addr, offset, targ_name,
NULL, type );
+ if (type == R_X86_64_IRELATIVE) {
+ vector<Symbol *> funcs;
+ dyn_hash_map<std::string, std::vector<Symbol *> >::iterator iter;
+ // find the resolver function and use that as the
+ // caller function symbol. The resolver has not run
+ // so we don't know the ultimate destination.
+ // Since the funcsByOffset map hasn't been setup yet
+ // we cannot call associated_symtab->findFuncByEntryOffset
+ for (iter = symbols_.begin(); iter != symbols_.end(); ++iter) {
+ std::string name = iter->first;
+ Symbol *sym = iter->second[0];
+ if (sym->getOffset() == (Offset)addend) {
+ // Use dynsym_list.push_back(sym) instead?
+ re.addDynSym(sym);
+ break;
+ }
+ }
+ }
re.setAddend(addend);
re.setRegionType(rtype);
if (dynsym_list.size() > 0)

View file

@ -1,12 +0,0 @@
# workaround for https://github.com/dyninst/dyninst/issues/406
--- dyninst-9.3.2/common/src/addrtranslate-sysv.C.sv 2017-10-03 21:32:23.608614189 -0400
+++ dyninst-9.3.2/common/src/addrtranslate-sysv.C 2017-10-03 21:33:36.538642148 -0400
@@ -800,6 +800,7 @@
continue;
}
if (obj_name == "linux-vdso.so.1" ||
+ obj_name == "linux-vdso64.so.1" ||
obj_name == "linux-gate.so.1")
{
continue;

View file

@ -1,12 +0,0 @@
--- ./dyninst-10.0.0/CMakeLists.txt.sv 2018-11-09 11:48:08.000000000 -0500
+++ ./dyninst-10.0.0/CMakeLists.txt 2018-11-13 11:35:20.109650373 -0500
@@ -149,7 +149,7 @@ if(BUILD_DOCS)
foreach(COMPONENT ${WORD_DOCS})
add_dependencies(doc ${COMPONENT}-doc)
set_target_properties(${COMPONENT}-doc PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
- install(FILES ${CMAKE_SOURCE_DIR}/${COMPONENT}/doc/${COMPONENT}.pdf
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc/${COMPONENT}.pdf
DESTINATION ${INSTALL_DOC_DIR}
RENAME ${COMPONENT}-${VERSION_STRING}.pdf
OPTIONAL

View file

@ -1,42 +0,0 @@
# workaround for https://github.com/dyninst/dyninst/issues/396
--- ./dyninst-10.0.0/examples/CMakeLists.txt.sv 2018-11-09 11:48:08.000000000 -0500
+++ ./dyninst-10.0.0/examples/CMakeLists.txt 2018-11-13 11:35:20.109650373 -0500
@@ -1,19 +1,19 @@
-add_executable(unstrip unstrip/unstrip.C
- unstrip/util.C
- unstrip/types.C
- unstrip/semanticDescriptor.C
- unstrip/database.C
- unstrip/fingerprint.C
- unstrip/callback.C)
+add_executable(unstrip unstrip.dir/unstrip.C
+ unstrip.dir/util.C
+ unstrip.dir/types.C
+ unstrip.dir/semanticDescriptor.C
+ unstrip.dir/database.C
+ unstrip.dir/fingerprint.C
+ unstrip.dir/callback.C)
add_dependencies(unstrip parseAPI symtabAPI instructionAPI common)
target_link_libraries(unstrip parseAPI symtabAPI instructionAPI common dynDwarf dynElf ${Boost_LIBRARIES})
-add_executable(codeCoverage codeCoverage/codeCoverage.C)
+add_executable(codeCoverage codeCoverage.dir/codeCoverage.C)
add_dependencies(codeCoverage dyninstAPI patchAPI parseAPI symtabAPI instructionAPI pcontrol common stackwalk dynDwarf dynElf)
target_link_libraries(codeCoverage dyninstAPI patchAPI parseAPI symtabAPI instructionAPI pcontrol common stackwalk dynDwarf dynElf ${Boost_LIBRARIES})
-add_library(Inst SHARED codeCoverage/libInst.C)
+add_library(Inst SHARED codeCoverage.dir/libInst.C)
add_executable(cfg_to_dot ../parseAPI/doc/example.cc)
@@ -29,5 +29,5 @@
)
-install (
- FILES unstrip/ddb.db unstrip/params.db unstrip/unistd.db DESTINATION ${INSTALL_BIN_DIR}
-)
+# install (
+# FILES unstrip.dir/ddb.db unstrip.dir/params.db unstrip.dir/unistd.db DESTINATION ${INSTALL_BIN_DIR}
+# )

View file

@ -1,28 +0,0 @@
--- ./dyninst-10.0.0/instructionAPI/h/Result.h.sv 2018-11-09 11:48:08.000000000 -0500
+++ ./dyninst-10.0.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);

View file

@ -1,35 +0,0 @@
commit 54a2debd94c3e8df3b6f1e579f1db02dae61cbb7
Author: Mark W. Krentel <krentel@rice.edu>
Date: Fri Feb 1 13:14:11 2019 -0600
Add some explicit casts from boost::tribool to bool for some code in (#541)
Add some explicit casts from boost::tribool to bool for some code in dataflowAPI/rose/util/Message.[Ch]. This was breaking the build when using boost >= 1.69.
diff --git a/dataflowAPI/rose/util/Message.C b/dataflowAPI/rose/util/Message.C
index a8a66ad4c..5e276f97d 100644
--- ./dyninst-10.0.0/dataflowAPI/rose/util/Message.C
+++ ./dyninst-10.0.0/dataflowAPI/rose/util/Message.C
@@ -1123,7 +1123,7 @@ StreamBuf::bake() {
destination_->bakeDestinations(message_.properties(), baked_/*out*/);
anyUnbuffered_ = false;
for (BakedDestinations::const_iterator bi=baked_.begin(); bi!=baked_.end() && !anyUnbuffered_; ++bi)
- anyUnbuffered_ = !bi->second.isBuffered;
+ anyUnbuffered_ = static_cast<bool>(!bi->second.isBuffered);
isBaked_ = true;
}
}
diff --git a/dataflowAPI/rose/util/Message.h b/dataflowAPI/rose/util/Message.h
index 816f68d2e..03592cb97 100644
--- ./dyninst-10.0.0/dataflowAPI/rose/util/Message.h
+++ ./dyninst-10.0.0/dataflowAPI/rose/util/Message.h
@@ -386,7 +386,8 @@ struct SAWYER_EXPORT ColorSpec {
ColorSpec(AnsiColor fg, AnsiColor bg, bool bold): foreground(fg), background(bg), bold(bold) {}
/** Returns true if this object is in its default-constructed state. */
- bool isDefault() const { return COLOR_DEFAULT==foreground && COLOR_DEFAULT==background && !bold; }
+ bool isDefault() const { return COLOR_DEFAULT==foreground && COLOR_DEFAULT==background
+ && static_cast<bool>(!bold); }
};
/** Colors to use for each message importance.

View file

@ -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);

View file

@ -1,108 +0,0 @@
--- dyninst-9.3.1/common/src/Types.h.sv 2017-03-07 22:05:52.187479600 -0500
+++ dyninst-9.3.1/common/src/Types.h 2017-03-07 22:06:57.509944790 -0500
@@ -170,7 +170,7 @@
static const Address ADDR_NULL = (Address)(0);
#else
#define ADDR_NULL (0)
-typedef uintptr_t Address;
+typedef unsigned long Address;
#endif
/* Note the inherent assumption that the size of a "long" integer matches
that of an address (void*) on every supported Paradyn/Dyninst system!
--- dyninst-9.3.1/common/h/dyntypes.h.sv 2017-03-08 10:16:18.657768231 -0500
+++ dyninst-9.3.1/common/h/dyntypes.h 2017-03-08 10:37:07.992634513 -0500
@@ -124,8 +124,8 @@
namespace Dyninst
{
- typedef uintptr_t Address;
- typedef uintptr_t Offset;
+ typedef unsigned long Address;
+ typedef unsigned long Offset;
#if defined(_MSC_VER)
typedef int PID;
--- dyninst-9.3.1/dyninstAPI/src/BPatch_memoryAccess.C.sv 2017-03-07 23:07:29.371789000 -0500
+++ dyninst-9.3.1/dyninstAPI/src/BPatch_memoryAccess.C 2017-03-07 23:07:48.928927991 -0500
@@ -33,10 +33,10 @@
#include <stdlib.h>
#include <string.h>
+#include "../../common/src/Types.h"
#include "BPatch_memoryAccess_NP.h"
#include "BPatch_Vector.h"
#include "BPatch_point.h"
-#include "../../common/src/Types.h"
BPatch_addrSpec_NP::BPatch_addrSpec_NP(long _imm, int _ra, int _rb, int _scale) :
imm(_imm),
--- dyninst-9.3.1/dyninstAPI/h/BPatch_instruction.h.sv 2017-03-08 09:06:46.638171175 -0500
+++ dyninst-9.3.1/dyninstAPI/h/BPatch_instruction.h 2017-03-08 09:00:39.455564403 -0500
@@ -69,7 +69,7 @@
public:
BPatch_instruction(internal_instruction *insn,
- uintptr_t _addr);
+ Dyninst::Address _addr);
virtual ~BPatch_instruction();
void getInstruction(const unsigned char *&_buffer, unsigned char &_length);
--- dyninst-9.3.1/dyninstAPI/h/BPatch_memoryAccess_NP.h.sv 2017-03-07 22:43:56.645745821 -0500
+++ dyninst-9.3.1/dyninstAPI/h/BPatch_memoryAccess_NP.h 2017-03-08 10:39:30.122643332 -0500
@@ -121,27 +121,27 @@
static BPatch_memoryAccess* init_tables();
// initializes only the first access; #bytes is a constant
- BPatch_memoryAccess(internal_instruction *, uintptr_t _addr,
+ BPatch_memoryAccess(internal_instruction *, Dyninst::Address _addr,
bool _isLoad, bool _isStore, unsigned int _bytes,
long _imm, int _ra, int _rb, unsigned int _scale = 0,
int _cond = -1, bool _nt = false);
// initializes only the first access; #bytes is an expression w/scale
- BPatch_memoryAccess(internal_instruction *insn, uintptr_t _addr,
+ BPatch_memoryAccess(internal_instruction *insn, Dyninst::Address _addr,
bool _isinternal_Load, bool _isStore,
long _imm_s, int _ra_s, int _rb_s, unsigned int _scale_s,
long _imm_c, int _ra_c, int _rb_c, unsigned int _scale_c,
int _cond, bool _nt, int _preFcn = -1);
// initializes only the first access; #bytes is an expression
- BPatch_memoryAccess(internal_instruction *insn, uintptr_t _addr,
+ BPatch_memoryAccess(internal_instruction *insn, Dyninst::Address _addr,
bool _isLoad, bool _isStore, bool _isPrefetch,
long _imm_s, int _ra_s, int _rb_s,
long _imm_c, int _ra_c, int _rb_c,
unsigned short _preFcn);
// initializes only the first access; #bytes is an expression & not a prefetch
- BPatch_memoryAccess(internal_instruction *insn, uintptr_t _addr,
+ BPatch_memoryAccess(internal_instruction *insn, Dyninst::Address _addr,
bool _isLoad, bool _isStore, long _imm_s, int _ra_s, int _rb_s,
long _imm_c, int _ra_c, int _rb_c);
@@ -156,14 +156,14 @@
int _cond, bool _nt);
// initializes both accesses; #bytes is a constant
- BPatch_memoryAccess(internal_instruction *insn, uintptr_t _addr,
+ BPatch_memoryAccess(internal_instruction *insn, Dyninst::Address _addr,
bool _isLoad, bool _isStore, unsigned int _bytes,
long _imm, int _ra, int _rb, unsigned int _scale,
bool _isLoad2, bool _isStore2, unsigned int _bytes2,
long _imm2, int _ra2, int _rb2, unsigned int _scale2);
// initializes both accesses; #bytes is an expression & not a prefetch
- BPatch_memoryAccess(internal_instruction *insn, uintptr_t _addr, bool _isLoad, bool _isStore,
+ BPatch_memoryAccess(internal_instruction *insn, Dyninst::Address _addr, bool _isLoad, bool _isStore,
long _imm_s, int _ra_s, int _rb_s, unsigned int _scale_s,
long _imm_c, int _ra_c, int _rb_c, unsigned int _scale_c,
bool _isLoad2, bool _isStore2, long _imm2_s, int _ra2_s,

View file

@ -1,14 +0,0 @@
diff -up dyninst-9.3.2/dyninst-9.3.2/symtabAPI/src/emitElf.C.me dyninst-9.3.2/dyninst-9.3.2/symtabAPI/src/emitElf.C
--- dyninst-9.3.2/dyninst-9.3.2/symtabAPI/src/emitElf.C.me 2018-02-07 15:50:36.706363500 +0100
+++ dyninst-9.3.2/dyninst-9.3.2/symtabAPI/src/emitElf.C 2018-02-07 16:30:28.173906877 +0100
@@ -2512,8 +2512,8 @@ void emitElf<ElfTypes>::createDynamicSec
if (!object->hasReldyn() && !object->hasReladyn()) {
if (object->getRelType() == Region::RT_REL) {
- new_dynamic_entries.push_back(make_pair(DT_REL, 0));
- new_dynamic_entries.push_back(make_pair(DT_RELSZ, 0));
+ new_dynamic_entries.push_back(std::pair<long, long>(DT_REL, 0));
+ new_dynamic_entries.push_back(std::pair<long, long>(DT_RELSZ, 0));
dynamicSecData[DT_REL].push_back(dynsecData + curpos);
dynsecData[curpos].d_tag = DT_NULL;

View file

@ -1,23 +0,0 @@
diff -up dyninst-9.3.2/dyninst-9.3.2/CMakeLists.txt.me dyninst-9.3.2/dyninst-9.3.2/CMakeLists.txt
--- dyninst-9.3.2/dyninst-9.3.2/CMakeLists.txt.me 2018-02-07 15:25:38.925763122 +0100
+++ dyninst-9.3.2/dyninst-9.3.2/CMakeLists.txt 2018-02-07 15:30:42.242099198 +0100
@@ -19,6 +19,7 @@ include (${DYNINST_ROOT}/cmake/shared.cm
configure_file(cmake/version.h.in common/h/version.h)
include_directories(${PROJECT_BINARY_DIR})
include_directories(${PROJECT_BINARY_DIR}/common/h)
+include_directories("/usr/include/tirpc/")
set (HEADER_DIRS common
dataflowAPI
dyninstAPI
diff -up dyninst-9.3.2/dyninst-9.3.2/common/src/linuxHeaders.h.me dyninst-9.3.2/dyninst-9.3.2/common/src/linuxHeaders.h
--- dyninst-9.3.2/dyninst-9.3.2/common/src/linuxHeaders.h.me 2018-02-07 15:06:45.961780668 +0100
+++ dyninst-9.3.2/dyninst-9.3.2/common/src/linuxHeaders.h 2018-02-07 15:38:56.832278338 +0100
@@ -281,7 +281,7 @@ inline bool_t P_xdr_string(XDR *x, char
inline void P_xdrrec_create(XDR *x, const u_int send_sz, const u_int rec_sz,
const caddr_t handle,
xdr_rd_func read_r, xdr_wr_func write_f) {
- xdrrec_create(x, send_sz, rec_sz, handle, (int(*)(char*, char*, int))read_r, (int(*)(char*, char*, int))write_f);}
+ xdrrec_create(x, send_sz, rec_sz, handle, (int(*)(void*, void*, int))read_r, (int(*)(void*, void*, int))write_f);}
inline bool_t P_xdrrec_endofrecord(XDR *x, int now) {
return (xdrrec_endofrecord(x, now));}
inline bool_t P_xdrrec_skiprecord(XDR *x) { return (xdrrec_skiprecord(x));}

View file

@ -1,39 +1,35 @@
Summary: An API for Run-time Code Generation
License: LGPLv2+
License: LGPL-2.1-or-later AND GPL-3.0-or-later WITH Bison-exception-2.2 AND LicenseRef-Fedora-Public-Domain AND BSD-3-Clause
Name: dyninst
Release: 3%{?dist}
URL: http://www.dyninst.org
Version: 10.1.0
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
Group: Development/Libraries
Release: 8%{?dist}
URL: https://www.paradyn.org
Version: 13.0.0
ExclusiveArch: x86_64 ppc64le aarch64
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
Patch1: dyninst-10.1.0-result.patch
Patch2: testsuite-10.1.0-gettid.patch
Patch3: testsuite-10.1.0-386.patch
Source0: dyninst-13.0.0.tar.gz
Patch1: github-pr1721.patch
Patch2: github-pr1880.patch
Patch3: github-pr1880-ish.patch
Patch4: github-pr1730.patch
%global dyninst_base dyninst-%{version}
%global testsuite_base testsuite-%{version}
BuildRequires: gcc-c++
BuildRequires: elfutils-devel
BuildRequires: elfutils-libelf-devel
BuildRequires: elfutils-debuginfod-client-devel
BuildRequires: boost-devel
BuildRequires: binutils-devel
BuildRequires: cmake
BuildRequires: libtirpc-devel
BuildRequires: tbb tbb-devel
BuildRequires: tex-latex
BuildRequires: make
# Extra requires just for the testsuite
BuildRequires: gcc-gfortran glibc-static libstdc++-static nasm libxml2-devel
# Testsuite files should not provide/require anything
%{?filter_setup:
%filter_provides_in %{_libdir}/dyninst/testsuite/
%filter_requires_in %{_libdir}/dyninst/testsuite/
%filter_setup
}
# https://fedoraproject.org/wiki/Changes/Linker_Error_On_Security_Issues
# may impact the RT library
%undefine _hardened_linker_errors
%description
@ -47,49 +43,40 @@ the creation of tools and applications that use run-time code patching.
%package doc
Summary: Documentation for using the Dyninst API
Group: Documentation
%description doc
dyninst-doc contains API documentation for the Dyninst libraries.
License: LGPL-2.1-or-later
%package devel
Summary: Header files for compiling programs with Dyninst
Group: Development/System
Requires: dyninst = %{version}-%{release}
Requires: boost-devel
Requires: tbb-devel
License: LGPL-2.1-or-later AND BSD-3-Clause AND MIT
# FindTBB.cmake: presumed MIT, removed in next version of dyninst
%description devel
dyninst-devel includes the C header files that specify the Dyninst user-space
libraries and interfaces. This is required for rebuilding any program
that uses Dyninst.
%package static
Summary: Static libraries for the compiling programs with Dyninst
Requires: dyninst-devel = %{version}-%{release}
%description static
dyninst-static includes the static versions of the library files for
the dyninst user-space libraries and interfaces.
%package testsuite
Summary: Programs for testing Dyninst
Requires: dyninst = %{version}-%{release}
Requires: dyninst-devel = %{version}-%{release}
Requires: dyninst-static = %{version}-%{release}
Requires: glibc-static
%description testsuite
dyninst-testsuite includes the test harness and target programs for
making sure that dyninst works properly.
%prep
%setup -q -n %{name}-%{version} -c
%setup -q -T -D -a 1
# %setup -q -T -D -a 1
%patch1 -p1 -b.result
%patch2 -p1 -b.gettid
%patch3 -p1 -b.386
pushd %{dyninst_base}
%patch -P1 -p1
%patch -P2 -p1
%patch -P3 -p1
%patch -P4 -p1
popd
# cotire seems to cause non-deterministic gcc errors
# https://bugzilla.redhat.com/show_bug.cgi?id=1420551
sed -i.cotire -e 's/USE_COTIRE true/USE_COTIRE false/' \
%{dyninst_base}/cmake/shared.cmake
# sed -i.cotire -e 's/USE_COTIRE true/USE_COTIRE false/' \
# %{dyninst_base}/cmake/shared.cmake
%build
@ -97,46 +84,34 @@ cd %{dyninst_base}
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 \
-DINSTALL_LIB_DIR:PATH=%{_libdir}/dyninst \
-DINSTALL_INCLUDE_DIR:PATH=%{_includedir}/dyninst \
-DINSTALL_CMAKE_DIR:PATH=%{_libdir}/cmake/Dyninst \
%cmake --log-level=DEBUG \
-DENABLE_DEBUGINFOD=1 \
-DCMAKE_BUILD_TYPE=None \
-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 \
-DDyninst_DIR:PATH=$PWD/../install%{_libdir}/cmake/Dyninst \
-DINSTALL_DIR:PATH=%{_libdir}/dyninst/testsuite \
-DCMAKE_BUILD_TYPE:STRING=Debug \
-DCMAKE_SKIP_RPATH:BOOL=YES \
.
%make_build
-DINSTALL_CMAKE_DIR:PATH=/usr/lib64/cmake/Dyninst \
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DCMAKE_INSTALL_INCLUDEDIR:PATH=/usr/include/dyninst \
-DCMAKE_INSTALL_LIBDIR:PATH=/usr/lib64/dyninst
%cmake_build -v -v -v
%install
cd %{dyninst_base}
%make_install
%cmake_install -v -v -v
# 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
# move /usr/lib64//dyninst/cmake/Dyninst to /usr/lib64/cmake/Dyninst
mkdir -p %{buildroot}/%{_libdir}/cmake
mv %{buildroot}/%{_libdir}/dyninst/cmake/Dyninst %{buildroot}/%{_libdir}/cmake/Dyninst
cd ../%{testsuite_base}
%make_install
# this is a testsuite-like binary, not needed in main package
rm -f "%{buildroot}%{_bindir}/parseThat"
mkdir -p %{buildroot}/etc/ld.so.conf.d
echo "%{_libdir}/dyninst" > %{buildroot}/etc/ld.so.conf.d/%{name}-%{_arch}.conf
@ -149,6 +124,7 @@ echo "%{_libdir}/dyninst" > %{buildroot}/etc/ld.so.conf.d/%{name}-%{_arch}.conf
%{_libdir}/dyninst/*.so.*
# dyninst mutators dlopen the runtime library
%{_libdir}/dyninst/libdyninstAPI_RT.so
%{_libdir}/dyninst/libdyninstAPI_RT.a
%doc %{dyninst_base}/COPYRIGHT
%doc %{dyninst_base}/LICENSE.md
@ -171,22 +147,151 @@ echo "%{_libdir}/dyninst" > %{buildroot}/etc/ld.so.conf.d/%{name}-%{_arch}.conf
%{_libdir}/dyninst/*.so
%{_libdir}/cmake/Dyninst
%files static
%{_libdir}/dyninst/*.a
%files testsuite
%{_bindir}/parseThat
%exclude %{_bindir}/cfg_to_dot
%exclude /usr/bin/codeCoverage
%exclude /usr/bin/unstrip
%exclude /usr/bin/ddb.db
%exclude /usr/bin/params.db
%exclude /usr/bin/unistd.db
%dir %{_libdir}/dyninst/testsuite/
%attr(755,root,root) %{_libdir}/dyninst/testsuite/*[!a]
%attr(644,root,root) %{_libdir}/dyninst/testsuite/*.a
%changelog
* Mon Jan 12 2026 Jonathan Wakely <jwakely@fedoraproject.org> - 13.0.0-8
- Rebuilt for Boost 1.90
* Wed Aug 20 2025 Jerry James <loganjerry@gmail.com> - 13.0.0-7
- Rebuild for tbb 2022.2.0
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 13.0.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Feb 06 2025 Frank Ch. Eigler <fche@redhat.com> - 13.0.0-5
- Backported github PR/1370 for constructor ordering.
* Thu Jan 23 2025 Frank Ch. Eigler <fche@redhat.com> - 13.0.0-4
- Rebuilt for F42 FTBFS with 13.0.0 + backported fixes + sans i686
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.0-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jan 17 2024 Jonathan Wakely <jwakely@redhat.com> - 12.3.0-4
- Rebuilt for Boost 1.83
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jul 11 2023 Frank Ch. Eigler <fche@redhat.com> - 12.3.0-2
- side-tag respin
* Tue Jul 04 2023 Frank Ch. Eigler <fche@redhat.com> - 12.3.0-1
- migrated to SPDX license
* Tue Jul 04 2023 Orion Poplawski <orion@nwra.com> - 12.3.0-1
- Update to 12.3.0
- Add patch for cmake 3.27 support
* 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
- rhbz2173030: ftbfs with gcc 13
* Mon Feb 20 2023 Jonathan Wakely <jwakely@redhat.com> - 12.2.0-3
- Rebuilt for Boost 1.81
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 12.2.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Oct 4 2022 William Cohen <wcohen@redhat.com> - 12.2.0-1
- Update to 12.2.0
* Wed Aug 03 2022 Stan Cox <scox@redhat.com> - 12.1.0-4
- Explicitly include time.h as <string> no longer pulls it in
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 12.1.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed May 04 2022 Thomas Rodgers <trodgers@redhat.com> - 12.1.0-2
- Rebuilt for Boost 1.78
* Thu Mar 10 2022 William Cohen <wcohen@redhat.com> - 12.1.0-1
- Update to 12.1.0
* Sat Mar 05 2022 Orion Poplawski <orion@nwra.com> - 12.0.1-4
- Fix cmake build dir
* Mon Feb 07 2022 Stan Cox <scox@redhat.com> - 12.0.1-3
- Quiesce dwarf 5 warnings
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 12.0.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Jan 10 2022 Stan Cox <scox@redhat.com> - 12.0.1-1
- Update to 12.0.1
* Tue Nov 09 2021 Stan Cox <scox@redhat.com> - 11.0.1-4
- Do not create reloc for aarch64 static calls
* Fri Aug 06 2021 Jonathan Wakely <jwakely@redhat.com> - 11.0.1-3
- Rebuilt for Boost 1.76
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 11.0.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Thu Jul 08 2021 Stan Cox <scox@redhat.com> - 11.0.1
- Update to 11.0.1
* Fri Apr 30 2021 Stan Cox <scox@redhat.com> - 11.0.0
- Update to 11.0.0
* Tue Mar 30 2021 Jonathan Wakely <jwakely@redhat.com> - 10.2.1-6
- Rebuilt for removed libstdc++ symbol (#1937698)
* Fri Jan 29 2021 Frank Ch. Eigler <fche@redhat.com> - 10.2.1-5
- Rebuilt for Boost 1.75 for sure, via buildrequire version constraints
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 10.2.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Jan 22 2021 Jonathan Wakely <jwakely@redhat.com> - 10.2.1-3
- Rebuilt for Boost 1.75
* Tue Nov 10 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
* Tue Oct 27 2020 Jeff Law <law@redhat.com> - 10.2.0-2
- Fix C++17 issue caught by gcc-11
* Tue Sep 01 2020 Stan Cox <scox@redhat.com> - 10.2.0-1
- Update to 10.2.0
* Mon Aug 10 2020 Orion Poplawski <orion@nwra.com> - 10.1.0-10
- Use new cmake macros (FTBFS bz#1863463)
- Add BR tex-latex for doc build
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 10.1.0-9
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 10.1.0-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Jul 15 2020 Stan Cox <scox@redhat.com> - 10.1.0-7
- Do not build static versions of the dyninst libraries.
* Fri May 29 2020 Jonathan Wakely <jwakely@redhat.com> - 10.1.0-6
- Rebuilt for Boost 1.73
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 10.1.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Nov 15 2019 Stan Cox <scox@redhat.com> - 10.1.0-4
- Fix rhbz963475 dyninst must be ported to aarch64
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 10.1.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

19
gating.yaml Normal file
View file

@ -0,0 +1,19 @@
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_stable
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
--- !Policy
product_versions:
- rhel-8
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
--- !Policy
product_versions:
- rhel-9
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}

55
github-pr1721.patch Normal file
View file

@ -0,0 +1,55 @@
commit e70b1001eb5082bb0204b602e3ca1cfccd67fc94
gpg: Signature made Tue 09 Apr 2024 11:21:17 AM EDT
gpg: using RSA key B5690EEEBB952194
gpg: Can't check signature: No public key
Author: kupsch <kupsch@cs.wisc.edu>
Date: Tue Apr 9 10:21:17 2024 -0500
improve cmake install dirs (#1721)
* Use cmake's GNUInstallDirs to get the lib, bin and include directory
names instead of always using 'lib', 'bin', and 'include'. This
results in two changes to the installation:
- lib directory becomes 'lib64' on platforms where this is the
convention
- the lib, bin and include may be overwritten using the cmake
variables CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_LIBDIR and
CMAKE_INSTALL_INCLUDEDIR respectively
* Update github workflows to handle the lib install dir lib64:
- use Dyninst_ROOT instead of Dyninst_DIR as it searches for the
directory used
- for non-cmake uses search for lib* to find either lib or lib64
diff --git a/cmake/DyninstLibrarySettings.cmake b/cmake/DyninstLibrarySettings.cmake
index d3627f8789f2..e8cb26b95c39 100644
--- a/cmake/DyninstLibrarySettings.cmake
+++ b/cmake/DyninstLibrarySettings.cmake
@@ -25,9 +25,10 @@ else()
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
endif()
-set(DYNINST_INSTALL_BINDIR "bin")
-set(DYNINST_INSTALL_LIBDIR "lib")
-set(DYNINST_INSTALL_INCLUDEDIR "include")
+include(GNUInstallDirs)
+set(DYNINST_INSTALL_BINDIR "${CMAKE_INSTALL_BINDIR}")
+set(DYNINST_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
+set(DYNINST_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}")
set(DYNINST_INSTALL_CMAKEDIR "${DYNINST_INSTALL_LIBDIR}/cmake/Dyninst")
# -- Set up the RPATH ---
diff --git a/parseThat/CMakeLists.txt b/parseThat/CMakeLists.txt
index ffe4b7aea29c..d4697a8a1d99 100644
--- a/parseThat/CMakeLists.txt
+++ b/parseThat/CMakeLists.txt
@@ -29,4 +29,4 @@ target_link_libraries(parseThat PRIVATE dyninstAPI)
target_include_directories(parseThat BEFORE
PRIVATE "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/common/h>")
-install(TARGETS parseThat RUNTIME DESTINATION bin)
+install(TARGETS parseThat RUNTIME DESTINATION "${DYNINST_INSTALL_BINDIR}")

151
github-pr1730.patch Normal file
View file

@ -0,0 +1,151 @@
commit eae798d4e5f938cb85758571dbab9afbbea7b5d2 (HEAD -> v13.0.0)
Author: Frank Ch. Eigler <fche@redhat.com>
Date: Thu Feb 6 08:35:33 2025 -0500
MachRegister: fix initialization order bug (#1731)
Backported upstream commit to 13.0.0 base.
commit a29f32ac87c4483b97a2c5cb9beed5642124ae8f
Author: Tim Haines <thaines.astro@gmail.com>
Date: Mon Apr 22 15:32:12 2024 -0500
MachRegister: fix initialization order bug (#1731)
This fixes the static initialization ordering issue reported in https://github.com/dyninst/dyninst/issues/1730.
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 669659e44c76..b6507772858c 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -39,7 +39,6 @@ set(_public_headers
h/registers/AMDGPU/amdgpu_gfx90a_regs.h
h/registers/AMDGPU/amdgpu_gfx940_regs.h
h/registers/cuda_regs.h
- h/registers/MachRegister.h
h/registers/ppc32_regs.h
h/registers/ppc64_regs.h
h/registers/reg_def.h
@@ -72,12 +71,12 @@ set(_private_headers
src/lprintf.h
src/lru_cache.h
src/MappedFile.h
+ src/registers/MachRegisterCache.h
src/NodeIterator.h
src/ntHeaders.h
src/parseauxv.h
src/pathName.h
src/pool_allocators.h
- src/registers/MachRegister.C
src/sha1.h
src/singleton_object_pool.h
src/stats.h
@@ -111,6 +110,7 @@ set(_sources
src/debug_common.C
src/VariableLocation.C
src/Buffer.C
+ src/registers/MachRegister.C
src/MachSyscall.C)
if(DYNINST_OS_UNIX)
diff --git a/common/src/dyn_regs.C b/common/src/dyn_regs.C
index 3fcd194a71dd..7951dbe753bc 100644
--- a/common/src/dyn_regs.C
+++ b/common/src/dyn_regs.C
@@ -28,8 +28,16 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "registers/MachRegisterCache.h"
+
+namespace Dyninst { namespace registers {
+ // These are used in MachRegister.C
+ name_cache names;
+}}
+
//clang-format: off
#define DYN_DEFINE_REGS
#include "dyn_regs.h"
#undef DYN_DEFINE_REGS
//clang-format: on
+
diff --git a/common/src/registers/MachRegister.C b/common/src/registers/MachRegister.C
index ccd01abc1811..93c020c04415 100644
--- a/common/src/registers/MachRegister.C
+++ b/common/src/registers/MachRegister.C
@@ -1,4 +1,5 @@
#include "common/h/registers/MachRegister.h"
+#include "registers/MachRegisterCache.h"
#include "debug_common.h"
#include "dyn_regs.h"
#include "external/rose/amdgpuInstructionEnum.h"
@@ -10,17 +11,24 @@
#include <unordered_map>
namespace {
- std::unordered_map<signed int, std::string> names;
const std::string invalid_reg_name{"<INVALID_REG>"};
}
+namespace Dyninst { namespace registers {
+ // These are defined in dyn_regs.C to ensure global constructor initialization ordering
+ extern name_cache names;
+ }
+}
+
+
namespace Dyninst {
MachRegister::MachRegister() : reg(0) {}
MachRegister::MachRegister(signed int r) : reg(r) {}
- MachRegister::MachRegister(signed int r, std::string n) : reg(r) { names.emplace(r, std::move(n)); }
+ MachRegister::MachRegister(signed int r, std::string n) : reg(r) {
+ registers::names.emplace(r, std::move(n)); }
unsigned int MachRegister::regClass() const { return reg & 0x00ff0000; }
@@ -106,8 +114,8 @@ namespace Dyninst {
bool MachRegister::isValid() const { return (reg != InvalidReg.reg); }
std::string const& MachRegister::name() const {
- auto iter = names.find(reg);
- if(iter != names.end()) {
+ auto iter = registers::names.find(reg);
+ if(iter != registers::names.end()) {
return iter->second;
}
common_parsing_printf("No MachRegister found with value %x\n", static_cast<unsigned int>(reg));
diff --git a/common/src/dyn_regs.C b/common/src/registers/MachRegisterCache.h
similarity index 80%
copy from common/src/dyn_regs.C
copy to common/src/registers/MachRegisterCache.h
index 3fcd194a71dd..2a74bbde821a 100644
--- a/common/src/dyn_regs.C
+++ b/common/src/registers/MachRegisterCache.h
@@ -28,8 +28,19 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-//clang-format: off
-#define DYN_DEFINE_REGS
-#include "dyn_regs.h"
-#undef DYN_DEFINE_REGS
-//clang-format: on
+#ifndef DYNINST_COMMON_REGISTERS_MACHREGISTERCACHE_H
+#define DYNINST_COMMON_REGISTERS_MACHREGISTERCACHE_H
+
+#include "registers/MachRegister.h"
+
+#include <unordered_map>
+#include <map>
+#include <vector>
+#include <string>
+
+namespace Dyninst { namespace registers {
+ typedef std::unordered_map<signed int, std::string> name_cache;
+}}
+
+
+#endif

36
github-pr1880-ish.patch Normal file
View file

@ -0,0 +1,36 @@
diff --git a/common/h/Annotatable.h b/common/h/Annotatable.h
index 6588e3dd36da..262a193ffbb8 100644
--- a/common/h/Annotatable.h
+++ b/common/h/Annotatable.h
@@ -44,6 +44,7 @@
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
+#include <cstdint>
#include "util.h"
#include "compiler_annotations.h"
diff --git a/instructionAPI/h/ArchSpecificFormatters.h b/instructionAPI/h/ArchSpecificFormatters.h
index b32d4cc14e03..145c604f9619 100644
--- a/instructionAPI/h/ArchSpecificFormatters.h
+++ b/instructionAPI/h/ArchSpecificFormatters.h
@@ -34,6 +34,7 @@
#include <map>
#include <vector>
#include <string>
+#include <cstdint>
#include "Architecture.h"
#include "registers/MachRegister.h"
diff --git a/common/src/arch-x86.h b/common/src/arch-x86.h
index ecdc3dc13..7745306d3 100644
--- a/common/src/arch-x86.h
+++ b/common/src/arch-x86.h
@@ -40,6 +40,7 @@
#include <set>
#include <map>
#include <vector>
+#include <cstdint>
#include "entryIDs.h"
#include "registers/MachRegister.h"
#include "common/src/ia32_locations.h"

23
github-pr1880.patch Normal file
View file

@ -0,0 +1,23 @@
commit 165402aa1640afb394b11a096b38c6bc3a5bf9d0 (github-fche/patch-1)
gpg: Signature made Wed 22 Jan 2025 03:35:55 PM EST
gpg: using RSA key B5690EEEBB952194
gpg: Can't check signature: No public key
Author: Frank Ch. Eigler <fche@elastic.org>
Date: Wed Jan 22 15:35:55 2025 -0500
Update sha1.C: #include <cstdint>
Subject header is needed on gcc15 to compile sha1.C, supplying declaration of types like uint32_t.
diff --git a/common/src/sha1.C b/common/src/sha1.C
index 91e9ad291561..d6e76c5727ac 100644
--- a/common/src/sha1.C
+++ b/common/src/sha1.C
@@ -102,6 +102,7 @@ A million repetitions of "a"
#include <stdio.h>
#include <string.h>
+#include <cstdint>
#include "dyntypes.h"
#include "common/src/sha1.h"

5
plans/ci.fmf Normal file
View file

@ -0,0 +1,5 @@
summary: CI Gating Plan
discover:
how: fmf
execute:
how: tmt

View file

@ -1,2 +1 @@
SHA512 (testsuite-10.1.0.tar.gz) = 47b91ebc0623f672378086a5f8d84e3934bd6b22d8932b12aaad257ccf7eb109505edb63dfbc3eb15aa099fc488a517835412099a77e3e0dd1275b3e3f672b3b
SHA512 (dyninst-10.1.0.tar.gz) = 41d7b6f0fce56be84091cc9796b7fa3295a652f80203b6e246df3a28a7bdc02a11996a38c9ccfb2ea7c18ee937a93020ff31d5d4652fd8082f99167e94b16df6
SHA512 (dyninst-13.0.0.tar.gz) = efa09018c411f6138e6e2cf6510007b29b00ed9e0d643df702303ee0ccb39b1ea1640bba18555f4cb0a7dbab677362c88ffe0eccace62b57860daee9350a4eee

View file

@ -0,0 +1,19 @@
CPP=g++
#DYNINST_ROOT=/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst
LINK=-L/opt/rh/devtoolset-3/root/usr/lib$(BITS)/dyninst -L/opt/rh/devtoolset-3/root/usr/lib$(BITS)/dyninst/lib
# -ldyninstAPI -ldynC -ldl
#LINK=-L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst -L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst/lib -ldyninstAPI -ldl
INCLUDE=-I/opt/rh/devtoolset-3/root/usr/include/dyninst
LINK2=-ldyninstAPI -ldl -lboost_system
all: mutatee mutator
clean:
rm mutatee mutator
mutatee: mutatee.cpp
$(CPP) -g -o mutatee mutatee.cpp
mutator: mutator.cpp
$(CPP) -g -o mutator $(INCLUDE) $(LINK) $(LINK2) mutator.cpp

View file

@ -0,0 +1,49 @@
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
using namespace std;
int a = 0;
void incr(void)
{
a++;
}
void incr2(void)
{
a += 100;
}
int function_name(void)
{
fprintf(stderr, "FUNCTION EXECUTED. VALUE = %i\n", a);
}
int main(int argc, char **argv)
{
int n = 10, i;
FILE *f = fopen("RESULT.log", "w");
if(argc > 1)
{
if((n = atoi(argv[1])) <= 0)
n = 10;
}
else
n = 10;
for(i = 0; i < n; i++)
{
function_name();
sleep(3);
}
if((a > 200) && (a % 100 > 0))
fprintf(f, "MUTATION OK.\n");
else
fprintf(f, "MUTATION FAILED.\n");
fclose(f);
return !a;
}

View file

@ -0,0 +1,115 @@
#include <cstdlib>
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
// dyninst libraries
#include "BPatch.h"
#include "BPatch_addressSpace.h"
#include "BPatch_process.h"
#include "BPatch_function.h"
#include "BPatch_point.h"
//#include "BPatch_flowGraph.h"
using namespace std;
int main(int argc, char **argv)
{
BPatch bpatch1, bpatch2;
int pid;
BPatch_process *app_proc;
BPatch_addressSpace *aspace;
BPatch_image *image;
// check the options
if(argc != 2)
{
cerr << "ERROR ## Missing command line args. Use PID of the process you want to attach.\n";
return 1;
}
pid = atoi(argv[1]);
if(pid == 0)
{
cerr << "ERROR ## Wrong PID " << pid << ", please use another.\n";
return 2;
}
cerr << "TAKE1 A\n";
// let's go...
app_proc = bpatch1.processAttach(NULL, pid);
cerr << "TAKE1 B\n";
aspace = app_proc;
cerr << "TAKE1 C\n";
image = aspace->getImage();
cerr << "TAKE1 D\n";
/* BPatch_Set<BPatch_opCode> access_types;
access_types.insert(BPatch_opLoad);
access_types.insert(BPatch_opStore);
*/
vector<BPatch_function *> functions, incr_functions;
vector<BPatch_point *> *points;
image->findFunction("function_name", functions);
cerr << "TAKE1 E\n";
points = functions[0]->findPoint(BPatch_entry);
cerr << "TAKE1 F\n";
// create snippet
image->findFunction("incr", incr_functions);
cerr << "TAKE1 G\n";
vector<BPatch_snippet *> incr_args;
BPatch_funcCallExpr incr_call(*(incr_functions[0]), incr_args);
aspace->insertSnippet(incr_call, *points);
cerr << "TAKE1 H\n";
app_proc->continueExecution();
cerr << "TAKE1 I\n";
sleep(4);
app_proc->detach(true);
cout << "FIRST MUTATION DONE. MUTATOR IS DOING THE SECOND ONE...\n";
sleep(4);
cerr << "TAKE2 A\n";
// let's go...
app_proc = bpatch2.processAttach(NULL, pid);
cerr << "TAKE2 B\n";
aspace = app_proc;
cerr << "TAKE2 C\n";
image = aspace->getImage();
cerr << "TAKE2 D\n";
/* BPatch_Set<BPatch_opCode> access_types;
access_types.insert(BPatch_opLoad);
access_types.insert(BPatch_opStore);
*/
vector<BPatch_function *> functions2, incr_functions2;
vector<BPatch_point *> *points2;;
image->findFunction("function_name", functions2);
cerr << "TAKE2 E\n";
points2 = functions2[0]->findPoint(BPatch_exit);
cerr << "TAKE2 F\n";
// create snippet
image->findFunction("incr2", incr_functions2);
cerr << "TAKE2 G\n";
vector<BPatch_snippet *> incr_args2;
BPatch_funcCallExpr incr_call2(*(incr_functions2[0]), incr_args2);
aspace->insertSnippet(incr_call2, *points2);
cerr << "TAKE2 H\n";
app_proc->continueExecution();
cerr << "TAKE2 I\n";
app_proc->detach(true);
cout << "SECOND MUTATION DONE. MUTATOR IS GOING...\n";
return 0;
}

View file

@ -0,0 +1,17 @@
CPP=g++
#DYNINST_ROOT=/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst
##LINK=-L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst -L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst/lib -ldyninstAPI -ldynC -ldl
#LINK=-L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst -L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst/lib -ldyninstAPI -ldl
#INCLUDE=-I/opt/rh/devtoolset-2/root/usr/include/dyninst
LINK2=-ldyninstAPI -ldl -lboost_system
all: mutatee mutator
clean:
rm mutatee mutator
mutatee: mutatee.cpp
$(CPP) -g -o mutatee mutatee.cpp
mutator: mutator.cpp
$(CPP) -g -o mutator $(INCLUDE) $(LINK) $(LINK2) mutator.cpp

View file

@ -0,0 +1,6 @@
DYNINSTAPI_RT_LIB=/opt/rh/devtoolset-3/root/usr/lib64/dyninst/libdyninstAPI_RT.so
export DYNINSTAPI_RT_LIB
if [[ ! $LD_LIBRARY_PATH =~ .*dyninst.* ]]; then
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LD_LIBRARY_PATH/dyninst
fi
export LD_LIBRARY_PATH

View file

@ -0,0 +1,44 @@
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
using namespace std;
int a = 0;
void incr(void)
{
a++;
}
int function_name(void)
{
fprintf(stderr, "FUNCTION EXECUTED. VALUE = %i\n", a);
}
int main(int argc, char **argv)
{
int n = 10, i;
FILE *f = fopen("RESULT.log", "w");
if(argc > 1)
{
if((n = atoi(argv[1])) <= 0)
n = 10;
}
else
n = 10;
for(i = 0; i < n; i++)
{
function_name();
sleep(3);
}
if(a)
fprintf(f, "MUTATION OK.\n");
else
fprintf(f, "MUTATION FAILED.\n");
fclose(f);
return !a;
}

View file

@ -0,0 +1,73 @@
#include <cstdlib>
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
// dyninst libraries
#include "BPatch.h"
#include "BPatch_addressSpace.h"
#include "BPatch_process.h"
#include "BPatch_function.h"
#include "BPatch_point.h"
//#include "BPatch_flowGraph.h"
using namespace std;
BPatch bpatch;
int main(int argc, char **argv)
{
int pid;
BPatch_process *app_proc;
BPatch_addressSpace *aspace;
BPatch_image *image;
// check the options
if(argc != 2)
{
cerr << "ERROR ## Missing command line args. Use PID of the process you want to attach.\n";
return 1;
}
pid = atoi(argv[1]);
if(pid == 0)
{
cerr << "ERROR ## Wrong PID " << pid << ", please use another.\n";
return 2;
}
// let's go...
app_proc = bpatch.processAttach(NULL, pid);
aspace = app_proc;
image = aspace->getImage();
/* BPatch_Set<BPatch_opCode> access_types;
access_types.insert(BPatch_opLoad);
access_types.insert(BPatch_opStore);
*/
vector<BPatch_function *> functions, incr_functions;
vector<BPatch_point *> *points;
image->findFunction("function_name", functions);
points = functions[0]->findPoint(BPatch_entry);
// create snippet
image->findFunction("incr", incr_functions);
vector<BPatch_snippet *> incr_args;
BPatch_funcCallExpr incr_call(*(incr_functions[0]), incr_args);
aspace->insertSnippet(incr_call, *points);
app_proc->continueExecution();
#ifdef __PPC__
// PPC detach removes snippets, so wait
bpatch.waitForStatusChange();
#endif
app_proc->detach(true);
cout << "MUTATION DONE. MUTATOR IS GOING...\n";
return 0;
}

View file

@ -0,0 +1,16 @@
summary: The test does basic instrumentation on binaries.
description: ''
contact:
- Michael Petlan <mpetlan@redhat.com>
component:
- dyninst
test: ./runtest.sh
framework: beakerlib
recommend:
- dyninst
- dyninst-devel
- gcc
- gcc-c++
duration: 12m
extra-summary: /tools/dyninst/Sanity/smoke-test
extra-task: /tools/dyninst/Sanity/smoke-test

View file

@ -0,0 +1,207 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/dyninst/Sanity/smoke-test
# Description: The test does basic instrumentation on binaries.
# Author: Michael Petlan <mpetlan@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2013 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
PACKAGE="dyninst"
rlJournalStart
rlPhaseStartSetup
rlRun "TMPD=$(mktemp -d)"
rlRun "cp -r dynamic dynamic-double static $TMPD/"
rlRun "pushd $TMPD"
# load the proper environment - set the variables
# When using dyninst, we have to have LD_LIBRARY_PATH set to dyninst's directory
# and DYNINSTAPI_RT_LIB should keep the path of libdyninstAPI_RT.so.8.0 shared library.
# After having this set properly, an application what uses dyninst, can be compiled and run.
test -e "/usr/lib64" && BITS="64" || BITS=""
ARCH=`rlGetPrimaryArch`
rlAssertRpm $PACKAGE
DYNINST_ROOT="/usr/lib$BITS/dyninst"
INCLUDE="-I/usr/include/dyninst"
LINK="-L/usr/lib$BITS/dyninst -L/usr/lib$BITS/dyninst/lib"
echo $LD_LIBRARY_PATH | grep "$DYNINST_ROOT"
if [ $? -ne 0 ]; then
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DYNINST_ROOT"
fi
# the API runtime library path should be available from rpmquery
if [ `rpmquery -l $PACKAGE.$ARCH | grep API_RT | wc -l` -eq 1 ]; then
# if there's only one file, we may accept that
DYNINSTAPI_RT_LIB=`rpmquery -l $PACKAGE.$ARCH | grep API_RT`
else
# sometimes there're many links to the API_RT lib, so we have to choose the proper file
for rtlib in `rpmquery -l $PACKAGE.$ARCH | grep API_RT`; do
test -L $rtlib || DYNINSTAPI_RT_LIB="$rtlib"
done
fi
export DYNINSTAPI_RT_LIB
if [[ ! $LD_LIBRARY_PATH =~ .*dyninst.* ]]; then
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LD_LIBRARY_PATH/dyninst
fi
export LD_LIBRARY_PATH
# compile both static and dynamic test
for TC in static dynamic dynamic-double; do
cd $TC
rlRun "make BITS=\"$BITS\" DYNINST_ROOT=\"$DYNINST_ROOT\" INCLUDE=\"$INCLUDE\" LINK=\"$LINK\"" 0 "Compiling $TC dyninst example."
cd ..
done
# IMPORTANT: We have to make sure, that some SELinux bools are set right (see dyninst docs)
#
# We need:
# allow_execmod --> on
# allow_execstack --> on
# deny_ptrace --> off
#
# Note: The bool deny_ptrace is not present in RHEL yet.
#
SELINUX_STATUS=`sestatus | grep "SELinux status" | awk '{ print $3; }'`
if [[ "$SELINUX_STATUS" == "enabled" ]]; then
rlLog "SELINUX IS ENABLED."
SEBOOL_ALLOW_EXECMOD=`getsebool allow_execmod`
SEBOOL_ALLOW_EXECSTACK=`getsebool allow_execstack`
SEBOOL_DENY_PTRACE=`getsebool deny_ptrace`
if [[ "$SEBOOL_ALLOW_EXECMOD" =~ "> off" ]]; then
rlLog "SELINUX: We need to set allow_execmod to on."
setsebool allow_execmod on
SEBOOL_ALLOW_EXECMOD="off"
else
rlLog "SELINUX: $SEBOOL_ALLOW_EXECMOD -- already OK."
fi
if [[ "$SEBOOL_ALLOW_EXECSTACK" =~ "> off" ]]; then
rlLog "SELINUX: We need to set allow_execstack to on."
setsebool allow_execstack on
SEBOOL_ALLOW_EXECSTACK="off"
else
rlLog "SELINUX: $SEBOOL_ALLOW_EXECSTACK -- already OK."
fi
if [[ "$SEBOOL_DENY_PTRACE" =~ "> on" ]]; then
rlLog "SELINUX: We need to set deny_ptrace to off."
setsebool deny_ptrace off
SEBOOL_DENY_PTRACE="on"
else
if [ -z "$SEBOOL_DENY_PTRACE" ]; then
rlLog "SELINUX: deny_ptrace does not exist -- OK."
else
rlLog "SELINUX: $SEBOOL_DENY_PTRACE -- already OK."
fi
fi
else
rlLog "SELINUX IS DISABLED. We do not have to change anything."
fi
# Checking for lahf instruction support (bz1134843 workaround)
ARCH=`uname -i`
if [[ "$ARCH" =~ "86" ]]; then
IS_LAHF_SUPPORTED=`cat /proc/cpuinfo | grep lahf`
if [ -z "$IS_LAHF_SUPPORTED" ]; then
rlLogWarning "The CPU does not support needed LAHF instruction."
fi
fi
rlPhaseEnd
rlPhaseStartTest "Testing static instrumentation"
cd static
rlRun "./mutator"
rlAssertExists "mutated"
RESULT=`./mutated`
if [[ "$RESULT" == "MUTATION OK." ]]; then
rlPass "Instrumentation PASSed."
else
rlFail "Instrumentation FAILed."
fi
cd ..
rlPhaseEnd
rlPhaseStartTest "Testing dynamic instrumentation"
cd dynamic
./mutatee 10 &
PID=$!
# export DYNINST_DEBUG_STARTUP=1
# export DYNINST_DEBUG_RTLIB=1
# export DYNINST_DEBUG_CRASH=1
# export DYNINST_DEBUG_BPATCH=1
./mutator $PID
sleep 50
RESULT=`cat RESULT.log`
if [[ "$RESULT" == "MUTATION OK." ]]; then
rlPass "Instrumentation PASSed."
else
rlFail "Instrumentation FAILed."
fi
cd ..
rlPhaseEnd
rlPhaseStartTest "Testing dynamic double instrumentation"
# This case needs to have the DYNINSTAPI_RT_LIB variable pointing to a regular file
# not to symlink. So it has to be hacked a little
export DYNINSTAPI_RT_LIB=`readlink -fn $DYNINSTAPI_RT_LIB`
cd dynamic-double
./mutatee 10 &
PID=$!
# export DYNINST_DEBUG_STARTUP=1
# export DYNINST_DEBUG_RTLIB=1
# export DYNINST_DEBUG_CRASH=1
# export DYNINST_DEBUG_BPATCH=1
./mutator $PID
sleep 50
RESULT=`cat RESULT.log`
if [[ "$RESULT" == "MUTATION OK." ]]; then
rlPass "Instrumentation PASSed."
else
rlFail "Instrumentation FAILed."
fi
cd ..
rlPhaseEnd
rlPhaseStartCleanup
rlRun "popd"
rlRun "rm -r $TMPD"
# restore the SELinux bools, if they were changed
if [[ "$SEBOOL_ALLOW_EXECMOD" == "off" ]]; then
rlLog "Restoring SELinux bool allow_execmod to $SEBOOL_ALLOW_EXECMOD."
setsebool allow_execmod $SEBOOL_ALLOW_EXECMOD
fi
if [[ "$SEBOOL_ALLOW_EXECSTACK" == "off" ]]; then
rlLog "Restoring SELinux bool allow_execstack to $SEBOOL_ALLOW_EXECSTACK."
setsebool allow_execstack $SEBOOL_ALLOW_EXECSTACK
fi
if [[ "$SEBOOL_DENY_PTRACE" == "on" ]]; then
rlLog "Restoring SELinux bool deny_ptrace to $SEBOOL_DENY_PTRACE."
setsebool deny_ptrace $SEBOOL_DENY_PTRACE
fi
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View file

@ -0,0 +1,17 @@
CPP=g++
#DYNINST_ROOT=/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst
##LINK=-L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst -L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst/lib -ldyninstAPI -ldynC -ldl
#LINK=-L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst -L/opt/rh/devtoolset-2/root/usr/lib$(BITS)/dyninst/lib -ldyninstAPI -ldl
#INCLUDE=-I/opt/rh/devtoolset-2/root/usr/include/dyninst
LINK2=-ldyninstAPI -ldl -lboost_system
all: mutatee mutator
clean:
rm mutatee mutator mutated
mutatee: mutatee.cpp
$(CPP) -g -o mutatee mutatee.cpp
mutator: mutator.cpp
$(CPP) -g -o mutator $(INCLUDE) $(LINK) $(LINK2) mutator.cpp

View file

@ -0,0 +1,6 @@
DYNINSTAPI_RT_LIB=/opt/rh/devtoolset-3/root/usr/lib64/dyninst/libdyninstAPI_RT.so
export DYNINSTAPI_RT_LIB
if [[ ! $LD_LIBRARY_PATH =~ .*dyninst.* ]]; then
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LD_LIBRARY_PATH/dyninst
fi
export LD_LIBRARY_PATH

View file

@ -0,0 +1,32 @@
#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <iostream>
using namespace std;
int a = 0;
void incr(void)
{
a++;
}
int function_name(void)
{
int i;
sleep(3);
if(a)
printf("MUTATION OK.\n");
else
printf("MUTATION FAILED.\n");
return a;
}
int main(int argc, char **argv)
{
function_name();
}

View file

@ -0,0 +1,69 @@
#include <cstdlib>
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
// dyninst libraries
#include "BPatch.h"
#include "BPatch_addressSpace.h"
#include "BPatch_process.h"
#include "BPatch_function.h"
#include "BPatch_point.h"
//#include "BPatch_flowGraph.h"
using namespace std;
BPatch bpatch;
int main(int argc, char **argv)
{
int pid;
BPatch_binaryEdit *app_bin;
BPatch_addressSpace *aspace;
BPatch_image *image;
/* // check the options
if(argc != 2)
{
cerr << "ERROR ## Missing command line args. Use PID of the process you want to attach.\n";
return 1;
}
pid = atoi(argv[1]);
if(pid == 0)
{
cerr << "ERROR ## Wrong PID " << pid << ", please use another.\n";
return 2;
}
*/
// let's go...
app_bin = bpatch.openBinary("mutatee");
aspace = app_bin;
image = aspace->getImage();
/* BPatch_Set<BPatch_opCode> access_types;
access_types.insert(BPatch_opLoad);
access_types.insert(BPatch_opStore);
*/
vector<BPatch_function *> functions, incr_functions;
vector<BPatch_point *> *points;
image->findFunction("function_name", functions);
points = functions[0]->findPoint(BPatch_entry);
// create snippet
image->findFunction("incr", incr_functions);
vector<BPatch_snippet *> incr_args;
BPatch_funcCallExpr incr_call(*(incr_functions[0]), incr_args);
aspace->insertSnippet(incr_call, *points);
app_bin->writeFile("mutated");
cout << "MUTATION DONE. MUTATOR IS GOING...\n";
return 0;
}

View file

@ -0,0 +1,19 @@
summary: Dyninst upstream testsuite wrapper
description: ''
contact: Martin Cermak <mcermak@redhat.com>
component:
- dyninst
test: ./runtest.sh
framework: beakerlib
recommend:
- dyninst
- dyninst-devel
- dyninst-testsuite
- boost
- boost-devel
- elfutils-libelf-devel
- libdwarf-devel
- gcc-c++
duration: 360m
extra-summary: /tools/dyninst/Sanity/testsuite
extra-task: /tools/dyninst/Sanity/testsuite

View file

@ -0,0 +1,69 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/dyninst/Sanity/testsuite
# Description: Basic functionality covering testsuite
# Author: Michael Petlan <mpetlan@redhat.com>
# Martin Cermak <mcermak@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2013 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
PACKAGE=${PACKAGE:-dyninst}
TESTDIR=${TESTDIR:-/usr/lib64/dyninst/testsuite}
# Tests known to fail
SKIPLIST=test_thread_2,pc_thread,pc_tls,test_reloc,test_thread_3,\
test_thread_5,test_thread_6,test_thread_8
rlJournalStart
rlPhaseStartSetup
rlRun "rpm -q $PACKAGE $PACKAGE-testsuite"
DYNINSTAPI_RT_LIB=$(rpm -ql $PACKAGE | fgrep libdyninstAPI_RT.so | sort | tail -1)
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$TESTDIR"
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$(dirname $DYNINSTAPI_RT_LIB)"
LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}
export DYNINSTAPI_RT_LIB
export LD_LIBRARY_PATH
rlRun "setsebool allow_execmod on"
rlRun "setsebool allow_execstack on"
rlRun "setsebool deny_ptrace off"
rlRun "pushd $TESTDIR"
rlPhaseEnd
rlPhaseStartTest
rlRun "./runTests -v++ -allmode -allcompilers -allopt -exclude $SKIPLIST"
rlPhaseEnd
rlPhaseStartCleanup
rlRun "popd"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View file

@ -1,29 +0,0 @@
--- 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
@@ -96,21 +96,21 @@ test_results_t test_instruction_farcall_Mutator::executeTest()
if(decodedInsns.size() != expectedInsns) // six valid, one invalid
{
logerror("FAILED: Expected %d instructions, decoded %d\n", expectedInsns, decodedInsns.size());
- for(std::vector<Instruction::Ptr>::iterator curInsn = decodedInsns.begin();
+ for(std::vector<Instruction>::iterator curInsn = decodedInsns.begin();
curInsn != decodedInsns.end();
++curInsn)
{
- logerror("\t%s\t", (*curInsn)->format().c_str());
- for(unsigned j = 0; j < (*curInsn)->size(); ++j)
+ logerror("\t%s\t", (*curInsn).format().c_str());
+ for(unsigned j = 0; j < (*curInsn).size(); ++j)
{
- logerror("%x ", (*curInsn)->rawByte(j));
+ logerror("%x ", (*curInsn).rawByte(j));
}
logerror("\n");
}
return FAILED;
}
- if(decodedInsns.back() && decodedInsns.back()->isValid())
+ if(decodedInsns.size() > 0 && decodedInsns.back().isValid())
{
logerror("FAILED: Expected instructions to end with an invalid instruction, but they didn't");
return FAILED;

View file

@ -1,15 +0,0 @@
--- 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];

View file

@ -1,11 +0,0 @@
--- testsuite-9.3.0/src/JUnitOutputDriver.cpp.nullptr 2016-12-19 14:55:38.000000000 -0800
+++ testsuite-9.3.0/src/JUnitOutputDriver.cpp 2017-02-15 11:19:22.628056889 -0800
@@ -35,7 +35,7 @@ void JUnitOutputDriver::startNewTest(std
{
std::stringstream suitename;
suitename << last_group->modname;
- if(last_group->mutatee != '\0') suitename << "." << last_group->mutatee;
+ if(last_group->mutatee != nullptr) suitename << "." << last_group->mutatee;
log(HUMAN, "<testsuite name=\"%s\" errors=\"%d\" skipped=\"%d\" tests=\"%d\" failures=\"%d\">\n",
suitename.str().c_str(), group_errors, group_skips, group_tests, group_failures);
log(HUMAN, group_output.str().c_str());