diff --git a/.fmf/version b/.fmf/version deleted file mode 100644 index d00491f..0000000 --- a/.fmf/version +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/.gitignore b/.gitignore index 80b3eba..925d489 100644 --- a/.gitignore +++ b/.gitignore @@ -21,19 +21,3 @@ /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 diff --git a/Object-elf.patch b/Object-elf.patch new file mode 100644 index 0000000..c579ddb --- /dev/null +++ b/Object-elf.patch @@ -0,0 +1,29 @@ +# 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 funcs; ++ dyn_hash_map >::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) diff --git a/addrtranslate-sysv.patch b/addrtranslate-sysv.patch new file mode 100644 index 0000000..3de3a53 --- /dev/null +++ b/addrtranslate-sysv.patch @@ -0,0 +1,12 @@ +# 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; diff --git a/dyninst-10.1.0-aarch-regs.patch b/dyninst-10.1.0-aarch-regs.patch new file mode 100644 index 0000000..814137c --- /dev/null +++ b/dyninst-10.1.0-aarch-regs.patch @@ -0,0 +1,309 @@ +--- dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/BPatch_addressSpace.C.orig 2019-05-16 14:40:05.000000000 -0400 ++++ dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/BPatch_addressSpace.C 2019-11-06 10:20:08.567523510 -0500 +--- BPatch_addressSpace.C.orig 2019-05-16 14:40:05.000000000 -0400 ++++ BPatch_addressSpace.C 2019-11-15 18:10:31.186122654 -0500 +@@ -1050,5 +1050,2 @@ + return true; +- +- regs = registers_; +- return true; + } +--- dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/emit-aarch64.C.orig 2019-05-16 14:40:05.000000000 -0400 ++++ dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/emit-aarch64.C 2019-11-06 10:20:08.567523510 -0500 +@@ -276,9 +276,2 @@ + +- if (register_num == REG_SP) { +- insnCodeGen::generateAddSubImmediate(gen, insnCodeGen::Add, 0, +- TRAMP_FRAME_SIZE_64, destination, REG_SP, true); +- +- return; +- } +- + if (src->spilledState == registerSlot::unspilled) +@@ -293,3 +286,3 @@ + // its on the stack so load it. +- insnCodeGen::restoreRegister(gen, destination, offset + (register_num * gen.width()), ++ insnCodeGen::restoreRegister(gen, destination, offset + (src->encoding() * gen.width()), + insnCodeGen::Offset); +@@ -298 +291,7 @@ + ++bool EmitterAARCH64::emitMoveRegToReg(Register src, Register dest, codeGen &gen) ++{ ++ insnCodeGen::generateMove(gen, dest, src); ++ return true; ++} ++ +--- dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/emit-aarch64.h.orig 2019-05-16 14:40:05.000000000 -0400 ++++ dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/emit-aarch64.h 2019-11-06 10:20:08.567523510 -0500 +@@ -107,6 +107,3 @@ + +- virtual bool emitMoveRegToReg(Register, Register, codeGen &) { +- assert(0); +- return 0; +- } ++ virtual bool emitMoveRegToReg(Register, Register, codeGen &); + +--- dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/inst-aarch64.C.orig 2019-05-16 14:40:05.000000000 -0400 ++++ dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/inst-aarch64.C 2019-11-06 10:20:08.567523510 -0500 +@@ -108,2 +108,4 @@ + registers.push_back(new registerSlot(r30, "r30", true, registerSlot::liveAlways, registerSlot::GPR)); ++ // SP is r31, but also could be considered special. But now it's being added as GPR ++ registers.push_back(new registerSlot(sp, "r31", true, registerSlot::liveAlways, registerSlot::GPR)); + +@@ -111,3 +113,3 @@ + registers.push_back(new registerSlot(lr, "lr", true, registerSlot::liveAlways, registerSlot::SPR)); +- registers.push_back(new registerSlot(sp, "sp", true, registerSlot::liveAlways, registerSlot::SPR)); ++ //registers.push_back(new registerSlot(sp, "sp", true, registerSlot::liveAlways, registerSlot::SPR)); + registers.push_back(new registerSlot(pstate, "nzcv", true, registerSlot::liveAlways, registerSlot::SPR)); +@@ -183,9 +185,16 @@ + registerSlot *reg = theRegSpace->GPRs()[idx]; +- // We always save FP and LR for stack walking out of instrumentation +- if (reg->liveState == registerSlot::live || reg->number == REG_FP || reg->number == REG_LR) { ++ // We always save FP and LR for stack walking out of instrumentation ++ //if (reg->liveState == registerSlot::live || reg->number == REG_FP || reg->number == REG_LR) { + int offset_from_sp = offset + (reg->encoding() * gen.width()); +- insnCodeGen::saveRegister(gen, reg->number, offset_from_sp); ++ if(reg->number != registerSpace::sp) ++ insnCodeGen::saveRegister(gen, reg->number, offset_from_sp); ++ else{ ++ // mov SP to x0 ++ insnCodeGen::generateAddSubImmediate(gen, insnCodeGen::Add, 0, ++ TRAMP_FRAME_SIZE_64, REG_SP, 0, true); ++ insnCodeGen::saveRegister(gen, 0, offset_from_sp); ++ } + theRegSpace->markSavedRegister(reg->number, offset_from_sp); + ret++; +- } ++ //} + } +@@ -283,2 +292,4 @@ + if(reg->liveState == registerSlot::spilled) { ++ if(reg->number == registerSpace::sp) ++ continue; + //#sasha this should be GPRSIZE_64 and not gen.width +@@ -602,4 +613,2 @@ + { +- //#sasha This function implementation is experimental. +- + if (op != callOp) { +@@ -623,4 +632,2 @@ + vector savedRegs; +- +- // save r0-r7 + for(size_t id = 0; id < gen.rs()->numGPRs(); id++) +@@ -653,2 +660,6 @@ + assert(reg!=REG_NULL); ++ ++ // mark reg offLimits so getScratchRegister won't use it ++ registerSlot *regS = gen.rs()->GPRs()[id]; ++ regS->offLimits = true; + } +@@ -691,3 +702,2 @@ + +- // r7-r0 + for (signed int ui = savedRegs.size()-1; ui >= 0; ui--) { +@@ -697,2 +707,9 @@ + ++ // Making operand's reg not offLimits again ++ for(size_t id = 0; id < operands.size(); id++) ++ { ++ registerSlot *reg = gen.rs()->GPRs()[id]; ++ reg->offLimits = false; ++ } ++ + return 0; +@@ -1426,4 +1443,53 @@ + bool EmitterAARCH64Stat::emitPLTCall(func_instance *callee, codeGen &gen) { +- assert(0); //Not implemented +- return emitPLTCommon(callee, true, gen); ++ /* ++ Address dest = getInterModuleFuncAddr(callee, gen); ++ //Register scr = gen.rs()->getScratchRegister(gen); ++ //Register lr = gen.rs()->getScratchRegister(gen); ++ //Address pc = emitMovePCToReg(scr, gen); ++ ++ Address varOffset = dest - gen.currAddr(); ++ //printf("VarOffset = %d\n", varOffset); ++ //emitLoadRelative(lr, varOffset, scr, gen.width(), gen); ++ ++ insnCodeGen::generateBranch(gen, gen.currAddr(), dest, true); ++ ++ return true; ++ */ ++ ++ ++ Address dest = getInterModuleFuncAddr(callee, gen); ++ Register scr = gen.rs()->getScratchRegister(gen); ++ Register lr = gen.rs()->getScratchRegister(gen); ++ //Register scr = gen.rs()->getRegByName("r2"); ++ //Register lr = gen.rs()->getRegByName("r3"); ++ emitMovePCToReg(scr, gen); ++ ++ Address varOffset = dest - gen.currAddr() + 4; ++ //printf("VarOffset = %d\n", varOffset); ++ emitLoadRelative(lr, varOffset, scr, gen.width(), gen); ++ insnCodeGen::generateMemAccess(gen, insnCodeGen::Load, lr, lr, 0, 8, insnCodeGen::Offset); ++ ++ // indirect branch ++ instruction branchInsn; ++ branchInsn.clear(); ++ ++ //Set bits which are 0 for both BR and BLR ++ INSN_SET(branchInsn, 0, 4, 0); ++ INSN_SET(branchInsn, 10, 15, 0); ++ ++ //Set register ++ INSN_SET(branchInsn, 5, 9, lr); ++ ++ //Set other bits. Basically, these are the opcode bits. ++ //The only difference between BR and BLR is that bit 21 is 1 for BLR. ++ INSN_SET(branchInsn, 16, 31, BRegOp); ++ INSN_SET(branchInsn, 21, 21, 1); ++ insnCodeGen::generate(gen, branchInsn); ++ //insnCodeGen::generateBranch(gen, gen.currAddr(), lr, true); ++ //insnCodeGen::generateBranch(gen, gen.currAddr(), gen.currAddr() +varOffset, true); ++ ++ return true; ++ ++ //assert(0); //Not implemented ++ //return emitPLTCommon(callee, true, gen); + } +@@ -1431,4 +1497,81 @@ + bool EmitterAARCH64Stat::emitPLTJump(func_instance *callee, codeGen &gen) { +- assert(0); //Not implemented +- return emitPLTCommon(callee, false, gen); ++ /* ++ Address dest = getInterModuleFuncAddr(callee, gen); ++ //Register scr = gen.rs()->getScratchRegister(gen); ++ //Register lr = gen.rs()->getScratchRegister(gen); ++ Register scr = gen.rs()->getRegByName("r2"); ++ Register lr = gen.rs()->getRegByName("r3"); ++ //Address pc = emitMovePCToReg(scr, gen); ++ ++ Address varOffset = dest - gen.currAddr(); ++ //printf("VarOffset = %d\n", varOffset); ++ emitLoadRelative(lr, varOffset, scr, gen.width(), gen); ++ insnCodeGen::generateMemAccess(gen, insnCodeGen::Load, lr, lr, 0, 8, insnCodeGen::Offset); ++ ++ insnCodeGen::generateBranch(gen, gen.currAddr(), lr, false); ++ ++ return true; ++ */ ++ ++ /* ++ Address dest = getInterModuleFuncAddr(callee, gen); ++ Register scr = gen.rs()->getScratchRegister(gen); ++ Register lr = gen.rs()->getScratchRegister(gen); ++ Address pc = emitMovePCToReg(scr, gen); ++ ++ Address varOffset = dest - pc; ++ printf("VarOffset = %d\n", varOffset); ++ emitLoadRelative(lr, varOffset, scr, gen.width(), gen); ++ ++ insnCodeGen::generateBranch(gen, gen.currAddr(), lr, false); ++ return true; ++ */ ++ ++ /* ++ Address dest = getInterModuleFuncAddr(callee, gen); ++ Register scr = gen.rs()->getScratchRegister(gen); ++ Register lr = gen.rs()->getScratchRegister(gen); ++ Address varOffset = dest - gen.currAddr(); ++ emitLoadRelative(lr, varOffset, scr, gen.width(), gen); ++ insnCodeGen::generateBranch(gen, gen.currAddr(), gen.currAddr() +varOffset, false); ++ ++ return true; ++ */ ++ ++ ++ Address dest = getInterModuleFuncAddr(callee, gen); ++ Register scr = gen.rs()->getScratchRegister(gen); ++ Register lr = gen.rs()->getScratchRegister(gen); ++ //Register scr = gen.rs()->getRegByName("r2"); ++ //Register lr = gen.rs()->getRegByName("r3"); ++ emitMovePCToReg(scr, gen); ++ ++ Address varOffset = dest - gen.currAddr() + 4; ++ //printf("VarOffset = %d\n", varOffset); ++ emitLoadRelative(lr, varOffset, scr, gen.width(), gen); ++ insnCodeGen::generateMemAccess(gen, insnCodeGen::Load, lr, lr, 0, 8, insnCodeGen::Offset); ++ ++ // indirect branch ++ instruction branchInsn; ++ branchInsn.clear(); ++ ++ //Set bits which are 0 for both BR and BLR ++ INSN_SET(branchInsn, 0, 4, 0); ++ INSN_SET(branchInsn, 10, 15, 0); ++ ++ //Set register ++ INSN_SET(branchInsn, 5, 9, lr); ++ ++ //Set other bits. Basically, these are the opcode bits. ++ //The only difference between BR and BLR is that bit 21 is 1 for BLR. ++ INSN_SET(branchInsn, 16, 31, BRegOp); ++ INSN_SET(branchInsn, 21, 21, 0); ++ insnCodeGen::generate(gen, branchInsn); ++ //insnCodeGen::generateBranch(gen, gen.currAddr(), lr, true); ++ //insnCodeGen::generateBranch(gen, gen.currAddr(), gen.currAddr() +varOffset, true); ++ ++ return true; ++ ++ //assert(0); //Not implemented ++ //return emitPLTCommon(callee, false, gen); + } +--- dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/inst-aarch64.h.orig 2019-05-16 14:40:05.000000000 -0400 ++++ dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/inst-aarch64.h 2019-11-06 10:20:08.567523510 -0500 +@@ -74,3 +74,3 @@ + //TODO Fix for ARM +-#define GPRSAVE_64 (31*GPRSIZE_64) ++#define GPRSAVE_64 (32*GPRSIZE_64) + #define FPRSAVE_64 (32*FPRSIZE_64) +--- dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/registerSpace.C.orig 2019-05-16 14:40:05.000000000 -0400 ++++ dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/registerSpace.C 2019-11-06 10:20:08.567523510 -0500 +@@ -110,2 +110,4 @@ + #elif defined(arch_aarch64) ++ if(number == registerSpace::sp) ++ return REG_SP; + switch (type) { +@@ -342,3 +344,3 @@ + +- reg->markUsed(true); ++ //reg->markUsed(true); + gen.markRegDefined(reg->number); + +--- dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/dynProcess.C.orig ++++ dyninst-10.1.0/dyninst-10.1.0/dyninstAPI/src/dynProcess.C +@@ -3243,25 +3243,13 @@ bool PCProcess::continueSyncRPCThreads() { + } + + void PCProcess::addTrap(Address from, Address to, codeGen &gen) { +- map::iterator breakIter = +- installedCtrlBrkpts.find(from); +- +- if( breakIter != installedCtrlBrkpts.end() ) { +- if( !pcProc_->rmBreakpoint(from, breakIter->second) ) { +- // Oops? +- } +- installedCtrlBrkpts.erase(breakIter); +- } +- +- Breakpoint::ptr newBreak = Breakpoint::newTransferBreakpoint(to); +- newBreak->setSuppressCallbacks(true); +- +- if( !pcProc_->addBreakpoint(from, newBreak) ) { +- // Oops? +- } +- +- installedCtrlBrkpts.insert(make_pair(from, newBreak)); +- gen.invalidate(); ++ gen.invalidate(); ++ gen.allocate(4); ++ gen.setAddrSpace(this); ++ gen.setAddr(from); ++ insnCodeGen::generateTrap(gen); ++ trapMapping.addTrapMapping(from, to, true); ++ springboard_cerr << "Generated springboard trap " << hex << from << "->" << to << dec << endl; + } + + void PCProcess::removeTrap(Address from) { diff --git a/dyninst-10.1.0-result.patch b/dyninst-10.1.0-result.patch new file mode 100644 index 0000000..2738cf2 --- /dev/null +++ b/dyninst-10.1.0-result.patch @@ -0,0 +1,28 @@ +--- 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); diff --git a/dyninst.spec b/dyninst.spec index 833197a..6a225ab 100644 --- a/dyninst.spec +++ b/dyninst.spec @@ -1,35 +1,40 @@ Summary: An API for Run-time Code Generation -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 +License: LGPLv2+ Name: dyninst -Group: Development/Libraries -Release: 8%{?dist} -URL: https://www.paradyn.org -Version: 13.0.0 -ExclusiveArch: x86_64 ppc64le aarch64 +Release: 4%{?dist} +URL: http://www.dyninst.org +Version: 10.1.0 +ExclusiveArch: %{ix86} x86_64 ppc64le aarch64 -Source0: dyninst-13.0.0.tar.gz -Patch1: github-pr1721.patch -Patch2: github-pr1880.patch -Patch3: github-pr1880-ish.patch -Patch4: github-pr1730.patch +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 +Patch4: dyninst-10.1.0-aarch-regs.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 -# https://fedoraproject.org/wiki/Changes/Linker_Error_On_Security_Issues -# may impact the RT library -%undefine _hardened_linker_errors +# 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 +} %description @@ -43,40 +48,50 @@ 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 -pushd %{dyninst_base} -%patch -P1 -p1 -%patch -P2 -p1 -%patch -P3 -p1 -%patch -P4 -p1 -popd +%patch1 -p1 -b.result +%patch2 -p1 -b.gettid +%patch3 -p1 -b.386 +%patch4 -p1 -b.aarch # 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 @@ -84,34 +99,46 @@ 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 --log-level=DEBUG \ - -DENABLE_DEBUGINFOD=1 \ +%cmake \ + -DENABLE_STATIC_LIBS=1 \ + -DINSTALL_LIB_DIR:PATH=%{_libdir}/dyninst \ + -DINSTALL_INCLUDE_DIR:PATH=%{_includedir}/dyninst \ + -DINSTALL_CMAKE_DIR:PATH=%{_libdir}/cmake/Dyninst \ -DCMAKE_BUILD_TYPE=None \ -DCMAKE_SKIP_RPATH:BOOL=YES \ - -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 + . +%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 %install cd %{dyninst_base} -%cmake_install -v -v -v +%make_install -# 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 +# 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 -# this is a testsuite-like binary, not needed in main package -rm -f "%{buildroot}%{_bindir}/parseThat" +cd ../%{testsuite_base} +%make_install mkdir -p %{buildroot}/etc/ld.so.conf.d echo "%{_libdir}/dyninst" > %{buildroot}/etc/ld.so.conf.d/%{name}-%{_arch}.conf @@ -124,7 +151,6 @@ 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 @@ -147,148 +173,22 @@ 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 - 13.0.0-8 -- Rebuilt for Boost 1.90 - -* Wed Aug 20 2025 Jerry James - 13.0.0-7 -- Rebuild for tbb 2022.2.0 - -* Wed Jul 23 2025 Fedora Release Engineering - 13.0.0-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Thu Feb 06 2025 Frank Ch. Eigler - 13.0.0-5 -- Backported github PR/1370 for constructor ordering. - -* Thu Jan 23 2025 Frank Ch. Eigler - 13.0.0-4 -- Rebuilt for F42 FTBFS with 13.0.0 + backported fixes + sans i686 - -* Thu Jan 16 2025 Fedora Release Engineering - 12.3.0-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Wed Jul 17 2024 Fedora Release Engineering - 12.3.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jan 24 2024 Fedora Release Engineering - 12.3.0-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 12.3.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Jan 17 2024 Jonathan Wakely - 12.3.0-4 -- Rebuilt for Boost 1.83 - -* Wed Jul 19 2023 Fedora Release Engineering - 12.3.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Tue Jul 11 2023 Frank Ch. Eigler - 12.3.0-2 -- side-tag respin - -* Tue Jul 04 2023 Frank Ch. Eigler - 12.3.0-1 -- migrated to SPDX license - -* Tue Jul 04 2023 Orion Poplawski - 12.3.0-1 -- Update to 12.3.0 -- Add patch for cmake 3.27 support - -* Tue Jun 27 2023 Jonathan Wakely - 12.2.0-5 -- Patch for oneTBB (#2036372) - -* Thu Feb 23 2023 Frank Ch. Eigler - 12.2.0-4 -- rhbz2173030: ftbfs with gcc 13 - -* Mon Feb 20 2023 Jonathan Wakely - 12.2.0-3 -- Rebuilt for Boost 1.81 - -* Thu Jan 19 2023 Fedora Release Engineering - 12.2.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Tue Oct 4 2022 William Cohen - 12.2.0-1 -- Update to 12.2.0 - -* Wed Aug 03 2022 Stan Cox - 12.1.0-4 -- Explicitly include time.h as no longer pulls it in - -* Thu Jul 21 2022 Fedora Release Engineering - 12.1.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Wed May 04 2022 Thomas Rodgers - 12.1.0-2 -- Rebuilt for Boost 1.78 - -* Thu Mar 10 2022 William Cohen - 12.1.0-1 -- Update to 12.1.0 - -* Sat Mar 05 2022 Orion Poplawski - 12.0.1-4 -- Fix cmake build dir - -* Mon Feb 07 2022 Stan Cox - 12.0.1-3 -- Quiesce dwarf 5 warnings - -* Thu Jan 20 2022 Fedora Release Engineering - 12.0.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Mon Jan 10 2022 Stan Cox - 12.0.1-1 -- Update to 12.0.1 - -* Tue Nov 09 2021 Stan Cox - 11.0.1-4 -- Do not create reloc for aarch64 static calls - -* Fri Aug 06 2021 Jonathan Wakely - 11.0.1-3 -- Rebuilt for Boost 1.76 - -* Wed Jul 21 2021 Fedora Release Engineering - 11.0.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu Jul 08 2021 Stan Cox - 11.0.1 -- Update to 11.0.1 - -* Fri Apr 30 2021 Stan Cox - 11.0.0 -- Update to 11.0.0 - -* Tue Mar 30 2021 Jonathan Wakely - 10.2.1-6 -- Rebuilt for removed libstdc++ symbol (#1937698) - -* Fri Jan 29 2021 Frank Ch. Eigler - 10.2.1-5 -- Rebuilt for Boost 1.75 for sure, via buildrequire version constraints - -* Tue Jan 26 2021 Fedora Release Engineering - 10.2.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Fri Jan 22 2021 Jonathan Wakely - 10.2.1-3 -- Rebuilt for Boost 1.75 - -* Tue Nov 10 2020 Stan Cox - 10.2.1-2 -- Enable debuginfod - -* Wed Oct 28 2020 Stan Cox - 10.2.1-1 -- Update to 10.2.1 - -* Tue Oct 27 2020 Jeff Law - 10.2.0-2 -- Fix C++17 issue caught by gcc-11 - -* Tue Sep 01 2020 Stan Cox - 10.2.0-1 -- Update to 10.2.0 - -* Mon Aug 10 2020 Orion Poplawski - 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 - 10.1.0-9 -- Second attempt - Rebuilt for - https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 27 2020 Fedora Release Engineering - 10.1.0-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Jul 15 2020 Stan Cox - 10.1.0-7 -- Do not build static versions of the dyninst libraries. - -* Fri May 29 2020 Jonathan Wakely - 10.1.0-6 -- Rebuilt for Boost 1.73 - -* Tue Jan 28 2020 Fedora Release Engineering - 10.1.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - * Fri Nov 15 2019 Stan Cox - 10.1.0-4 - Fix rhbz963475 dyninst must be ported to aarch64 diff --git a/gating.yaml b/gating.yaml deleted file mode 100644 index ce3cdc1..0000000 --- a/gating.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- !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} diff --git a/github-pr1721.patch b/github-pr1721.patch deleted file mode 100644 index 3fde0c9..0000000 --- a/github-pr1721.patch +++ /dev/null @@ -1,55 +0,0 @@ -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 -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 "$") - --install(TARGETS parseThat RUNTIME DESTINATION bin) -+install(TARGETS parseThat RUNTIME DESTINATION "${DYNINST_INSTALL_BINDIR}") diff --git a/github-pr1730.patch b/github-pr1730.patch deleted file mode 100644 index 72c667e..0000000 --- a/github-pr1730.patch +++ /dev/null @@ -1,151 +0,0 @@ -commit eae798d4e5f938cb85758571dbab9afbbea7b5d2 (HEAD -> v13.0.0) -Author: Frank Ch. Eigler -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 - 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 - - namespace { -- std::unordered_map names; - const std::string invalid_reg_name{""}; - } - -+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(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 -+#include -+#include -+#include -+ -+namespace Dyninst { namespace registers { -+ typedef std::unordered_map name_cache; -+}} -+ -+ -+#endif diff --git a/github-pr1880-ish.patch b/github-pr1880-ish.patch deleted file mode 100644 index 77e763f..0000000 --- a/github-pr1880-ish.patch +++ /dev/null @@ -1,36 +0,0 @@ -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 - #include - #include -+#include - #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 - #include - #include -+#include - #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 - #include - #include -+#include - #include "entryIDs.h" - #include "registers/MachRegister.h" - #include "common/src/ia32_locations.h" diff --git a/github-pr1880.patch b/github-pr1880.patch deleted file mode 100644 index c8f8795..0000000 --- a/github-pr1880.patch +++ /dev/null @@ -1,23 +0,0 @@ -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 -Date: Wed Jan 22 15:35:55 2025 -0500 - - Update sha1.C: #include - - 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 - #include -+#include - - #include "dyntypes.h" - #include "common/src/sha1.h" diff --git a/plans/ci.fmf b/plans/ci.fmf deleted file mode 100644 index 3fd3ab7..0000000 --- a/plans/ci.fmf +++ /dev/null @@ -1,5 +0,0 @@ -summary: CI Gating Plan -discover: - how: fmf -execute: - how: tmt diff --git a/sources b/sources index 5cadd84..1ccb90f 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -SHA512 (dyninst-13.0.0.tar.gz) = efa09018c411f6138e6e2cf6510007b29b00ed9e0d643df702303ee0ccb39b1ea1640bba18555f4cb0a7dbab677362c88ffe0eccace62b57860daee9350a4eee +SHA512 (testsuite-10.1.0.tar.gz) = 47b91ebc0623f672378086a5f8d84e3934bd6b22d8932b12aaad257ccf7eb109505edb63dfbc3eb15aa099fc488a517835412099a77e3e0dd1275b3e3f672b3b +SHA512 (dyninst-10.1.0.tar.gz) = 41d7b6f0fce56be84091cc9796b7fa3295a652f80203b6e246df3a28a7bdc02a11996a38c9ccfb2ea7c18ee937a93020ff31d5d4652fd8082f99167e94b16df6 diff --git a/tests/Sanity/smoke-test/dynamic-double/Makefile b/tests/Sanity/smoke-test/dynamic-double/Makefile deleted file mode 100644 index 22c77b3..0000000 --- a/tests/Sanity/smoke-test/dynamic-double/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -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 diff --git a/tests/Sanity/smoke-test/dynamic-double/mutatee.cpp b/tests/Sanity/smoke-test/dynamic-double/mutatee.cpp deleted file mode 100644 index eead3bb..0000000 --- a/tests/Sanity/smoke-test/dynamic-double/mutatee.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include - -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; -} diff --git a/tests/Sanity/smoke-test/dynamic-double/mutator.cpp b/tests/Sanity/smoke-test/dynamic-double/mutator.cpp deleted file mode 100644 index 550ccbe..0000000 --- a/tests/Sanity/smoke-test/dynamic-double/mutator.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include -#include -#include -#include -#include - -// 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 access_types; - access_types.insert(BPatch_opLoad); - access_types.insert(BPatch_opStore); -*/ - vector functions, incr_functions; - vector *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 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 access_types; - access_types.insert(BPatch_opLoad); - access_types.insert(BPatch_opStore); -*/ - vector functions2, incr_functions2; - vector *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 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; -} diff --git a/tests/Sanity/smoke-test/dynamic/Makefile b/tests/Sanity/smoke-test/dynamic/Makefile deleted file mode 100644 index aaecdd6..0000000 --- a/tests/Sanity/smoke-test/dynamic/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -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 diff --git a/tests/Sanity/smoke-test/dynamic/load_env.sh b/tests/Sanity/smoke-test/dynamic/load_env.sh deleted file mode 100644 index ce686f0..0000000 --- a/tests/Sanity/smoke-test/dynamic/load_env.sh +++ /dev/null @@ -1,6 +0,0 @@ -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 diff --git a/tests/Sanity/smoke-test/dynamic/mutatee.cpp b/tests/Sanity/smoke-test/dynamic/mutatee.cpp deleted file mode 100644 index 111b0ab..0000000 --- a/tests/Sanity/smoke-test/dynamic/mutatee.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include - -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; -} diff --git a/tests/Sanity/smoke-test/dynamic/mutator.cpp b/tests/Sanity/smoke-test/dynamic/mutator.cpp deleted file mode 100644 index ed540f2..0000000 --- a/tests/Sanity/smoke-test/dynamic/mutator.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include -#include -#include - -// 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 access_types; - access_types.insert(BPatch_opLoad); - access_types.insert(BPatch_opStore); -*/ - vector functions, incr_functions; - vector *points; - image->findFunction("function_name", functions); - points = functions[0]->findPoint(BPatch_entry); - - // create snippet - image->findFunction("incr", incr_functions); - vector 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; -} diff --git a/tests/Sanity/smoke-test/main.fmf b/tests/Sanity/smoke-test/main.fmf deleted file mode 100644 index 0670d38..0000000 --- a/tests/Sanity/smoke-test/main.fmf +++ /dev/null @@ -1,16 +0,0 @@ -summary: The test does basic instrumentation on binaries. -description: '' -contact: -- Michael Petlan -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 diff --git a/tests/Sanity/smoke-test/runtest.sh b/tests/Sanity/smoke-test/runtest.sh deleted file mode 100755 index 88792a4..0000000 --- a/tests/Sanity/smoke-test/runtest.sh +++ /dev/null @@ -1,207 +0,0 @@ -#!/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 -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# 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 diff --git a/tests/Sanity/smoke-test/static/Makefile b/tests/Sanity/smoke-test/static/Makefile deleted file mode 100644 index 2277c20..0000000 --- a/tests/Sanity/smoke-test/static/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -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 diff --git a/tests/Sanity/smoke-test/static/load_env.sh b/tests/Sanity/smoke-test/static/load_env.sh deleted file mode 100644 index ce686f0..0000000 --- a/tests/Sanity/smoke-test/static/load_env.sh +++ /dev/null @@ -1,6 +0,0 @@ -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 diff --git a/tests/Sanity/smoke-test/static/mutatee.cpp b/tests/Sanity/smoke-test/static/mutatee.cpp deleted file mode 100644 index 6c3b215..0000000 --- a/tests/Sanity/smoke-test/static/mutatee.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include -#include - -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(); -} diff --git a/tests/Sanity/smoke-test/static/mutator.cpp b/tests/Sanity/smoke-test/static/mutator.cpp deleted file mode 100644 index e7358db..0000000 --- a/tests/Sanity/smoke-test/static/mutator.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include -#include -#include -#include - -// 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 access_types; - access_types.insert(BPatch_opLoad); - access_types.insert(BPatch_opStore); -*/ - vector functions, incr_functions; - vector *points; - image->findFunction("function_name", functions); - points = functions[0]->findPoint(BPatch_entry); - - // create snippet - image->findFunction("incr", incr_functions); - vector 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; -} diff --git a/tests/Sanity/testsuite/main.fmf b/tests/Sanity/testsuite/main.fmf deleted file mode 100644 index 63be86c..0000000 --- a/tests/Sanity/testsuite/main.fmf +++ /dev/null @@ -1,19 +0,0 @@ -summary: Dyninst upstream testsuite wrapper -description: '' -contact: Martin Cermak -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 diff --git a/tests/Sanity/testsuite/runtest.sh b/tests/Sanity/testsuite/runtest.sh deleted file mode 100755 index cc7aeea..0000000 --- a/tests/Sanity/testsuite/runtest.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/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 -# Martin Cermak -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# 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 diff --git a/testsuite-10.1.0-386.patch b/testsuite-10.1.0-386.patch new file mode 100644 index 0000000..38dcd3a --- /dev/null +++ b/testsuite-10.1.0-386.patch @@ -0,0 +1,29 @@ +--- 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::iterator curInsn = decodedInsns.begin(); ++ for(std::vector::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; diff --git a/testsuite-10.1.0-gettid.patch b/testsuite-10.1.0-gettid.patch new file mode 100644 index 0000000..9b75b25 --- /dev/null +++ b/testsuite-10.1.0-gettid.patch @@ -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 + +-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];