mirror of
https://github.com/avast/retdec.git
synced 2024-12-18 19:08:37 +00:00
Remove references to our original (internal) issue tracker.
They are no longer relevant as we have migrated the code to GitHub.
This commit is contained in:
parent
1db0cb6379
commit
49932476a4
@ -45,7 +45,7 @@ public:
|
||||
|
||||
/// A def-use chain (see [ItC]).
|
||||
// Implementation note: we have to use std::vector instead of std::map to
|
||||
// make the chain deterministic (#1386).
|
||||
// make the chain deterministic.
|
||||
using DefUseChain = std::vector<std::pair<StmtVarPair, StmtSet>>;
|
||||
|
||||
public:
|
||||
|
@ -194,7 +194,7 @@ while [ "$CONTINUE" = "1" ]; do
|
||||
IN="$OUT"
|
||||
else
|
||||
# Remove the temporary file, just in case some of the unpackers crashed
|
||||
# during unpacking and left it on the disk (e.g. upx, see #1669).
|
||||
# during unpacking and left it on the disk (e.g. upx).
|
||||
rm -f "$OUT.tmp"
|
||||
CONTINUE=0
|
||||
fi
|
||||
|
@ -268,7 +268,7 @@ bool ArchiveWrapper::extract(
|
||||
|
||||
/**
|
||||
* @todo In writeFile function call, separator is added to path, this may
|
||||
* or may not work on Windows OS. Fix this once issue #1908 is resolved.
|
||||
* or may not work on Windows OS.
|
||||
*/
|
||||
|
||||
// Map for non-unique names - counts number of name occurrences.
|
||||
|
@ -95,7 +95,7 @@ SymbolicTree& SymbolicTree::operator=(SymbolicTree&& other)
|
||||
value = other.value;
|
||||
user = other.user;
|
||||
// Do NOT use `ops = std::move(other.ops);` to allow use like
|
||||
// `*this = ops[0];`. Use std::swap() instead. See #1581.
|
||||
// `*this = ops[0];`. Use std::swap() instead.
|
||||
std::swap(ops, other.ops);
|
||||
_failed = other._failed;
|
||||
}
|
||||
|
@ -565,7 +565,7 @@ bool ControlFlow::runGenericBr(AsmInstruction& ai, llvm::CallInst* call)
|
||||
|
||||
SymbolicTree root(_RDA, call->getArgOperand(0));
|
||||
|
||||
// PIC code, see #1066.
|
||||
// PIC code.
|
||||
// User code is calling stub in .plt.
|
||||
// Stub in .plt is computing jmp address (address of import).
|
||||
// 4-form_grabber-b794ce9e.so.elf, .plt:00001BE0 ___ctype_toupper_loc:
|
||||
|
@ -261,7 +261,7 @@ bool IdiomsAnalysis::doAnalysis(Function & f, Pass * p) {
|
||||
"IdiomsLLVM::exchangeCompareEq");
|
||||
|
||||
#if 0
|
||||
/* We do not recognize this well, see #546 */
|
||||
/* We do not recognize this well */
|
||||
change_made |= analyse(bb, &IdiomsLLVM::exchangeCompareNeq,
|
||||
"IdiomsLLVM::exchangeCompareNeq");
|
||||
#endif
|
||||
|
@ -1476,7 +1476,7 @@ Instruction * IdiomsMagicDivMod::magicSignedDiv8neg(BasicBlock::iterator iter) c
|
||||
*/
|
||||
Instruction * IdiomsMagicDivMod::signedMod1(BasicBlock::iterator iter) const {
|
||||
/*
|
||||
* Derivation tree (ARM/ELF, idiom based on #943):
|
||||
* Derivation tree (ARM/ELF):
|
||||
*
|
||||
* add
|
||||
* /\
|
||||
|
@ -407,7 +407,7 @@ namespace retdec {
|
||||
namespace bin2llvmir {
|
||||
|
||||
/**
|
||||
* Sample in #730 8A5C:
|
||||
* Sample 8A5C:
|
||||
* 160d8: ea00043b b 0x171cc
|
||||
* 160dc: ef900026 svc 0x00900026
|
||||
* 160e0: ea000439 b 0x171cc
|
||||
|
@ -157,8 +157,7 @@ bool UnreachableFuncs::optimizationCanRun() const {
|
||||
}
|
||||
|
||||
// The main function has to be a definition, not just a declaration. This
|
||||
// is needed when decompiling shared libraries containing an import of main
|
||||
// (see #1387).
|
||||
// is needed when decompiling shared libraries containing an import of main.
|
||||
if (mainFunc->isDeclaration()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -3010,7 +3010,6 @@ string cGram::subanalyze(const string input, cGram::errcode *err) {
|
||||
showsubs(substitutions);
|
||||
#endif
|
||||
|
||||
//Fix of the bug #914
|
||||
unsigned tempPos = b36toint(current_sub_id);
|
||||
if ((tempPos+1) >= substitutions.size()) {
|
||||
errString = string("") + "cGram::subanalyze: Syntax error: Non-existent substitution " + current_sub_id + ".";
|
||||
|
@ -303,7 +303,7 @@ void DwarfFile::loadDIE(Dwarf_Die die, DwarfBaseElement* &parent, int lvl)
|
||||
DwarfBaseElement* parentElement = parent;
|
||||
parent = nullptr;
|
||||
|
||||
// DIE name -- unused, but without it there is a SEG FAULT for some reason, see #1027.
|
||||
// DIE name -- unused, but without it there is a SEG FAULT for some reason.
|
||||
//
|
||||
char *dieName = nullptr;
|
||||
bool localname = false;
|
||||
|
@ -151,7 +151,7 @@ DwarfVar *DwarfVarContainer::getVarByName(string n)
|
||||
* @return Added parameter or existing one.
|
||||
*
|
||||
* TODO: podla mena to nie je 100%, v jednom DIE nemusi byt meno nastavene.
|
||||
* v priklade z #820 by sa dali unikatne prepojit podla DW_AT_decl_file + DW_AT_decl_line.
|
||||
* V jednom samplu sa dali unikatne prepojit podla DW_AT_decl_file + DW_AT_decl_line.
|
||||
* neviem ale ci je toto nastaven vzdy, ideal by bolo kontextove nacitanie, ktore by vedelo
|
||||
* ku ktorej funkcii parameter partri, ktory v poradi je a ak by na tom indexe uz nieco
|
||||
* existovalo tak by sa to len aktualizovalo a nevytvaralo nove.
|
||||
|
@ -168,7 +168,6 @@ bool isStrangeFeedface(const std::string &filePath)
|
||||
}
|
||||
}
|
||||
|
||||
// See #1912 for detailed information on this condition
|
||||
if (ints[0] == 0xfeedface && ints[1] == 0x10 && ints[2] == 0x02)
|
||||
{
|
||||
// Maximal valid Mach-O value is 0x0b but 0x10 will be safer and
|
||||
|
@ -428,7 +428,7 @@ void CoffDetector::detectArchitecture()
|
||||
result = "ARM (little endian)";
|
||||
break;
|
||||
case PELIB_IMAGE_FILE_MACHINE_THUMB:
|
||||
// "ARM or THUMB (interworking)"; see bug #523
|
||||
// "ARM or THUMB (interworking)";
|
||||
result = "ARM";
|
||||
break;
|
||||
case PELIB_IMAGE_FILE_MACHINE_ARMNT:
|
||||
|
@ -403,7 +403,7 @@ void PeDetector::detectArchitecture()
|
||||
result = "ARM (little endian)";
|
||||
break;
|
||||
case PELIB_IMAGE_FILE_MACHINE_THUMB:
|
||||
// "ARM or THUMB (interworking)"; see bug #523
|
||||
// "ARM or THUMB (interworking)";
|
||||
result = "ARM";
|
||||
break;
|
||||
case PELIB_IMAGE_FILE_MACHINE_ARMNT:
|
||||
|
@ -630,14 +630,14 @@ bool HLLWriter::emitFunction(ShPtr<Function> func) {
|
||||
emitModuleNameForFuncIfAvailable(func);
|
||||
emitAddressRangeForFuncIfAvailable(func);
|
||||
emitLineRangeForFuncIfAvailable(func);
|
||||
// TODO Disable emission of wrapper info until #1399 is solved.
|
||||
// TODO Disable emission of wrapper info until #189 is solved.
|
||||
// emitWrapperInfoForFuncIfAvailable(func);
|
||||
emitClassInfoIfAvailable(func);
|
||||
emitDemangledNameIfAvailable(func);
|
||||
emitDetectedCryptoPatternsForFuncIfAvailable(func);
|
||||
emitLLVMIRFixerWarningForFuncIfAny(func);
|
||||
// The comment HAS to be put as the LAST info, right before the function's
|
||||
// signature. IDA plugin relies on that (#1645).
|
||||
// signature. IDA plugin relies on that.
|
||||
emitCommentIfAvailable(func);
|
||||
|
||||
func->accept(this);
|
||||
|
@ -1053,7 +1053,7 @@ void CHLLWriter::visit(ShPtr<IntType> type) {
|
||||
}
|
||||
|
||||
// Emit 8-bit integers as chars, not as int8_t/uint8_t, because char is
|
||||
// more readable. See #1150 for more details.
|
||||
// more readable.
|
||||
if (type->getSize() == 8) {
|
||||
if (type->isUnsigned()) {
|
||||
out << "unsigned ";
|
||||
|
@ -89,7 +89,7 @@ ShPtr<Type> Variable::getType() const {
|
||||
* - Internal variables correspond to variables that either have 'internal
|
||||
* linkage' in LLVM IR or are ordinary local variables.
|
||||
* - External variables correspond to variables that either have 'external
|
||||
* linkage' or are used in a volatile load/store operation (see #1146).
|
||||
* linkage' or are used in a volatile load/store operation.
|
||||
*
|
||||
* By default, variables are created as internal variables. To make them
|
||||
* external, call @c markAsExternal().
|
||||
|
@ -34,7 +34,7 @@ namespace llvmir2hll {
|
||||
|
||||
namespace {
|
||||
|
||||
// To produce deterministic results (#1386), we need to order the basic blocks
|
||||
// To produce deterministic results, we need to order the basic blocks
|
||||
// by their name.
|
||||
struct ByNameComparator {
|
||||
bool operator()(const llvm::BasicBlock *b1, const llvm::BasicBlock *b2) const {
|
||||
|
@ -245,8 +245,8 @@ void OptimizerManager::optimize(ShPtr<Module> m) {
|
||||
// WhileTrueToForLoopOptimizer should be run before
|
||||
// WhileTrueToWhileCondOptimizer.
|
||||
run<WhileTrueToForLoopOptimizer>(m, va, arithmExprEvaluator);
|
||||
// TODO The WhileTrueToUForLoopOptimizer does nothing at the moment (see
|
||||
// commit a5f4988 and #1358), so it makes no sense to run it.
|
||||
// TODO The WhileTrueToUForLoopOptimizer does nothing at the moment, so it
|
||||
// makes no sense to run it.
|
||||
#if 0
|
||||
// WhileTrueToUForLoopOptimizer should be run after
|
||||
// WhileTrueToForLoopOptimizer (WhileTrueToForLoopOptimizer may produce
|
||||
|
@ -234,7 +234,7 @@ void CopyPropagationOptimizer::performOptimization() {
|
||||
|
||||
// For each def-use chain...
|
||||
// We have to iterate over an ordered DU chain to make the optimization
|
||||
// deterministic (#1386).
|
||||
// deterministic.
|
||||
for (const auto &du : ordered(ducs->du)) {
|
||||
// Currently, the optimizer is unable to optimize cases when there is
|
||||
// more than one use. If this is the case, skip the chain to make the
|
||||
@ -272,7 +272,7 @@ void CopyPropagationOptimizer::performOptimization() {
|
||||
|
||||
// Remove statements that are to be removed and update the CFG.
|
||||
// We have to iterate over ordered statements to make the optimization
|
||||
// deterministic (#1386).
|
||||
// deterministic.
|
||||
for (const auto &stmt : ordered(toRemoveStmtsPreserveCalls)) {
|
||||
// Since there may be function calls in the statement, we have to
|
||||
// preserve them. Therefore, we store the result of
|
||||
@ -368,8 +368,7 @@ void CopyPropagationOptimizer::handleCaseEmptyUses(ShPtr<Statement> stmt,
|
||||
return;
|
||||
}
|
||||
|
||||
// Do not optimize external variables (used in a volatile load/store, see
|
||||
// #1146).
|
||||
// Do not optimize external variables (used in a volatile load/store).
|
||||
if (stmtLhsVar->isExternal()) {
|
||||
return;
|
||||
}
|
||||
@ -423,8 +422,7 @@ void CopyPropagationOptimizer::handleCaseSingleUse(ShPtr<Statement> stmt,
|
||||
return;
|
||||
}
|
||||
|
||||
// Do not optimize external variables (used in a volatile load/store, see
|
||||
// #1146).
|
||||
// Do not optimize external variables (used in a volatile load/store).
|
||||
if (stmtLhsVar->isExternal()) {
|
||||
return;
|
||||
}
|
||||
@ -698,8 +696,7 @@ bool CopyPropagationOptimizer::shouldBeIncludedInDefUseChains(
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not optimize external variables (used in a volatile load/store, see
|
||||
// #1146).
|
||||
// Do not optimize external variables (used in a volatile load/store).
|
||||
if (var->isExternal()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ bool DeadLocalAssignOptimizer::canBeOptimized(ShPtr<Variable> var,
|
||||
}
|
||||
|
||||
// We do not want to optimize external variables (used in a volatile
|
||||
// load/store, see #1146).
|
||||
// load/store).
|
||||
if (var->isExternal()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -552,7 +552,7 @@ bool GlobalToLocalOptimizer::globalVarMayBeRemovedAsUnused(ShPtr<Variable> var)
|
||||
// Note: Even though we do not optimize external global variables, we want
|
||||
// to remove them if they are not used anywhere in the module. If we
|
||||
// did not do that, all such external global variables would remain
|
||||
// in the source code. See #1166 for an example.
|
||||
// in the source code.
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ void SimpleCopyPropagationOptimizer::tryOptimization(ShPtr<Statement> stmt) {
|
||||
|
||||
if (lhsVar->isExternal()) {
|
||||
// We do not want to optimize external variables (used in a volatile
|
||||
// load/store, see #1146).
|
||||
// load/store).
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ ShPtr<ConstInt> getArgAsConstInt(ShPtr<Expression> arg) {
|
||||
//
|
||||
// signal(SIGSTOP, SIG_IGN);
|
||||
//
|
||||
// TODO Is this valid under all circumstances? See #726.
|
||||
// TODO Is this valid under all circumstances?
|
||||
ShPtr<Expression> argWithoutCasts(skipCasts(arg));
|
||||
|
||||
// Treat the null pointer as zero (0). In this way, we can convert, e.g.,
|
||||
|
@ -377,7 +377,7 @@ ShPtr<Function> ReadableVarRenamer::getDeclaredFunc(ShPtr<CallExpr> expr) const
|
||||
*/
|
||||
ShPtr<Variable> ReadableVarRenamer::getVarFromCallArg(ShPtr<Expression> arg) const {
|
||||
// Motivation: For example, the given function call is present when
|
||||
// decompiling file enc_1_.exe from #1457:
|
||||
// decompiling file enc_1_.exe:
|
||||
//
|
||||
// GetSystemTimeAsFileTime((struct FILETIME *)&v1);
|
||||
//
|
||||
|
@ -192,7 +192,7 @@ bool PatternExtractor::processFile()
|
||||
|
||||
|
||||
/**
|
||||
* Check if we can use this 64-bit PowerPC file (issue #1892).
|
||||
* Check if we can use this 64-bit PowerPC file.
|
||||
*
|
||||
* Problem is there is only one '.opd' section common for all code sections.
|
||||
* This is problem if multiple code sections are present because we do not know
|
||||
|
@ -360,7 +360,7 @@ char *PDBFile::extract_stream(PDB_DWORD *pages, int num_pages)
|
||||
*/
|
||||
PDBFileState PDBFile::load_pdb_v200(void)
|
||||
{
|
||||
//TODO - add support for PDB version 2.00 #1270
|
||||
//TODO - add support for PDB version 2.00
|
||||
return PDB_STATE_UNSUPPORTED_VERSION;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,6 @@ bool PDBFunction::parse_symbol(PDBGeneralSymbol *symbol, PDBTypes *types, PDBSym
|
||||
type_index = func_sym->typind;
|
||||
type_def = reinterpret_cast<PDBTypeFunction *>(types->get_type_by_index(type_index));
|
||||
|
||||
// #1471
|
||||
if (type_def == nullptr || type_def->type_class != PDBTYPE_FUNCTION)
|
||||
{
|
||||
return false;
|
||||
@ -314,7 +313,6 @@ void PDBSymbols::parse_symbols(void)
|
||||
new_function = new PDBFunction(m); // Create new function
|
||||
new_function->parse_symbol(symbol, types, this);
|
||||
|
||||
// #1471
|
||||
if (new_function == nullptr || new_function->type_def == nullptr || new_function->type_def->type_class != PDBTYPE_FUNCTION)
|
||||
{
|
||||
delete new_function;
|
||||
|
@ -1226,7 +1226,7 @@ Signature ppcElfNrv2eSignature =
|
||||
};
|
||||
|
||||
// Modified UPX stubs
|
||||
// psyb0t - MIPS Little-endian ELF (#1255)
|
||||
// psyb0t - MIPS Little-endian ELF
|
||||
Signature psyb0t_mipsLeElfNrv2bSignature =
|
||||
{
|
||||
0xE0, 0x00, 0x11, 0x04, // BAL <Routine for creating memory regions>
|
||||
@ -1239,7 +1239,7 @@ Signature psyb0t_mipsLeElfNrv2bSignature =
|
||||
0xC2, 0x77, 0x09, 0x00 // SRL $t6, $t1, 31
|
||||
};
|
||||
|
||||
// lshttpd - x86 ELF (#1255)
|
||||
// lshttpd - x86 ELF
|
||||
Signature lshttpd_x86ElfLzmaSignature =
|
||||
{
|
||||
0xE8, 0x8E, 0x0C, 0x00, 0x00, // CALL <Routine for creating memory regions>
|
||||
|
@ -396,7 +396,7 @@ bool ByteValueStorage::getDouble(std::uint64_t address, double& res) const
|
||||
}
|
||||
}
|
||||
// 2.33 (0x4002a3d7 0a3d70a4) in data section as: a4703d0a d7a30240.
|
||||
// New ARM compilers from #960 is also generating this kind of double constants.
|
||||
// New ARM compilers are also generating this kind of double constants.
|
||||
// We are not sure, what part of binary determines which kind of double constants are used.
|
||||
// Currently we use new kind for ARMs > version 5.
|
||||
// To find relevant info, google: "ARM double mixed endian".
|
||||
|
@ -456,7 +456,6 @@ TEST_F(PHI2SeqTests, cycleVarDepend06)
|
||||
{
|
||||
parseInput(R"(
|
||||
; Testing cycle variable dependency. Two cycles with same predecessor block. Block with cycle doesn't have successor on its own.
|
||||
; This test was created for testing the problem #1055.
|
||||
|
||||
@.str = private unnamed_addr constant [20 x i8] c"Argument %d %d %d:\0A\00", align 1
|
||||
|
||||
|
@ -502,7 +502,7 @@ TEST_F(UnreachableFuncsTests, mainOnlyDeclaration)
|
||||
parseInput(R"(
|
||||
; When the main function is just a declaration (i.e. it has no body), behave
|
||||
; like there is no main function. This is needed when decompiling shared
|
||||
; libraries containing an import of main (see #1387).
|
||||
; libraries containing an import of main.
|
||||
|
||||
; Can't be optimized (see above).
|
||||
define void @func() {
|
||||
|
@ -50,7 +50,7 @@ TEST_F(GccDemanglerTests, DoNotDemangleCppClassNamesWhenCharacterCountIsBad)
|
||||
|
||||
TEST_F(GccDemanglerTests, DoNotDemangleCppClassNamesWhenTheyDoNotMatchRegex)
|
||||
{
|
||||
DEM_EQ("enc_vad_21363218732487324784rufdekdfbnerwquie2r6732", ""); // #1495
|
||||
DEM_EQ("enc_vad_21363218732487324784rufdekdfbnerwquie2r6732", "");
|
||||
DEM_EQ(" 7Polygon", ""); // std::regex_match
|
||||
DEM_EQ("7Polygon ", ""); // std::regex_match
|
||||
DEM_EQ(" 7Polygon ", ""); // std::regex_match
|
||||
|
@ -104,7 +104,7 @@ OptimizeNoAssignStmtOneUseEvenIfLhsVarIsExternal) {
|
||||
// Add a body to the testing function:
|
||||
//
|
||||
// a = 1 (VarDefStmt, where 'a' is an 'external' variable comming from a
|
||||
// volatile load/store, see #1146)
|
||||
// volatile load/store)
|
||||
// b = a (VarDefStmt)
|
||||
// return b
|
||||
//
|
||||
@ -361,7 +361,7 @@ DoNotOptimizeWhenAuxiliaryVariableIsExternal) {
|
||||
//
|
||||
// a = 1 (VarDefStmt)
|
||||
// b = a (VarDefStmt, where 'b' is an 'external' variable comming from a
|
||||
// volatile load/store, see #1146)
|
||||
// volatile load/store)
|
||||
// return b
|
||||
//
|
||||
ShPtr<Variable> varA(Variable::create("a", IntType::create(16)));
|
||||
|
@ -180,7 +180,7 @@ DoNotEliminateAssignStmtWhenVariableIsExternal) {
|
||||
// Set-up the module.
|
||||
//
|
||||
// void test() {
|
||||
// d = 1; (d is 'external' and comes from a volatile store, see #1146)
|
||||
// d = 1; (d is 'external' and comes from a volatile store)
|
||||
// }
|
||||
//
|
||||
ShPtr<Variable> varD(Variable::create("d", IntType::create(32)));
|
||||
|
@ -306,7 +306,7 @@ DoNotOptimizeAssignmentIntoExternalVariable) {
|
||||
//
|
||||
// def test():
|
||||
// a = 1 (VarDefStmt, where 'a' is external and comes from a volatile
|
||||
// store, see #1146)
|
||||
// store)
|
||||
//
|
||||
ShPtr<Variable> varA(Variable::create("a", IntType::create(16)));
|
||||
varA->markAsExternal();
|
||||
|
@ -325,8 +325,7 @@ DoNotOptimizeIfLhsIsExternalVariable) {
|
||||
// Set-up the module.
|
||||
//
|
||||
// void test() {
|
||||
// a = b; // a is 'external' and comes from a volatile store, see
|
||||
// // #1146).
|
||||
// a = b; // a is 'external' and comes from a volatile store
|
||||
// return a;
|
||||
// }
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user