changeset 36417:f4bdcbd7ebc1

Merge
author thartmann
date Mon, 29 Feb 2016 08:12:22 +0000
parents a172186ba1ca 046733577670
children ed61211c46d7
files hotspot/src/share/vm/gc/g1/concurrentMark.cpp hotspot/src/share/vm/gc/g1/concurrentMark.hpp hotspot/src/share/vm/gc/g1/concurrentMark.inline.hpp jdk/make/src/classes/build/tools/generatebreakiteratordata/BreakIteratorRBControl.java jdk/src/java.base/share/classes/sun/text/resources/en/FormatData_en.java jdk/src/java.base/share/classes/sun/text/resources/en/JavaTimeSupplementary_en.java jdk/src/java.base/share/classes/sun/text/resources/en/US/FormatData_en_US.java jdk/src/java.base/share/classes/sun/util/resources/en/CalendarData_en.properties jdk/src/java.base/share/classes/sun/util/resources/en/LocaleNames_en.properties jdk/src/java.base/share/classes/sun/util/resources/en/TimeZoneNames_en.java jdk/src/java.base/share/classes/sun/util/resources/en/US/CurrencyNames_en_US.properties jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/CollationData_ar.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/FormatData_ar.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/JO/FormatData_ar_JO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/JO/JavaTimeSupplementary_ar_JO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/JavaTimeSupplementary_ar.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/LB/FormatData_ar_LB.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/LB/JavaTimeSupplementary_ar_LB.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/SY/FormatData_ar_SY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ar/SY/JavaTimeSupplementary_ar_SY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/be/BY/FormatData_be_BY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/be/CollationData_be.java jdk/src/jdk.localedata/share/classes/sun/text/resources/be/FormatData_be.java jdk/src/jdk.localedata/share/classes/sun/text/resources/be/JavaTimeSupplementary_be.java jdk/src/jdk.localedata/share/classes/sun/text/resources/bg/BG/FormatData_bg_BG.java jdk/src/jdk.localedata/share/classes/sun/text/resources/bg/CollationData_bg.java jdk/src/jdk.localedata/share/classes/sun/text/resources/bg/FormatData_bg.java jdk/src/jdk.localedata/share/classes/sun/text/resources/bg/JavaTimeSupplementary_bg.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ca/CollationData_ca.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ca/ES/FormatData_ca_ES.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ca/FormatData_ca.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ca/JavaTimeSupplementary_ca.java jdk/src/jdk.localedata/share/classes/sun/text/resources/cs/CZ/FormatData_cs_CZ.java jdk/src/jdk.localedata/share/classes/sun/text/resources/cs/CollationData_cs.java jdk/src/jdk.localedata/share/classes/sun/text/resources/cs/FormatData_cs.java jdk/src/jdk.localedata/share/classes/sun/text/resources/cs/JavaTimeSupplementary_cs.java jdk/src/jdk.localedata/share/classes/sun/text/resources/da/CollationData_da.java jdk/src/jdk.localedata/share/classes/sun/text/resources/da/DK/FormatData_da_DK.java jdk/src/jdk.localedata/share/classes/sun/text/resources/da/FormatData_da.java jdk/src/jdk.localedata/share/classes/sun/text/resources/da/JavaTimeSupplementary_da.java jdk/src/jdk.localedata/share/classes/sun/text/resources/de/AT/FormatData_de_AT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/de/AT/JavaTimeSupplementary_de_AT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/de/CH/FormatData_de_CH.java jdk/src/jdk.localedata/share/classes/sun/text/resources/de/DE/FormatData_de_DE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/de/FormatData_de.java jdk/src/jdk.localedata/share/classes/sun/text/resources/de/JavaTimeSupplementary_de.java jdk/src/jdk.localedata/share/classes/sun/text/resources/de/LU/FormatData_de_LU.java jdk/src/jdk.localedata/share/classes/sun/text/resources/el/CY/FormatData_el_CY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/el/CollationData_el.java jdk/src/jdk.localedata/share/classes/sun/text/resources/el/FormatData_el.java jdk/src/jdk.localedata/share/classes/sun/text/resources/el/GR/FormatData_el_GR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/el/JavaTimeSupplementary_el.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/AU/FormatData_en_AU.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/AU/JavaTimeSupplementary_en_AU.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/CA/FormatData_en_CA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/CA/JavaTimeSupplementary_en_CA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/GB/FormatData_en_GB.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/GB/JavaTimeSupplementary_en_GB.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/IE/FormatData_en_IE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/IE/JavaTimeSupplementary_en_IE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/IN/FormatData_en_IN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/IN/JavaTimeSupplementary_en_IN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/MT/FormatData_en_MT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/MT/JavaTimeSupplementary_en_MT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/NZ/FormatData_en_NZ.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/NZ/JavaTimeSupplementary_en_NZ.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/PH/FormatData_en_PH.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/SG/FormatData_en_SG.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/SG/JavaTimeSupplementary_en_SG.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/ZA/FormatData_en_ZA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/en/ZA/JavaTimeSupplementary_en_ZA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/AR/FormatData_es_AR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/BO/FormatData_es_BO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/CL/FormatData_es_CL.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/CL/JavaTimeSupplementary_es_CL.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/CO/FormatData_es_CO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/CO/JavaTimeSupplementary_es_CO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/CR/FormatData_es_CR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/CollationData_es.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/DO/FormatData_es_DO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/EC/FormatData_es_EC.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/ES/FormatData_es_ES.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/FormatData_es.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/GT/FormatData_es_GT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/GT/JavaTimeSupplementary_es_GT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/HN/FormatData_es_HN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/HN/JavaTimeSupplementary_es_HN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/JavaTimeSupplementary_es.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/MX/FormatData_es_MX.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/MX/JavaTimeSupplementary_es_MX.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/NI/FormatData_es_NI.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/PA/FormatData_es_PA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/PA/JavaTimeSupplementary_es_PA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/PE/FormatData_es_PE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/PE/JavaTimeSupplementary_es_PE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/PR/FormatData_es_PR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/PR/JavaTimeSupplementary_es_PR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/PY/FormatData_es_PY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/SV/FormatData_es_SV.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/US/FormatData_es_US.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/UY/FormatData_es_UY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/UY/JavaTimeSupplementary_es_UY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/es/VE/FormatData_es_VE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/et/CollationData_et.java jdk/src/jdk.localedata/share/classes/sun/text/resources/et/EE/FormatData_et_EE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/et/FormatData_et.java jdk/src/jdk.localedata/share/classes/sun/text/resources/et/JavaTimeSupplementary_et.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fi/CollationData_fi.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fi/FI/FormatData_fi_FI.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fi/FormatData_fi.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fi/JavaTimeSupplementary_fi.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/BE/FormatData_fr_BE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/BE/JavaTimeSupplementary_fr_BE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/CA/FormatData_fr_CA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/CA/JavaTimeSupplementary_fr_CA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/CH/FormatData_fr_CH.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/CH/JavaTimeSupplementary_fr_CH.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/CollationData_fr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/FR/FormatData_fr_FR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/FormatData_fr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/fr/JavaTimeSupplementary_fr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ga/FormatData_ga.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ga/IE/FormatData_ga_IE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ga/JavaTimeSupplementary_ga.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hi/CollationData_hi.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hi/IN/FormatData_hi_IN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hi/IN/JavaTimeSupplementary_hi_IN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hr/CollationData_hr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hr/FormatData_hr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hr/HR/FormatData_hr_HR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hr/JavaTimeSupplementary_hr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hu/CollationData_hu.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hu/FormatData_hu.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hu/HU/FormatData_hu_HU.java jdk/src/jdk.localedata/share/classes/sun/text/resources/hu/JavaTimeSupplementary_hu.java jdk/src/jdk.localedata/share/classes/sun/text/resources/in/FormatData_in.java jdk/src/jdk.localedata/share/classes/sun/text/resources/in/ID/FormatData_in_ID.java jdk/src/jdk.localedata/share/classes/sun/text/resources/is/CollationData_is.java jdk/src/jdk.localedata/share/classes/sun/text/resources/is/FormatData_is.java jdk/src/jdk.localedata/share/classes/sun/text/resources/is/IS/FormatData_is_IS.java jdk/src/jdk.localedata/share/classes/sun/text/resources/is/JavaTimeSupplementary_is.java jdk/src/jdk.localedata/share/classes/sun/text/resources/it/CH/FormatData_it_CH.java jdk/src/jdk.localedata/share/classes/sun/text/resources/it/CH/JavaTimeSupplementary_it_CH.java jdk/src/jdk.localedata/share/classes/sun/text/resources/it/FormatData_it.java jdk/src/jdk.localedata/share/classes/sun/text/resources/it/IT/FormatData_it_IT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/it/JavaTimeSupplementary_it.java jdk/src/jdk.localedata/share/classes/sun/text/resources/iw/CollationData_iw.java jdk/src/jdk.localedata/share/classes/sun/text/resources/iw/FormatData_iw.java jdk/src/jdk.localedata/share/classes/sun/text/resources/iw/IL/FormatData_iw_IL.java jdk/src/jdk.localedata/share/classes/sun/text/resources/iw/IL/JavaTimeSupplementary_iw_IL.java jdk/src/jdk.localedata/share/classes/sun/text/resources/iw/JavaTimeSupplementary_iw.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ja/CollationData_ja.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ja/FormatData_ja.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ja/JP/FormatData_ja_JP.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ja/JavaTimeSupplementary_ja.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ko/CollationData_ko.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ko/FormatData_ko.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ko/JavaTimeSupplementary_ko.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ko/KR/FormatData_ko_KR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lt/CollationData_lt.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lt/FormatData_lt.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lt/JavaTimeSupplementary_lt.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lt/LT/FormatData_lt_LT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lv/CollationData_lv.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lv/FormatData_lv.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lv/JavaTimeSupplementary_lv.java jdk/src/jdk.localedata/share/classes/sun/text/resources/lv/LV/FormatData_lv_LV.java jdk/src/jdk.localedata/share/classes/sun/text/resources/mk/CollationData_mk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/mk/FormatData_mk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/mk/JavaTimeSupplementary_mk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/mk/MK/FormatData_mk_MK.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ms/FormatData_ms.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ms/JavaTimeSupplementary_ms.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ms/MY/FormatData_ms_MY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/mt/FormatData_mt.java jdk/src/jdk.localedata/share/classes/sun/text/resources/mt/JavaTimeSupplementary_mt.java jdk/src/jdk.localedata/share/classes/sun/text/resources/mt/MT/FormatData_mt_MT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/nl/BE/FormatData_nl_BE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/nl/BE/JavaTimeSupplementary_nl_BE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/nl/FormatData_nl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/nl/JavaTimeSupplementary_nl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/nl/NL/FormatData_nl_NL.java jdk/src/jdk.localedata/share/classes/sun/text/resources/no/CollationData_no.java jdk/src/jdk.localedata/share/classes/sun/text/resources/no/FormatData_no.java jdk/src/jdk.localedata/share/classes/sun/text/resources/no/JavaTimeSupplementary_no.java jdk/src/jdk.localedata/share/classes/sun/text/resources/no/NO/FormatData_no_NO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/no/NO/FormatData_no_NO_NY.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pl/CollationData_pl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pl/FormatData_pl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pl/JavaTimeSupplementary_pl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pl/PL/FormatData_pl_PL.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pt/BR/FormatData_pt_BR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pt/FormatData_pt.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pt/JavaTimeSupplementary_pt.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pt/PT/FormatData_pt_PT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/pt/PT/JavaTimeSupplementary_pt_PT.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ro/CollationData_ro.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ro/FormatData_ro.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ro/JavaTimeSupplementary_ro.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ro/RO/FormatData_ro_RO.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ru/CollationData_ru.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ru/FormatData_ru.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ru/JavaTimeSupplementary_ru.java jdk/src/jdk.localedata/share/classes/sun/text/resources/ru/RU/FormatData_ru_RU.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sk/CollationData_sk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sk/FormatData_sk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sk/JavaTimeSupplementary_sk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sk/SK/FormatData_sk_SK.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sl/CollationData_sl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sl/FormatData_sl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sl/JavaTimeSupplementary_sl.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sl/SI/FormatData_sl_SI.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sq/AL/FormatData_sq_AL.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sq/CollationData_sq.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sq/FormatData_sq.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sq/JavaTimeSupplementary_sq.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/BA/FormatData_sr_BA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/CS/FormatData_sr_CS.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/CollationData_sr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/CollationData_sr_Latn.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/FormatData_sr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/FormatData_sr_Latn.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr_Latn.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/ME/FormatData_sr_Latn_ME.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/ME/FormatData_sr_ME.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sr/RS/FormatData_sr_RS.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sv/CollationData_sv.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sv/FormatData_sv.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sv/JavaTimeSupplementary_sv.java jdk/src/jdk.localedata/share/classes/sun/text/resources/sv/SE/FormatData_sv_SE.java jdk/src/jdk.localedata/share/classes/sun/text/resources/th/BreakIteratorInfo_th.java jdk/src/jdk.localedata/share/classes/sun/text/resources/th/BreakIteratorRules_th.java jdk/src/jdk.localedata/share/classes/sun/text/resources/th/CollationData_th.java jdk/src/jdk.localedata/share/classes/sun/text/resources/th/FormatData_th.java jdk/src/jdk.localedata/share/classes/sun/text/resources/th/JavaTimeSupplementary_th.java jdk/src/jdk.localedata/share/classes/sun/text/resources/th/TH/FormatData_th_TH.java jdk/src/jdk.localedata/share/classes/sun/text/resources/th/thai_dict jdk/src/jdk.localedata/share/classes/sun/text/resources/tr/CollationData_tr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/tr/FormatData_tr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/tr/JavaTimeSupplementary_tr.java jdk/src/jdk.localedata/share/classes/sun/text/resources/tr/TR/FormatData_tr_TR.java jdk/src/jdk.localedata/share/classes/sun/text/resources/uk/CollationData_uk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/uk/FormatData_uk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/uk/JavaTimeSupplementary_uk.java jdk/src/jdk.localedata/share/classes/sun/text/resources/uk/UA/FormatData_uk_UA.java jdk/src/jdk.localedata/share/classes/sun/text/resources/vi/CollationData_vi.java jdk/src/jdk.localedata/share/classes/sun/text/resources/vi/FormatData_vi.java jdk/src/jdk.localedata/share/classes/sun/text/resources/vi/JavaTimeSupplementary_vi.java jdk/src/jdk.localedata/share/classes/sun/text/resources/vi/VN/FormatData_vi_VN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/CN/FormatData_zh_CN.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/CollationData_zh.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/FormatData_zh.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/HK/CollationData_zh_HK.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/HK/FormatData_zh_HK.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/SG/FormatData_zh_SG.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/TW/CollationData_zh_TW.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/TW/FormatData_zh_TW.java jdk/src/jdk.localedata/share/classes/sun/text/resources/zh/TW/JavaTimeSupplementary_zh_TW.java jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/AE/CurrencyNames_ar_AE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/BH/CurrencyNames_ar_BH.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/CalendarData_ar.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/DZ/CurrencyNames_ar_DZ.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/EG/CurrencyNames_ar_EG.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/IQ/CurrencyNames_ar_IQ.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/JO/CurrencyNames_ar_JO.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/KW/CurrencyNames_ar_KW.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/LB/CurrencyNames_ar_LB.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/LY/CurrencyNames_ar_LY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/LocaleNames_ar.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/MA/CurrencyNames_ar_MA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/OM/CurrencyNames_ar_OM.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/QA/CurrencyNames_ar_QA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/SA/CurrencyNames_ar_SA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/SD/CurrencyNames_ar_SD.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/SY/CurrencyNames_ar_SY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/TN/CurrencyNames_ar_TN.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ar/YE/CurrencyNames_ar_YE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/be/BY/CurrencyNames_be_BY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/be/CalendarData_be.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/be/LocaleNames_be.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/bg/BG/CurrencyNames_bg_BG.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/bg/CalendarData_bg.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/bg/LocaleNames_bg.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ca/CalendarData_ca.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ca/ES/CurrencyNames_ca_ES.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ca/LocaleNames_ca.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/cs/CZ/CurrencyNames_cs_CZ.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/cs/CalendarData_cs.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/cs/LocaleNames_cs.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/da/CalendarData_da.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/da/DK/CurrencyNames_da_DK.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/da/LocaleNames_da.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/AT/CurrencyNames_de_AT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/CH/CurrencyNames_de_CH.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/CalendarData_de.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/CurrencyNames_de.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/DE/CurrencyNames_de_DE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/GR/CurrencyNames_de_GR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/LU/CurrencyNames_de_LU.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/LocaleNames_de.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java jdk/src/jdk.localedata/share/classes/sun/util/resources/el/CY/CalendarData_el_CY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/el/CY/CurrencyNames_el_CY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/el/CY/LocaleNames_el_CY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/el/CalendarData_el.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/el/GR/CurrencyNames_el_GR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/el/LocaleNames_el.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/AU/CurrencyNames_en_AU.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/CA/CurrencyNames_en_CA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/CA/TimeZoneNames_en_CA.java jdk/src/jdk.localedata/share/classes/sun/util/resources/en/GB/CalendarData_en_GB.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/GB/CurrencyNames_en_GB.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/GB/TimeZoneNames_en_GB.java jdk/src/jdk.localedata/share/classes/sun/util/resources/en/IE/CalendarData_en_IE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/IE/CurrencyNames_en_IE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/IE/TimeZoneNames_en_IE.java jdk/src/jdk.localedata/share/classes/sun/util/resources/en/IN/CurrencyNames_en_IN.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/MT/CalendarData_en_MT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/MT/CurrencyNames_en_MT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/MT/LocaleNames_en_MT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/NZ/CurrencyNames_en_NZ.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/PH/CurrencyNames_en_PH.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/PH/LocaleNames_en_PH.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/SG/CurrencyNames_en_SG.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/SG/LocaleNames_en_SG.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/en/ZA/CurrencyNames_en_ZA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/AR/CurrencyNames_es_AR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/BO/CurrencyNames_es_BO.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/CL/CurrencyNames_es_CL.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/CO/CurrencyNames_es_CO.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/CR/CurrencyNames_es_CR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/CU/CurrencyNames_es_CU.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/CalendarData_es.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/CurrencyNames_es.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/DO/CurrencyNames_es_DO.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/EC/CurrencyNames_es_EC.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/ES/CalendarData_es_ES.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/ES/CurrencyNames_es_ES.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/GT/CurrencyNames_es_GT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/HN/CurrencyNames_es_HN.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/LocaleNames_es.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/MX/CurrencyNames_es_MX.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/NI/CurrencyNames_es_NI.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/PA/CurrencyNames_es_PA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/PE/CurrencyNames_es_PE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/PR/CurrencyNames_es_PR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/PY/CurrencyNames_es_PY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/SV/CurrencyNames_es_SV.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java jdk/src/jdk.localedata/share/classes/sun/util/resources/es/US/CalendarData_es_US.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/US/CurrencyNames_es_US.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/US/LocaleNames_es_US.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/UY/CurrencyNames_es_UY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/es/VE/CurrencyNames_es_VE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/et/CalendarData_et.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/et/EE/CurrencyNames_et_EE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/et/LocaleNames_et.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fi/CalendarData_fi.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fi/FI/CurrencyNames_fi_FI.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fi/LocaleNames_fi.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/BE/CurrencyNames_fr_BE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/CA/CalendarData_fr_CA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/CA/CurrencyNames_fr_CA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/CH/CurrencyNames_fr_CH.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/CalendarData_fr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/CurrencyNames_fr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/FR/CurrencyNames_fr_FR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/LU/CurrencyNames_fr_LU.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/LocaleNames_fr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java jdk/src/jdk.localedata/share/classes/sun/util/resources/ga/IE/CurrencyNames_ga_IE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ga/LocaleNames_ga.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hi/CalendarData_hi.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hi/IN/CurrencyNames_hi_IN.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hi/LocaleNames_hi.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hi/TimeZoneNames_hi.java jdk/src/jdk.localedata/share/classes/sun/util/resources/hr/CalendarData_hr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hr/HR/CurrencyNames_hr_HR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hr/LocaleNames_hr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hu/CalendarData_hu.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hu/HU/CurrencyNames_hu_HU.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/hu/LocaleNames_hu.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/in/ID/CalendarData_in_ID.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/in/ID/CurrencyNames_in_ID.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/in/LocaleNames_in.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/is/CalendarData_is.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/is/IS/CurrencyNames_is_IS.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/is/LocaleNames_is.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/it/CH/CurrencyNames_it_CH.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/it/CalendarData_it.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/it/CurrencyNames_it.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/it/IT/CurrencyNames_it_IT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/it/LocaleNames_it.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java jdk/src/jdk.localedata/share/classes/sun/util/resources/iw/CalendarData_iw.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/iw/IL/CurrencyNames_iw_IL.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/iw/LocaleNames_iw.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/CalendarData_ja.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/CurrencyNames_ja.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/JP/CurrencyNames_ja_JP.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/LocaleNames_ja.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/CalendarData_ko.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/CurrencyNames_ko.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/KR/CurrencyNames_ko_KR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/LocaleNames_ko.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java jdk/src/jdk.localedata/share/classes/sun/util/resources/lt/CalendarData_lt.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/lt/LT/CurrencyNames_lt_LT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/lt/LocaleNames_lt.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/lv/CalendarData_lv.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/lv/LV/CurrencyNames_lv_LV.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/lv/LocaleNames_lv.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/mk/CalendarData_mk.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/mk/LocaleNames_mk.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/mk/MK/CurrencyNames_mk_MK.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ms/LocaleNames_ms.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ms/MY/CalendarData_ms_MY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ms/MY/CurrencyNames_ms_MY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/mt/CalendarData_mt.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/mt/LocaleNames_mt.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/mt/MT/CalendarData_mt_MT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/mt/MT/CurrencyNames_mt_MT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/nl/BE/CurrencyNames_nl_BE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/nl/CalendarData_nl.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/nl/LocaleNames_nl.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/nl/NL/CurrencyNames_nl_NL.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/no/CalendarData_no.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/no/LocaleNames_no.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/no/NO/CurrencyNames_no_NO.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/no/NO/LocaleNames_no_NO_NY.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pl/CalendarData_pl.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pl/LocaleNames_pl.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pl/PL/CurrencyNames_pl_PL.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/CalendarData_pt_BR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/CurrencyNames_pt_BR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/LocaleNames_pt_BR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/TimeZoneNames_pt_BR.java jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/CalendarData_pt.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/CurrencyNames_pt.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/LocaleNames_pt.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/PT/CalendarData_pt_PT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/PT/CurrencyNames_pt_PT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/PT/LocaleNames_pt_PT.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ro/CalendarData_ro.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ro/LocaleNames_ro.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ro/RO/CurrencyNames_ro_RO.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ru/CalendarData_ru.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ru/LocaleNames_ru.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/ru/RU/CurrencyNames_ru_RU.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sk/CalendarData_sk.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sk/LocaleNames_sk.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sk/SK/CurrencyNames_sk_SK.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sl/CalendarData_sl.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sl/LocaleNames_sl.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sl/SI/CurrencyNames_sl_SI.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sq/AL/CurrencyNames_sq_AL.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sq/CalendarData_sq.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sq/LocaleNames_sq.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/BA/CalendarData_sr_Latn_BA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/BA/CurrencyNames_sr_BA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/BA/CurrencyNames_sr_Latn_BA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/CS/CurrencyNames_sr_CS.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/CalendarData_sr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/LocaleNames_sr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/LocaleNames_sr_Latn.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/ME/CalendarData_sr_Latn_ME.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/ME/CurrencyNames_sr_Latn_ME.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/ME/CurrencyNames_sr_ME.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/RS/CalendarData_sr_Latn_RS.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/RS/CurrencyNames_sr_Latn_RS.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sr/RS/CurrencyNames_sr_RS.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/CalendarData_sv.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/CurrencyNames_sv.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/LocaleNames_sv.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/SE/CurrencyNames_sv_SE.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java jdk/src/jdk.localedata/share/classes/sun/util/resources/th/CalendarData_th.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/th/LocaleNames_th.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/th/TH/CurrencyNames_th_TH.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/tr/CalendarData_tr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/tr/LocaleNames_tr.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/tr/TR/CurrencyNames_tr_TR.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/uk/CalendarData_uk.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/uk/LocaleNames_uk.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/uk/UA/CurrencyNames_uk_UA.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/vi/CalendarData_vi.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/vi/LocaleNames_vi.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/vi/VN/CurrencyNames_vi_VN.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CN/CurrencyNames_zh_CN.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CN/TimeZoneNames_zh_CN.java jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CalendarData_zh.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/HK/CurrencyNames_zh_HK.java jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/HK/LocaleNames_zh_HK.java jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/HK/TimeZoneNames_zh_HK.java jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/LocaleNames_zh.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/SG/CurrencyNames_zh_SG.java jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/SG/LocaleNames_zh_SG.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/CurrencyNames_zh_TW.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/LocaleNames_zh_TW.properties jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/TimeZoneNames_zh_TW.java langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/SimpleDocFileFactory.java langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/SimpleDocFileFactory.java
diffstat 1604 files changed, 123616 insertions(+), 98361 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Mon Feb 29 07:58:45 2016 +0100
+++ b/.hgtags	Mon Feb 29 08:12:22 2016 +0000
@@ -348,3 +348,4 @@
 4a652e4ca9523422149958673033e0ac740d5e1e jdk-9+103
 086c682bd8c5f195c324f61e2c61fbcd0226d63b jdk-9+104
 db483b34fa7148d257a429acddbde9c13687dcae jdk-9+105
+6c644cca3f3fc2763e2ff7d669849a75d34543ba jdk-9+106
--- a/.hgtags-top-repo	Mon Feb 29 07:58:45 2016 +0100
+++ b/.hgtags-top-repo	Mon Feb 29 08:12:22 2016 +0000
@@ -348,3 +348,4 @@
 47d6462e514b2097663305a57d9c844c15d5b609 jdk-9+103
 9a38f8b4ba220708db198d08d82fd2144a64777d jdk-9+104
 be58b02c11f90b88c67e4d0e2cb5e4cf2d9b3c57 jdk-9+105
+54575d8783b3a39a2d710c28cda675d44261f9d9 jdk-9+106
--- a/corba/.hgtags	Mon Feb 29 07:58:45 2016 +0100
+++ b/corba/.hgtags	Mon Feb 29 08:12:22 2016 +0000
@@ -348,3 +348,4 @@
 0680fb7dae4da1ee6cf783c4b74184e3e08d3179 jdk-9+103
 e385e95e6101711d5c63e7b1a827e99b6ec7a1cc jdk-9+104
 64006ae915b3aa85ac7e6fac679024d2da7fe526 jdk-9+105
+8ec4f97943fe56f93e4621f622b56b7144c0181a jdk-9+106
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -54,11 +54,17 @@
 {
     protected Collection connectionCache;
 
+    private Acceptor acceptor;
+
     public CorbaInboundConnectionCacheImpl(ORB orb, Acceptor acceptor)
     {
         super(orb, acceptor.getConnectionCacheType(),
               ((CorbaAcceptor)acceptor).getMonitoringName());
         this.connectionCache = new ArrayList();
+        this.acceptor = acceptor;
+        if (orb.transportDebugFlag) {
+            dprint(": " + acceptor );
+        }
     }
 
     ////////////////////////////////////////////////////
@@ -66,11 +72,25 @@
     // pept.transport.InboundConnectionCache
     //
 
+    public void close () {
+
+        super.close();
+        if (orb.transportDebugFlag) {
+            dprint(".close: " + acceptor );
+        }
+        this.acceptor.close();
+
+    }
+
     public Connection get(Acceptor acceptor)
     {
         throw wrapper.methodShouldNotBeCalled();
     }
 
+    public Acceptor getAcceptor () {
+        return acceptor;
+    }
+
     public void put(Acceptor acceptor, Connection connection)
     {
         if (orb.transportDebugFlag) {
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaTransportManagerImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaTransportManagerImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -188,8 +188,9 @@
             for (Object cc : outboundConnectionCaches.values()) {
                 ((ConnectionCache)cc).close() ;
             }
-            for (Object cc : inboundConnectionCaches.values()) {
-                ((ConnectionCache)cc).close() ;
+            for (Object icc : inboundConnectionCaches.values()) {
+                ((ConnectionCache)icc).close() ;
+                unregisterAcceptor(((InboundConnectionCache)icc).getAcceptor());
             }
             getSelector(0).close();
         } finally {
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -26,16 +26,20 @@
 package com.sun.corba.se.impl.transport;
 
 import java.io.IOException;
+import java.net.ServerSocket;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.SelectableChannel;
+import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.Selector;
+import java.nio.channels.ClosedSelectorException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Iterator;
 import java.util.List;
 
+
 import com.sun.corba.se.pept.broker.Broker;
 import com.sun.corba.se.pept.transport.Acceptor;
 import com.sun.corba.se.pept.transport.Connection;
@@ -111,7 +115,16 @@
                 interestOpsList.add(keyAndOp);
             }
             // tell Selector Thread there's an update to a SelectorKey's Ops
-            selector.wakeup();
+            try {
+                if (selector != null) {
+                    // wakeup Selector thread to process close request
+                    selector.wakeup();
+                }
+            } catch (Throwable t) {
+                if (orb.transportDebugFlag) {
+                    dprint(".registerInterestOps: selector.wakeup: ", t);
+                }
+            }
         }
         else {
             wrapper.selectionKeyInvalid(eventHandler.toString());
@@ -186,7 +199,9 @@
             if (selectionKey != null) {
                 selectionKey.cancel();
             }
-            selector.wakeup();
+            if (selector != null) {
+                selector.wakeup();
+            }
             return;
         }
 
@@ -239,6 +254,8 @@
             readerThread.close();
         }
 
+       clearDeferredRegistrations();
+
         // Selector
 
         try {
@@ -248,7 +265,7 @@
             }
         } catch (Throwable t) {
             if (orb.transportDebugFlag) {
-                dprint(".close: selector.close: " + t);
+                dprint(".close: selector.wakeup: ", t);
             }
         }
     }
@@ -273,15 +290,16 @@
                     n = selector.select(timeout);
                 } catch (IOException  e) {
                     if (orb.transportDebugFlag) {
-                        dprint(".run: selector.select: " + e);
+                        dprint(".run: selector.select: ", e);
                     }
+                } catch (ClosedSelectorException csEx) {
+                    if (orb.transportDebugFlag) {
+                        dprint(".run: selector.select: ", csEx);
+                    }
+                    break;
                 }
                 if (closed) {
-                    selector.close();
-                    if (orb.transportDebugFlag) {
-                        dprint(".run: closed - .run return");
-                    }
-                    return;
+                    break;
                 }
                 /*
                   if (timeout == 0 && orb.transportDebugFlag) {
@@ -321,6 +339,18 @@
                 }
             }
         }
+        try {
+            if (selector != null) {
+                if (orb.transportDebugFlag) {
+                    dprint(".run: selector.close ");
+                }
+                selector.close();
+            }
+        } catch (Throwable t) {
+            if (orb.transportDebugFlag) {
+                dprint(".run: selector.close: ", t);
+            }
+        }
     }
 
     /////////////////////////////////////////////////////
@@ -328,6 +358,44 @@
     // Implementation.
     //
 
+    private void clearDeferredRegistrations() {
+        synchronized (deferredRegistrations) {
+            int deferredListSize = deferredRegistrations.size();
+            if (orb.transportDebugFlag) {
+                dprint(".clearDeferredRegistrations:deferred list size == " + deferredListSize);
+            }
+            for (int i = 0; i < deferredListSize; i++) {
+                EventHandler eventHandler =
+                    (EventHandler)deferredRegistrations.get(i);
+                if (orb.transportDebugFlag) {
+                    dprint(".clearDeferredRegistrations: " + eventHandler);
+                }
+                SelectableChannel channel = eventHandler.getChannel();
+                SelectionKey selectionKey = null;
+
+                try {
+                    if (orb.transportDebugFlag) {
+                        dprint(".clearDeferredRegistrations:close channel == "
+                                + channel);
+                        dprint(".clearDeferredRegistrations:close channel class == "
+                                + channel.getClass().getName());
+                    }
+                    channel.close();
+                    selectionKey = eventHandler.getSelectionKey();
+                    if (selectionKey != null) {
+                        selectionKey.cancel();
+                        selectionKey.attach(null);
+                    }
+                } catch (IOException ioEx) {
+                    if (orb.transportDebugFlag) {
+                        dprint(".clearDeferredRegistrations: ", ioEx);
+                    }
+                }
+            }
+            deferredRegistrations.clear();
+        }
+    }
+
     private synchronized boolean isClosed ()
     {
         return closed;
@@ -344,7 +412,7 @@
             selector = Selector.open();
         } catch (IOException e) {
             if (orb.transportDebugFlag) {
-                dprint(".startSelector: Selector.open: IOException: " + e);
+                dprint(".startSelector: Selector.open: IOException: ", e);
             }
             // REVISIT - better handling/reporting
             RuntimeException rte =
@@ -379,7 +447,7 @@
                                          (Object)eventHandler);
                 } catch (ClosedChannelException e) {
                     if (orb.transportDebugFlag) {
-                        dprint(".handleDeferredRegistrations: " + e);
+                        dprint(".handleDeferredRegistrations: ", e);
                     }
                 }
                 eventHandler.setSelectionKey(selectionKey);
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -264,7 +264,12 @@
 
             if (connection.shouldRegisterServerReadEvent()) {
                 Selector selector = orb.getTransportManager().getSelector(0);
-                selector.registerForEvent(connection.getEventHandler());
+                if (selector != null) {
+                    if (orb.transportDebugFlag) {
+                        dprint(".accept: registerForEvent: " + connection);
+                    }
+                    selector.registerForEvent(connection.getEventHandler());
+                }
             }
 
             getConnectionCache().reclaim();
@@ -273,12 +278,15 @@
             if (orb.transportDebugFlag) {
                 dprint(".accept:", e);
             }
-            orb.getTransportManager().getSelector(0).unregisterForEvent(this);
-            // REVISIT - need to close - recreate - then register new one.
-            orb.getTransportManager().getSelector(0).registerForEvent(this);
-            // NOTE: if register cycling we do not want to shut down ORB
-            // since local beans will still work.  Instead one will see
-            // a growing log file to alert admin of problem.
+            Selector selector = orb.getTransportManager().getSelector(0);
+            if (selector != null) {
+                selector.unregisterForEvent(this);
+                // REVISIT - need to close - recreate - then register new one.
+                selector.registerForEvent(this);
+                // NOTE: if register cycling we do not want to shut down ORB
+                // since local beans will still work.  Instead one will see
+                // a growing log file to alert admin of problem.
+            }
         }
     }
 
@@ -289,7 +297,9 @@
                 dprint(".close->:");
             }
             Selector selector = orb.getTransportManager().getSelector(0);
-            selector.unregisterForEvent(this);
+            if (selector != null) {
+                selector.unregisterForEvent(this);
+            }
             if (serverSocketChannel != null) {
                 serverSocketChannel.close();
             }
@@ -480,7 +490,9 @@
             // of calling SelectionKey.interestOps(<interest op>).
 
             Selector selector = orb.getTransportManager().getSelector(0);
-            selector.registerInterestOps(this);
+            if (selector != null) {
+                selector.registerInterestOps(this);
+            }
 
             if (orb.transportDebugFlag) {
                 dprint(".doWork<-:" + this);
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -367,7 +367,10 @@
                 }
             }
             // REVISIT - make sure reader thread is killed.
-            orb.getTransportManager().getSelector(0).unregisterForEvent(this);
+            Selector selector = orb.getTransportManager().getSelector(0);
+            if (selector != null) {
+                selector.unregisterForEvent(this);
+            }
             // Notify anyone waiting.
             purgeCalls(wrapper.connectionAbort(ex), true, false);
             // REVISIT
@@ -801,7 +804,9 @@
             }
             try {
                 Selector selector = orb.getTransportManager().getSelector(0);
-                selector.unregisterForEvent(this);
+                if (selector != null) {
+                    selector.unregisterForEvent(this);
+                }
                 if (socketChannel != null) {
                     socketChannel.close();
                 }
@@ -824,7 +829,9 @@
                dprint(".closeConnectionResources->: " + this);
            }
            Selector selector = orb.getTransportManager().getSelector(0);
-           selector.unregisterForEvent(this);
+           if (selector != null) {
+               selector.unregisterForEvent(this);
+           }
            try {
              if (socketChannel != null)
               socketChannel.close() ;
--- a/corba/src/java.corba/share/classes/com/sun/corba/se/pept/transport/InboundConnectionCache.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/corba/src/java.corba/share/classes/com/sun/corba/se/pept/transport/InboundConnectionCache.java	Mon Feb 29 08:12:22 2016 +0000
@@ -36,6 +36,8 @@
     public void put(Acceptor acceptor, Connection connection);
 
     public void remove(Connection connection);
+
+    public Acceptor getAcceptor();
 }
 
 // End of file.
--- a/hotspot/.hgtags	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/.hgtags	Mon Feb 29 08:12:22 2016 +0000
@@ -508,3 +508,4 @@
 c5f55130b1b69510d9a6f4a3105b58e21cd7ffe1 jdk-9+103
 534c50395957c6025fb6627e93b35756f8d48a08 jdk-9+104
 266fa9bb5297bf02cb2a7b038b10a109817d2b48 jdk-9+105
+7232de4c17c37f60aecec4f3191090bd3d41d334 jdk-9+106
--- a/hotspot/.mx.jvmci/suite.py	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/.mx.jvmci/suite.py	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 suite = {
-  "mxversion" : "5.6.11",
+  "mxversion" : "5.6.16",
   "name" : "jvmci",
   "url" : "http://openjdk.java.net/projects/graal",
   "developer" : {
--- a/hotspot/make/bsd/makefiles/gcc.make	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/make/bsd/makefiles/gcc.make	Mon Feb 29 08:12:22 2016 +0000
@@ -256,7 +256,7 @@
 
 # Compiler warnings are treated as errors
 ifneq ($(COMPILER_WARNINGS_FATAL),false)
-  WARNINGS_ARE_ERRORS = -Werror
+  WARNINGS_ARE_ERRORS ?= -Werror
 endif
 
 ifeq ($(USE_CLANG), true)
--- a/hotspot/make/linux/makefiles/gcc.make	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/make/linux/makefiles/gcc.make	Mon Feb 29 08:12:22 2016 +0000
@@ -203,7 +203,7 @@
 endif
 
 # Compiler warnings are treated as errors
-WARNINGS_ARE_ERRORS = -Werror
+WARNINGS_ARE_ERRORS ?= -Werror
 
 ifeq ($(USE_CLANG), true)
   # However we need to clean the code up before we can unrestrictedly enable this option with Clang
--- a/hotspot/make/solaris/makefiles/adlc.make	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/make/solaris/makefiles/adlc.make	Mon Feb 29 08:12:22 2016 +0000
@@ -66,17 +66,21 @@
 CXXFLAGS += -DASSERT
 
 ifndef USE_GCC
-  # We need libCstd.so for adlc 
+  # We need libCstd.so for adlc
   CFLAGS += -library=Cstd -g
   LFLAGS += -library=Cstd -g
 endif
 
 # CFLAGS_WARN holds compiler options to suppress/enable warnings.
+CFLAGS_WARN = +w
 # Compiler warnings are treated as errors
 ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
-  CFLAGS_WARN = +w -errwarn
+  WARNINGS_ARE_ERRORS ?= -xwe
 endif
-# When using compiler version 5.13 (Solaris Studio 12.4), calls to explicitly 
+
+CFLAGS_WARN += $(WARNINGS_ARE_ERRORS)
+
+# When using compiler version 5.13 (Solaris Studio 12.4), calls to explicitly
 # instantiated template functions trigger this warning when +w is active.
 ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 513), 1)
   CFLAGS_WARN += -erroff=notemsource
--- a/hotspot/make/solaris/makefiles/gcc.make	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/make/solaris/makefiles/gcc.make	Mon Feb 29 08:12:22 2016 +0000
@@ -117,7 +117,7 @@
 
 
 # Compiler warnings are treated as errors
-WARNINGS_ARE_ERRORS = -Werror
+WARNINGS_ARE_ERRORS ?= -Werror
 
 # Enable these warnings. See 'info gcc' about details on these options
 WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef -Wformat=2
--- a/hotspot/make/solaris/makefiles/sparcWorks.make	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/make/solaris/makefiles/sparcWorks.make	Mon Feb 29 08:12:22 2016 +0000
@@ -145,7 +145,8 @@
 CFLAGS += -DDONT_USE_PRECOMPILED_HEADER
 
 # Compiler warnings are treated as errors
-CFLAGS_WARN = -xwe
+WARNINGS_ARE_ERRORS ?= -xwe
+CFLAGS_WARN = $(WARNINGS_ARE_ERRORS)
 
 ################################################
 # Begin current (>=5.9) Forte compiler options #
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad	Mon Feb 29 08:12:22 2016 +0000
@@ -14928,7 +14928,22 @@
   ins_pipe(pipe_class_memory);
 %}
 
-instruct array_equals(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
+instruct array_equalsB(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
+                      iRegP_R10 tmp, rFlagsReg cr)
+%{
+  predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL);
+  match(Set result (AryEq ary1 ary2));
+  effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, KILL cr);
+
+  format %{ "Array Equals $ary1,ary2 -> $result    // KILL $tmp" %}
+  ins_encode %{
+    __ byte_arrays_equals($ary1$$Register, $ary2$$Register,
+                          $result$$Register, $tmp$$Register);
+  %}
+  ins_pipe(pipe_class_memory);
+%}
+
+instruct array_equalsC(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
                       iRegP_R10 tmp, rFlagsReg cr)
 %{
   predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU);
--- a/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -40,11 +40,7 @@
 define_pd_global(bool, TrapBasedNullChecks,  false);
 define_pd_global(bool, UncommonNullCast,         true);  // Uncommon-trap NULLs past to check cast
 
-#if defined(COMPILER2) || INCLUDE_JVMCI
 define_pd_global(intx, CodeEntryAlignment,       64);
-#else
-define_pd_global(intx, CodeEntryAlignment,       16);
-#endif // COMPILER2
 define_pd_global(intx, OptoLoopAlignment,        16);
 define_pd_global(intx, InlineFrequencyCount,     100);
 
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2014, 2015, Red Hat Inc. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -127,7 +127,10 @@
                      Instruction_aarch64::extract(insn2, 4, 0)) {
         // movk #imm16<<32
         Instruction_aarch64::patch(branch + 4, 20, 5, (uint64_t)target >> 32);
-        offset &= (1<<20)-1;
+        long dest = ((long)target & 0xffffffffL) | ((long)branch & 0xffff00000000L);
+        long pc_page = (long)branch >> 12;
+        long adr_page = (long)dest >> 12;
+        offset = adr_page - pc_page;
         instructions = 2;
       }
     }
@@ -898,23 +901,18 @@
          "caller must use same register for non-constant itable index as for method");
 
   // Compute start of first itableOffsetEntry (which is at the end of the vtable)
-  int vtable_base = InstanceKlass::vtable_start_offset() * wordSize;
+  int vtable_base = in_bytes(Klass::vtable_start_offset());
   int itentry_off = itableMethodEntry::method_offset_in_bytes();
   int scan_step   = itableOffsetEntry::size() * wordSize;
-  int vte_size    = vtableEntry::size() * wordSize;
+  int vte_size    = vtableEntry::size_in_bytes();
   assert(vte_size == wordSize, "else adjust times_vte_scale");
 
-  ldrw(scan_temp, Address(recv_klass, InstanceKlass::vtable_length_offset() * wordSize));
+  ldrw(scan_temp, Address(recv_klass, Klass::vtable_length_offset()));
 
   // %%% Could store the aligned, prescaled offset in the klassoop.
   // lea(scan_temp, Address(recv_klass, scan_temp, times_vte_scale, vtable_base));
   lea(scan_temp, Address(recv_klass, scan_temp, Address::lsl(3)));
   add(scan_temp, scan_temp, vtable_base);
-  if (HeapWordsPerLong > 1) {
-    // Round up to align_object_offset boundary
-    // see code for instanceKlass::start_of_itable!
-    round_to(scan_temp, BytesPerLong);
-  }
 
   // Adjust recv_klass by scaled itable_index, so we can free itable_index.
   assert(itableMethodEntry::size() * wordSize == wordSize, "adjust the scaling in the code below");
@@ -963,7 +961,7 @@
 void MacroAssembler::lookup_virtual_method(Register recv_klass,
                                            RegisterOrConstant vtable_index,
                                            Register method_result) {
-  const int base = InstanceKlass::vtable_start_offset() * wordSize;
+  const int base = in_bytes(Klass::vtable_start_offset());
   assert(vtableEntry::size() * wordSize == 8,
          "adjust the scaling in the code below");
   int vtable_offset_in_bytes = base + vtableEntry::method_offset_in_bytes();
@@ -3998,11 +3996,12 @@
   if (offset_high >= -(1<<20) && offset_low < (1<<20)) {
     _adrp(reg1, dest.target());
   } else {
-    unsigned long pc_page = (unsigned long)pc() >> 12;
-    long offset = dest_page - pc_page;
-    offset = (offset & ((1<<20)-1)) << 12;
-    _adrp(reg1, pc()+offset);
-    movk(reg1, (unsigned long)dest.target() >> 32, 32);
+    unsigned long target = (unsigned long)dest.target();
+    unsigned long adrp_target
+      = (target & 0xffffffffUL) | ((unsigned long)pc() & 0xffff00000000UL);
+
+    _adrp(reg1, (address)adrp_target);
+    movk(reg1, target >> 32, 32);
   }
   byte_offset = (unsigned long)dest.target() & 0xfff;
 }
@@ -4557,6 +4556,82 @@
   BLOCK_COMMENT("} string_equals");
 }
 
+
+void MacroAssembler::byte_arrays_equals(Register ary1, Register ary2,
+                                        Register result, Register tmp1)
+{
+  Register cnt1 = rscratch1;
+  Register cnt2 = rscratch2;
+  Register tmp2 = rscratch2;
+
+  Label SAME, DIFFER, NEXT, TAIL07, TAIL03, TAIL01;
+
+  int length_offset  = arrayOopDesc::length_offset_in_bytes();
+  int base_offset    = arrayOopDesc::base_offset_in_bytes(T_BYTE);
+
+  BLOCK_COMMENT("byte_arrays_equals  {");
+
+    // different until proven equal
+    mov(result, false);
+
+    // same array?
+    cmp(ary1, ary2);
+    br(Assembler::EQ, SAME);
+
+    // ne if either null
+    cbz(ary1, DIFFER);
+    cbz(ary2, DIFFER);
+
+    // lengths ne?
+    ldrw(cnt1, Address(ary1, length_offset));
+    ldrw(cnt2, Address(ary2, length_offset));
+    cmp(cnt1, cnt2);
+    br(Assembler::NE, DIFFER);
+
+    lea(ary1, Address(ary1, base_offset));
+    lea(ary2, Address(ary2, base_offset));
+
+    subs(cnt1, cnt1, 8);
+    br(LT, TAIL07);
+
+  BIND(NEXT);
+    ldr(tmp1, Address(post(ary1, 8)));
+    ldr(tmp2, Address(post(ary2, 8)));
+    subs(cnt1, cnt1, 8);
+    eor(tmp1, tmp1, tmp2);
+    cbnz(tmp1, DIFFER);
+    br(GE, NEXT);
+
+  BIND(TAIL07);  // 0-7 bytes left, cnt1 = #bytes left - 4
+    tst(cnt1, 0b100);
+    br(EQ, TAIL03);
+    ldrw(tmp1, Address(post(ary1, 4)));
+    ldrw(tmp2, Address(post(ary2, 4)));
+    cmp(tmp1, tmp2);
+    br(NE, DIFFER);
+
+  BIND(TAIL03);  // 0-3 bytes left, cnt1 = #bytes left - 4
+    tst(cnt1, 0b10);
+    br(EQ, TAIL01);
+    ldrh(tmp1, Address(post(ary1, 2)));
+    ldrh(tmp2, Address(post(ary2, 2)));
+    cmp(tmp1, tmp2);
+    br(NE, DIFFER);
+  BIND(TAIL01);  // 0-1 byte left
+    tst(cnt1, 0b01);
+    br(EQ, SAME);
+    ldrb(tmp1, ary1);
+    ldrb(tmp2, ary2);
+    cmp(tmp1, tmp2);
+    br(NE, DIFFER);
+
+  BIND(SAME);
+    mov(result, true);
+  BIND(DIFFER); // result already set
+
+  BLOCK_COMMENT("} byte_arrays_equals");
+}
+
 // Compare char[] arrays aligned to 4 bytes
 void MacroAssembler::char_arrays_equals(Register ary1, Register ary2,
                                         Register result, Register tmp1)
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1191,6 +1191,8 @@
                      Register tmp1);
   void char_arrays_equals(Register ary1, Register ary2,
                           Register result, Register tmp1);
+  void byte_arrays_equals(Register ary1, Register ary2,
+                          Register result, Register tmp1);
   void encode_iso_array(Register src, Register dst,
                         Register len, Register result,
                         FloatRegister Vtmp1, FloatRegister Vtmp2,
--- a/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -786,12 +786,19 @@
     int offset;
     const Register t0 = r3, t1 = r4, t2 = r5, t3 = r6,
       t4 = r7, t5 = r10, t6 = r11, t7 = r12;
+    const Register stride = r13;
 
     assert_different_registers(rscratch1, t0, t1, t2, t3, t4, t5, t6, t7);
     assert_different_registers(s, d, count, rscratch1);
 
     Label again, large, small;
-    __ align(6);
+    const char *stub_name;
+    if (direction == copy_forwards)
+      stub_name = "foward_copy_longs";
+    else
+      stub_name = "backward_copy_longs";
+    StubCodeMark mark(this, "StubRoutines", stub_name);
+    __ align(CodeEntryAlignment);
     __ bind(start);
     __ cmp(count, 8);
     __ br(Assembler::LO, small);
@@ -836,7 +843,7 @@
 
     __ ret(lr);
 
-    __ align(6);
+    __ align(CodeEntryAlignment);
     __ bind(large);
 
     // Fill 8 registers
@@ -845,10 +852,18 @@
     __ ldp(t4, t5, Address(s, 6 * unit));
     __ ldp(t6, t7, Address(__ pre(s, 8 * unit)));
 
+    int prefetch = PrefetchCopyIntervalInBytes;
+    bool use_stride = false;
+    if (direction == copy_backwards) {
+       use_stride = prefetch > 256;
+       prefetch = -prefetch;
+       if (use_stride) __ mov(stride, prefetch);
+    }
+
     __ bind(again);
 
-    if (direction == copy_forwards && PrefetchCopyIntervalInBytes > 0)
-      __ prfm(Address(s, PrefetchCopyIntervalInBytes), PLDL1KEEP);
+    if (PrefetchCopyIntervalInBytes > 0)
+      __ prfm(use_stride ? Address(s, stride) : Address(s, prefetch), PLDL1KEEP);
 
     __ stp(t0, t1, Address(d, 2 * unit));
     __ ldp(t0, t1, Address(s, 2 * unit));
@@ -1151,8 +1166,11 @@
       // caller can pass a 64-bit byte count here (from Unsafe.copyMemory)
       BLOCK_COMMENT("Entry:");
     }
-    __ cmp(d, s);
-    __ br(Assembler::LS, nooverlap_target);
+
+    // use fwd copy when (d-s) above_equal (count*size)
+    __ sub(rscratch1, d, s);
+    __ cmp(rscratch1, count, Assembler::LSL, exact_log2(size));
+    __ br(Assembler::HS, nooverlap_target);
 
     if (is_oop) {
       __ push(RegSet::of(d, count), sp);
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -120,7 +120,14 @@
     FLAG_SET_DEFAULT(AllocatePrefetchStepSize, 64);
   FLAG_SET_DEFAULT(PrefetchScanIntervalInBytes, 256);
   FLAG_SET_DEFAULT(PrefetchFieldsAhead, 256);
-  FLAG_SET_DEFAULT(PrefetchCopyIntervalInBytes, 256);
+  if (FLAG_IS_DEFAULT(PrefetchCopyIntervalInBytes))
+    FLAG_SET_DEFAULT(PrefetchCopyIntervalInBytes, 256);
+  if ((PrefetchCopyIntervalInBytes & 7) || (PrefetchCopyIntervalInBytes >= 32768)) {
+    warning("PrefetchCopyIntervalInBytes must be a multiple of 8 and < 32768");
+    PrefetchCopyIntervalInBytes &= ~7;
+    if (PrefetchCopyIntervalInBytes >= 32768)
+      PrefetchCopyIntervalInBytes = 32760;
+  }
 
   unsigned long auxv = getauxval(AT_HWCAP);
 
--- a/hotspot/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2014, Red Hat Inc. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -73,7 +73,7 @@
   if (DebugVtables) {
     Label L;
     // check offset vs vtable length
-    __ ldrw(rscratch1, Address(r19, InstanceKlass::vtable_length_offset() * wordSize));
+    __ ldrw(rscratch1, Address(r19, Klass::vtable_length_offset()));
     __ cmpw(rscratch1, vtable_index * vtableEntry::size());
     __ br(Assembler::GT, L);
     __ enter();
--- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1583,13 +1583,13 @@
          "caller must use same register for non-constant itable index as for method");
 
   // Compute start of first itableOffsetEntry (which is at the end of the vtable).
-  int vtable_base = InstanceKlass::vtable_start_offset() * wordSize;
+  int vtable_base = in_bytes(Klass::vtable_start_offset());
   int itentry_off = itableMethodEntry::method_offset_in_bytes();
   int logMEsize   = exact_log2(itableMethodEntry::size() * wordSize);
   int scan_step   = itableOffsetEntry::size() * wordSize;
-  int log_vte_size= exact_log2(vtableEntry::size() * wordSize);
-
-  lwz(scan_temp, InstanceKlass::vtable_length_offset() * wordSize, recv_klass);
+  int log_vte_size= exact_log2(vtableEntry::size_in_bytes());
+
+  lwz(scan_temp, in_bytes(Klass::vtable_length_offset()), recv_klass);
   // %%% We should store the aligned, prescaled offset in the klassoop.
   // Then the next several instructions would fold away.
 
@@ -1657,7 +1657,7 @@
 
   assert_different_registers(recv_klass, method_result, vtable_index.register_or_noreg());
 
-  const int base = InstanceKlass::vtable_start_offset() * wordSize;
+  const int base = in_bytes(Klass::vtable_start_offset());
   assert(vtableEntry::size() * wordSize == wordSize, "adjust the scaling in the code below");
 
   if (vtable_index.is_register()) {
--- a/hotspot/src/cpu/ppc/vm/ppc.ad	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/ppc/vm/ppc.ad	Mon Feb 29 08:12:22 2016 +0000
@@ -3568,8 +3568,8 @@
 
       __ load_klass(R11_scratch1, R3);
 
-      int entry_offset = InstanceKlass::vtable_start_offset() + _vtable_index * vtableEntry::size();
-      int v_off = entry_offset * wordSize + vtableEntry::method_offset_in_bytes();
+      int entry_offset = in_bytes(Klass::vtable_start_offset()) + _vtable_index * vtableEntry::size_in_bytes();
+      int v_off = entry_offset + vtableEntry::method_offset_in_bytes();
       __ li(R19_method, v_off);
       __ ldx(R19_method/*method oop*/, R19_method/*method offset*/, R11_scratch1/*class*/);
       // NOTE: for vtable dispatches, the vtable entry will never be
--- a/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2013, 2015 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -3282,9 +3282,9 @@
   const Register Rtarget_method = Rindex;
 
   // Get target method & entry point.
-  const int base = InstanceKlass::vtable_start_offset() * wordSize;
+  const int base = in_bytes(Klass::vtable_start_offset());
   // Calc vtable addr scale the vtable index by 8.
-  __ sldi(Rindex, Rindex, exact_log2(vtableEntry::size() * wordSize));
+  __ sldi(Rindex, Rindex, exact_log2(vtableEntry::size_in_bytes()));
   // Load target.
   __ addi(Rrecv_klass, Rrecv_klass, base + vtableEntry::method_offset_in_bytes());
   __ ldx(Rtarget_method, Rindex, Rrecv_klass);
--- a/hotspot/src/cpu/ppc/vm/vtableStubs_ppc_64.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/ppc/vm/vtableStubs_ppc_64.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -80,14 +80,14 @@
   __ load_klass(rcvr_klass, R3);
 
  // Set method (in case of interpreted method), and destination address.
-  int entry_offset = InstanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size();
+  int entry_offset = in_bytes(Klass::vtable_start_offset()) + vtable_index*vtableEntry::size_in_bytes();
 
 #ifndef PRODUCT
   if (DebugVtables) {
     Label L;
     // Check offset vs vtable length.
     const Register vtable_len = R12_scratch2;
-    __ lwz(vtable_len, InstanceKlass::vtable_length_offset()*wordSize, rcvr_klass);
+    __ lwz(vtable_len, in_bytes(Klass::vtable_length_offset()), rcvr_klass);
     __ cmpwi(CCR0, vtable_len, vtable_index*vtableEntry::size());
     __ bge(CCR0, L);
     __ li(R12_scratch2, vtable_index);
@@ -96,7 +96,7 @@
   }
 #endif
 
-  int v_off = entry_offset*wordSize + vtableEntry::method_offset_in_bytes();
+  int v_off = entry_offset + vtableEntry::method_offset_in_bytes();
 
   __ ld(R19_method, v_off, rcvr_klass);
 
@@ -163,13 +163,13 @@
   __ load_klass(rcvr_klass, R3_ARG1);
 
   BLOCK_COMMENT("Load start of itable entries into itable_entry.");
-  __ lwz(vtable_len, InstanceKlass::vtable_length_offset() * wordSize, rcvr_klass);
-  __ slwi(vtable_len, vtable_len, exact_log2(vtableEntry::size() * wordSize));
+  __ lwz(vtable_len, in_bytes(Klass::vtable_length_offset()), rcvr_klass);
+  __ slwi(vtable_len, vtable_len, exact_log2(vtableEntry::size_in_bytes()));
   __ add(itable_entry_addr, vtable_len, rcvr_klass);
 
   // Loop over all itable entries until desired interfaceOop(Rinterface) found.
   BLOCK_COMMENT("Increment itable_entry_addr in loop.");
-  const int vtable_base_offset = InstanceKlass::vtable_start_offset() * wordSize;
+  const int vtable_base_offset = in_bytes(Klass::vtable_start_offset());
   __ addi(itable_entry_addr, itable_entry_addr, vtable_base_offset + itableOffsetEntry::interface_offset_in_bytes());
 
   const int itable_offset_search_inc = itableOffsetEntry::size() * wordSize;
--- a/hotspot/src/cpu/sparc/vm/copy_sparc.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/sparc/vm/copy_sparc.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -180,6 +180,9 @@
 
 typedef void (*_zero_Fn)(HeapWord* to, size_t count);
 
+// Only used for heap objects, so align_object_offset.
+// All other platforms pd_fill_to_aligned_words simply calls pd_fill_to_words, don't
+// know why this one is different.
 static void pd_fill_to_aligned_words(HeapWord* tohw, size_t count, juint value) {
   assert(MinObjAlignmentInBytes >= BytesPerLong, "need alternate implementation");
 
--- a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -2188,30 +2188,18 @@
   }
 
   // Compute start of first itableOffsetEntry (which is at the end of the vtable)
-  int vtable_base = InstanceKlass::vtable_start_offset() * wordSize;
+  int vtable_base = in_bytes(Klass::vtable_start_offset());
   int scan_step   = itableOffsetEntry::size() * wordSize;
-  int vte_size    = vtableEntry::size() * wordSize;
-
-  lduw(recv_klass, InstanceKlass::vtable_length_offset() * wordSize, scan_temp);
+  int vte_size    = vtableEntry::size_in_bytes();
+
+  lduw(recv_klass, in_bytes(Klass::vtable_length_offset()), scan_temp);
   // %%% We should store the aligned, prescaled offset in the klassoop.
   // Then the next several instructions would fold away.
 
-  int round_to_unit = ((HeapWordsPerLong > 1) ? BytesPerLong : 0);
   int itb_offset = vtable_base;
-  if (round_to_unit != 0) {
-    // hoist first instruction of round_to(scan_temp, BytesPerLong):
-    itb_offset += round_to_unit - wordSize;
-  }
-  int itb_scale = exact_log2(vtableEntry::size() * wordSize);
+  int itb_scale = exact_log2(vtableEntry::size_in_bytes());
   sll(scan_temp, itb_scale,  scan_temp);
   add(scan_temp, itb_offset, scan_temp);
-  if (round_to_unit != 0) {
-    // Round up to align_object_offset boundary
-    // see code for InstanceKlass::start_of_itable!
-    // Was: round_to(scan_temp, BytesPerLong);
-    // Hoisted: add(scan_temp, BytesPerLong-1, scan_temp);
-    and3(scan_temp, -round_to_unit, scan_temp);
-  }
   add(recv_klass, scan_temp, scan_temp);
 
   // Adjust recv_klass by scaled itable_index, so we can free itable_index.
@@ -2280,16 +2268,16 @@
                                            Register method_result) {
   assert_different_registers(recv_klass, method_result, vtable_index.register_or_noreg());
   Register sethi_temp = method_result;
-  const int base = (InstanceKlass::vtable_start_offset() * wordSize +
-                    // method pointer offset within the vtable entry:
-                    vtableEntry::method_offset_in_bytes());
+  const int base = in_bytes(Klass::vtable_start_offset()) +
+                   // method pointer offset within the vtable entry:
+                   vtableEntry::method_offset_in_bytes();
   RegisterOrConstant vtable_offset = vtable_index;
   // Each of the following three lines potentially generates an instruction.
   // But the total number of address formation instructions will always be
   // at most two, and will often be zero.  In any case, it will be optimal.
   // If vtable_index is a register, we will have (sll_ptr N,x; inc_ptr B,x; ld_ptr k,x).
   // If vtable_index is a constant, we will have at most (set B+X<<N,t; ld_ptr k,t).
-  vtable_offset = regcon_sll_ptr(vtable_index, exact_log2(vtableEntry::size() * wordSize), vtable_offset);
+  vtable_offset = regcon_sll_ptr(vtable_index, exact_log2(vtableEntry::size_in_bytes()), vtable_offset);
   vtable_offset = regcon_inc_ptr(vtable_offset, base, vtable_offset, sethi_temp);
   Address vtable_entry_addr(recv_klass, ensure_simm13_or_reg(vtable_offset, sethi_temp));
   ld_ptr(vtable_entry_addr, method_result);
--- a/hotspot/src/cpu/sparc/vm/sparc.ad	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/sparc/vm/sparc.ad	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+// Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
 // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 //
 // This code is free software; you can redistribute it and/or modify it
@@ -601,8 +601,8 @@
            NativeCall::instruction_size);  // sethi; setlo; call; delay slot
   } else {
     assert(!UseInlineCaches, "expect vtable calls only if not using ICs");
-    int entry_offset = InstanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size();
-    int v_off = entry_offset*wordSize + vtableEntry::method_offset_in_bytes();
+    int entry_offset = in_bytes(Klass::vtable_start_offset()) + vtable_index*vtableEntry::size_in_bytes();
+    int v_off = entry_offset + vtableEntry::method_offset_in_bytes();
     int klass_load_size;
     if (UseCompressedClassPointers) {
       assert(Universe::heap() != NULL, "java heap should be initialized");
@@ -2658,8 +2658,8 @@
       } else {
         klass_load_size = 1*BytesPerInstWord;
       }
-      int entry_offset = InstanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size();
-      int v_off = entry_offset*wordSize + vtableEntry::method_offset_in_bytes();
+      int entry_offset = in_bytes(Klass::vtable_start_offset()) + vtable_index*vtableEntry::size_in_bytes();
+      int v_off = entry_offset + vtableEntry::method_offset_in_bytes();
       if (Assembler::is_simm13(v_off)) {
         __ ld_ptr(G3, v_off, G5_method);
       } else {
--- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -3153,14 +3153,11 @@
   //
 
   // compute start of first itableOffsetEntry (which is at end of vtable)
-  const int base = InstanceKlass::vtable_start_offset() * wordSize;
+  const int base = in_bytes(Klass::vtable_start_offset());
   Label search;
   Register Rtemp = O1_flags;
 
-  __ ld(O2_Klass, InstanceKlass::vtable_length_offset() * wordSize, Rtemp);
-  if (align_object_offset(1) > 1) {
-    __ round_to(Rtemp, align_object_offset(1));
-  }
+  __ ld(O2_Klass, in_bytes(Klass::vtable_length_offset()), Rtemp);
   __ sll(Rtemp, LogBytesPerWord, Rtemp);   // Rscratch *= 4;
   if (Assembler::is_simm13(base)) {
     __ add(Rtemp, base, Rtemp);
--- a/hotspot/src/cpu/sparc/vm/vtableStubs_sparc.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/sparc/vm/vtableStubs_sparc.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -78,7 +78,7 @@
   if (DebugVtables) {
     Label L;
     // check offset vs vtable length
-    __ ld(G3_scratch, InstanceKlass::vtable_length_offset()*wordSize, G5);
+    __ ld(G3_scratch, in_bytes(Klass::vtable_length_offset()), G5);
     __ cmp_and_br_short(G5, vtable_index*vtableEntry::size(), Assembler::greaterUnsigned, Assembler::pt, L);
     __ set(vtable_index, O2);
     __ call_VM(noreg, CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), O0, O2);
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -5867,22 +5867,17 @@
          "caller must use same register for non-constant itable index as for method");
 
   // Compute start of first itableOffsetEntry (which is at the end of the vtable)
-  int vtable_base = InstanceKlass::vtable_start_offset() * wordSize;
+  int vtable_base = in_bytes(Klass::vtable_start_offset());
   int itentry_off = itableMethodEntry::method_offset_in_bytes();
   int scan_step   = itableOffsetEntry::size() * wordSize;
-  int vte_size    = vtableEntry::size() * wordSize;
+  int vte_size    = vtableEntry::size_in_bytes();
   Address::ScaleFactor times_vte_scale = Address::times_ptr;
   assert(vte_size == wordSize, "else adjust times_vte_scale");
 
-  movl(scan_temp, Address(recv_klass, InstanceKlass::vtable_length_offset() * wordSize));
+  movl(scan_temp, Address(recv_klass, Klass::vtable_length_offset()));
 
   // %%% Could store the aligned, prescaled offset in the klassoop.
   lea(scan_temp, Address(recv_klass, scan_temp, times_vte_scale, vtable_base));
-  if (HeapWordsPerLong > 1) {
-    // Round up to align_object_offset boundary
-    // see code for InstanceKlass::start_of_itable!
-    round_to(scan_temp, BytesPerLong);
-  }
 
   // Adjust recv_klass by scaled itable_index, so we can free itable_index.
   assert(itableMethodEntry::size() * wordSize == wordSize, "adjust the scaling in the code below");
@@ -5930,7 +5925,7 @@
 void MacroAssembler::lookup_virtual_method(Register recv_klass,
                                            RegisterOrConstant vtable_index,
                                            Register method_result) {
-  const int base = InstanceKlass::vtable_start_offset() * wordSize;
+  const int base = in_bytes(Klass::vtable_start_offset());
   assert(vtableEntry::size() * wordSize == wordSize, "else adjust the scaling in the code below");
   Address vtable_entry_addr(recv_klass,
                             vtable_index, Address::times_ptr,
--- a/hotspot/src/cpu/x86/vm/vtableStubs_x86_32.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/x86/vm/vtableStubs_x86_32.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -85,7 +85,7 @@
   if (DebugVtables) {
     Label L;
     // check offset vs vtable length
-    __ cmpl(Address(rax, InstanceKlass::vtable_length_offset()*wordSize), vtable_index*vtableEntry::size());
+    __ cmpl(Address(rax, Klass::vtable_length_offset()), vtable_index*vtableEntry::size());
     __ jcc(Assembler::greater, L);
     __ movl(rbx, vtable_index);
     __ call_VM(noreg, CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), rcx, rbx);
--- a/hotspot/src/cpu/x86/vm/vtableStubs_x86_64.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/cpu/x86/vm/vtableStubs_x86_64.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -77,7 +77,7 @@
   if (DebugVtables) {
     Label L;
     // check offset vs vtable length
-    __ cmpl(Address(rax, InstanceKlass::vtable_length_offset() * wordSize),
+    __ cmpl(Address(rax, Klass::vtable_length_offset()),
             vtable_index * vtableEntry::size());
     __ jcc(Assembler::greater, L);
     __ movl(rbx, vtable_index);
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java	Mon Feb 29 08:12:22 2016 +0000
@@ -141,15 +141,19 @@
         return;
     }
 
+    // Create frame first, to catch any GUI creation issues
+    // before we initialize agent
+
+    frame = new JFrame("HSDB - HotSpot Debugger");
+    frame.setSize(800, 600);
+    frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+    frame.addWindowListener(new CloseUI());
+
     agent = new HotSpotAgent();
     workerThread = new WorkerThread();
     attachMenuItems = new java.util.ArrayList();
     detachMenuItems = new java.util.ArrayList();
 
-    frame = new JFrame("HSDB - HotSpot Debugger");
-    frame.setSize(800, 600);
-    frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-    frame.addWindowListener(new CloseUI());
 
     JMenuBar menuBar = new JMenuBar();
 
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ArrayKlass.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ArrayKlass.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,7 +48,6 @@
     dimension          = new CIntField(type.getCIntegerField("_dimension"), 0);
     higherDimension    = new MetadataField(type.getAddressField("_higher_dimension"), 0);
     lowerDimension     = new MetadataField(type.getAddressField("_lower_dimension"), 0);
-    vtableLen          = new CIntField(type.getCIntegerField("_vtable_len"), 0);
     javaLangCloneableName = null;
     javaLangObjectName = null;
     javaIoSerializableName = null;
@@ -61,7 +60,6 @@
   private static CIntField dimension;
   private static MetadataField  higherDimension;
   private static MetadataField  lowerDimension;
-  private static CIntField vtableLen;
 
   public Klass getJavaSuper() {
     SystemDictionary sysDict = VM.getVM().getSystemDictionary();
@@ -71,7 +69,6 @@
   public long  getDimension()       { return         dimension.getValue(this); }
   public Klass getHigherDimension() { return (Klass) higherDimension.getValue(this); }
   public Klass getLowerDimension()  { return (Klass) lowerDimension.getValue(this); }
-  public long  getVtableLen()       { return         vtableLen.getValue(this); }
 
   // constant class names - javaLangCloneable, javaIoSerializable, javaLangObject
   // Initialized lazily to avoid initialization ordering dependencies between ArrayKlass and SymbolTable
@@ -140,6 +137,5 @@
       visitor.doCInt(dimension, true);
     visitor.doMetadata(higherDimension, true);
     visitor.doMetadata(lowerDimension, true);
-      visitor.doCInt(vtableLen, true);
     }
   }
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPool.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPool.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -696,7 +696,7 @@
   }
 
   public long getSize() {
-    return Oop.alignObjectSize(headerSize + getLength());
+    return alignSize(headerSize + getLength());
   }
 
   //----------------------------------------------------------------------
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPoolCache.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPoolCache.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,7 +70,7 @@
   public ConstantPool getConstants() { return (ConstantPool) constants.getValue(this); }
 
   public long getSize() {
-    return Oop.alignObjectSize(baseOffset + getLength() * elementSize);
+    return alignSize(baseOffset + getLength() * elementSize);
   }
 
   public ConstantPoolCacheEntry getEntryAt(int i) {
@@ -79,8 +79,7 @@
   }
 
   public int getIntAt(int entry, int fld) {
-    //alignObjectSize ?
-    long offset = baseOffset + /*alignObjectSize*/entry * elementSize + fld * intSize;
+    long offset = baseOffset + entry * elementSize + fld * intSize;
     return (int) getAddress().getCIntegerAt(offset, intSize, true );
   }
 
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -84,13 +84,12 @@
     nonstaticOopMapSize  = new CIntField(type.getCIntegerField("_nonstatic_oop_map_size"), 0);
     isMarkedDependent    = new CIntField(type.getCIntegerField("_is_marked_dependent"), 0);
     initState            = new CIntField(type.getCIntegerField("_init_state"), 0);
-    vtableLen            = new CIntField(type.getCIntegerField("_vtable_len"), 0);
     itableLen            = new CIntField(type.getCIntegerField("_itable_len"), 0);
     breakpoints          = type.getAddressField("_breakpoints");
     genericSignatureIndex = new CIntField(type.getCIntegerField("_generic_signature_index"), 0);
     majorVersion         = new CIntField(type.getCIntegerField("_major_version"), 0);
     minorVersion         = new CIntField(type.getCIntegerField("_minor_version"), 0);
-    headerSize           = Oop.alignObjectOffset(type.getSize());
+    headerSize           = type.getSize();
 
     // read field offset constants
     ACCESS_FLAGS_OFFSET            = db.lookupIntConstant("FieldInfo::access_flags_offset").intValue();
@@ -143,7 +142,6 @@
   private static CIntField nonstaticOopMapSize;
   private static CIntField isMarkedDependent;
   private static CIntField initState;
-  private static CIntField vtableLen;
   private static CIntField itableLen;
   private static AddressField breakpoints;
   private static CIntField genericSignatureIndex;
@@ -242,8 +240,7 @@
   }
 
   public long getSize() {
-    return Oop.alignObjectSize(getHeaderSize() + Oop.alignObjectOffset(getVtableLen()) +
-                               Oop.alignObjectOffset(getItableLen()) + Oop.alignObjectOffset(getNonstaticOopMapSize()));
+    return alignSize(getHeaderSize() + getVtableLen() + getItableLen() + getNonstaticOopMapSize());
   }
 
   public static long getHeaderSize() { return headerSize; }
@@ -352,7 +349,6 @@
   public long      getStaticOopFieldCount() { return                staticOopFieldCount.getValue(this); }
   public long      getNonstaticOopMapSize() { return                nonstaticOopMapSize.getValue(this); }
   public boolean   getIsMarkedDependent()   { return                isMarkedDependent.getValue(this) != 0; }
-  public long      getVtableLen()           { return                vtableLen.getValue(this); }
   public long      getItableLen()           { return                itableLen.getValue(this); }
   public long      majorVersion()           { return                majorVersion.getValue(this); }
   public long      minorVersion()           { return                minorVersion.getValue(this); }
@@ -548,7 +544,6 @@
       visitor.doCInt(nonstaticOopMapSize, true);
       visitor.doCInt(isMarkedDependent, true);
       visitor.doCInt(initState, true);
-      visitor.doCInt(vtableLen, true);
       visitor.doCInt(itableLen, true);
     }
 
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Klass.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Klass.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,6 +61,7 @@
     }
     subklass     = new MetadataField(type.getAddressField("_subklass"), 0);
     nextSibling  = new MetadataField(type.getAddressField("_next_sibling"), 0);
+    vtableLen    = new CIntField(type.getCIntegerField("_vtable_len"), 0);
 
     LH_INSTANCE_SLOW_PATH_BIT  = db.lookupIntConstant("Klass::_lh_instance_slow_path_bit").intValue();
     LH_LOG2_ELEMENT_SIZE_SHIFT = db.lookupIntConstant("Klass::_lh_log2_element_size_shift").intValue();
@@ -71,6 +72,7 @@
     LH_ARRAY_TAG_OBJ_VALUE     = db.lookupIntConstant("Klass::_lh_array_tag_obj_value").intValue();
   }
 
+
   public Klass(Address addr) {
     super(addr);
   }
@@ -91,6 +93,7 @@
   private static MetadataField  subklass;
   private static MetadataField  nextSibling;
   private static sun.jvm.hotspot.types.Field traceIDField;
+  private static CIntField vtableLen;
 
   private Address getValue(AddressField field) {
     return addr.getAddressAt(field.getOffset());
@@ -111,6 +114,7 @@
   public AccessFlags getAccessFlagsObj(){ return new AccessFlags(getAccessFlags());      }
   public Klass    getSubklassKlass()    { return (Klass)    subklass.getValue(this);     }
   public Klass    getNextSiblingKlass() { return (Klass)    nextSibling.getValue(this);  }
+  public long     getVtableLen()        { return            vtableLen.getValue(this); }
 
   public long traceID() {
     if (traceIDField == null) return 0;
@@ -179,6 +183,7 @@
       visitor.doCInt(accessFlags, true);
     visitor.doMetadata(subklass, true);
     visitor.doMetadata(nextSibling, true);
+    visitor.doCInt(vtableLen, true);
     }
 
   public long getObjectSize() {
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Metadata.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Metadata.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,6 +44,11 @@
     super(addr);
   }
 
+  public static long alignSize(long size) {
+    // natural word size.
+    return VM.getVM().alignUp(size, VM.getVM().getBytesPerWord());
+  }
+
   private static VirtualBaseConstructor<Metadata> metadataConstructor;
 
   private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/MethodData.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/MethodData.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -252,7 +252,7 @@
   }
 
   int size() {
-    return (int)Oop.alignObjectSize(VM.getVM().alignUp(sizeInBytes(), VM.getVM().getBytesPerWord())/VM.getVM().getBytesPerWord());
+    return (int)alignSize(VM.getVM().alignUp(sizeInBytes(), VM.getVM().getBytesPerWord())/VM.getVM().getBytesPerWord());
   }
 
   ParametersTypeData<Klass,Method> parametersTypeData() {
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/WorkerThread.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/WorkerThread.java	Mon Feb 29 08:12:22 2016 +0000
@@ -35,7 +35,11 @@
   public WorkerThread() {
     mqb = new MessageQueueBackend();
     mq = mqb.getFirstQueue();
-    new Thread(new MainLoop()).start();
+
+    // Enable to terminate this worker during runnning by daemonize.
+    Thread mqthread = new Thread(new MainLoop());
+    mqthread.setDaemon(true);
+    mqthread.start();
   }
 
   /** Runs the given Runnable in the thread represented by this
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.aarch64/src/jdk/vm/ci/aarch64/AArch64.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.aarch64/src/jdk/vm/ci/aarch64/AArch64.java	Mon Feb 29 08:12:22 2016 +0000
@@ -76,14 +76,14 @@
     public static final Register zr = r31;
     public static final Register sp = r31;
 
+    // @formatter:off
     public static final Register[] cpuRegisters = {
-        // @formatter:off
         r0,  r1,  r2,  r3,  r4,  r5,  r6,  r7,
         r8,  r9,  r10, r11, r12, r13, r14, r15,
         r16, r17, r18, r19, r20, r21, r22, r23,
         r24, r25, r26, r27, r28, r29, r30, r31
-        // @formatter:on
     };
+    // @formatter:on
 
     public static final RegisterCategory SIMD = new RegisterCategory("SIMD");
 
@@ -121,17 +121,17 @@
     public static final Register v30 = new Register(62, 30, "v30", SIMD);
     public static final Register v31 = new Register(63, 31, "v31", SIMD);
 
+    // @formatter:off
     public static final Register[] simdRegisters = {
-        // @formatter:off
         v0,  v1,  v2,  v3,  v4,  v5,  v6,  v7,
         v8,  v9,  v10, v11, v12, v13, v14, v15,
         v16, v17, v18, v19, v20, v21, v22, v23,
         v24, v25, v26, v27, v28, v29, v30, v31
-        // @formatter:on
     };
+    // @formatter:on
 
+    // @formatter:off
     public static final Register[] allRegisters = {
-        // @formatter:off
         r0,  r1,  r2,  r3,  r4,  r5,  r6,  r7,
         r8,  r9,  r10, r11, r12, r13, r14, r15,
         r16, r17, r18, r19, r20, r21, r22, r23,
@@ -141,14 +141,14 @@
         v8,  v9,  v10, v11, v12, v13, v14, v15,
         v16, v17, v18, v19, v20, v21, v22, v23,
         v24, v25, v26, v27, v28, v29, v30, v31
-        // @formatter:on
     };
+    // @formatter:on
 
     /**
      * Basic set of CPU features mirroring what is returned from the cpuid instruction. See:
      * {@code VM_Version::cpuFeatureFlags}.
      */
-    public static enum CPUFeature {
+    public enum CPUFeature {
         FP,
         ASIMD,
         EVTSTRM,
@@ -166,7 +166,7 @@
     /**
      * Set of flags to control code emission.
      */
-    public static enum Flag {
+    public enum Flag {
         UseBarriersForVolatile,
         UseCRC32,
         UseNeon
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.aarch64/src/jdk/vm/ci/aarch64/AArch64Kind.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.aarch64/src/jdk/vm/ci/aarch64/AArch64Kind.java	Mon Feb 29 08:12:22 2016 +0000
@@ -58,13 +58,13 @@
     private final AArch64Kind scalar;
     private final EnumKey<AArch64Kind> key = new EnumKey<>(this);
 
-    private AArch64Kind(int size) {
+    AArch64Kind(int size) {
         this.size = size;
         this.scalar = this;
         this.vectorLength = 1;
     }
 
-    private AArch64Kind(int size, AArch64Kind scalar) {
+    AArch64Kind(int size, AArch64Kind scalar) {
         this.size = size;
         this.scalar = scalar;
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.amd64/src/jdk/vm/ci/amd64/AMD64.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.amd64/src/jdk/vm/ci/amd64/AMD64.java	Mon Feb 29 08:12:22 2016 +0000
@@ -169,7 +169,7 @@
      * Basic set of CPU features mirroring what is returned from the cpuid instruction. See:
      * {@code VM_Version::cpuFeatureFlags}.
      */
-    public static enum CPUFeature {
+    public enum CPUFeature {
         CX8,
         CMOV,
         FXSR,
@@ -210,7 +210,7 @@
     /**
      * Set of flags to control code emission.
      */
-    public static enum Flag {
+    public enum Flag {
         UseCountLeadingZerosInstruction,
         UseCountTrailingZerosInstruction
     }
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.amd64/src/jdk/vm/ci/amd64/AMD64Kind.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.amd64/src/jdk/vm/ci/amd64/AMD64Kind.java	Mon Feb 29 08:12:22 2016 +0000
@@ -74,13 +74,13 @@
     private final AMD64Kind scalar;
     private final EnumKey<AMD64Kind> key = new EnumKey<>(this);
 
-    private AMD64Kind(int size) {
+    AMD64Kind(int size) {
         this.size = size;
         this.scalar = this;
         this.vectorLength = 1;
     }
 
-    private AMD64Kind(int size, AMD64Kind scalar) {
+    AMD64Kind(int size, AMD64Kind scalar) {
         this.size = size;
         this.scalar = scalar;
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/SourceStackTrace.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/SourceStackTrace.java	Mon Feb 29 08:12:22 2016 +0000
@@ -23,7 +23,7 @@
 package jdk.vm.ci.code;
 
 /**
- * Class representing a exception with a stack trace of the currently processed position in the
+ * Class representing an exception with a stack trace of the currently processed position in the
  * compiled Java program instead of the stack trace of the compiler. The exception of the compiler
  * is saved as the cause of this exception.
  */
@@ -36,7 +36,7 @@
             private static final long serialVersionUID = 6279381376051787907L;
 
             @Override
-            public final synchronized Throwable fillInStackTrace() {
+            public synchronized Throwable fillInStackTrace() {
                 assert elements != null;
                 setStackTrace(elements);
                 return this;
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCallingConventionType.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCallingConventionType.java	Mon Feb 29 08:12:22 2016 +0000
@@ -49,7 +49,7 @@
 
     public static final Type[] VALUES = values();
 
-    private HotSpotCallingConventionType(boolean out) {
+    HotSpotCallingConventionType(boolean out) {
         this.out = out;
     }
 }
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledCode.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledCode.java	Mon Feb 29 08:12:22 2016 +0000
@@ -24,6 +24,7 @@
 
 import jdk.vm.ci.code.BytecodeFrame;
 import jdk.vm.ci.code.CompiledCode;
+import jdk.vm.ci.code.StackSlot;
 import jdk.vm.ci.code.site.DataPatch;
 import jdk.vm.ci.code.site.Infopoint;
 import jdk.vm.ci.code.site.Site;
@@ -99,9 +100,9 @@
     protected final int totalFrameSize;
 
     /**
-     * Offset in bytes for the custom stack area (relative to sp).
+     * The deopt rescue slot. Must be non-null if there is a safepoint in the method.
      */
-    protected final int customStackAreaOffset;
+    protected final StackSlot deoptRescueSlot;
 
     public static class Comment {
 
@@ -115,7 +116,7 @@
     }
 
     public HotSpotCompiledCode(String name, byte[] targetCode, int targetCodeSize, Site[] sites, Assumption[] assumptions, ResolvedJavaMethod[] methods, Comment[] comments, byte[] dataSection,
-                    int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, int customStackAreaOffset) {
+                    int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, StackSlot deoptRescueSlot) {
         this.name = name;
         this.targetCode = targetCode;
         this.targetCodeSize = targetCodeSize;
@@ -129,7 +130,7 @@
         this.dataSectionPatches = dataSectionPatches;
         this.isImmutablePIC = isImmutablePIC;
         this.totalFrameSize = totalFrameSize;
-        this.customStackAreaOffset = customStackAreaOffset;
+        this.deoptRescueSlot = deoptRescueSlot;
 
         assert validateFrames();
     }
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledNmethod.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotCompiledNmethod.java	Mon Feb 29 08:12:22 2016 +0000
@@ -22,6 +22,7 @@
  */
 package jdk.vm.ci.hotspot;
 
+import jdk.vm.ci.code.StackSlot;
 import jdk.vm.ci.code.site.DataPatch;
 import jdk.vm.ci.code.site.Site;
 import jdk.vm.ci.inittimer.SuppressFBWarnings;
@@ -55,9 +56,9 @@
     @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "set by the VM") private String installationFailureMessage;
 
     public HotSpotCompiledNmethod(String name, byte[] targetCode, int targetCodeSize, Site[] sites, Assumption[] assumptions, ResolvedJavaMethod[] methods, Comment[] comments, byte[] dataSection,
-                    int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, int customStackAreaOffset, HotSpotResolvedJavaMethod method, int entryBCI,
+                    int dataSectionAlignment, DataPatch[] dataSectionPatches, boolean isImmutablePIC, int totalFrameSize, StackSlot deoptRescueSlot, HotSpotResolvedJavaMethod method, int entryBCI,
                     int id, long jvmciEnv, boolean hasUnsafeAccess) {
-        super(name, targetCode, targetCodeSize, sites, assumptions, methods, comments, dataSection, dataSectionAlignment, dataSectionPatches, isImmutablePIC, totalFrameSize, customStackAreaOffset);
+        super(name, targetCode, targetCodeSize, sites, assumptions, methods, comments, dataSection, dataSectionAlignment, dataSectionPatches, isImmutablePIC, totalFrameSize, deoptRescueSlot);
         this.method = method;
         this.entryBCI = entryBCI;
         this.id = id;
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java	Mon Feb 29 08:12:22 2016 +0000
@@ -126,7 +126,7 @@
         private static final int InternalMin = config().jvmConstantInternalMin;
         private static final int InternalMax = config().jvmConstantInternalMax;
 
-        private JVM_CONSTANT(int tag) {
+        JVM_CONSTANT(int tag) {
             this.tag = tag;
         }
 
@@ -171,7 +171,7 @@
         int lastCpi = Integer.MIN_VALUE;
         JavaType javaType;
 
-        public LookupTypeCacheElement(int lastCpi, JavaType javaType) {
+        LookupTypeCacheElement(int lastCpi, JavaType javaType) {
             super();
             this.lastCpi = lastCpi;
             this.javaType = javaType;
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotForeignCallTarget.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotForeignCallTarget.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,9 @@
  */
 package jdk.vm.ci.hotspot;
 
-public class HotSpotForeignCallTarget {
+import jdk.vm.ci.meta.InvokeTarget;
+
+public class HotSpotForeignCallTarget implements InvokeTarget {
 
     /**
      * The entry point address of this call's target.
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java	Mon Feb 29 08:12:22 2016 +0000
@@ -43,6 +43,7 @@
 import jdk.vm.ci.code.InstalledCode;
 import jdk.vm.ci.common.JVMCIError;
 import jdk.vm.ci.inittimer.InitTimer;
+import jdk.vm.ci.inittimer.SuppressFBWarnings;
 import jdk.vm.ci.meta.JVMCIMetaAccessContext;
 import jdk.vm.ci.meta.JavaKind;
 import jdk.vm.ci.meta.JavaType;
@@ -115,7 +116,7 @@
         private boolean isDefault;
         private final String help;
 
-        private Option(Class<?> type, Object defaultValue, String help) {
+        Option(Class<?> type, Object defaultValue, String help) {
             assert Character.isUpperCase(name().charAt(0)) : "Option name must start with upper-case letter: " + name();
             this.type = type;
             this.value = UNINITIALIZED;
@@ -123,6 +124,7 @@
             this.help = help;
         }
 
+        @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "sentinel must be String since it's a static final in an enum")
         private Object getValue() {
             if (value == UNINITIALIZED) {
                 String propertyValue = VM.getSavedProperty(JVMCI_OPTION_PROPERTY_PREFIX + name());
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -38,7 +38,7 @@
 
     protected final HotSpotJVMCIRuntimeProvider runtime;
 
-    public HotSpotMemoryAccessProviderImpl(HotSpotJVMCIRuntimeProvider runtime) {
+    HotSpotMemoryAccessProviderImpl(HotSpotJVMCIRuntimeProvider runtime) {
         this.runtime = runtime;
     }
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodData.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodData.java	Mon Feb 29 08:12:22 2016 +0000
@@ -413,7 +413,7 @@
         private static final int COUNTER_DATA_SIZE = cellIndexToOffset(1);
         private static final int COUNTER_DATA_COUNT_OFFSET = cellIndexToOffset(config.methodDataCountOffset);
 
-        public CounterData() {
+        CounterData() {
             super(Tag.CounterData, COUNTER_DATA_SIZE);
         }
 
@@ -442,7 +442,7 @@
         protected static final int TAKEN_COUNT_OFFSET = cellIndexToOffset(config.jumpDataTakenOffset);
         protected static final int TAKEN_DISPLACEMENT_OFFSET = cellIndexToOffset(config.jumpDataDisplacementOffset);
 
-        public JumpData() {
+        JumpData() {
             super(Tag.JumpData, JUMP_DATA_SIZE);
         }
 
@@ -476,7 +476,7 @@
         final long[] counts;
         final long totalCount;
 
-        public RawItemProfile(int entries, T[] items, long[] counts, long totalCount) {
+        RawItemProfile(int entries, T[] items, long[] counts, long totalCount) {
             this.entries = entries;
             this.items = items;
             this.counts = counts;
@@ -587,7 +587,7 @@
 
         private static final int TYPE_CHECK_DATA_SIZE = cellIndexToOffset(2) + TYPE_DATA_ROW_SIZE * config.typeProfileWidth;
 
-        public ReceiverTypeData() {
+        ReceiverTypeData() {
             super(Tag.ReceiverTypeData, TYPE_CHECK_DATA_SIZE);
         }
 
@@ -612,7 +612,7 @@
         private static final int VIRTUAL_CALL_DATA_FIRST_METHOD_OFFSET = TYPE_DATA_FIRST_TYPE_OFFSET + TYPE_DATA_ROW_SIZE * config.typeProfileWidth;
         private static final int VIRTUAL_CALL_DATA_FIRST_METHOD_COUNT_OFFSET = TYPE_DATA_FIRST_TYPE_COUNT_OFFSET + TYPE_DATA_ROW_SIZE * config.typeProfileWidth;
 
-        public VirtualCallData() {
+        VirtualCallData() {
             super(Tag.VirtualCallData, VIRTUAL_CALL_DATA_SIZE);
         }
 
@@ -714,7 +714,7 @@
 
     private static class VirtualCallTypeData extends VirtualCallData {
 
-        public VirtualCallTypeData() {
+        VirtualCallTypeData() {
             super(Tag.VirtualCallTypeData, 0);
         }
 
@@ -730,7 +730,7 @@
         private static final int RET_DATA_ROW_SIZE = cellsToBytes(3);
         private static final int RET_DATA_SIZE = cellIndexToOffset(1) + RET_DATA_ROW_SIZE * config.bciProfileWidth;
 
-        public RetData() {
+        RetData() {
             super(Tag.RetData, RET_DATA_SIZE);
         }
     }
@@ -740,7 +740,7 @@
         private static final int BRANCH_DATA_SIZE = cellIndexToOffset(3);
         private static final int NOT_TAKEN_COUNT_OFFSET = cellIndexToOffset(config.branchDataNotTakenOffset);
 
-        public BranchData() {
+        BranchData() {
             super(Tag.BranchData, BRANCH_DATA_SIZE);
         }
 
@@ -773,7 +773,7 @@
         private static final int ARRAY_DATA_LENGTH_OFFSET = cellIndexToOffset(config.arrayDataArrayLenOffset);
         protected static final int ARRAY_DATA_START_OFFSET = cellIndexToOffset(config.arrayDataArrayStartOffset);
 
-        public ArrayData(Tag tag, int staticSize) {
+        ArrayData(Tag tag, int staticSize) {
             super(tag, staticSize);
         }
 
@@ -800,7 +800,7 @@
         private static final int MULTI_BRANCH_DATA_FIRST_COUNT_OFFSET = ARRAY_DATA_START_OFFSET + cellsToBytes(0);
         private static final int MULTI_BRANCH_DATA_FIRST_DISPLACEMENT_OFFSET = ARRAY_DATA_START_OFFSET + cellsToBytes(1);
 
-        public MultiBranchData() {
+        MultiBranchData() {
             super(Tag.MultiBranchData, MULTI_BRANCH_DATA_SIZE);
         }
 
@@ -882,13 +882,13 @@
 
         private static final int ARG_INFO_DATA_SIZE = cellIndexToOffset(1);
 
-        public ArgInfoData() {
+        ArgInfoData() {
             super(Tag.ArgInfoData, ARG_INFO_DATA_SIZE);
         }
     }
 
     private static class UnknownProfileData extends AbstractMethodData {
-        public UnknownProfileData(Tag tag) {
+        UnknownProfileData(Tag tag) {
             super(tag, 0);
         }
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodDataAccessor.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodDataAccessor.java	Mon Feb 29 08:12:22 2016 +0000
@@ -56,7 +56,7 @@
 
         private final int value;
 
-        private Tag(int value) {
+        Tag(int value) {
             this.value = value;
         }
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodUnresolved.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodUnresolved.java	Mon Feb 29 08:12:22 2016 +0000
@@ -34,7 +34,7 @@
     private final Signature signature;
     protected JavaType holder;
 
-    public HotSpotMethodUnresolved(String name, Signature signature, JavaType holder) {
+    HotSpotMethodUnresolved(String name, Signature signature, JavaType holder) {
         super(name);
         this.holder = holder;
         this.signature = signature;
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaFieldImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaFieldImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -56,7 +56,7 @@
     public static class FieldLocationIdentity extends LocationIdentity {
         HotSpotResolvedJavaField inner;
 
-        public FieldLocationIdentity(HotSpotResolvedJavaFieldImpl inner) {
+        FieldLocationIdentity(HotSpotResolvedJavaFieldImpl inner) {
             this.inner = inner;
         }
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -597,7 +597,7 @@
         }
         HotSpotVMConfig config = config();
         final int vtableIndex = getVtableIndex((HotSpotResolvedObjectTypeImpl) resolved);
-        return config.instanceKlassVtableStartOffset() + vtableIndex * config.vtableEntrySize + config.vtableEntryMethodOffset;
+        return config.klassVtableStartOffset + vtableIndex * config.vtableEntrySize + config.vtableEntryMethodOffset;
     }
 
     @Override
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,7 +33,6 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
-import java.net.URL;
 import java.nio.ByteOrder;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -49,7 +48,6 @@
 import jdk.vm.ci.meta.JavaConstant;
 import jdk.vm.ci.meta.JavaKind;
 import jdk.vm.ci.meta.JavaType;
-import jdk.vm.ci.meta.MetaUtil;
 import jdk.vm.ci.meta.ModifiersProvider;
 import jdk.vm.ci.meta.ResolvedJavaField;
 import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -472,8 +470,8 @@
             /* Everything has the core vtable of java.lang.Object */
             return config.baseVtableLength();
         }
-        int result = UNSAFE.getInt(getMetaspaceKlass() + config.instanceKlassVtableLengthOffset) / (config.vtableEntrySize / config.heapWordSize);
-        assert result >= config.baseVtableLength() : UNSAFE.getInt(getMetaspaceKlass() + config.instanceKlassVtableLengthOffset) + " " + config.vtableEntrySize;
+        int result = UNSAFE.getInt(getMetaspaceKlass() + config.klassVtableLengthOffset) / (config.vtableEntrySize / config.heapWordSize);
+        assert result >= config.baseVtableLength() : UNSAFE.getInt(getMetaspaceKlass() + config.klassVtableLengthOffset) + " " + config.vtableEntrySize;
         return result;
     }
 
@@ -555,7 +553,7 @@
          *
          * @param index index to the fields array
          */
-        public FieldInfo(int index) {
+        FieldInfo(int index) {
             HotSpotVMConfig config = config();
             // Get Klass::_fields
             final long metaspaceFields = UNSAFE.getAddress(getMetaspaceKlass() + config.instanceKlassFieldsOffset);
@@ -839,12 +837,6 @@
     }
 
     @Override
-    public URL getClassFilePath() {
-        Class<?> cls = mirror();
-        return cls.getResource(MetaUtil.getSimpleName(cls, true).replace('.', '$') + ".class");
-    }
-
-    @Override
     public boolean isLocal() {
         return mirror().isLocalClass();
     }
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedPrimitiveType.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedPrimitiveType.java	Mon Feb 29 08:12:22 2016 +0000
@@ -27,7 +27,6 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Array;
 import java.lang.reflect.Modifier;
-import java.net.URL;
 
 import jdk.vm.ci.common.JVMCIError;
 import jdk.vm.ci.meta.Assumptions.AssumptionResult;
@@ -240,11 +239,6 @@
     }
 
     @Override
-    public URL getClassFilePath() {
-        return null;
-    }
-
-    @Override
     public boolean isLocal() {
         return false;
     }
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -360,7 +360,7 @@
 
         private final long address;
 
-        public VMFields(long address) {
+        VMFields(long address) {
             this.address = address;
         }
 
@@ -477,7 +477,7 @@
 
         private final long address;
 
-        public VMTypes(long address) {
+        VMTypes(long address) {
             this.address = address;
         }
 
@@ -580,7 +580,7 @@
 
         private final long address;
 
-        public VMIntConstants(long address) {
+        VMIntConstants(long address) {
             this.address = address;
         }
 
@@ -639,7 +639,7 @@
 
         private final long address;
 
-        public VMLongConstants(long address) {
+        VMLongConstants(long address) {
             this.address = address;
         }
 
@@ -698,7 +698,7 @@
 
         private final long address;
 
-        public VMAddresses(long address) {
+        VMAddresses(long address) {
             this.address = address;
         }
 
@@ -753,7 +753,7 @@
         private final long nameOffset;
         private final long addrOffset;
 
-        public Flags(HashMap<String, VMFields.Field> vmStructs, HashMap<String, VMTypes.Type> vmTypes) {
+        Flags(HashMap<String, VMFields.Field> vmStructs, HashMap<String, VMTypes.Type> vmTypes) {
             address = vmStructs.get("Flag::flags").getValue();
             entrySize = vmTypes.get("Flag").getSize();
             typeOffset = vmStructs.get("Flag::_type").getOffset();
@@ -1031,19 +1031,12 @@
     @HotSpotVMField(name = "InstanceKlass::_init_state", type = "u1", get = HotSpotVMField.Type.OFFSET) @Stable public int instanceKlassInitStateOffset;
     @HotSpotVMField(name = "InstanceKlass::_constants", type = "ConstantPool*", get = HotSpotVMField.Type.OFFSET) @Stable public int instanceKlassConstantsOffset;
     @HotSpotVMField(name = "InstanceKlass::_fields", type = "Array<u2>*", get = HotSpotVMField.Type.OFFSET) @Stable public int instanceKlassFieldsOffset;
-    @HotSpotVMField(name = "CompilerToVM::Data::InstanceKlass_vtable_start_offset", type = "int", get = HotSpotVMField.Type.VALUE) @Stable public int instanceKlassVtableStartOffset;
-    @HotSpotVMField(name = "CompilerToVM::Data::InstanceKlass_vtable_length_offset", type = "int", get = HotSpotVMField.Type.VALUE) @Stable public int instanceKlassVtableLengthOffset;
+    @HotSpotVMField(name = "CompilerToVM::Data::Klass_vtable_start_offset", type = "int", get = HotSpotVMField.Type.VALUE) @Stable public int klassVtableStartOffset;
+    @HotSpotVMField(name = "CompilerToVM::Data::Klass_vtable_length_offset", type = "int", get = HotSpotVMField.Type.VALUE) @Stable public int klassVtableLengthOffset;
 
     @HotSpotVMConstant(name = "InstanceKlass::linked") @Stable public int instanceKlassStateLinked;
     @HotSpotVMConstant(name = "InstanceKlass::fully_initialized") @Stable public int instanceKlassStateFullyInitialized;
 
-    /**
-     * See {@code InstanceKlass::vtable_start_offset()}.
-     */
-    public final int instanceKlassVtableStartOffset() {
-        return instanceKlassVtableStartOffset * heapWordSize;
-    }
-
     @HotSpotVMType(name = "arrayOopDesc", get = HotSpotVMType.Type.SIZE) @Stable public int arrayOopDescSize;
 
     /**
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/DeoptimizationAction.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/DeoptimizationAction.java	Mon Feb 29 08:12:22 2016 +0000
@@ -59,7 +59,7 @@
 
     private final boolean invalidatesCompilation;
 
-    private DeoptimizationAction(boolean invalidatesCompilation) {
+    DeoptimizationAction(boolean invalidatesCompilation) {
         this.invalidatesCompilation = invalidatesCompilation;
     }
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/JavaKind.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/JavaKind.java	Mon Feb 29 08:12:22 2016 +0000
@@ -72,7 +72,7 @@
     private final Class<?> boxedJavaClass;
     private final int slotCount;
 
-    private JavaKind(char typeChar, String javaName, int slotCount, boolean isStackInt, Class<?> primitiveJavaClass, Class<?> boxedJavaClass) {
+    JavaKind(char typeChar, String javaName, int slotCount, boolean isStackInt, Class<?> primitiveJavaClass, Class<?> boxedJavaClass) {
         this.typeChar = typeChar;
         this.javaName = javaName;
         this.slotCount = slotCount;
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/LIRKind.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/LIRKind.java	Mon Feb 29 08:12:22 2016 +0000
@@ -57,7 +57,7 @@
  */
 public final class LIRKind {
 
-    private static enum IllegalKind implements PlatformKind {
+    private enum IllegalKind implements PlatformKind {
         ILLEGAL;
 
         private final EnumKey<IllegalKind> key = new EnumKey<>(this);
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MethodHandleAccessProvider.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MethodHandleAccessProvider.java	Mon Feb 29 08:12:22 2016 +0000
@@ -35,7 +35,7 @@
      * Identification for methods defined on the class {@link MethodHandle} that are processed by
      * the {@link MethodHandleAccessProvider}.
      */
-    public enum IntrinsicMethod {
+    enum IntrinsicMethod {
         /** The method {@code MethodHandle.invokeBasic}. */
         INVOKE_BASIC,
         /** The method {@code MethodHandle.linkToStatic}. */
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/PlatformKind.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/PlatformKind.java	Mon Feb 29 08:12:22 2016 +0000
@@ -33,7 +33,7 @@
 
     }
 
-    public class EnumKey<E extends Enum<E>> implements Key {
+    class EnumKey<E extends Enum<E>> implements Key {
         private final Enum<E> e;
 
         public EnumKey(Enum<E> e) {
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ResolvedJavaType.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ResolvedJavaType.java	Mon Feb 29 08:12:22 2016 +0000
@@ -23,7 +23,6 @@
 package jdk.vm.ci.meta;
 
 import java.lang.annotation.Annotation;
-import java.net.URL;
 
 import jdk.vm.ci.meta.Assumptions.AssumptionResult;
 
@@ -308,11 +307,6 @@
     String getSourceFileName();
 
     /**
-     * Returns the class file path - if available - of this type, or {@code null}.
-     */
-    URL getClassFilePath();
-
-    /**
      * Returns {@code true} if the type is a local type.
      */
     boolean isLocal();
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.sparc/src/jdk/vm/ci/sparc/SPARCKind.java	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.sparc/src/jdk/vm/ci/sparc/SPARCKind.java	Mon Feb 29 08:12:22 2016 +0000
@@ -47,13 +47,13 @@
     private final SPARCKind scalar;
     private final EnumKey<SPARCKind> key = new EnumKey<>(this);
 
-    private SPARCKind(int size) {
+    SPARCKind(int size) {
         this.size = size;
         this.scalar = this;
         this.vectorLength = 1;
     }
 
-    private SPARCKind(int size, SPARCKind scalar) {
+    SPARCKind(int size, SPARCKind scalar) {
         this.size = size;
         this.scalar = scalar;
 
--- a/hotspot/src/os/linux/vm/globals_linux.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/os/linux/vm/globals_linux.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,7 +48,10 @@
           "Load DLLs with executable-stack attribute in the VM Thread") \
                                                                         \
   product(bool, UseSHM, false,                                          \
-          "Use SYSV shared memory for large pages")
+          "Use SYSV shared memory for large pages")                     \
+                                                                        \
+  diagnostic(bool, UseCpuAllocPath, false,                              \
+             "Use CPU_ALLOC code path in os::active_processor_count ")
 
 //
 // Defines Linux-specific default values. The flags are available on all
--- a/hotspot/src/os/linux/vm/os_linux.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/os/linux/vm/os_linux.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
 #include "compiler/disassembler.hpp"
 #include "interpreter/interpreter.hpp"
 #include "jvm_linux.h"
+#include "logging/log.hpp"
 #include "memory/allocation.inline.hpp"
 #include "memory/filemap.hpp"
 #include "mutex_linux.inline.hpp"
@@ -106,6 +107,14 @@
 # include <inttypes.h>
 # include <sys/ioctl.h>
 
+#ifndef _GNU_SOURCE
+  #define _GNU_SOURCE
+  #include <sched.h>
+  #undef _GNU_SOURCE
+#else
+  #include <sched.h>
+#endif
+
 // if RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling
 // getrusage() is prepared to handle the associated failure.
 #ifndef RUSAGE_THREAD
@@ -4762,12 +4771,72 @@
   }
 }
 
+// Get the current number of available processors for this process.
+// This value can change at any time during a process's lifetime.
+// sched_getaffinity gives an accurate answer as it accounts for cpusets.
+// If it appears there may be more than 1024 processors then we do a
+// dynamic check - see 6515172 for details.
+// If anything goes wrong we fallback to returning the number of online
+// processors - which can be greater than the number available to the process.
 int os::active_processor_count() {
-  // Linux doesn't yet have a (official) notion of processor sets,
-  // so just return the number of online processors.
-  int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
-  assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");
-  return online_cpus;
+  cpu_set_t cpus;  // can represent at most 1024 (CPU_SETSIZE) processors
+  cpu_set_t* cpus_p = &cpus;
+  int cpus_size = sizeof(cpu_set_t);
+
+  int configured_cpus = processor_count();  // upper bound on available cpus
+  int cpu_count = 0;
+
+  // To enable easy testing of the dynamic path on different platforms we
+  // introduce a diagnostic flag: UseCpuAllocPath
+  if (configured_cpus >= CPU_SETSIZE || UseCpuAllocPath) {
+    // kernel may use a mask bigger than cpu_set_t
+    log_trace(os)("active_processor_count: using dynamic path %s"
+                  "- configured processors: %d",
+                  UseCpuAllocPath ? "(forced) " : "",
+                  configured_cpus);
+    cpus_p = CPU_ALLOC(configured_cpus);
+    if (cpus_p != NULL) {
+      cpus_size = CPU_ALLOC_SIZE(configured_cpus);
+      // zero it just to be safe
+      CPU_ZERO_S(cpus_size, cpus_p);
+    }
+    else {
+       // failed to allocate so fallback to online cpus
+       int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
+       log_trace(os)("active_processor_count: "
+                     "CPU_ALLOC failed (%s) - using "
+                     "online processor count: %d",
+                     strerror(errno), online_cpus);
+       return online_cpus;
+    }
+  }
+  else {
+    log_trace(os)("active_processor_count: using static path - configured processors: %d",
+                  configured_cpus);
+  }
+
+  // pid 0 means the current thread - which we have to assume represents the process
+  if (sched_getaffinity(0, cpus_size, cpus_p) == 0) {
+    if (cpus_p != &cpus) {
+      cpu_count = CPU_COUNT_S(cpus_size, cpus_p);
+    }
+    else {
+      cpu_count = CPU_COUNT(cpus_p);
+    }
+    log_trace(os)("active_processor_count: sched_getaffinity processor count: %d", cpu_count);
+  }
+  else {
+    cpu_count = ::sysconf(_SC_NPROCESSORS_ONLN);
+    warning("sched_getaffinity failed (%s)- using online processor count (%d) "
+            "which may exceed available processors", strerror(errno), cpu_count);
+  }
+
+  if (cpus_p != &cpus) {
+    CPU_FREE(cpus_p);
+  }
+
+  assert(cpu_count > 0 && cpu_count <= processor_count(), "sanity check");
+  return cpu_count;
 }
 
 void os::set_native_thread_name(const char *name) {
--- a/hotspot/src/os/windows/vm/os_windows.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/os/windows/vm/os_windows.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -5267,8 +5267,29 @@
 
 
 bool os::find(address addr, outputStream* st) {
-  // Nothing yet
-  return false;
+  int offset = -1;
+  bool result = false;
+  char buf[256];
+  if (os::dll_address_to_library_name(addr, buf, sizeof(buf), &offset)) {
+    st->print(PTR_FORMAT " ", addr);
+    if (strlen(buf) < sizeof(buf) - 1) {
+      char* p = strrchr(buf, '\\');
+      if (p) {
+        st->print("%s", p + 1);
+      } else {
+        st->print("%s", buf);
+      }
+    } else {
+        // The library name is probably truncated. Let's omit the library name.
+        // See also JDK-8147512.
+    }
+    if (os::dll_address_to_function_name(addr, buf, sizeof(buf), &offset)) {
+      st->print("::%s + 0x%x", buf, offset);
+    }
+    st->cr();
+    result = true;
+  }
+  return result;
 }
 
 LONG WINAPI os::win32::serialize_fault_filter(struct _EXCEPTION_POINTERS* e) {
--- a/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/os_cpu/windows_x86/vm/os_windows_x86.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -599,6 +599,7 @@
   // this is only for the "general purpose" registers
 
 #ifdef AMD64
+  st->print("RIP="); print_location(st, uc->Rip);
   st->print("RAX="); print_location(st, uc->Rax);
   st->print("RBX="); print_location(st, uc->Rbx);
   st->print("RCX="); print_location(st, uc->Rcx);
@@ -616,6 +617,7 @@
   st->print("R14="); print_location(st, uc->R14);
   st->print("R15="); print_location(st, uc->R15);
 #else
+  st->print("EIP="); print_location(st, uc->Eip);
   st->print("EAX="); print_location(st, uc->Eax);
   st->print("EBX="); print_location(st, uc->Ebx);
   st->print("ECX="); print_location(st, uc->Ecx);
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2972,8 +2972,8 @@
                           SharedRuntime::get_resolve_virtual_call_stub(),
                           arg_list, info);
       } else {
-        int entry_offset = InstanceKlass::vtable_start_offset() + x->vtable_index() * vtableEntry::size();
-        int vtable_offset = entry_offset * wordSize + vtableEntry::method_offset_in_bytes();
+        int entry_offset = in_bytes(Klass::vtable_start_offset()) + x->vtable_index() * vtableEntry::size_in_bytes();
+        int vtable_offset = entry_offset + vtableEntry::method_offset_in_bytes();
         __ call_virtual(target, receiver, result_register, vtable_offset, arg_list, info);
       }
       break;
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -34,6 +34,7 @@
 #include "classfile/verifier.hpp"
 #include "classfile/vmSymbols.hpp"
 #include "gc/shared/gcLocker.hpp"
+#include "logging/log.hpp"
 #include "memory/allocation.hpp"
 #include "memory/metadataFactory.hpp"
 #include "memory/oopFactory.hpp"
@@ -79,7 +80,7 @@
 
 #define JAVA_CLASSFILE_MAGIC              0xCAFEBABE
 #define JAVA_MIN_SUPPORTED_VERSION        45
-#define JAVA_MAX_SUPPORTED_VERSION        52
+#define JAVA_MAX_SUPPORTED_VERSION        53
 #define JAVA_MAX_SUPPORTED_MINOR_VERSION  0
 
 // Used for two backward compatibility reasons:
@@ -100,6 +101,8 @@
 // Extension method support.
 #define JAVA_8_VERSION                    52
 
+#define JAVA_9_VERSION                    53
+
 enum { LegalClass, LegalField, LegalMethod }; // used to verify unqualified names
 
 void ClassFileParser::parse_constant_pool_entries(const ClassFileStream* const stream,
@@ -2705,7 +2708,7 @@
                                      ConstMethod::NORMAL,
                                      CHECK_NULL);
 
-  ClassLoadingService::add_class_method_size(m->size()*HeapWordSize);
+  ClassLoadingService::add_class_method_size(m->size()*wordSize);
 
   // Fill in information from fixed part (access_flags already set)
   m->set_constants(_cp);
@@ -4602,8 +4605,8 @@
       }
     } else if (major_gte_15) {
       // Class file version in the interval [JAVA_1_5_VERSION, JAVA_8_VERSION)
-      if (!is_public || is_static || is_final || is_synchronized ||
-          is_native || !is_abstract || is_strict) {
+      if (!is_public || is_private || is_protected || is_static || is_final ||
+          is_synchronized || is_native || !is_abstract || is_strict) {
         is_illegal = true;
       }
     } else {
@@ -5347,30 +5350,12 @@
   ClassLoadingService::notify_class_loaded(ik, false /* not shared class */);
 
   if (!is_internal()) {
-    if (TraceClassLoading) {
-      ResourceMark rm;
-      // print in a single call to reduce interleaving of output
-      if (_stream->source() != NULL) {
-        tty->print("[Loaded %s from %s]\n",
-                   ik->external_name(),
-                   _stream->source());
-      } else if (_loader_data->class_loader() == NULL) {
-        const Klass* const caller =
-          THREAD->is_Java_thread()
-                ? ((JavaThread*)THREAD)->security_get_caller_class(1)
-                : NULL;
-        // caller can be NULL, for example, during a JVMTI VM_Init hook
-        if (caller != NULL) {
-          tty->print("[Loaded %s by instance of %s]\n",
-                     ik->external_name(),
-                     caller->external_name());
-        } else {
-          tty->print("[Loaded %s]\n", ik->external_name());
-        }
-      } else {
-        tty->print("[Loaded %s from %s]\n", ik->external_name(),
-                   _loader_data->class_loader()->klass()->external_name());
-      }
+    if (log_is_enabled(Info, classload)) {
+      ik->print_loading_log(LogLevel::Info, _loader_data, _stream);
+    }
+    // No 'else' here as logging levels are not mutually exclusive
+    if (log_is_enabled(Debug, classload)) {
+      ik->print_loading_log(LogLevel::Debug, _loader_data, _stream);
     }
 
     if (log_is_enabled(Info, classresolve))  {
--- a/hotspot/src/share/vm/classfile/classLoader.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/classLoader.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -578,15 +578,14 @@
         }
       }
     }
-    if (TraceClassLoading || TraceClassPaths) {
+    if (TraceClassPaths) {
       tty->print_cr("[Opened %s]", path);
     }
+    log_info(classload)("opened: %s", path);
   } else {
     // Directory
     new_entry = new ClassPathDirEntry(path);
-    if (TraceClassLoading) {
-      tty->print_cr("[Path %s]", path);
-    }
+    log_info(classload)("path: %s", path);
   }
   return new_entry;
 }
--- a/hotspot/src/share/vm/classfile/classLoaderData.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -54,12 +54,14 @@
 #include "classfile/systemDictionary.hpp"
 #include "code/codeCache.hpp"
 #include "gc/shared/gcLocker.hpp"
+#include "logging/log.hpp"
 #include "memory/metadataFactory.hpp"
 #include "memory/metaspaceShared.hpp"
 #include "memory/oopFactory.hpp"
 #include "oops/objArrayOop.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/atomic.inline.hpp"
+#include "runtime/javaCalls.hpp"
 #include "runtime/jniHandles.hpp"
 #include "runtime/mutex.hpp"
 #include "runtime/safepoint.hpp"
@@ -286,9 +288,9 @@
     _klasses = k;
   }
 
-  if (publicize && TraceClassLoaderData && Verbose && k->class_loader_data() != NULL) {
+  if (publicize && k->class_loader_data() != NULL) {
     ResourceMark rm;
-    tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: "
+    log_trace(classloaderdata)("Adding k: " PTR_FORMAT " %s to CLD: "
                   PTR_FORMAT " loader: " PTR_FORMAT " %s",
                   p2i(k),
                   k->external_name(),
@@ -326,15 +328,16 @@
   // Tell serviceability tools these classes are unloading
   classes_do(InstanceKlass::notify_unload_class);
 
-  if (TraceClassLoaderData) {
+  if (log_is_enabled(Debug, classloaderdata)) {
     ResourceMark rm;
-    tty->print("[ClassLoaderData: unload loader data " INTPTR_FORMAT, p2i(this));
-    tty->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)class_loader()),
+    outputStream* log = LogHandle(classloaderdata)::debug_stream();
+    log->print(": unload loader data " INTPTR_FORMAT, p2i(this));
+    log->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)class_loader()),
                loader_name());
     if (is_anonymous()) {
-      tty->print(" for anonymous class  " INTPTR_FORMAT " ", p2i(_klasses));
+      log->print(" for anonymous class  " INTPTR_FORMAT " ", p2i(_klasses));
     }
-    tty->print_cr("]");
+    log->cr();
   }
 }
 
@@ -408,13 +411,13 @@
       assert (class_loader() == NULL, "Must be");
       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::BootMetaspaceType));
     } else if (is_anonymous()) {
-      if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
-        tty->print_cr("is_anonymous: %s", class_loader()->klass()->internal_name());
+      if (class_loader() != NULL) {
+        log_trace(classloaderdata)("is_anonymous: %s", class_loader()->klass()->internal_name());
       }
       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::AnonymousMetaspaceType));
     } else if (class_loader()->is_a(SystemDictionary::reflect_DelegatingClassLoader_klass())) {
-      if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
-        tty->print_cr("is_reflection: %s", class_loader()->klass()->internal_name());
+      if (class_loader() != NULL) {
+        log_trace(classloaderdata)("is_reflection: %s", class_loader()->klass()->internal_name());
       }
       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::ReflectionMetaspaceType));
     } else {
@@ -601,21 +604,47 @@
     cld->set_next(next);
     ClassLoaderData* exchanged = (ClassLoaderData*)Atomic::cmpxchg_ptr(cld, list_head, next);
     if (exchanged == next) {
-      if (TraceClassLoaderData) {
-        ResourceMark rm;
-        tty->print("[ClassLoaderData: ");
-        tty->print("create class loader data " INTPTR_FORMAT, p2i(cld));
-        tty->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)cld->class_loader()),
-                   cld->loader_name());
-        tty->print_cr("]");
+      if (log_is_enabled(Debug, classloaderdata)) {
+       PauseNoSafepointVerifier pnsv(&no_safepoints); // Need safe points for JavaCalls::call_virtual
+       log_creation(loader, cld, CHECK_NULL);
       }
       return cld;
     }
     next = exchanged;
   } while (true);
+}
 
+void ClassLoaderDataGraph::log_creation(Handle loader, ClassLoaderData* cld, TRAPS) {
+  Handle string;
+  if (loader.not_null()) {
+    // Include the result of loader.toString() in the output. This allows
+    // the user of the log to identify the class loader instance.
+    JavaValue result(T_OBJECT);
+    KlassHandle spec_klass(THREAD, SystemDictionary::ClassLoader_klass());
+    JavaCalls::call_virtual(&result,
+                            loader,
+                            spec_klass,
+                            vmSymbols::toString_name(),
+                            vmSymbols::void_string_signature(),
+                            CHECK);
+    assert(result.get_type() == T_OBJECT, "just checking");
+    string = (oop)result.get_jobject();
+  }
+
+  ResourceMark rm;
+  outputStream* log = LogHandle(classloaderdata)::debug_stream();
+  log->print("create class loader data " INTPTR_FORMAT, p2i(cld));
+  log->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)cld->class_loader()),
+             cld->loader_name());
+
+  if (string.not_null()) {
+    log->print(": ");
+    java_lang_String::print(string(), log);
+  }
+  log->cr();
 }
 
+
 void ClassLoaderDataGraph::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
     cld->oops_do(f, klass_closure, must_claim);
@@ -709,10 +738,11 @@
     if (!curr->claimed()) {
       array->push(curr);
 
-      if (TraceClassLoaderData) {
-        tty->print("[ClassLoaderData] found new CLD: ");
-        curr->print_value_on(tty);
-        tty->cr();
+      if (log_is_enabled(Debug, classloaderdata)) {
+        outputStream* log = LogHandle(classloaderdata)::debug_stream();
+        log->print("found new CLD: ");
+        curr->print_value_on(log);
+        log->cr();
       }
     }
 
--- a/hotspot/src/share/vm/classfile/classLoaderData.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/classLoaderData.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -116,6 +116,7 @@
   static void dump_on(outputStream * const out) PRODUCT_RETURN;
   static void dump() { dump_on(tty); }
   static void verify();
+  static void log_creation(Handle loader, ClassLoaderData* cld, TRAPS);
 
   static bool unload_list_contains(const void* x);
 #ifndef PRODUCT
--- a/hotspot/src/share/vm/classfile/compactHashtable.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/compactHashtable.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -365,14 +365,14 @@
 }
 
 int HashtableTextDump::skip(char must_be_char) {
-  corrupted_if(remain() < 1);
-  corrupted_if(*_p++ != must_be_char);
+  corrupted_if(remain() < 1, "Truncated");
+  corrupted_if(*_p++ != must_be_char, "Unexpected character");
   return 0;
 }
 
 void HashtableTextDump::skip_past(char c) {
   for (;;) {
-    corrupted_if(remain() < 1);
+    corrupted_if(remain() < 1, "Truncated");
     if (*_p++ == c) {
       return;
     }
@@ -381,7 +381,7 @@
 
 void HashtableTextDump::check_version(const char* ver) {
   int len = (int)strlen(ver);
-  corrupted_if(remain() < len);
+  corrupted_if(remain() < len, "Truncated");
   if (strncmp(_p, ver, len) != 0) {
     quit("wrong version of hashtable dump file", _filename);
   }
@@ -451,7 +451,7 @@
 jchar HashtableTextDump::unescape(const char* from, const char* end, int count) {
   jchar value = 0;
 
-  corrupted_if(from + count > end);
+  corrupted_if(from + count > end, "Truncated");
 
   for (int i=0; i<count; i++) {
     char c = *from++;
@@ -486,7 +486,7 @@
     if (*from != '\\') {
       *to++ = *from++;
     } else {
-      corrupted_if(from + 2 > end);
+      corrupted_if(from + 2 > end, "Truncated");
       char c = from[1];
       from += 2;
       switch (c) {
@@ -507,7 +507,7 @@
       }
     }
   }
-  corrupted_if(n > 0); // expected more chars but file has ended
+  corrupted_if(n > 0, "Truncated"); // expected more chars but file has ended
   _p = from;
   skip_newline();
 }
--- a/hotspot/src/share/vm/classfile/compactHashtable.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/compactHashtable.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -276,9 +276,9 @@
 
   void corrupted(const char *p, const char *msg);
 
-  inline void corrupted_if(bool cond) {
+  inline void corrupted_if(bool cond, const char *msg) {
     if (cond) {
-      corrupted(_p, NULL);
+      corrupted(_p, msg);
     }
   }
 
@@ -287,27 +287,30 @@
   void skip_past(char c);
   void check_version(const char* ver);
 
-  inline bool get_num(char delim, int *utf8_length) {
+  inline void get_num(char delim, int *num) {
     const char* p   = _p;
     const char* end = _end;
-    int num = 0;
+    u8 n = 0;
 
     while (p < end) {
       char c = *p ++;
       if ('0' <= c && c <= '9') {
-        num = num * 10 + (c - '0');
+        n = n * 10 + (c - '0');
+        if (n > (u8)INT_MAX) {
+          corrupted(_p, "Num overflow");
+        }
       } else if (c == delim) {
         _p = p;
-        *utf8_length = num;
-        return true;
+        *num = (int)n;
+        return;
       } else {
         // Not [0-9], not 'delim'
-        return false;
+        corrupted(_p, "Unrecognized format");;
       }
     }
+
     corrupted(_end, "Incorrect format");
     ShouldNotReachHere();
-    return false;
   }
 
   void scan_prefix_type();
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -129,7 +129,7 @@
       tty->print_cr("  name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int());
     }
 #endif //PRODUCT
-    vm_exit_during_initialization("Invalid layout of preloaded class: use -XX:+TraceClassLoading to see the origin of the problem class");
+    vm_exit_during_initialization("Invalid layout of preloaded class: use -Xlog:classload=info to see the origin of the problem class");
   }
   dest_offset = fd.offset();
 }
@@ -3972,7 +3972,7 @@
     tty->print_cr("  name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int());
   }
 #endif //PRODUCT
-  vm_exit_during_initialization("Invalid layout of preloaded class: use -XX:+TraceClassLoading to see the origin of the problem class");
+  vm_exit_during_initialization("Invalid layout of preloaded class: use -Xlog:classload=info to see the origin of the problem class");
   return -1;
 }
 
--- a/hotspot/src/share/vm/classfile/stringTable.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/stringTable.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -737,7 +737,7 @@
     return false;
   }
   ch_table.dump(top, end);
-  *top = (char*)align_pointer_up(*top, sizeof(void*));
+  *top = (char*)align_ptr_up(*top, sizeof(void*));
 
 #endif
   return true;
@@ -760,7 +760,7 @@
   juint *p = (juint*)buffer;
   const char* end = _shared_table.init(
           CompactHashtable<oop, char>::_string_table, (char*)p);
-  const char* aligned_end = (const char*)align_pointer_up(end, sizeof(void*));
+  const char* aligned_end = (const char*)align_ptr_up(end, sizeof(void*));
 
   if (_ignore_shared_strings) {
     _shared_table.reset();
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/symbolTable.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -544,7 +544,7 @@
 
   ch_table.dump(top, end);
 
-  *top = (char*)align_pointer_up(*top, sizeof(void*));
+  *top = (char*)align_ptr_up(*top, sizeof(void*));
 #endif
   return true;
 }
@@ -552,7 +552,7 @@
 const char* SymbolTable::init_shared_table(const char* buffer) {
   const char* end = _shared_table.init(
           CompactHashtable<Symbol*, char>::_symbol_table, buffer);
-  return (const char*)align_pointer_up(end, sizeof(void*));
+  return (const char*)align_ptr_up(end, sizeof(void*));
 }
 
 //---------------------------------------------------------------------------
@@ -600,7 +600,7 @@
   tty->print_cr("Symbol Table Histogram:");
   tty->print_cr("  Total number of symbols  %7d", total_count);
   tty->print_cr("  Total size in memory     %7dK",
-          (total_size*HeapWordSize)/1024);
+          (total_size*wordSize)/1024);
   tty->print_cr("  Total counted            %7d", _symbols_counted);
   tty->print_cr("  Total removed            %7d", _symbols_removed);
   if (_symbols_counted > 0) {
@@ -617,11 +617,11 @@
   tty->print_cr("    %6s %10s %10s", "Length", "#Symbols", "Size");
   for (i = 0; i < results_length; i++) {
     if (counts[i] > 0) {
-      tty->print_cr("    %6d %10d %10dK", i, counts[i], (sizes[i]*HeapWordSize)/1024);
+      tty->print_cr("    %6d %10d %10dK", i, counts[i], (sizes[i]*wordSize)/1024);
     }
   }
   tty->print_cr("  >=%6d %10d %10dK\n", results_length,
-          out_of_range_count, (out_of_range_size*HeapWordSize)/1024);
+          out_of_range_count, (out_of_range_size*wordSize)/1024);
 }
 
 void SymbolTable::print() {
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1302,14 +1302,13 @@
       ik->restore_unshareable_info(loader_data, protection_domain, CHECK_(nh));
     }
 
-    if (TraceClassLoading) {
-      ResourceMark rm;
-      tty->print("[Loaded %s", ik->external_name());
-      tty->print(" from shared objects file");
-      if (class_loader.not_null()) {
-        tty->print(" by %s", loader_data->loader_name());
-      }
-      tty->print_cr("]");
+    if (log_is_enabled(Info, classload)) {
+      ik()->print_loading_log(LogLevel::Info, loader_data, NULL);
+    }
+    // No 'else' here as logging levels are not mutually exclusive
+
+    if (log_is_enabled(Debug, classload)) {
+      ik()->print_loading_log(LogLevel::Debug, loader_data, NULL);
     }
 
     if (DumpLoadedClassList != NULL && classlist_file->is_open()) {
--- a/hotspot/src/share/vm/classfile/verifier.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/verifier.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -651,6 +651,7 @@
   int ex_max = -1;
   // Look through each item on the exception table. Each of the fields must refer
   // to a legal instruction.
+  if (was_recursively_verified()) return;
   verify_exception_handler_table(
     code_length, code_data, ex_min, ex_max, CHECK_VERIFY(this));
 
@@ -737,11 +738,14 @@
       // should be used for this check.  So, do the check here before a possible
       // local is added to the type state.
       if (Bytecodes::is_store_into_local(opcode) && bci >= ex_min && bci < ex_max) {
+        if (was_recursively_verified()) return;
         verify_exception_handler_targets(
           bci, this_uninit, &current_frame, &stackmap_table, CHECK_VERIFY(this));
         verified_exc_handlers = true;
       }
 
+      if (was_recursively_verified()) return;
+
       switch (opcode) {
         case Bytecodes::_nop :
           no_control_flow = false; break;
@@ -1730,6 +1734,7 @@
     assert(!(verified_exc_handlers && this_uninit),
       "Exception handler targets got verified before this_uninit got set");
     if (!verified_exc_handlers && bci >= ex_min && bci < ex_max) {
+      if (was_recursively_verified()) return;
       verify_exception_handler_targets(
         bci, this_uninit, &current_frame, &stackmap_table, CHECK_VERIFY(this));
     }
@@ -1767,6 +1772,9 @@
   return code_data;
 }
 
+// Since this method references the constant pool, call was_recursively_verified()
+// before calling this method to make sure a prior class load did not cause the
+// current class to get verified.
 void ClassVerifier::verify_exception_handler_table(u4 code_length, char* code_data, int& min, int& max, TRAPS) {
   ExceptionTable exhandlers(_method());
   int exlength = exhandlers.length();
@@ -1874,7 +1882,11 @@
   return stackmap_index;
 }
 
-void ClassVerifier::verify_exception_handler_targets(u2 bci, bool this_uninit, StackMapFrame* current_frame,
+// Since this method references the constant pool, call was_recursively_verified()
+// before calling this method to make sure a prior class load did not cause the
+// current class to get verified.
+void ClassVerifier::verify_exception_handler_targets(u2 bci, bool this_uninit,
+                                                     StackMapFrame* current_frame,
                                                      StackMapTable* stackmap_table, TRAPS) {
   constantPoolHandle cp (THREAD, _method->constants());
   ExceptionTable exhandlers(_method());
@@ -1889,6 +1901,7 @@
       if (this_uninit) {  flags |= FLAG_THIS_UNINIT; }
       StackMapFrame* new_frame = current_frame->frame_in_exception_handler(flags);
       if (catch_type_index != 0) {
+        if (was_recursively_verified()) return;
         // We know that this index refers to a subclass of Throwable
         VerificationType catch_type = cp_index_to_type(
           catch_type_index, cp, CHECK_VERIFY(this));
@@ -2269,6 +2282,7 @@
     check_protected: {
       if (_this_type == stack_object_type)
         break; // stack_object_type must be assignable to _current_class_type
+      if (was_recursively_verified()) return;
       Symbol* ref_class_name =
         cp->klass_name_at(cp->klass_ref_index_at(index));
       if (!name_in_supers(ref_class_name, current_class()))
@@ -2531,6 +2545,7 @@
       // Check the exception handler target stackmaps with the locals from the
       // incoming stackmap (before initialize_object() changes them to outgoing
       // state).
+      if (was_recursively_verified()) return;
       verify_exception_handler_targets(bci, true, current_frame,
                                        stackmap_table, CHECK_VERIFY(this));
     } // in_try_block
@@ -2548,6 +2563,7 @@
       return;
     }
     u2 new_class_index = Bytes::get_Java_u2(new_bcp + 1);
+    if (was_recursively_verified()) return;
     verify_cp_class_type(bci, new_class_index, cp, CHECK_VERIFY(this));
 
     // The method must be an <init> method of the indicated class
@@ -2567,6 +2583,7 @@
     VerificationType objectref_type = new_class_type;
     if (name_in_supers(ref_class_type.name(), current_class())) {
       Klass* ref_klass = load_class(ref_class_type.name(), CHECK);
+      if (was_recursively_verified()) return;
       Method* m = InstanceKlass::cast(ref_klass)->uncached_lookup_method(
         vmSymbols::object_initializer_name(),
         cp->signature_ref_at(bcs->get_index_u2()),
@@ -2591,6 +2608,7 @@
     // incoming stackmap (before initialize_object() changes them to outgoing
     // state).
     if (in_try_block) {
+      if (was_recursively_verified()) return;
       verify_exception_handler_targets(bci, *this_uninit, current_frame,
                                        stackmap_table, CHECK_VERIFY(this));
     }
@@ -2791,6 +2809,7 @@
       verify_invoke_init(bcs, index, ref_class_type, current_frame,
         code_length, in_try_block, this_uninit, cp, stackmap_table,
         CHECK_VERIFY(this));
+      if (was_recursively_verified()) return;
     } else {   // other methods
       // Ensures that target class is assignable to method class.
       if (opcode == Bytecodes::_invokespecial) {
@@ -2816,6 +2835,7 @@
         VerificationType stack_object_type =
           current_frame->pop_stack(ref_class_type, CHECK_VERIFY(this));
         if (current_type() != stack_object_type) {
+          if (was_recursively_verified()) return;
           assert(cp->cache() == NULL, "not rewritten yet");
           Symbol* ref_class_name =
             cp->klass_name_at(cp->klass_ref_index_at(index));
@@ -2894,6 +2914,7 @@
   current_frame->pop_stack(
     VerificationType::integer_type(), CHECK_VERIFY(this));
 
+  if (was_recursively_verified()) return;
   VerificationType component_type =
     cp_index_to_type(index, cp, CHECK_VERIFY(this));
   int length;
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -109,13 +109,13 @@
   template(java_io_ByteArrayInputStream,              "java/io/ByteArrayInputStream")             \
   template(java_io_Serializable,                      "java/io/Serializable")                     \
   template(java_util_Arrays,                          "java/util/Arrays")                         \
-  template(java_util_Objects,                         "java/util/Objects")                         \
+  template(java_util_Objects,                         "java/util/Objects")                        \
   template(java_util_Properties,                      "java/util/Properties")                     \
   template(java_util_Vector,                          "java/util/Vector")                         \
   template(java_util_AbstractList,                    "java/util/AbstractList")                   \
   template(java_util_Hashtable,                       "java/util/Hashtable")                      \
   template(java_lang_Compiler,                        "java/lang/Compiler")                       \
-  template(sun_misc_Signal,                           "sun/misc/Signal")                          \
+  template(jdk_internal_misc_Signal,                  "jdk/internal/misc/Signal")                 \
   template(sun_misc_Launcher,                         "sun/misc/Launcher")                        \
   template(java_lang_AssertionStatusDirectives,       "java/lang/AssertionStatusDirectives")      \
   template(getBootClassPathEntryForClass_name,        "getBootClassPathEntryForClass")            \
--- a/hotspot/src/share/vm/code/codeCache.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/code/codeCache.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1494,7 +1494,7 @@
 }
 
 void CodeCache::print_codelist(outputStream* st) {
-  assert_locked_or_safepoint(CodeCache_lock);
+  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 
   NMethodIterator iter;
   while(iter.next_alive()) {
@@ -1508,9 +1508,8 @@
 }
 
 void CodeCache::print_layout(outputStream* st) {
-  assert_locked_or_safepoint(CodeCache_lock);
+  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
   ResourceMark rm;
-
   print_summary(st, true);
 }
 
--- a/hotspot/src/share/vm/code/nmethod.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/code/nmethod.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,6 +48,7 @@
 #include "utilities/dtrace.hpp"
 #include "utilities/events.hpp"
 #include "utilities/xmlstream.hpp"
+#include "logging/log.hpp"
 #ifdef TARGET_ARCH_x86
 # include "nativeInst_x86.hpp"
 #endif
@@ -321,9 +322,12 @@
 
 bool ExceptionCache::add_address_and_handler(address addr, address handler) {
   if (test_address(addr) == handler) return true;
-  if (count() < cache_size) {
-    set_pc_at(count(),addr);
-    set_handler_at(count(), handler);
+
+  int index = count();
+  if (index < cache_size) {
+    set_pc_at(index, addr);
+    set_handler_at(index, handler);
+    OrderAccess::storestore();
     increment_count();
     return true;
   }
@@ -1310,13 +1314,14 @@
   flush_dependencies(is_alive);
 
   // Break cycle between nmethod & method
-  if (TraceClassUnloading && WizardMode) {
-    tty->print_cr("[Class unloading: Making nmethod " INTPTR_FORMAT
-                  " unloadable], Method*(" INTPTR_FORMAT
+  if (log_is_enabled(Trace, classunload)) {
+    outputStream* log = LogHandle(classunload)::trace_stream();
+    log->print_cr("making nmethod " INTPTR_FORMAT
+                  " unloadable, Method*(" INTPTR_FORMAT
                   "), cause(" INTPTR_FORMAT ")",
                   p2i(this), p2i(_method), p2i(cause));
     if (!Universe::heap()->is_gc_active())
-      cause->klass()->print();
+      cause->klass()->print_on(log);
   }
   // Unlink the osr method, so we do not look this up again
   if (is_osr_method()) {
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -466,9 +466,16 @@
   return NULL;
 }
 
+void CompileBroker::print_compile_queues(outputStream* st) {
+  st->print_cr("Current compiles: ");
+  MutexLocker locker(MethodCompileQueue_lock);
+  MutexLocker locker2(Threads_lock);
 
-void CompileBroker::print_compile_queues(outputStream* st) {
-  MutexLocker locker(MethodCompileQueue_lock);
+  char buf[2000];
+  int buflen = sizeof(buf);
+  Threads::print_threads_compiling(st, buf, buflen);
+
+  st->cr();
   if (_c1_compile_queue != NULL) {
     _c1_compile_queue->print(st);
   }
@@ -479,8 +486,7 @@
 
 void CompileQueue::print(outputStream* st) {
   assert(MethodCompileQueue_lock->owned_by_self(), "must own lock");
-  st->print_cr("Contents of %s", name());
-  st->print_cr("----------------------------");
+  st->print_cr("%s:", name());
   CompileTask* task = _first;
   if (task == NULL) {
     st->print_cr("Empty");
@@ -490,7 +496,7 @@
       task = task->next();
     }
   }
-  st->print_cr("----------------------------");
+  st->cr();
 }
 
 void CompileQueue::print_tty() {
@@ -539,7 +545,7 @@
         c1_count = JVMCIHostThreads;
       }
 
-      if (!UseInterpreter) {
+      if (!UseInterpreter || !BackgroundCompilation) {
         // Force initialization of JVMCI compiler otherwise JVMCI
         // compilations will not block until JVMCI is initialized
         ResourceMark rm;
@@ -1340,49 +1346,55 @@
 }
 
 #if INCLUDE_JVMCI
-// The number of milliseconds to wait before checking if the
-// JVMCI compiler thread is blocked.
-static const long BLOCKING_JVMCI_COMPILATION_WAIT_TIMESLICE = 500;
+// The number of milliseconds to wait before checking if
+// JVMCI compilation has made progress.
+static const long JVMCI_COMPILATION_PROGRESS_WAIT_TIMESLICE = 500;
 
-// The number of successive times the above check is allowed to
-// see a blocked JVMCI compiler thread before unblocking the
-// thread waiting for the compilation to finish.
-static const int BLOCKING_JVMCI_COMPILATION_WAIT_TO_UNBLOCK_ATTEMPTS = 5;
+// The number of JVMCI compilation progress checks that must fail
+// before unblocking a thread waiting for a blocking compilation.
+static const int JVMCI_COMPILATION_PROGRESS_WAIT_ATTEMPTS = 5;
 
 /**
  * Waits for a JVMCI compiler to complete a given task. This thread
- * waits until either the task completes or it sees the JVMCI compiler
- * thread is blocked for N consecutive milliseconds where N is
- * BLOCKING_JVMCI_COMPILATION_WAIT_TIMESLICE *
- * BLOCKING_JVMCI_COMPILATION_WAIT_TO_UNBLOCK_ATTEMPTS.
+ * waits until either the task completes or it sees no JVMCI compilation
+ * progress for N consecutive milliseconds where N is
+ * JVMCI_COMPILATION_PROGRESS_WAIT_TIMESLICE *
+ * JVMCI_COMPILATION_PROGRESS_WAIT_ATTEMPTS.
  *
  * @return true if this thread needs to free/recycle the task
  */
-bool CompileBroker::wait_for_jvmci_completion(CompileTask* task, JavaThread* thread) {
+bool CompileBroker::wait_for_jvmci_completion(JVMCICompiler* jvmci, CompileTask* task, JavaThread* thread) {
   MutexLocker waiter(task->lock(), thread);
-  int consecutively_blocked = 0;
-  while (task->lock()->wait(!Mutex::_no_safepoint_check_flag, BLOCKING_JVMCI_COMPILATION_WAIT_TIMESLICE)) {
+  int progress_wait_attempts = 0;
+  int methods_compiled = jvmci->methods_compiled();
+  while (!task->is_complete() && !is_compilation_disabled_forever() &&
+         task->lock()->wait(!Mutex::_no_safepoint_check_flag, JVMCI_COMPILATION_PROGRESS_WAIT_TIMESLICE)) {
     CompilerThread* jvmci_compiler_thread = task->jvmci_compiler_thread();
+
+    bool progress;
     if (jvmci_compiler_thread != NULL) {
-      JavaThreadState state;
-      {
-        // A JVMCI compiler thread should not disappear at this point
-        // but let's be extra safe.
-        MutexLocker mu(Threads_lock, thread);
-        state = jvmci_compiler_thread->thread_state();
-      }
-      if (state == _thread_blocked) {
-        if (++consecutively_blocked == BLOCKING_JVMCI_COMPILATION_WAIT_TO_UNBLOCK_ATTEMPTS) {
-          if (PrintCompilation) {
-            task->print(tty, "wait for blocking compilation timed out");
-          }
-          break;
+      // If the JVMCI compiler thread is not blocked, we deem it to be making progress.
+      progress = jvmci_compiler_thread->thread_state() != _thread_blocked;
+    } else {
+      // Still waiting on JVMCI compiler queue. This thread may be holding a lock
+      // that all JVMCI compiler threads are blocked on. We use the counter for
+      // successful JVMCI compilations to determine whether JVMCI compilation
+      // is still making progress through the JVMCI compiler queue.
+      progress = jvmci->methods_compiled() != methods_compiled;
+    }
+
+    if (!progress) {
+      if (++progress_wait_attempts == JVMCI_COMPILATION_PROGRESS_WAIT_ATTEMPTS) {
+        if (PrintCompilation) {
+          task->print(tty, "wait for blocking compilation timed out");
         }
-      } else {
-        consecutively_blocked = 0;
+        break;
       }
     } else {
-      // Still waiting on JVMCI compiler queue
+      progress_wait_attempts = 0;
+      if (jvmci_compiler_thread == NULL) {
+        methods_compiled = jvmci->methods_compiled();
+      }
     }
   }
   task->clear_waiter();
@@ -1407,8 +1419,9 @@
   methodHandle method(thread, task->method());
   bool free_task;
 #if INCLUDE_JVMCI
-  if (compiler(task->comp_level())->is_jvmci()) {
-    free_task = wait_for_jvmci_completion(task, thread);
+  AbstractCompiler* comp = compiler(task->comp_level());
+  if (comp->is_jvmci()) {
+    free_task = wait_for_jvmci_completion((JVMCICompiler*) comp, task, thread);
   } else
 #endif
   {
@@ -2355,10 +2368,3 @@
   }
 }
 
-
-void CompileBroker::print_compiler_threads_on(outputStream* st) {
-#ifndef PRODUCT
-  st->print_cr("Compiler thread printing unimplemented.");
-  st->cr();
-#endif
-}
--- a/hotspot/src/share/vm/compiler/compileBroker.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/compiler/compileBroker.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -32,6 +32,9 @@
 #include "runtime/perfData.hpp"
 #include "trace/tracing.hpp"
 #include "utilities/stack.hpp"
+#if INCLUDE_JVMCI
+#include "jvmci/jvmciCompiler.hpp"
+#endif
 
 class nmethod;
 class nmethodLocker;
@@ -234,7 +237,7 @@
                                           bool                blocking);
   static void wait_for_completion(CompileTask* task);
 #if INCLUDE_JVMCI
-  static bool wait_for_jvmci_completion(CompileTask* task, JavaThread* thread);
+  static bool wait_for_jvmci_completion(JVMCICompiler* comp, CompileTask* task, JavaThread* thread);
 #endif
 
   static void invoke_compiler_on_method(CompileTask* task);
@@ -350,8 +353,6 @@
   // Debugging output for failure
   static void print_last_compile();
 
-  static void print_compiler_threads_on(outputStream* st);
-
   // compiler name for debugging
   static const char* compiler_name(int comp_level);
 
--- a/hotspot/src/share/vm/compiler/disassembler.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/compiler/disassembler.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -85,6 +85,7 @@
 
  public:
   static bool can_decode() {
+    ttyLocker tl;
     return (_decode_instructions_virtual != NULL) ||
            (_decode_instructions != NULL) ||
            load_library();
--- a/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,6 +35,7 @@
 #include "gc/shared/space.hpp"
 #include "gc/shared/vmGCOperations.hpp"
 #include "memory/universe.hpp"
+#include "oops/oop.inline.hpp"
 #include "runtime/arguments.hpp"
 #include "runtime/globals_extension.hpp"
 #include "runtime/handles.inline.hpp"
--- a/hotspot/src/share/vm/gc/cms/cmsOopClosures.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/cmsOopClosures.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,15 +40,9 @@
 class ParMarkFromRootsClosure;
 
 // Decode the oop and call do_oop on it.
-#define DO_OOP_WORK_DEFN \
-  void do_oop(oop obj);                                   \
-  template <class T> inline void do_oop_work(T* p) {      \
-    T heap_oop = oopDesc::load_heap_oop(p);               \
-    if (!oopDesc::is_null(heap_oop)) {                    \
-      oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);       \
-      do_oop(obj);                                        \
-    }                                                     \
-  }
+#define DO_OOP_WORK_DEFN                             \
+  void do_oop(oop obj);                              \
+  template <class T> inline void do_oop_work(T* p);
 
 // TODO: This duplication of the MetadataAwareOopClosure class is only needed
 //       because some CMS OopClosures derive from OopsInGenClosure. It would be
@@ -131,8 +125,8 @@
                      bool concurrent_precleaning);
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { PushAndMarkClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { PushAndMarkClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 };
 
 // In the parallel case, the bit map and the
@@ -157,8 +151,8 @@
                         OopTaskQueue* work_queue);
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { ParPushAndMarkClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { ParPushAndMarkClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 };
 
 // The non-parallel version (the parallel version appears further below).
@@ -186,8 +180,8 @@
                              bool concurrent_precleaning);
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { MarkRefsIntoAndScanClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { MarkRefsIntoAndScanClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 
   void set_freelistLock(Mutex* m) {
     _freelistLock = m;
@@ -220,8 +214,8 @@
                                  OopTaskQueue* work_queue);
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { ParMarkRefsIntoAndScanClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { ParMarkRefsIntoAndScanClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 
   void trim_queue(uint size);
 };
@@ -249,8 +243,8 @@
                     MarkFromRootsClosure* parent);
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { PushOrMarkClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { PushOrMarkClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 
   // Deal with a stack overflow condition
   void handle_stack_overflow(HeapWord* lost);
@@ -287,8 +281,8 @@
                        ParMarkFromRootsClosure* parent);
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { ParPushOrMarkClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { ParPushOrMarkClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 
   // Deal with a stack overflow condition
   void handle_stack_overflow(HeapWord* lost);
@@ -318,8 +312,8 @@
   bool    concurrent_precleaning() const { return _concurrent_precleaning; }
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { CMSKeepAliveClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 };
 
 class CMSInnerParMarkAndPushClosure: public MetadataAwareOopClosure {
@@ -336,8 +330,8 @@
                                 OopTaskQueue* work_queue);
   virtual void do_oop(oop* p);
   virtual void do_oop(narrowOop* p);
-  inline void do_oop_nv(oop* p)       { CMSInnerParMarkAndPushClosure::do_oop_work(p); }
-  inline void do_oop_nv(narrowOop* p) { CMSInnerParMarkAndPushClosure::do_oop_work(p); }
+  inline void do_oop_nv(oop* p);
+  inline void do_oop_nv(narrowOop* p);
 };
 
 // A parallel (MT) version of the above, used when
--- a/hotspot/src/share/vm/gc/cms/cmsOopClosures.inline.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/cmsOopClosures.inline.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,21 +30,6 @@
 #include "gc/shared/taskqueue.inline.hpp"
 #include "oops/oop.inline.hpp"
 
-// Trim our work_queue so its length is below max at return
-inline void ParMarkRefsIntoAndScanClosure::trim_queue(uint max) {
-  while (_work_queue->size() > max) {
-    oop newOop;
-    if (_work_queue->pop_local(newOop)) {
-      assert(newOop->is_oop(), "Expected an oop");
-      assert(_bit_map->isMarked((HeapWord*)newOop),
-             "only grey objects on this stack");
-      // iterate over the oops in this oop, marking and pushing
-      // the ones in CMS heap (i.e. in _span).
-      newOop->oop_iterate(&_parPushAndMarkClosure);
-    }
-  }
-}
-
 // MetadataAwareOopClosure and MetadataAwareOopsInGenClosure are duplicated,
 // until we get rid of OopsInGenClosure.
 
@@ -61,4 +46,48 @@
   cld->oops_do(_klass_closure._oop_closure, &_klass_closure, claim);
 }
 
+// Decode the oop and call do_oop on it.
+#define DO_OOP_WORK_IMPL(cls)                                 \
+  template <class T> void cls::do_oop_work(T* p) {            \
+    T heap_oop = oopDesc::load_heap_oop(p);                   \
+    if (!oopDesc::is_null(heap_oop)) {                        \
+      oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);  \
+      do_oop(obj);                                            \
+    }                                                         \
+  }
+
+#define DO_OOP_WORK_NV_IMPL(cls)                              \
+  DO_OOP_WORK_IMPL(cls)                                       \
+  void cls::do_oop_nv(oop* p)       { cls::do_oop_work(p); }  \
+  void cls::do_oop_nv(narrowOop* p) { cls::do_oop_work(p); }
+
+DO_OOP_WORK_IMPL(MarkRefsIntoClosure)
+DO_OOP_WORK_IMPL(ParMarkRefsIntoClosure)
+DO_OOP_WORK_IMPL(MarkRefsIntoVerifyClosure)
+DO_OOP_WORK_NV_IMPL(PushAndMarkClosure)
+DO_OOP_WORK_NV_IMPL(ParPushAndMarkClosure)
+DO_OOP_WORK_NV_IMPL(MarkRefsIntoAndScanClosure)
+DO_OOP_WORK_NV_IMPL(ParMarkRefsIntoAndScanClosure)
+
+// Trim our work_queue so its length is below max at return
+inline void ParMarkRefsIntoAndScanClosure::trim_queue(uint max) {
+  while (_work_queue->size() > max) {
+    oop newOop;
+    if (_work_queue->pop_local(newOop)) {
+      assert(newOop->is_oop(), "Expected an oop");
+      assert(_bit_map->isMarked((HeapWord*)newOop),
+             "only grey objects on this stack");
+      // iterate over the oops in this oop, marking and pushing
+      // the ones in CMS heap (i.e. in _span).
+      newOop->oop_iterate(&_parPushAndMarkClosure);
+    }
+  }
+}
+
+DO_OOP_WORK_NV_IMPL(PushOrMarkClosure)
+DO_OOP_WORK_NV_IMPL(ParPushOrMarkClosure)
+DO_OOP_WORK_NV_IMPL(CMSKeepAliveClosure)
+DO_OOP_WORK_NV_IMPL(CMSInnerParMarkAndPushClosure)
+DO_OOP_WORK_IMPL(CMSParKeepAliveClosure)
+
 #endif // SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP
--- a/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -219,6 +219,10 @@
   }
 }
 
+size_t CompactibleFreeListSpace::obj_size(const HeapWord* addr) const {
+  return adjustObjectSize(oop(addr)->size());
+}
+
 void CompactibleFreeListSpace::resetIndexedFreeListArray() {
   for (size_t i = 1; i < IndexSetSize; i++) {
     assert(_indexedFreeList[i].size() == (size_t) i,
--- a/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -313,9 +313,7 @@
     return adjustObjectSize(size);
   }
 
-  inline size_t obj_size(const HeapWord* addr) const {
-    return adjustObjectSize(oop(addr)->size());
-  }
+  inline size_t obj_size(const HeapWord* addr) const;
 
  protected:
   // Reset the indexed free list to its initial empty condition.
--- a/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1517,6 +1517,8 @@
   SerialOldTracer* gc_tracer = GenMarkSweep::gc_tracer();
   gc_tracer->report_gc_start(gch->gc_cause(), gc_timer->gc_start());
 
+  gch->pre_full_gc_dump(gc_timer);
+
   GCTraceTime(Trace, gc) t("CMS:MSC");
 
   // Temporarily widen the span of the weak reference processing to
@@ -1593,6 +1595,8 @@
   _inter_sweep_timer.reset();
   _inter_sweep_timer.start();
 
+  gch->post_full_gc_dump(gc_timer);
+
   gc_timer->register_gc_end();
 
   gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions());
@@ -3324,6 +3328,8 @@
   }
 };
 
+DO_OOP_WORK_IMPL(ParConcMarkingClosure)
+
 // Grey object scanning during work stealing phase --
 // the salient assumption here is that any references
 // that are in these stolen objects being scanned must
--- a/hotspot/src/share/vm/gc/cms/parNewGeneration.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/parNewGeneration.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 #include "gc/cms/parOopClosures.inline.hpp"
 #include "gc/serial/defNewGeneration.inline.hpp"
 #include "gc/shared/adaptiveSizePolicy.hpp"
-#include "gc/shared/ageTable.hpp"
+#include "gc/shared/ageTable.inline.hpp"
 #include "gc/shared/copyFailedInfo.hpp"
 #include "gc/shared/gcHeapSummary.hpp"
 #include "gc/shared/gcTimer.hpp"
@@ -414,7 +414,7 @@
 }
 
 void ParScanThreadStateSet::print_taskqueue_stats() {
-  if (!develop_log_is_enabled(Trace, gc, task, stats)) {
+  if (!log_develop_is_enabled(Trace, gc, task, stats)) {
     return;
   }
   LogHandle(gc, task, stats) log;
--- a/hotspot/src/share/vm/gc/cms/promotionInfo.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/promotionInfo.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,31 @@
 /////////////////////////////////////////////////////////////////////////
 
 
+PromotedObject* PromotedObject::next() const {
+  assert(!((FreeChunk*)this)->is_free(), "Error");
+  PromotedObject* res;
+  if (UseCompressedOops) {
+    // The next pointer is a compressed oop stored in the top 32 bits
+    res = (PromotedObject*)oopDesc::decode_heap_oop(_data._narrow_next);
+  } else {
+    res = (PromotedObject*)(_next & next_mask);
+  }
+  assert(oop(res)->is_oop_or_null(true /* ignore mark word */), "Expected an oop or NULL at " PTR_FORMAT, p2i(oop(res)));
+  return res;
+}
+
+inline void PromotedObject::setNext(PromotedObject* x) {
+  assert(((intptr_t)x & ~next_mask) == 0, "Conflict in bit usage, "
+         "or insufficient alignment of objects");
+  if (UseCompressedOops) {
+    assert(_data._narrow_next == 0, "Overwrite?");
+    _data._narrow_next = oopDesc::encode_heap_oop(oop(x));
+  } else {
+    _next |= (intptr_t)x;
+  }
+  assert(!((FreeChunk*)this)->is_free(), "Error");
+}
+
 //////////////////////////////////////////////////////////////////////////////
 // We go over the list of promoted objects, removing each from the list,
 // and applying the closure (this may, in turn, add more elements to
--- a/hotspot/src/share/vm/gc/cms/promotionInfo.hpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/cms/promotionInfo.hpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -64,29 +64,8 @@
     Data     _data;
   };
  public:
-  inline PromotedObject* next() const {
-    assert(!((FreeChunk*)this)->is_free(), "Error");
-    PromotedObject* res;
-    if (UseCompressedOops) {
-      // The next pointer is a compressed oop stored in the top 32 bits
-      res = (PromotedObject*)oopDesc::decode_heap_oop(_data._narrow_next);
-    } else {
-      res = (PromotedObject*)(_next & next_mask);
-    }
-    assert(oop(res)->is_oop_or_null(true /* ignore mark word */), "Expected an oop or NULL at " PTR_FORMAT, p2i(oop(res)));
-    return res;
-  }
-  inline void setNext(PromotedObject* x) {
-    assert(((intptr_t)x & ~next_mask) == 0, "Conflict in bit usage, "
-           "or insufficient alignment of objects");
-    if (UseCompressedOops) {
-      assert(_data._narrow_next == 0, "Overwrite?");
-      _data._narrow_next = oopDesc::encode_heap_oop(oop(x));
-    } else {
-      _next |= (intptr_t)x;
-    }
-    assert(!((FreeChunk*)this)->is_free(), "Error");
-  }
+  PromotedObject* next() const;
+  void setNext(PromotedObject* x);
   inline void setPromotedMark() {
     _next |= promoted_mask;
     assert(!((FreeChunk*)this)->is_free(), "Error");
--- a/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ b/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp	Mon Feb 29 08:12:22 2016 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -59,10 +59,10 @@
     _monitor = DirtyCardQ_CBL_mon;
   }
   initialize();
-  create_and_start();
 
   // set name
   set_name("G1 Refine#%d", worker_id);
+  create_and_start();
 }
 
 void ConcurrentG1RefineThread::initialize() {
--- a/hotspot/src/share/vm/gc/g1/concurrentMark.cpp	Mon Feb 29 07:58:45 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3681 +0,0 @@
-/*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.