RFR: 8358696: Assert with extreme values for -XX:BciProfileWidth [v9]

Martin Doerr mdoerr at openjdk.org
Wed Aug 20 12:21:45 UTC 2025


On Wed, 20 Aug 2025 10:31:22 GMT, Saranya Natarajan <snatarajan at openjdk.org> wrote:

>> **Issue**
>> Extreme values for BciProfileWidth flag such as `java -XX:BciProfileWidth=-1 -version` and `java -XX:BciProfileWidth=100000 -version `results in assert failure `assert(allocates2(pc)) failed: not in CodeBuffer memory: 0x0000772b63a7a3a0 <= 0x0000772b63b75159 <= 0x0000772b63b75158 `. This is observed in a x86 machine.
>> 
>> **Analysis** 
>>  On debugging the issue, I found that increasing the size of the interpreter using the `InterpreterCodeSize` variable in `src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp` prevented the above mentioned assert from failing for large values of BciProfileWidth.  
>> 
>> **Proposal** 
>> Considering the fact that larger BciProfileWidth results in slower profiling, I have proposed a range between 0 to 5000 to restrict the value for BciProfileWidth for x86 machines. This maximum value is based on modifying the `InterpreterCodeSize` variable in `src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp` using the smallest `InterpreterCodeSize` for all the architectures.  As for the lower bound, a value of -1 would be the same as 0, as this simply means  no  return bci's will be recorded in ret profile. 
>> 
>> **Issue in AArch64**
>> Additionally running the command `java -XX:BciProfileWidth= 10000 -version` (or larger values) results in a different failure  `assert(offset_ok_for_immed(offset(), size)) failed: must be, was: 32768, 3` on an AArch64 machine.This is an issue of maximum offset for `ldr/str` in AArch64 which can be fixed using `form_address`  as mentioned in [JDK-8342736](https://bugs.openjdk.org/browse/JDK-8342736). In my preliminary fix using `form_address` on AArch64 machine. I had to modify 3 `ldr` and 1 `str` instruction (in file `src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp` at line number 926, 983, and 997). With this fix  using `form_address`, `BciProfileWidth` works for maximum of 5000 after which it crashes with`assert(allocates2(pc)) failed: not in CodeBuffer memory: 0x0000772b63a7a3a0 <= 0x0000772b63b75159 <= 0x0000772b63b75158 `.  Without this fix `BciProfileWidth` works for a maximum value of 1300.   Currently, I have suggested to restrict the upper bound on AArch64 to 1000 instead
  of fixing it with `form_address`. 
>> 
>> **Question to reviewers**
>> Do you think this is a reasonable fix ?  For AArch64 do you suggest fixing using `form_address` ? If yes, do I fix it under this PR or create another one ?
>> 
>> **Request to port maintainers**
>> @dafedafe suggested that we keep the upper boun...
>
> Saranya Natarajan has updated the pull request incrementally with one additional commit since the last revision:
> 
>   fix for PPC64

Thanks. This looks basically good and the test passes on PPC64. Only minor nits.

src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp line 1252:

> 1250: 
> 1251: // Test ImethodDataPtr. If it is null, continue at the specified label.
> 1252:   void InterpreterMacroAssembler::test_method_data_pointer(Label& zero_continue, bool may_be_far) {

Spaces at the beginning should be removed.

src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp line 1260:

> 1258:     beq(CR0, zero_continue);
> 1259:   }
> 1260: 

No need for an empty line.

test/lib-test/jdk/test/whitebox/vm_flags/IntxTest.java line 42:

> 40:     private static final long COMPILE_THRESHOLD = VmFlagTest.WHITE_BOX.getIntxVMFlag("CompileThreshold");
> 41:     private static final Long[] TESTS = {0L, 100L, (long)(Integer.MAX_VALUE>>3)*100L};
> 42: 

This empty line should not be removed.

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

PR Review: https://git.openjdk.org/jdk/pull/26139#pullrequestreview-3136336983
PR Review Comment: https://git.openjdk.org/jdk/pull/26139#discussion_r2287984667
PR Review Comment: https://git.openjdk.org/jdk/pull/26139#discussion_r2287989584
PR Review Comment: https://git.openjdk.org/jdk/pull/26139#discussion_r2287985495


More information about the hotspot-compiler-dev mailing list