RFR(M): 8159335: Fix problems with stack overflow handling.
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Tue Jun 14 11:51:36 UTC 2016
Hi,
i found vm_default_page_size() on linux/aix is unused now,
and stack_page_size on aix was never used. I removed this
dead coding and updated the webrev in-place.
Incremental, non-aix diff:
http://cr.openjdk.java.net/~goetz/wr16/8159335-stkOvrflw/webrev.01/src/os/linux/vm/os_linux.hpp.udiff.html
Best regards,
Goetz.
> -----Original Message-----
> From: Lindenmaier, Goetz
> Sent: Montag, 13. Juni 2016 13:33
> To: hotspot-runtime-dev at openjdk.java.net
> Subject: RFR(M): 8159335: Fix problems with stack overflow handling.
>
> Hi,
>
>
>
> During porting JEP 270 to ppc I detected a row of bugs in the stack overflow
> coding.
>
> This change fixes these.
>
> Please review these changes. I please need a sponsor.
>
> http://cr.openjdk.java.net/~goetz/wr16/8159335-
> stkOvrflw/webrev.01/index.html
>
>
>
> javaCalls.cpp:
>
> Windows calls map_stack_shadow_pages() after doing
> os::stack_shadow_pages_available().
>
> Both functions read the stack pointer, but this might result in
>
> different sp's. In consequence, map_stack_shadow_pages() can hit
>
> a guard page although the previous check succeeded.
>
> So I pass in the sp so we can assure we use the same in both. Also,
>
> I optimized the map_stack_shadow_pages() on windows, we saw bad
>
> assembly for it.
>
>
>
> os_<os>.cpp:
>
> fix bug & Streamline computation of min_stack_allowed.
>
> - In some OS'es it was forgotten to consider the reserved pages.
>
> - OS'es use different multiplicators (aix: 8K, bsd: system page size,
>
> linux: 8K, solaris: system page size (often 8K), win: system page size)
>
> --> Use 8K everywhere, but I noted it down with *4K as zone
>
> sizes are also given in 4K units.
>
> - min_stack_allowed should be page aligned, else the warning is
>
> misleading.
>
>
>
> templateTable_ppc_64.cpp:
>
> Fix bug on ppc: in monitorenter() the wrong stack bang mechanism
>
> was used.
>
>
>
> globals_<cpu>.hpp:
>
> Streamline ppc stack guard sizes. The current ppc sizes are not
>
> adapted to openJdk. There SocketOutputStream.socketWrite0()
>
> uses a large buffer, so shadow pages have to be increased.
>
> This makes no big difference as many ppc systems have 64K
>
> pages, and the zone sizes are adapted to page sizes.
>
> Because zone sizes are calculated based on 4K pages now,
>
> the shadow zone on sparc has to be increased, too.
>
> Sparc uses 8K pages per default (as far as I konw),
>
> which was the old multiplier (wrong since 8139864).
>
>
>
> zone sizes:
>
> red yellow res shadow
>
> aarch 1 2 0 4+5
>
> ppc 1 6 1 6+2 --> 1 / 2 / 1 / 20+2
>
> sparc 1 2 1 10+1 --> 1 / 2 / 1 / 20+2
>
> spac32 1 2 1 3+1 --> 1 / 2 / 1 / 6+2
>
> x86_64 1 2 1 20+2
>
> x86_32 1 2 1 4+5
>
>
>
> win
>
> x86_64 1 3 0 6+2
>
> x86_32 1 3 0 4+5
>
>
>
> templateInterpreterGeneratore_<cpu>.cpp:
>
> Simplify checking whether the new frame fits on the stack.
>
> Use JavaThread->_stack_overflow_limit on all cpus. This
>
> saves several instructions.
>
>
>
> I also have to increase the stack sizes of some tests. They fail because
>
> systems with 64K pages require five of them for the shadow/guard area.
>
>
>
> I ran this in our night build for a few days, so it's tested on linuxx86_64,
>
> Ppc aix, linux and linux-le, sparc and darwinintel. Among others, all hotspot
>
> Jtreg tests and a lot of jck tests have been executed.
>
>
>
> Best regards,
>
> Goetz.
>
>
More information about the hotspot-runtime-dev
mailing list