Код (C++): if (((opcode & 0x00600000) == 0x00100000) && (x == 0)) { .... } Вообще странно сравнивать результат который никогда не будет равным сравниваему значению. А ведь эти люди код OPENOCD делали... Вот решил собрать с добавлением J-Link... а компилятор дюже умный сказал, что так не будет компилировать. Стервец... видишь, что код мёртвый в смысле половины условий... компилируй и хрен с ним. Как мне заставить его игнорировать бесполезный код. Ну вот смотрите... будут ли эти условия выполнены? Код (C++): /* SMLAW < y> */ if (((opcode & 0x00600000) == 0x00100000) && (x == 0)) { uint8_t Rd, Rm, Rs, Rn; instruction->type = ARM_SMLAWy; Rd = (opcode & 0xf0000) >> 16; Rm = (opcode & 0xf); Rs = (opcode & 0xf00) >> 8; Rn = (opcode & 0xf000) >> 12; snprintf(instruction->text, 128, "0x%8.8" PRIx32 "\t0x%8.8" PRIx32 "\tSMLAW%s%s r%i, r%i, r%i, r%i", address, opcode, (y) ? "T" : "B", COND(opcode), Rd, Rm, Rs, Rn); } /* SMUL < x><y> */ if ((opcode & 0x00600000) == 0x00300000) { uint8_t Rd, Rm, Rs; instruction->type = ARM_SMULxy; Rd = (opcode & 0xf0000) >> 16; Rm = (opcode & 0xf); Rs = (opcode & 0xf00) >> 8; snprintf(instruction->text, 128, "0x%8.8" PRIx32 "\t0x%8.8" PRIx32 "\tSMULW%s%s%s r%i, r%i, r%i", address, opcode, (x) ? "T" : "B", (y) ? "T" : "B", COND(opcode), Rd, Rm, Rs); } /* SMULW < y> */ if (((opcode & 0x00600000) == 0x00100000) && (x == 1)) { uint8_t Rd, Rm, Rs; instruction->type = ARM_SMULWy; Rd = (opcode & 0xf0000) >> 16; Rm = (opcode & 0xf); Rs = (opcode & 0xf00) >> 8; snprintf(instruction->text, 128, "0x%8.8" PRIx32 "\t0x%8.8" PRIx32 "\tSMULW%s%s r%i, r%i, r%i", address, opcode, (y) ? "T" : "B", COND(opcode), Rd, Rm, Rs); } Ну хоть когда-нибудь.
@Igor68, в версии OpenOCD 0.11.0 исправлено на Код (C++): /* SMLAW < y> */ if (((opcode & 0x00600000) == 0x00200000) && (x == 0)) { с примечанием "исправления предупреждений, выдаваемых GCC8". Нормальные исправления предупреждений, программист ошибся с побитовыми операциями, и пока компилятор не прокричал, никто и не чесался.
Я вас понял! Но это для дизассемблера всё... и для работы ни к чему.... ну в принципе конечно. А вот в пакет всё это включили. Ради JLink и стал его собирать. Почему-то в штатный его не включили. Собирал для малины на самой малине - поле битвы RAM диск 4 Gb.
Вот и говорю, что всё что в теле if может и окомпилируется (если компилятор не анализирует бесполезность), но выполняться никогда не будет. а если: Код (C++): if (((opcode & 0x00600000) == 0x00200000) && (x == 0)) заменить на это: Код (C++): if ((opcode & 0x00200000) && (x == 0)) то шанс на выполнение есть хотя я тоже сморозил - в маске "6"двойка есть и должно быть всё в норме. Но там есть условия и с единицей.
ПРЕМНОГО БЛАГОДАРЕН!!!!!!!!!!! Скачал исходник openocd 0.11.0 прямо на малину, откомпилировал, установил... он встал вместо 0.10.0, который с jlink не очень дружил (испытывал на плате Aduc7024), а теперь всё без проблем. Курю теперь ещё и openocd.... Спасибо огромное @ZAZ-965 !!!!!!!!!!