RFR: 8256387: Unexpected result if patching an entire instruction on AArch64

Eric Liu github.com+10482586+erik1iu at openjdk.java.net
Tue Nov 17 06:19:10 UTC 2020


This patch fixed some potential risks in assembler_aarch64.hpp.

According to the C standard, shift operation is undefined if the shift
count greater than or equals to the length in bits of the promoted left
operand.

In assembler_aarch64.hpp, there are some utility functions for easily
operating the encoded instructions. E.g.

        Instruction_aarch64::patch(address, int, int, uint64_t)

All those functions use `(1U << nbits) - 1` to calculate mask which may
have some potential risks if `nbits` equals 32. That would be an
unexpected result if someone intends to deal with an entire instruction.

To fix this issue, this patch simply uses `1ULL` to replace `1U`.

-------------

Commit messages:
 - 8256387: Unexpected result if patching an entire instruction on AArch64

Changes: https://git.openjdk.java.net/jdk/pull/1248/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1248&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8256387
  Stats: 7 lines in 1 file changed: 0 ins; 0 del; 7 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1248.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1248/head:pull/1248

PR: https://git.openjdk.java.net/jdk/pull/1248


More information about the hotspot-compiler-dev mailing list