-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tricore register 0 asserts #2474
Comments
Pushing up this issue, breaking r2 TriCore features part ! -- In the TriCore architecture, the add instruction typically involves register-to-register operations and does not directly support an immediate value (like #0). Maybe if we try with another instruction sets versio ? EDIT2 It seems that changing tc version doesn't change anything. In tc162 IS, we can do an Add d0, d1, #0 |
@imbillow Could you take a look at this one please? |
@Rot127 do you think it's possible to hotfix it in V5 too ? Thanks |
Yes of course! Actually, let me change the milestone to v5. |
more wrong stuff
|
This is mostly about what to do with those implicit register accesses. |
So from a user's perspective it would be best to add the meta-information to the instructions/opcodes.
Here capstone tells us that there is one operand, the |
@imbillow Sorry, for answering so late. So If all let Defs = [D15], Uses = [] in {
class MOV_RR<bits<8> op1, bits<8> op2, string opstr,
RegisterClass outregClass, RegisterClass inregClass>
...
} If you generate the tables again, you get implicitly defined regs. The generated tables changed a little. You maybe have to apply only relevant changes. E.g. like this:
|
@csarn I am not sure if you understand you correctly. So here the general operand classification for
If there is an instruction which doesn't give these results, it is considered a bug. |
@Rot127 Ok, then I mis-used the word "implicit". So you are confirming that this issue is actually a bug.
the disassembled asm string "add d15, d0, #0" is correct, and shows 3 operands. |
Yes, it is a bug. I can take a look tomorrow and give you more details. |
@imbillow Just checked it. Yeah this is this annoying problem of people hard coding operands in the mnemonic. |
@imbillow I started an attempt for this one here: #2502 Also the attempt in the PR is flawed, because it might add registers also to instructions which have randomly the correct bits set at these positions. Now, I would propose to fix for these instructions the Super ugly and resource intense because we check strings. For every instructions. But I cannot come up with another idea currently. Another problem is the missing register access information. We maybe have to do a string search in the mnemonic again? Or is there a way to check the instruction encoding? Do you know this? |
I just saw you've solved the problem with the RzIL uplifting. So we could just copy the distinction from there. |
But TriCore's RzIL code is also pretty much re-disassembled. I think it might be more elegant to edit tricore's TableGen, if feasible. |
However, these implicit registers may also be present in an memory operand. In this case the metadata is completely wrong.
|
Yeah, I figured this out later as well. Guess we really need to fix it in the |
* Update changelog for V6.0.0-Alpha1 (#2493) * update version to v6-alpha1 * update bindings const values * Update changelog for V6.0.0-Alpha1 * Remove irrelevant changes. (#2495) * Fixing UB santizer, `LITBASE` and assert errors. (#2499) * Update labeler with Xtensa and v6 files. (#2500) * Add hard asserts to all SStream functions and memset MCInst. (#2501) * Only trigger on released action. (#2497) * Fix cstest build with Ninja (#2506) * Tricore EA calculation (#2504) * Update libcyaml dependency in cstest to 1.4.2 (#2508) * AArch64: Replace vararg add_cs_detail by multiple concrete functions Fixes UB caused by various mismatches on how these arguments are passed and read. This became visible when running on PowerPC hosts with e.g. `cstool -d aarch64 204862f8`. Apart from the UB fix, this is meant to be a pure refactor. Partially addresses #2458 * xtensa: Fix Branch Target (#2516) * xtensa: Fix Branch Target * auto-sync: fix byte pattern * xtensa: add branch insn tests * Revert "auto-sync: fix byte pattern" This reverts commit cf8e870. * Fix #2509. (#2510) Compatibility headers should always include the header in the same dir. * Fix stringop-truncation warning some compilers raise. (#2522) * Add CC and VAS compatibility macros (#2525) * Fix endianess issue during assignment. (#2528) * This time actually fix big endian issue. (#2530) * tricore: fixes #2474 (#2523) * tricore: fix auto-sync tricore * tricore: fixes TriCoreGenCSMappingInsnName.inc * tricore: fixes * tricore: try fix ld.a SC * tricore: fixes all * Add TriCore to .github/workflows/auto-sync.yaml * Add TriCore details tests(a15, d15, a10|sp) * Change CI to create Debian Package to Release (#2521) * Updating CI to create Debian package and version is assigned by tag version. Also updating release CI to not use end-of-life workflows * Clear up usage of static libraries. - Python bindings only use the dynamic lib. But built and copied the static ones sometimes nonetheless. - Add toggles to build only static, static/dyn or only dynamic. --------- Co-authored-by: Rot127 <unisono@quyllur.org> * Rename build arguments: (#2534) - BUILD_SHARED_LIBS -> CAPSTONE_BUILD_SHARED_LIBS - BUILD_STATIC_LIBS -> CAPSTONE_BUILD_STATIC_LIBS - BUILD_STATIC_LIBS -> CAPSTONE_BUILD_STATIC_MSVC_RUNTIME * xtensa: update to espressif/llvm-project (#2533) * fix coverity (#2546) - cid 514642 - cid 514643 - cid 514644 - cid 514645 * Move debian package generation to a dispatch only workflow (#2543) * Move deb package gen files int package/deb * Fix basename check * Make debian package generation dispatch only * Python package building rework (#2538) * - Refactored setup.py to remove hacks regarding packaging of wheels for different platforms, improve and cleanup the code - Updated README.txt - Removed old Makefile and build_wheel.sh scripts - Created a new workflow that takes care of building and testing python packages for different platforms/architectures/python versions * Added SPDX headers to the setup.py * - cstest_py: Fixed positional argument since it doesn't accept a `required` flag. It turns to have a mandatory tests folder path - integration_tests.py: Use pathlib to determine the required path - GitHub action: Simplified the tests execution command * GitHub Actions: Run python 3.8 (lowest) and 3.13 (current highest) for native runners only during testings and the rest during tag release * GitHub Action: - Fixed the cibw_build matrix element - Added a step to prepare artifact name * GitHub Action: Added run_tests.py script to run all tests during CI workflow * - Added SPDX headers to the run_tests.py script and to the build-wheels-publish.yml workflow file - Minor fixes to the workflow as pointed out in the PR review - Updated MANIFEST.in to reflect the actual libraries built during python wheel creation process - Use subprocess.run in place of os.system in run_tests.py script * GitHub Action: - Run qemu step only if non-native Linux runner - Added arch:universal2 matrix element for macos-latest runner * Python bindings: Refreshed the list of files needed to be copied for sdist archive * GitHub Action: Commented out arch:x86 matrix elements * GitHub Action: Run qemu step only if non-native Linux runner * GitHub Action: Minor fixes * Python bindings: Added missing .in pattern when collecting src files for sdist archive * Auto-Sync reproducability + ARM update (#2532) * fix xtensa DecodeMR23RegisterClass and add tests for MAC16 instru… (#2551) * fix xtensa `DecodeMR23RegisterClass` and add tests for `MAC16` instructions * revert * Prepare for update (#2552) * Bindings(chore): Fix DeprecationWarning * Version(upgrade): update bindings const * Fix(chore): Fix ARMCC_Invalid is not defined * Update Changelog Version to 6.0.0-Alpha2 (#2553) * Bindings(chore): Fix DeprecationWarning * Version(upgrade): update bindings const * Fix(chore): Fix ARMCC_Invalid is not defined * Changelog: Update to version 6.0.0-Alpha2 --------- Co-authored-by: Rot127 <45763064+Rot127@users.noreply.github.com> Co-authored-by: Florian Märkl <info@florianmaerkl.de> Co-authored-by: billow <billow.fun@gmail.com> Co-authored-by: Andrew <afq2101@columbia.edu> Co-authored-by: Rot127 <unisono@quyllur.org> Co-authored-by: @Antelox <anteloxrce@gmail.com>
Work environment
git clone
, brew, pip, release binaries etc.Instruction bytes giving faulty results
tricore disassembly doesnt match metadata inside. this is the disassembly:
as you can see there are 3 operands, 1st and 2nd are registers, 3rd is immediate. but decoding shows only two.
Expected results
things not asserting if i parse the 2nd operand as a register
Assertion failed: (RegNo && RegNo < 61 && "Invalid register number!"), function getRegisterName, file TriCoreGenAsmWriter.inc, line 3603.
Steps to get the wrong result
With
r2
:this is not crashing with cstool because its ignoring the 2nd operand.
The text was updated successfully, but these errors were encountered: