From 575ea5a87a86de3107b2401e10ff4e50e5a133a0 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Mon, 12 Oct 2020 18:00:25 -0400 Subject: [PATCH] cmd/link: set runtime.text to the address of the first function In CL 240065 we changed it to set to FlagTextAddr. Normally it is the address of the first function, except on plan9/amd64 where, as FlagTextAddr is not aligned, it is rounded up. Set it to the actual text start address. Fixes #41137. Change-Id: I1bba67f5eb4e24d9f745a11350fc999ff48bff45 Reviewed-on: https://go-review.googlesource.com/c/go/+/261644 Trust: Cherry Zhang Run-TryBot: Cherry Zhang TryBot-Result: Go Bot Reviewed-by: David du Colombier <0intro@gmail.com> Reviewed-by: Than McIntosh --- src/cmd/link/internal/ld/data.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 3cd7b4ad0b..84e03a4011 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -2188,7 +2188,7 @@ func (ctxt *Link) textaddress() { ctxt.Textp[0] = text } - va := uint64(*FlagTextAddr) + va := uint64(Rnd(*FlagTextAddr, int64(Funcalign))) n := 1 sect.Vaddr = va ntramps := 0 @@ -2214,7 +2214,7 @@ func (ctxt *Link) textaddress() { // Set the address of the start/end symbols, if not already // (i.e. not darwin+dynlink or AIX+external, see above). ldr.SetSymValue(etext, int64(va)) - ldr.SetSymValue(text, *FlagTextAddr) + ldr.SetSymValue(text, int64(Segtext.Sections[0].Vaddr)) } // merge tramps into Textp, keeping Textp in address order -- 2.48.1