diff --git a/make/autoconf/flags-cflags.m4 b/make/autoconf/flags-cflags.m4 index 2d7732e6c66..b8f81e434f8 100644 --- a/make/autoconf/flags-cflags.m4 +++ b/make/autoconf/flags-cflags.m4 @@ -95,8 +95,24 @@ AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS], # info flags for toolchains unless we know they work. # See JDK-8207057. ASFLAGS_DEBUG_SYMBOLS="" + + # Debug prefix mapping if supported by compiler + DEBUG_PREFIX_CFLAGS= + # Debug symbols if test "x$TOOLCHAIN_TYPE" = xgcc; then + if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then + # Check if compiler supports -fdebug-prefix-map. If so, use that to make + # the debug symbol paths resolve to paths relative to the workspace root. + workspace_root_trailing_slash="${WORKSPACE_ROOT%/}/" + DEBUG_PREFIX_CFLAGS="-fdebug-prefix-map=${workspace_root_trailing_slash}=" + FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${DEBUG_PREFIX_CFLAGS}], + IF_FALSE: [ + DEBUG_PREFIX_CFLAGS= + ] + ) + fi + CFLAGS_DEBUG_SYMBOLS="-g" ASFLAGS_DEBUG_SYMBOLS="-g" elif test "x$TOOLCHAIN_TYPE" = xclang; then @@ -108,6 +124,11 @@ AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS], CFLAGS_DEBUG_SYMBOLS="-Z7" fi + if test "x$DEBUG_PREFIX_CFLAGS" != x; then + CFLAGS_DEBUG_SYMBOLS="$CFLAGS_DEBUG_SYMBOLS $DEBUG_PREFIX_CFLAGS" + ASFLAGS_DEBUG_SYMBOLS="$ASFLAGS_DEBUG_SYMBOLS $DEBUG_PREFIX_CFLAGS" + fi + AC_SUBST(CFLAGS_DEBUG_SYMBOLS) AC_SUBST(ASFLAGS_DEBUG_SYMBOLS) ]) diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index 1e2b1703d23..433ab6ac038 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2022, 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 @@ -389,6 +389,12 @@ define SetupCompileNativeFileBody $1_OBJ_DEPS := $$($1_SRC_FILE) $$($$($1_BASE)_COMPILE_VARDEPS_FILE) \ $$($$($1_BASE)_EXTRA_DEPS) $$($1_VARDEPS_FILE) $1_COMPILE_OPTIONS := $$($1_FLAGS) $(CC_OUT_OPTION)$$($1_OBJ) $$($1_SRC_FILE) + # For reproducible builds with gcc ensure random symbol generation is seeded deterministically + ifeq ($(TOOLCHAIN_TYPE), gcc) + ifeq ($$(ENABLE_REPRODUCIBLE_BUILD), true) + $1_COMPILE_OPTIONS += -frandom-seed="$$($1_FILENAME)" + endif + endif $$($1_OBJ_JSON): $$($1_OBJ_DEPS) $$(call WriteCompileCommandsFragment, $$@, $$(PWD), $$($1_SRC_FILE), \ @@ -1143,6 +1149,19 @@ define SetupNativeCompilationBody endif endif + # Debuginfo of ASM objects always embeds the absolute object path, + # as ASM debuginfo paths do not get prefix mapped. + # So for reproducible builds use relative paths to ensure a reproducible + # debuginfo and libs, when creating debug symbols. + ifeq ($$(ENABLE_REPRODUCIBLE_BUILD), true) + ifeq ($(call isTargetOs, linux), true) + ifeq ($$($1_COMPILE_WITH_DEBUG_SYMBOLS), true) + $1_LINK_OBJS_RELATIVE := true + $1_ALL_OBJS_RELATIVE := $$(patsubst $$(OUTPUTDIR)/%, %, $$($1_ALL_OBJS)) + endif + endif + endif + $1_TARGET_DEPS := $$($1_ALL_OBJS) $$($1_RES) $$($1_MANIFEST) \ $$($1_REAL_MAPFILE) $$($1_VARDEPS_FILE) diff --git a/make/hotspot/gensrc/GensrcAdlc.gmk b/make/hotspot/gensrc/GensrcAdlc.gmk index 73496bc6586..a3969fc6988 100644 --- a/make/hotspot/gensrc/GensrcAdlc.gmk +++ b/make/hotspot/gensrc/GensrcAdlc.gmk @@ -58,6 +58,9 @@ ifeq ($(call check-jvm-feature, compiler2), true) ADLC_CFLAGS += -I$(TOPDIR)/src/hotspot/share + # Add file macro mappings + ADLC_CFLAGS += $(FILE_MACRO_CFLAGS) + $(eval $(call SetupNativeCompilation, BUILD_ADLC, \ NAME := adlc, \ TYPE := EXECUTABLE, \ diff --git a/make/jdk/src/classes/build/tools/makezipreproducible/MakeZipReproducible.java b/make/jdk/src/classes/build/tools/makezipreproducible/MakeZipReproducible.java index 4ea976a8cc5..da5caf0dfc4 100644 --- a/make/jdk/src/classes/build/tools/makezipreproducible/MakeZipReproducible.java +++ b/make/jdk/src/classes/build/tools/makezipreproducible/MakeZipReproducible.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2022, 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 @@ -204,6 +204,10 @@ public class MakeZipReproducible { entry.setTimeLocal(timestamp); } + // Ensure "extra" field is not set from original ZipEntry info that may be not deterministic + // eg.may contain specific UID/GID + entry.setExtra(null); + zos.putNextEntry(entry); if (entry.getSize() > 0 && entryInputStream != null) { entryInputStream.transferTo(zos);