summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/go/go/0007-exec.go-filter-out-build-specific-paths-from-linker-.patch
blob: c5bf28f54a141faf7a641fcf95437a138c29f1f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 083b5c74b12a1abeb11dd7f58a1cb1593d0000c0 Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Tue, 27 Feb 2024 18:06:51 +0800
Subject: [PATCH] exec.go: filter out build-specific paths from linker flags

The flags can contain build-specific paths, breaking reproducibility.
Filter out options that have build-specific paths.

Upstream-Status: Inappropriate [ Not perfect for upstream ]

Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
 src/cmd/go/internal/work/exec.go | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
index cde867b..e3ce17d 100644
--- a/src/cmd/go/internal/work/exec.go
+++ b/src/cmd/go/internal/work/exec.go
@@ -1358,6 +1358,29 @@ func (b *Builder) linkActionID(a *Action) cache.ActionID {
 	return h.Sum()
 }
 
+func filterLinkerFlags(flags []string) []string {
+	var newflags []string
+	var skipflag bool
+	skipflag = false
+	for i, flag := range flags {
+		if skipflag == true {
+			skipflag = false
+			continue
+		}
+		if strings.HasPrefix(flag, "--sysroot") || strings.HasPrefix(flag, "-fmacro-prefix-map") || strings.HasPrefix(flag, "-fdebug-prefix-map") || strings.HasPrefix(flag, "-ffile-prefix-map") || strings.HasPrefix(flag, "-fcanon-prefix-map") || strings.HasPrefix(flag, "-fprofile-prefix-map") || strings.HasPrefix(flag, "-Wl,-rpath-link"){
+			continue
+		} else if strings.HasPrefix(flag, "-extldflags") {
+			skipflag = true
+			newflags = append(newflags, flag)
+			var filterd_Extldflags []string = filterLinkerFlags(strings.Split(flags[i+1], " "))
+			newflags = append(newflags, strings.Join(filterd_Extldflags, " "))
+		} else {
+			newflags = append(newflags, flag)
+		}
+	}
+	return newflags
+}
+
 // printLinkerConfig prints the linker config into the hash h,
 // as part of the computation of a linker-related action ID.
 func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package) {
@@ -1368,7 +1391,7 @@ func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package) {
 	case "gc":
 		fmt.Fprintf(h, "link %s %q %s\n", b.toolID("link"), forcedLdflags, ldBuildmode)
 		if p != nil {
-			fmt.Fprintf(h, "linkflags %q\n", p.Internal.Ldflags)
+			fmt.Fprintf(h, "linkflags %q\n", filterLinkerFlags(p.Internal.Ldflags))
 		}
 
 		// GOARM, GOMIPS, etc.
-- 
2.25.1