RFR: 8349923: Refactor StackMapTable constructor and StackMapReader [v2]
David Holmes
dholmes at openjdk.org
Tue Feb 18 21:09:59 UTC 2025
On Fri, 14 Feb 2025 20:13:48 GMT, Matias Saavedra Silva <matsaave at openjdk.org> wrote:
>> This patch refactors the `StackMapReader` to clean up the `StackMapTable` constructor. The `StackMapReader` class is extended to hold more fields used for verification purposes and allows for a simpler StackMapTable constructor. Additionally, in preparation for further changes to verification, the `_frame_count` may not be equal to the value reported by the classfile, so a new structure is used to generate the `_frame_array`. Verified with tier 1-5 tests
>
> Matias Saavedra Silva has updated the pull request incrementally with one additional commit since the last revision:
>
> Coleen comments
Looks good. A few minor comments/suggestions.
Thanks
src/hotspot/share/classfile/stackMapTable.cpp line 49:
> 47: }
> 48:
> 49: void StackMapReader::check_offset(StackMapFrame* frame, TRAPS) {
TRAPS is unused
src/hotspot/share/classfile/stackMapTable.cpp line 54:
> 52: _verifier->verify_error(
> 53: ErrorContext::bad_stackmap(0, frame),
> 54: "StackMapTable error: bad offset");
Suggestion:
_verifier->verify_error(ErrorContext::bad_stackmap(0, frame),
"StackMapTable error: bad offset");
src/hotspot/share/classfile/stackMapTable.cpp line 60:
> 58: void StackMapReader::check_size(TRAPS) {
> 59: if (_frame_count < _parsed_frame_count) {
> 60: StackMapStream::stackmap_format_error("wrong attribute size", CHECK);
Suggestion:
StackMapStream::stackmap_format_error("wrong attribute size", THREAD);
The method will return no matter what.
src/hotspot/share/classfile/stackMapTable.cpp line 67:
> 65: assert(_stream->at_end(), "must be");
> 66: if (_frame_count != _parsed_frame_count) {
> 67: StackMapStream::stackmap_format_error("wrong attribute size", CHECK);
Suggestion:
StackMapStream::stackmap_format_error("wrong attribute size", THREAD);
The method will return no matter what.
src/hotspot/share/classfile/stackMapTable.cpp line 110:
> 108: }
> 109:
> 110: StackMapFrame *stackmap_frame = _frame_array->at(frame_index);
Suggestion:
StackMapFrame* stackmap_frame = _frame_array->at(frame_index);
Pre-existing
src/hotspot/share/classfile/stackMapTable.hpp line 167:
> 165: inline char* code_data() const { return _code_data; }
> 166: inline int32_t code_length() const { return _code_length; }
> 167: inline bool at_end() { return _stream->at_end(); }
Suggestion:
inline int32_t get_frame_count() const { return _frame_count; }
inline StackMapFrame* prev_frame() const { return _prev_frame; }
inline char* code_data() const { return _code_data; }
inline int32_t code_length() const { return _code_length; }
inline bool at_end() const { return _stream->at_end(); }
-------------
Marked as reviewed by dholmes (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/23645#pullrequestreview-2625014395
PR Review Comment: https://git.openjdk.org/jdk/pull/23645#discussion_r1960580404
PR Review Comment: https://git.openjdk.org/jdk/pull/23645#discussion_r1960582418
PR Review Comment: https://git.openjdk.org/jdk/pull/23645#discussion_r1960585457
PR Review Comment: https://git.openjdk.org/jdk/pull/23645#discussion_r1960585849
PR Review Comment: https://git.openjdk.org/jdk/pull/23645#discussion_r1960586368
PR Review Comment: https://git.openjdk.org/jdk/pull/23645#discussion_r1960590243
More information about the hotspot-runtime-dev
mailing list