There are several places in hotspot where an internal function should have been declared static, but isn't.
These were discovered by trying to use the gcc option `-Wmissing-declarations` and the corresponding clang option `-Wmissing-prototypes`. These warnings check that a function either: a) is declared static, or b) has a declaration before its definition. The rationale of this is that functions are either internal to a compilation unit, or exported to be linked by some other compilation unit. In the former case, it should be marked static. In the latter case, it should be declared in a header file, which should be included by the implementation as well. If there is a discrepancy between the exported prototype and the implemented prototype, this will be discovered during compilation (instead of as a runtime error). Additionally, marking internal methods as static allows the compiler to make better optimization, like inlining. This seem to be to be a sane assumption, and I think Hotspot (and the entire JDK) would increase code quality by turning on these warnings. The absolute majority of the code already adheres to these rules, but there are still some places that needs to be fixed. This is the first part of addressing these issues, where all places that are trivially missing static are fixed. I have discovered these by running with the warnings mentioned above turned on. I have filtered out those places were an export was obviously missing. The remaining warnings I have manually inspected. About 1/4 of them were *_init() functions (which are directly declared in `init.cpp`) and another 1/4 were documented as "use in debugger"; these I have not touched. I also ignored functions with names suggesting it might be used in the debugger, even if not documented as such, or any places that even seemed remotely non-trivial. Finally I also reverted a few changes after it turned out that gcc complained about unused functions. These places are actually dead code, but it is not clear if they should be removed or if there is actually a call missing somewhere (I believe it is a mix of both). In any case, I did not want any such complexities in this PR. When the functions where marked static, gcc started complaining if they were not used, since it consider it dead code. To address this, I had to add or fix some `#ifdef`s. Since this code were not actually used unless these criteria were fulfilled before either (it was just not discovered by the compiler), I think this is mostly a good thing. Finally, I have manually searched for each and every one of these functions (tedious!) and verified that they are indeed only called from within the specific file. But in the end, the proof should be in the pudding -- if hotspot still compiles with these changes, then they should be correct. (The one exception to this is if the symbol is supposed to be used in e.g. the debugger, and I've missed that.) ------------- Commit messages: - 8252136: Several methods in hotspot are missing "static" Changes: https://git.openjdk.org/jdk/pull/17806/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17806&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8252136 Stats: 204 lines in 72 files changed: 6 ins; 2 del; 196 mod Patch: https://git.openjdk.org/jdk/pull/17806.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/17806/head:pull/17806 PR: https://git.openjdk.org/jdk/pull/17806