diff --git a/.gitignore b/.gitignore index 4541b61..c2ad651 100644 --- a/.gitignore +++ b/.gitignore @@ -133,45 +133,43 @@ /go1.20.3.src.tar.gz /go1.20.4.src.tar.gz /go1.20.5.src.tar.gz +/go1.20.5-1-openssl-fips.tar.gz +/go1.20.4-3-openssl-fips.tar.gz +/go1.20.5-2-openssl-fips.tar.gz /go1.20.6.src.tar.gz -/go1.21rc1.src.tar.gz -/go1.21rc2.src.tar.gz -/go1.21rc3.src.tar.gz -/go1.21.0.src.tar.gz -/go1.21.1.src.tar.gz +/go1.20.6-1-openssl-fips.tar.gz /go1.21.3.src.tar.gz -/go1.21.4.src.tar.gz -/go1.21.5.src.tar.gz -/go1.21.6.src.tar.gz -/go1.22rc1.src.tar.gz -/go1.22rc2.src.tar.gz -/go1.22.0.src.tar.gz +/go1.21.3-1-openssl-fips.tar.gz /go1.22.1.src.tar.gz +/go1.22.1-1-openssl-fips.tar.gz +/go1.22.1-2-openssl-fips.tar.gz /go1.22.2.src.tar.gz +/go1.22.2-1-openssl-fips.tar.gz /go1.22.3.src.tar.gz +/go1.22.3-1-openssl-fips.tar.gz +/go1.22.3-2-openssl-fips.tar.gz +/go1.22.3-3-openssl-fips.tar.gz /go1.22.4.src.tar.gz -/go1.23rc1.src.tar.gz -/go1.23rc2.src.tar.gz -/go1.23.0.src.tar.gz +/go1.22.4-1-openssl-fips.tar.gz +/go1.22.5.src.tar.gz +/go1.22.5-1-openssl-fips.tar.gz +/go1.22.5-2-openssl-fips.tar.gz +/go1.23.1-1-openssl-fips.tar.gz /go1.23.1.src.tar.gz -/go1.23.2.src.tar.gz -/go1.23.3.src.tar.gz -/go1.23.4.src.tar.gz -/go1.24rc1.src.tar.gz -/go1.24rc2.src.tar.gz -/go1.24rc3.src.tar.gz -/go1.24.0.src.tar.gz -/go1.24.1.src.tar.gz -/go1.24.2.src.tar.gz +/go1.23.6.src.tar.gz +/go1.23.6-1-openssl-fips.tar.gz /go1.24.3.src.tar.gz +/go1.24.3-1-openssl-fips.tar.gz +/compiler-rt-18.1.8.src.tar.xz +/go1.24.3-2-openssl-fips.tar.gz +/go1.24.3-3-openssl-fips.tar.gz /go1.24.4.src.tar.gz -/go1.24.5.src.tar.gz -/go1.25rc1.src.tar.gz -/go1.25rc2.src.tar.gz +/go1.24.4-1-openssl-fips.tar.gz +/go1.24.6.src.tar.gz +/go1.24.6-1-openssl-fips.tar.gz /go1.25.0.src.tar.gz +/go1.25.0-1-openssl-fips.tar.gz +/go1.25.1-1-openssl-fips.tar.gz /go1.25.1.src.tar.gz -/go1.25.2.src.tar.gz /go1.25.3.src.tar.gz -/go1.25.4.src.tar.gz -/go1.25.5.src.tar.gz -/go1.26rc1.src.tar.gz +/go1.25.3-1-openssl-fips.tar.gz diff --git a/.packit.yaml b/.packit.yaml deleted file mode 100644 index ab570c5..0000000 --- a/.packit.yaml +++ /dev/null @@ -1,41 +0,0 @@ -specfile_path: golang.spec -files_to_sync: - - golang.spec - - .packit.yaml -upstream_package_name: go -upstream_project_url: https://github.com/golang/go -downstream_package_name: golang -upstream_tag_template: go{version} - -actions: - changelog-entry: - - bash -c "echo - New release ${PACKIT_PROJECT_VERSION}" - -jobs: - # Fedora 42 follows Go 1.24 - - job: pull_from_upstream - trigger: release - dist_git_branches: fedora-42 - upstream_tag_include: "^go1.24.+" - - # Fedora 43 follows Go 1.25 - - job: pull_from_upstream - trigger: release - dist_git_branches: fedora-43 - upstream_tag_include: "^go1.25.+" - - # Fedora Rawhide follows the latest version - - job: pull_from_upstream - trigger: release - dist_git_branches: fedora-rawhide - upstream_tag_include: "^go1.26.+" - - # Run Koji builds when Packit pull requests are merged - - job: koji_build - trigger: commit - dist_git_branches: fedora-all - - # Create Bodhi updates in all Fedora stable versions - - job: bodhi_update - trigger: commit - dist_git_branches: fedora-all diff --git a/0001-Modify-go.env.patch b/0001-Modify-go.env.patch index 6a458b2..d50ce0e 100644 --- a/0001-Modify-go.env.patch +++ b/0001-Modify-go.env.patch @@ -1,42 +1,31 @@ -From 39432f71436c41201450a523dc41035c92d27569 Mon Sep 17 00:00:00 2001 -From: Maxwell G -Date: Thu, 24 Jul 2025 12:23:59 -0500 -Subject: [PATCH] Modify go.env +From fbcfe983cdeb723420d67364022fc91ac8c6be3c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alejandro=20S=C3=A1ez?= +Date: Wed, 5 Jun 2024 12:30:46 +0200 +Subject: [PATCH] Modify environment variables defaults +- Set GOTOOLCHAIN to local +- Set GOAMD64 to v3 +- Set GOPPC64 to power9 --- - go.env | 17 ++++++++++++++++- - 1 file changed, 16 insertions(+), 1 deletion(-) + go.env | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go.env b/go.env -index 6ff2b92..5508440 100644 +index 6ff2b921d4..0bff84446c 100644 --- a/go.env +++ b/go.env -@@ -4,9 +4,24 @@ - - # Use the Go module mirror and checksum database by default. - # See https://proxy.golang.org for details. -+# -+# NOTE(downstream): We used to disable the Google Go proxy with GOPROXY=direct and -+# disable the GOSUMDB for historical and priavcy reasons, but it caused severe -+# performance degradations, so we reverted to the default upstream configuration. -+# as of https://fedoraproject.org/wiki/Changes/golang1.25. -+# To preserve the previous behavior, set "GOPROXY=direct" and "GOSUMDB=off". - GOPROXY=https://proxy.golang.org,direct - GOSUMDB=sum.golang.org +@@ -9,4 +9,10 @@ GOSUMDB=sum.golang.org # Automatically download newer toolchains as directed by go.mod files. # See https://go.dev/doc/toolchain for details. -GOTOOLCHAIN=auto -+# -+# NOTE(downstream): We change this default from auto to local so that the -+# distribution-packaged Go toolchain is always used and go doesn't -+# automatically download pre-compiled alternative versions. +GOTOOLCHAIN=local + -+# NOTE(downstream): https://sourceware.org/bugzilla/show_bug.cgi?id=33204 -+# The dwarf5 data emitted by default in Go 1.25+ is incompatible with debugedit -+# and breaks debugdata collection. -+GOEXPERIMENT=nodwarf5 ++# The AMD64 baseline for RHEL10 is v3. ++GOAMD64=v3 ++# The PPC64LE baseline for RHEL10 is power9 ++GOPPC64=power9 ++ -- -2.50.1 +2.45.1 diff --git a/0005-Skip-TestCrashDumpsAllThreads.patch b/0005-Skip-TestCrashDumpsAllThreads.patch deleted file mode 100644 index 34a84b3..0000000 --- a/0005-Skip-TestCrashDumpsAllThreads.patch +++ /dev/null @@ -1,28 +0,0 @@ -From c0c22e2aa7d1901c97da04f834ce9c7b9e38be80 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alejandro=20S=C3=A1ez?= -Date: Sun, 11 Feb 2024 12:08:35 +0100 -Subject: [PATCH] Skip TestCrashDumpsAllThreads - -See golang.org/issues/64650 ---- - src/runtime/crash_unix_test.go | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/runtime/crash_unix_test.go b/src/runtime/crash_unix_test.go -index 123a462423..a0034d6455 100644 ---- a/src/runtime/crash_unix_test.go -+++ b/src/runtime/crash_unix_test.go -@@ -74,6 +74,10 @@ func TestCrashDumpsAllThreads(t *testing.T) { - t.Skip("skipping; SIGQUIT is blocked, see golang.org/issue/19196") - } - -+ if runtime.GOOS == "linux" && runtime.GOARCH == "s390x" { -+ t.Skip("skipping; frequent TestCrashDumpsAllThreads failures on linux/s390x, see golang.org/issue/64650") -+ } -+ - testenv.MustHaveGoBuild(t) - - if strings.Contains(os.Getenv("GOFLAGS"), "mayMoreStackPreempt") { --- -2.43.0 - diff --git a/README.packit b/README.packit deleted file mode 100644 index b4b46e3..0000000 --- a/README.packit +++ /dev/null @@ -1,3 +0,0 @@ -This repository is maintained by packit. -https://packit.dev/ -The file was generated using packit 1.12.0.post1.dev20+g7d30dac21. diff --git a/bundled-deps.sh b/bundled-deps.sh index 3d5d6b7..51dd446 100755 --- a/bundled-deps.sh +++ b/bundled-deps.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#! /bin/bash # Copyright (C) 2021 Jakub Čajka jcajka@redhat.com # # This program is free software; you can redistribute it and/or @@ -16,14 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. provides="" - for bundle in $(find -name modules.txt); do - provides="$provides\n$(cat "$bundle" | - grep "^# " | - grep -v "# explicit" | - sed -r s/"^#.* => "// | - sed -r "s/# //" | - sed -r "s:(.*) v(.*):Provides\: bundled(golang(\1)) = \2:" | - sed '/= .*/s/-/./g')" - done +provides="$provides\n$(cat "$bundle" | grep "^# " | grep -v "# explicit" | sed -r s/"^#.* => "// | sed -r "s/# //" | sed -r "s:(.*) v(.*):Provides\: bundled(golang(\1)) = \2:")" +done echo -e "$provides" | sed 's/-/./g' | sort -u diff --git a/changelog b/changelog index f0b1671..4b4b67d 100644 --- a/changelog +++ b/changelog @@ -1,28 +1,26 @@ -* Tue Aug 08 2023 Packit - 1.21.0-1 -New release ${PACKIT_PROJECT_VERSION} +* Thu Sep 28 2023 Alejandro Sáez - 1.20.6-3 +- Migrated to SPDX license -* Thu Jul 20 2023 Fedora Release Engineering - 1.21~rc3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild +* Tue Sep 05 2023 Yaakov Selkowitz - 1.20.6-2 +- Drop unused pcre dependency -* Fri Jul 14 2023 Alejandro Sáez - 1.21~rc3-1 -- Update to go1.21rc3 -- Update bundled dependencies. -- Update pcre-devel to pcre2-devel -- Add go-filesystem -- Remove skipping tests, related: https://github.com/golang/go/issues/39466 -- Remove 0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch, already merged -- Rename 0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch to 0001-Disable-Google-s-proxy-sumdb-and-toolchain.patch -- Update 0001-Disable-Google-s-proxy-sumdb-and-toolchain.patch -- Update 0004-cmd-link-use-gold-on-ARM-ARM64-only-if-gold-is-avail.patch -- Resolves: rhbz#2128303 -- Resolves: rhbz#2215635 -- Resolves: rhbz#2172392 - -* Tue Jul 11 2023 Mike Rochefort - 1.20.6-1 +* Tue Aug 01 2023 Alejandro Sáez - 1.20.6-1 - Update to go 1.20.6 -* Tue Jun 06 2023 Alejandro Sáez - 1.20.5-1 -- Update to go 1.20.5 +* Wed Jun 28 2023 Yaakov Selkowitz - 1.20.5-4 +- Add go-toolset subpackage + +* Thu Jun 22 2023 Yaakov Selkowitz - 1.20.5-3 +- Add runtime requirement for openssl-devel + +* Wed Jun 14 2023 Alejandro Sáez - 1.20.5-2 +- Package bump up do to a mistake I made + +* Wed Jun 14 2023 Alejandro Sáez - 1.20.5-1 +- Update to go1.20.5 + +* Tue Jun 13 2023 Alejandro Sáez - 1.20.4-3 +- Add FIPS support for RHEL targets * Tue May 02 2023 Alejandro Sáez - 1.20.4-1 - Update to go1.20.4 diff --git a/fedora.go b/fedora.go index 3ff4d3e..60e460d 100644 --- a/fedora.go +++ b/fedora.go @@ -1,6 +1,7 @@ //go:build rpm_crashtraceback // +build rpm_crashtraceback + // Copyright 2017 The Fedora Project Contributors. All rights reserved. // Use of this source code is governed by the MIT license. diff --git a/fix_cgo_panic-with-gcc15-in-368.patch b/fix_cgo_panic-with-gcc15-in-368.patch deleted file mode 100644 index 372af28..0000000 --- a/fix_cgo_panic-with-gcc15-in-368.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 5f566346b70403891cfc52d0c807d72335691708 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alejandro=20S=C3=A1ez?= -Date: Wed, 15 Jan 2025 21:45:33 +0100 -Subject: [PATCH] Fix _cgo_panic with gcc15 in 368 - ---- - src/cmd/link/internal/x86/asm.go | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/cmd/link/internal/x86/asm.go b/src/cmd/link/internal/x86/asm.go -index d535e5fb4d..c4253a8c08 100644 ---- a/src/cmd/link/internal/x86/asm.go -+++ b/src/cmd/link/internal/x86/asm.go -@@ -184,7 +184,7 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade - return true - } - -- if r.Off() >= 2 && sData[r.Off()-2] == 0xff && sData[r.Off()-1] == 0xb3 { -+ if r.Off() >= 2 && sData[r.Off()-2] == 0xff && sData[r.Off()-1] >= 0xb0 && sData[r.Off()-1] <= 0xb7 { - su.MakeWritable() - // turn PUSHL of GOT entry into PUSHL of symbol itself. - // use unnecessary SS prefix to keep instruction same length. --- -2.47.1 - diff --git a/gating.yaml b/gating.yaml index ce3cdc1..89ec7b9 100644 --- a/gating.yaml +++ b/gating.yaml @@ -17,3 +17,11 @@ product_versions: decision_context: osci_compose_gate rules: - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional} +--- !Policy +product_versions: + - rhel-10 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1-tmt-aarch64.functional} + - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1-tmt-ppc64le.functional} + - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1-tmt-x86_64.functional} diff --git a/golang-prelink.conf b/golang-prelink.conf new file mode 100644 index 0000000..471e8e6 --- /dev/null +++ b/golang-prelink.conf @@ -0,0 +1,3 @@ +# there are ELF files in src which are testdata and shouldn't be modified +-b /usr/lib/golang/src +-b /usr/lib64/golang/src diff --git a/golang.spec b/golang.spec index ba57da1..cd841f4 100644 --- a/golang.spec +++ b/golang.spec @@ -1,4 +1,19 @@ %bcond_with bootstrap +# temporalily ignore test failures +# due to https://github.com/golang/go/issues/39466 +%ifarch aarch64 +%bcond_without ignore_tests +%else +%bcond_with ignore_tests +%endif + +# Enable race by default +%global race 1 + +# Disable race on riscv64 as it's not supported +%ifarch riscv64 +%global race 0 +%endif # build ids are not currently generated: # https://code.google.com/p/go/issues/detail?id=5238 @@ -31,6 +46,13 @@ # Golang build options. +# Disable FIPS by default +%global fips 0 +# Enable FIPS by default in RHEL +%if 0%{?rhel} +%global fips 1 +%endif + # Build golang using external/internal(close to cgo disabled) linking. %ifarch %{ix86} x86_64 ppc64le %{arm} aarch64 s390x riscv64 %global external_linker 1 @@ -59,16 +81,8 @@ %global fail_on_tests 1 %endif -# Build golang shared objects for stdlib -%ifarch %{ix86} x86_64 ppc64le %{arm} aarch64 -%global shared 1 -%else +# shared mode is breaks Go 1.21 in ELN %global shared 0 -%endif - -# Pre build std lib with -race enabled -# Disabled due to 1.20 new cache usage, see 1.20 upstream release notes -%global race 0 # Fedora GOROOT %global goroot /usr/lib/%{name} @@ -98,24 +112,40 @@ %global gohostarch riscv64 %endif -# Comment out go_prerelease and go_patch as needed -%global go_api 1.26 -%global go_prerelease rc1 -#global go_patch 1 - +%global go_api 1.25 +# Use only for prerelease versions +#global go_prerelease rc3 +%global go_patch 3 %global go_version %{go_api}%{?go_patch:.%{go_patch}}%{?go_prerelease:~%{go_prerelease}} %global go_source %{go_api}%{?go_patch:.%{go_patch}}%{?go_prerelease} +# Go FIPS package release +%global pkg_release 1 + +# For rpmdev-bumpspec and releng automation. +%global baserelease 1 + +# LLVM compiler-rt version for race detector +%global llvm_compiler_rt_version 18.1.8 Name: golang -Version: %{go_version} +Version: %{go_version} Release: %autorelease Summary: The Go Programming Language # source tree includes several copies of Mark.Twain-Tom.Sawyer.txt under Public Domain License: BSD-3-Clause AND LicenseRef-Fedora-Public-Domain URL: https://go.dev Source0: https://go.dev/dl/go%{go_source}.src.tar.gz +# Go's FIPS mode bindings are now provided as a standalone +# module instead of in tree. This makes it easier to see +# the actual changes vs upstream Go. The module source is +# located at https://github.com/golang-fips/openssl-fips, +# And pre-genetated patches to set up the module for a given +# Go release are located at https://github.com/golang-fips/go. +# making a source conditional creates odd behaviors so for now, include FIPS always +Source1: https://github.com/golang-fips/go/archive/refs/tags/go%{go_source}-%{pkg_release}-openssl-fips.tar.gz # make possible to override default traceback level at build time by setting build tag rpm_crashtraceback -Source1: fedora.go +Source2: fedora.go +Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{llvm_compiler_rt_version}/compiler-rt-%{llvm_compiler_rt_version}.src.tar.xz # The compiler is written in Go. Needs go(1.4+) compiler for build. %if !%{golang_bootstrap} @@ -123,41 +153,66 @@ BuildRequires: gcc-go >= 5 %else BuildRequires: golang > 1.4 %endif -BuildRequires: hostname -# for tests -BuildRequires: pcre2-devel, glibc-static, perl-interpreter, procps-ng +# Install hostname(1) or net-tools(1) depending on the OS version +%if 0%{?rhel} > 6 || 0%{?fedora} > 0 +BuildRequires: hostname +%else +BuildRequires: net-tools +%endif + +# If FIPS is enabled, we need openssl-devel +%if %{fips} +BuildRequires: openssl-devel +Requires: openssl-devel +%endif + +BuildRequires: glibc-static + +# For running the tests on Fedora +%if 0%{?fedora} +BuildRequires: perl-interpreter, procps-ng +%endif + +# For running the tests on RHEL +%if 0%{?rhel} +BuildRequires: perl +%endif +# For building llvm address sanitizer for Go race detector +BuildRequires: libstdc++-devel +BuildRequires: clang Provides: go = %{version}-%{release} +%if 0%{?fedora} # Bundled/Vendored provides generated by bundled-deps.sh based on the in tree module data -Provides: bundled(golang(github.com/google/pprof)) = 0.0.0.20251114195745.4902fdda35c8 -Provides: bundled(golang(github.com/ianlancetaylor/demangle)) = 0.0.0.20250417193237.f615e6bd150b -Provides: bundled(golang(golang.org/x/arch)) = 0.23.0 -Provides: bundled(golang(golang.org/x/build)) = 0.0.0.20251128064159.b9bfd88b30e8 -Provides: bundled(golang(golang.org/x/crypto)) = 0.46.1.0.20251210140736.7dacc380ba00 -Provides: bundled(golang(golang.org/x/mod)) = 0.30.1.0.20251115032019.269c237cf350 -Provides: bundled(golang(golang.org/x/net)) = 0.47.1.0.20251128220604.7c360367ab7e -Provides: bundled(golang(golang.org/x/sync)) = 0.19.0 -Provides: bundled(golang(golang.org/x/sys)) = 0.39.0 -Provides: bundled(golang(golang.org/x/telemetry)) = 0.0.0.20251128220624.abf20d0e57ec -Provides: bundled(golang(golang.org/x/term)) = 0.38.0 -Provides: bundled(golang(golang.org/x/text)) = 0.32.0 +Provides: bundled(golang(github.com/google/pprof)) = 0.0.0.20250208200701.d0013a598941 +Provides: bundled(golang(github.com/ianlancetaylor/demangle)) = 0.0.0.20240912202439.0a2b6291aafd +Provides: bundled(golang(golang.org/x/arch)) = 0.18.1.0.20250605182141.b2f4e2807dec +Provides: bundled(golang(golang.org/x/build)) = 0.0.0.20250606033421.8c8ff6f34a83 +Provides: bundled(golang(golang.org/x/crypto)) = 0.39.0 +Provides: bundled(golang(golang.org/x/mod)) = 0.25.0 +Provides: bundled(golang(golang.org/x/net)) = 0.41.0 +Provides: bundled(golang(golang.org/x/sync)) = 0.15.0 +Provides: bundled(golang(golang.org/x/sys)) = 0.33.0 +Provides: bundled(golang(golang.org/x/telemetry)) = 0.0.0.20250606142133.60998feb31a8 +Provides: bundled(golang(golang.org/x/term)) = 0.32.0 +Provides: bundled(golang(golang.org/x/text)) = 0.26.0 Provides: bundled(golang(golang.org/x/tools)) = 0.27.0 -Provides: bundled(golang(golang.org/x/tools)) = 0.39.1.0.20251205000126.062ef7b6ced2 +Provides: bundled(golang(golang.org/x/tools)) = 0.34.0 Provides: bundled(golang(rsc.io/markdown)) = 0.0.0.20240306144322.0bf8f97ee8ef +%endif Requires: %{name}-bin = %{version}-%{release} Requires: %{name}-src = %{version}-%{release} -Requires: go-filesystem +%if %{race} +Requires: %{name}-race = %{version}-%{release} +%endif Patch1: 0001-Modify-go.env.patch -Patch5: 0005-Skip-TestCrashDumpsAllThreads.patch Patch6: 0006-Default-to-ld.bfd-on-ARM64.patch -# Related to https://gcc.gnu.org/PR118497 -Patch8: fix_cgo_panic-with-gcc15-in-368.patch -# Related to https://github.com/golang/go/issues/74476 -Patch9: skip_lsan_tests.patch +# Related: https://sourceware.org/bugzilla/show_bug.cgi?id=33204 +Patch7: revert_dwarf5.patch # Having documentation separate was broken Obsoletes: %{name}-docs < 1.1-4 @@ -169,14 +224,11 @@ Obsoletes: %{name}-data < 1.1.1-4 Obsoletes: %{name}-vim < 1.4 Obsoletes: emacs-%{name} < 1.4 -# We stopped building the golang-race subpackage, so we need to to maintain the -# update path. -Obsoletes: golang-race < 1.20~rc3-2 - # These are the only RHEL/Fedora architectures that we compile this package for ExclusiveArch: %{golang_arches} Source100: golang-gdbinit +Source101: golang-prelink.conf %description %{summary}. @@ -252,8 +304,11 @@ Requires(preun): %{_sbindir}/update-alternatives # This is an odd issue, still looking for a better fix. Requires: glibc Requires: gcc -Recommends: git-core, subversion, mercurial - +%if 0%{?rhel} && 0%{?rhel} < 8 +Requires: git, subversion, mercurial +%else +Recommends: git, subversion, mercurial +%endif %description bin %{summary} @@ -275,27 +330,104 @@ Summary: Golang shared object libraries %{summary}. %endif -%if %{race} -%package race -Summary: Golang std library with -race enabled +%package -n go-toolset +Summary: Package that installs go-toolset +Requires: %{name} = %{version}-%{release} +%ifarch x86_64 aarch64 ppc64le +Requires: delve +%endif +%description -n go-toolset +This is the main package for go-toolset. + +%if %{race} +%package race +Summary: Race detetector library object files. Requires: %{name} = %{version}-%{release} %description race -%{summary} +Binary library objects for Go's race detector. %endif + %prep %autosetup -p1 -n go +# Copy fedora.go to ./src/runtime/ +cp %{SOURCE2} ./src/runtime/ +sed -i '1s/$/ (%{?rhel:Red Hat} %{version}-%{release})/' VERSION +# Delete the bundled race detector objects. +find ./src/runtime/race/ -name "race_*.syso" -exec rm {} \; +# Delete the boring binary blob. We use the system OpenSSL instead. +rm -rf src/crypto/internal/boring/syso -cp %{SOURCE1} ./src/runtime/ +# If FIPS is enabled, install the FIPS source +%if %{fips} + echo "Preparing FIPS patches" + pushd .. + tar -xf %{SOURCE1} + popd + # TODO Check here, this is failing due to the external linker flag? maybe, but it's clearly related to that according tho this commit: + # https://github.com/golang-fips/go/blob/main/patches/000-initial-setup.patch#L48 + # Add --no-backup-if-mismatch option to avoid creating .orig temp files + patch_dir="../go-go%{version}-%{pkg_release}-openssl-fips/patches" + for p in "$patch_dir"/*.patch; do + echo "Applying $p" + patch --no-backup-if-mismatch -p1 < $p + done + + # Configure crypto tests + echo "Configure crypto tests" + pushd ../go-go%{version}-%{pkg_release}-openssl-fips + ln -s ../go go + ./scripts/configure-crypto-tests.sh + popd +%endif %build +# -x: print commands as they are executed +# -e: exit immediately if a command exits with a non-zero status +set -xe + # print out system information uname -a cat /proc/cpuinfo cat /proc/meminfo +# Build race detector .syso's from llvm sources +# The race detector requests a -fno-exceptions build. +%global tsan_buildflags %(rpm -D 'toolchain clang' -E '%{optflags}' | sed 's/-fexceptions//') +%global tsan_optflag -O1 +mkdir ../llvm + +tar -xf %{SOURCE3} -C ../llvm +tsan_go_dir="../llvm/compiler-rt-%{llvm_compiler_rt_version}.src/lib/tsan/go" + +# The script uses uname -a and grep to set the GOARCH. This +# is unreliable and can get the wrong architecture in +# circumstances like cross-architecture emulation. We fix it +# by just reading GOARCH directly from Go. +export GOARCH=$(go env GOARCH) + +%if %{race} +%ifarch x86_64 +pushd "${tsan_go_dir}" + CFLAGS="%{tsan_buildflags} %{tsan_optflag}" CC=clang GOAMD64=v3 ./buildgo.sh +popd +cp "${tsan_go_dir}"/race_linux_amd64.syso ./src/runtime/race/internal/amd64v3/race_linux.syso + +pushd "${tsan_go_dir}" + CFLAGS="%{tsan_buildflags} %{tsan_optflag}" CC=clang GOAMD64=v3 ./buildgo.sh +popd +cp "${tsan_go_dir}"/race_linux_amd64.syso ./src/runtime/race/internal/amd64v1/race_linux.syso + +%else +pushd "${tsan_go_dir}" + CFLAGS="%{tsan_buildflags} %{tsan_optflag}" CC=clang ./buildgo.sh +popd +cp "${tsan_go_dir}"/race_linux_%{gohostarch}.syso ./src/runtime/race/race_linux_%{gohostarch}.syso +%endif +%endif + # bootstrap compiler GOROOT %if !%{golang_bootstrap} export GOROOT_BOOTSTRAP=/ @@ -308,6 +440,8 @@ export GOROOT_FINAL=%{goroot} export GOHOSTOS=linux export GOHOSTARCH=%{gohostarch} +export GOAMD64=v3 +export GOPPC64='power9' pushd src # use our gcc options for this build, but store gcc as default for compiler @@ -317,13 +451,24 @@ export CC="gcc" export CC_FOR_TARGET="gcc" export GOOS=linux export GOARCH=%{gohostarch} +export GOAMD64=v3 +export GOPPC64='power9' + +DEFAULT_GO_LD_FLAGS="" %if !%{external_linker} -export GO_LDFLAGS="-linkmode internal" +export GO_LDFLAGS="-linkmode internal $DEFAULT_GO_LD_FLAGS" +%else +# Only pass a select subset of the external hardening flags. We do not pass along +# the default $RPM_LD_FLAGS as on certain arches Go does not fully, correctly support +# building in PIE mode. +export GO_LDFLAGS="\"-extldflags=-Wl,-z,now,-z,relro\" $DEFAULT_GO_LD_FLAGS" %endif + %if !%{cgo_enabled} export CGO_ENABLED=0 %endif -./make.bash -v + +./make.bash --no-clean -v popd # build shared std lib @@ -332,11 +477,10 @@ GOROOT=$(pwd) PATH=$(pwd)/bin:$PATH go install -buildmode=shared -v -x std %endif %if %{race} -GOROOT=$(pwd) PATH=$(pwd)/bin:$PATH go install -race -v -x std +GOROOT=$(pwd) PATH=$(pwd)/bin:$PATH go install -race std %endif %install -echo "== 1 ==" rm -rf $RPM_BUILD_ROOT # remove GC build cache rm -rf pkg/obj/go-build/* @@ -349,7 +493,7 @@ mkdir -p $RPM_BUILD_ROOT%{goroot} # https://code.google.com/p/go/issues/detail?id=5830 cp -apv api bin doc lib pkg src misc test go.env VERSION \ $RPM_BUILD_ROOT%{goroot} -echo "== 2 ==" + # bz1099206 find $RPM_BUILD_ROOT%{goroot}/src -exec touch -r $RPM_BUILD_ROOT%{goroot}/VERSION "{}" \; # and level out all the built archives @@ -366,8 +510,11 @@ docs_list=$cwd/go-docs.list tests_list=$cwd/go-tests.list rm -f $src_list $pkg_list $docs_list $misc_list $tests_list $shared_list $race_list touch $src_list $pkg_list $docs_list $misc_list $tests_list $shared_list $race_list + +################## +# Register files # +################## pushd $RPM_BUILD_ROOT%{goroot} - echo "== 3 ==" find src/ -type d -a \( ! -name testdata -a ! -ipath '*/testdata/*' \) -printf '%%%dir %{goroot}/%p\n' >> $src_list find src/ ! -type d -a \( ! -ipath '*/testdata/*' -a ! -name '*_test.go' \) -printf '%{goroot}/%p\n' >> $src_list @@ -381,7 +528,6 @@ pushd $RPM_BUILD_ROOT%{goroot} find misc/ ! -type d -printf '%{goroot}/%p\n' >> $misc_list %if %{shared} -echo "== 4 ==" mkdir -p %{buildroot}/%{_libdir}/ mkdir -p %{buildroot}/%{golibdir}/ for file in $(find . -iname "*.so" ); do @@ -397,13 +543,6 @@ echo "== 4 ==" find pkg/*_dynlink/ -type d -printf '%%%dir %{goroot}/%p\n' >> $shared_list find pkg/*_dynlink/ ! -type d -printf '%{goroot}/%p\n' >> $shared_list %endif - -echo "== 5 ==" - -%if %{race} - find pkg/*_race/ -type d -printf '%%%dir %{goroot}/%p\n' >> $race_list - find pkg/*_race/ ! -type d -printf '%{goroot}/%p\n' >> $race_list -%endif find test/ -type d -printf '%%%dir %{goroot}/%p\n' >> $tests_list find test/ ! -type d -printf '%{goroot}/%p\n' >> $tests_list find src/ -type d -a \( -name testdata -o -ipath '*/testdata/*' \) -printf '%%%dir %{goroot}/%p\n' >> $tests_list @@ -412,7 +551,6 @@ echo "== 5 ==" find lib/ -type d -printf '%%%dir %{goroot}/%p\n' >> $tests_list find lib/ ! -type d -printf '%{goroot}/%p\n' >> $tests_list popd -echo "== 6 ==" # remove the doc Makefile rm -rfv $RPM_BUILD_ROOT%{goroot}/doc/Makefile @@ -427,7 +565,7 @@ mkdir -p $RPM_BUILD_ROOT%{gopath}/src/github.com mkdir -p $RPM_BUILD_ROOT%{gopath}/src/bitbucket.org mkdir -p $RPM_BUILD_ROOT%{gopath}/src/code.google.com/p mkdir -p $RPM_BUILD_ROOT%{gopath}/src/golang.org/x -echo "== 7 ==" + # make sure these files exist and point to alternatives rm -f $RPM_BUILD_ROOT%{_bindir}/go ln -sf /etc/alternatives/go $RPM_BUILD_ROOT%{_bindir}/go @@ -438,44 +576,78 @@ ln -sf /etc/alternatives/gofmt $RPM_BUILD_ROOT%{_bindir}/gofmt mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d cp -av %{SOURCE100} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d/golang.gdb -echo "== END OF INSTALL ==" +# prelink blacklist +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/prelink.conf.d +cp -av %{SOURCE101} $RPM_BUILD_ROOT%{_sysconfdir}/prelink.conf.d/golang.conf + +%if %{fips} +# Quick fix for the rhbz#2014704 +sed -i 's/const defaultGO_LDSO = `.*`/const defaultGO_LDSO = ``/' $RPM_BUILD_ROOT%{goroot}/src/internal/buildcfg/zbootstrap.go +%endif %check export GOROOT=$(pwd -P) export PATH="$GOROOT"/bin:"$PATH" cd src +# Add some sanity checks. +echo "GO VERSION:" +go version + +echo "GO ENVIRONMENT:" +go env + export CC="gcc" export CFLAGS="$RPM_OPT_FLAGS" export LDFLAGS="$RPM_LD_FLAGS" +export GOAMD64=v3 +export GOPPC64='power9' %if !%{external_linker} export GO_LDFLAGS="-linkmode internal" +%else +export GO_LDFLAGS="-extldflags '$RPM_LD_FLAGS'" %endif %if !%{cgo_enabled} || !%{external_linker} export CGO_ENABLED=0 %endif -# workaround for https://github.com/golang/go/issues/39466 until it gests fixed -# Commented until the patch is ready, this workaround suggested in the link above -# doesn't work properly -#ifarch aarch64 -#export CGO_CFLAGS="-mno-outline-atomics" -#endif # make sure to not timeout -%ifnarch riscv64 export GO_TEST_TIMEOUT_SCALE=2 -%else -# NOTE(davidlt): 20 is probably too much, but it's only for riscv and it works -export GO_TEST_TIMEOUT_SCALE=20 + +export GO_TEST_RUN="" +%ifarch aarch64 + export GO_TEST_RUN="-run=!testshared" %endif +echo "=== Start testing ===" %if %{fail_on_tests} -./run.bash --no-rebuild -v -v -v -k -%else -./run.bash --no-rebuild -v -v -v -k || : -%endif -cd .. + ./run.bash --no-rebuild -v -v -v -k $GO_TEST_RUN + %if %{fips} + echo "=== Running FIPS tests ===" + # tested25519vectors needs network connectivity but it should be cover by + # this test https://pkgs.devel.redhat.com/cgit/tests/golang/tree/regression/internal-testsuite/runtest.sh#n127 + # run tests with fips enabled. + export GOLANG_FIPS=1 + export OPENSSL_FORCE_FIPS_MODE=1 + echo "=== Run all crypto test skipping tls ===" + pushd crypto + # run all crypto tests but skip tls, we will run fips specific tls tests later + go test $(go list ./... | grep -v tls) -v -skip="TestEd25519Vectors|TestACVP" + # check that signature functions have parity between boring and notboring + CGO_ENABLED=0 go test $(go list ./... | grep -v tls) -v -skip="TestEd25519Vectors|TestACVP" + popd + echo "=== Run tls tests ===" + # run all fips specific tls tests + pushd crypto/tls + go test -v -run "Boring" + popd + %endif +%else + ./run.bash --no-rebuild -v -v -v -k || : +%endif +echo "=== End testing ===" +cd .. %post bin %{_sbindir}/update-alternatives --install %{_bindir}/go \ @@ -498,8 +670,6 @@ fi %dir %{goroot} %{goroot}/api/ %{goroot}/lib/time/ -%{goroot}/lib/wasm/ -%{goroot}/lib/fips140/ # ensure directory ownership, so they are cleaned up if empty %dir %{gopath} @@ -511,11 +681,21 @@ fi %dir %{gopath}/src/golang.org %dir %{gopath}/src/golang.org/x - # gdbinit (for gdb debugging) %{_sysconfdir}/gdbinit.d +# prelink blacklist +%{_sysconfdir}/prelink.conf.d + %files src -f go-src.list +%if %{race} +%ifarch x86_64 +%exclude %{goroot}/src/runtime/race/internal/amd64v1/race_linux.syso +%exclude %{goroot}/src/runtime/race/internal/amd64v3/race_linux.syso +%else +%exclude %{goroot}/src/runtime/race/race_linux_%{gohostarch}.syso +%endif +%endif %files docs -f go-docs.list @@ -526,16 +706,24 @@ fi %files bin -f go-pkg.list %{_bindir}/go %{_bindir}/gofmt +%{goroot}/go.env %{goroot}/bin/linux_%{gohostarch}/go %{goroot}/bin/linux_%{gohostarch}/gofmt -%{goroot}/go.env %if %{shared} %files shared -f go-shared.list %endif +%files -n go-toolset + %if %{race} -%files race -f go-race.list +%files race +%ifarch x86_64 +%{goroot}/src/runtime/race/internal/amd64v1/race_linux.syso +%{goroot}/src/runtime/race/internal/amd64v3/race_linux.syso +%else +%{goroot}/src/runtime/race/race_linux_%{gohostarch}.syso +%endif %endif %changelog diff --git a/plans/ci.fmf b/plans/ci.fmf deleted file mode 100644 index 1dbcaef..0000000 --- a/plans/ci.fmf +++ /dev/null @@ -1,6 +0,0 @@ -summary: CI Gating Plan -discover: - how: fmf - url: https://src.fedoraproject.org/tests/golang -execute: - how: tmt diff --git a/plans/tier0.fmf b/plans/tier0.fmf new file mode 100644 index 0000000..4b27223 --- /dev/null +++ b/plans/tier0.fmf @@ -0,0 +1,12 @@ +summary: tier0 tests +discover: + - name: rhel + how: fmf + url: https://gitlab.cee.redhat.com/toolchain-qe/tests/golang.git + filter: "tier:0" +execute: + how: tmt + +provision: + hardware: + memory: ">= 4 GB" diff --git a/revert_dwarf5.patch b/revert_dwarf5.patch new file mode 100644 index 0000000..80a58bb --- /dev/null +++ b/revert_dwarf5.patch @@ -0,0 +1,42 @@ +From e90ae9076a108b83c645814f75a574c14a5a4b98 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alejandro=20S=C3=A1ez?= +Date: Wed, 27 Aug 2025 16:18:09 +0200 +Subject: [PATCH] Revert DWARF5 as default, use DWARF4 + +--- + src/internal/buildcfg/exp.go | 13 +------------ + 1 file changed, 1 insertion(+), 12 deletions(-) + +diff --git a/src/internal/buildcfg/exp.go b/src/internal/buildcfg/exp.go +index 689ca8ce58..b2ea97481b 100644 +--- a/src/internal/buildcfg/exp.go ++++ b/src/internal/buildcfg/exp.go +@@ -67,24 +67,13 @@ func ParseGOEXPERIMENT(goos, goarch, goexp string) (*ExperimentFlags, error) { + regabiSupported = true + } + +- // Older versions (anything before V16) of dsymutil don't handle +- // the .debug_rnglists section in DWARF5. See +- // https://github.com/golang/go/issues/26379#issuecomment-2677068742 +- // for more context. This disables all DWARF5 on mac, which is not +- // ideal (would be better to disable just for cases where we know +- // the build will use external linking). In the GOOS=aix case, the +- // XCOFF format (as far as can be determined) doesn't seem to +- // support the necessary section subtypes for DWARF-specific +- // things like .debug_addr (needed for DWARF 5). +- dwarf5Supported := (goos != "darwin" && goos != "ios" && goos != "aix") +- + baseline := goexperiment.Flags{ + RegabiWrappers: regabiSupported, + RegabiArgs: regabiSupported, + AliasTypeParams: true, + SwissMap: true, + SyncHashTrieMap: true, +- Dwarf5: dwarf5Supported, ++ Dwarf5: false, + } + + // Start with the statically enabled set of experiments. +-- +2.51.0 + diff --git a/rpminspect.yaml b/rpminspect.yaml new file mode 100644 index 0000000..a2f17af --- /dev/null +++ b/rpminspect.yaml @@ -0,0 +1,33 @@ +--- +debuginfo: + ignore: + # go binaries gained/contain debugging symbols: expected (rhbz#2175281 rhbz#2175677) + - /usr/lib/golang/bin/gofmt + - /usr/lib/golang/bin/go + - /usr/lib/golang/pkg/tool/linux_*/addr2line + - /usr/lib/golang/pkg/tool/linux_*/asm + - /usr/lib/golang/pkg/tool/linux_*/buildid + - /usr/lib/golang/pkg/tool/linux_*/cgo + - /usr/lib/golang/pkg/tool/linux_*/compile + - /usr/lib/golang/pkg/tool/linux_*/covdata + - /usr/lib/golang/pkg/tool/linux_*/cover + - /usr/lib/golang/pkg/tool/linux_*/dist + - /usr/lib/golang/pkg/tool/linux_*/distpack + - /usr/lib/golang/pkg/tool/linux_*/doc + - /usr/lib/golang/pkg/tool/linux_*/fix + - /usr/lib/golang/pkg/tool/linux_*/link + - /usr/lib/golang/pkg/tool/linux_*/nm + - /usr/lib/golang/pkg/tool/linux_*/objdump + - /usr/lib/golang/pkg/tool/linux_*/pack + - /usr/lib/golang/pkg/tool/linux_*/pprof + - /usr/lib/golang/pkg/tool/linux_*/preprofile + - /usr/lib/golang/pkg/tool/linux_*/test2json + - /usr/lib/golang/pkg/tool/linux_*/trace + - /usr/lib/golang/pkg/tool/linux_*/vet + # rpminspect: preprofile in golang package contains debugging symbols (RHEL-61237) + - /usr/lib/golang/pkg/tool/linux_*/preprofile + # go testdata + - /usr/lib/golang/src/debug/dwarf/testdata/*.elf + - /usr/lib/golang/src/debug/dwarf/testdata/*.elf5 + - /usr/lib/golang/src/debug/elf/testdata/* + - /usr/lib/golang/src/runtime/pprof/testdata/* diff --git a/skip_lsan_tests.patch b/skip_lsan_tests.patch deleted file mode 100644 index 9a47ee7..0000000 --- a/skip_lsan_tests.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 958f06663d81dd4b946fce963b9f985f68da6212 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alejandro=20S=C3=A1ez?= -Date: Wed, 16 Jul 2025 13:14:03 +0200 -Subject: [PATCH] Skip lsan_test.go in aarch64 - -Reference: https://github.com/golang/go/issues/74476 ---- - src/cmd/cgo/internal/testsanitizers/lsan_test.go | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/cmd/cgo/internal/testsanitizers/lsan_test.go b/src/cmd/cgo/internal/testsanitizers/lsan_test.go -index 4dde3d20ec..3bcf0eba51 100644 ---- a/src/cmd/cgo/internal/testsanitizers/lsan_test.go -+++ b/src/cmd/cgo/internal/testsanitizers/lsan_test.go -@@ -2,7 +2,7 @@ - // Use of this source code is governed by a BSD-style - // license that can be found in the LICENSE file. - --//go:build linux || (freebsd && amd64) -+//go:build (linux && !(arm64 || riscv64)) || (freebsd && amd64) - - package sanitizers_test - --- -2.50.1 diff --git a/sources b/sources index dfecfe3..7e43aca 100644 --- a/sources +++ b/sources @@ -1 +1,3 @@ -SHA512 (go1.26rc1.src.tar.gz) = 6696ee765dcde64b830b14e20a5fdf6324916211bff80a62d0db0cbef58bb0856f02e88e95b2f1a3ad6d9282ebd04a377a0b000d56849576caedbd526c9a7923 +SHA512 (go1.25.3.src.tar.gz) = 91d32bbff864c06b5ee7b914d3d95c59462352a4c395adba85eaab72704a8aa4d19ac2a361ed64774dce3c8e01a8d4feadf1a788814f6d7b4072a3bdfefbb3b4 +SHA512 (go1.25.3-1-openssl-fips.tar.gz) = 4eb308049af031123a8d9745ced4d3d296362b8a5a65cef9542841ce880b0c1e682476f70291192d7ddf7a006bb65f5672019d2508216a448eaeca026402b45c +SHA512 (compiler-rt-18.1.8.src.tar.xz) = fb8795bd51c9b005c2ad1975591e9e2715740d6407ccad41379f136ef2e8d24ded8b97b01165a3ae4bd377119a6a1049ca05d3220404fc12bee86114ff2bff0d