From fc504e18d2d3d57f66554abc930fdfdf469aba57 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 28 May 2024 16:59:47 +0800 Subject: [PATCH 1/3] TypeSizes: goProgram --- internal/build/build.go | 2 +- internal/llgen/llgenf.go | 4 ++-- internal/packages/load.go | 10 +++++----- ssa/package.go | 1 + ssa/type.go | 30 ++++++++++++++++++++++++++++-- 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/internal/build/build.go b/internal/build/build.go index e7da46b76..ec9d73c37 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -89,7 +89,7 @@ const ( func Do(args []string, conf *Config) { prog := llssa.NewProgram(nil) - sizes := prog.TypeSizes() + sizes := prog.TypeSizes flags, patterns, verbose := ParseArgs(args, buildFlags) cfg := &packages.Config{ diff --git a/internal/llgen/llgenf.go b/internal/llgen/llgenf.go index 34489f2d8..cabbc234f 100644 --- a/internal/llgen/llgenf.go +++ b/internal/llgen/llgenf.go @@ -43,7 +43,7 @@ func initRtAndPy(prog llssa.Program, cfg *packages.Config) { load := func() []*packages.Package { if pkgRtAndPy == nil { var err error - pkgRtAndPy, err = packages.LoadEx(prog.TypeSizes(), cfg, llssa.PkgRuntime, llssa.PkgPython) + pkgRtAndPy, err = packages.LoadEx(prog.TypeSizes, cfg, llssa.PkgRuntime, llssa.PkgPython) check(err) } return pkgRtAndPy @@ -65,7 +65,7 @@ func GenFrom(fileOrPkg string) string { cfg := &packages.Config{ Mode: loadSyntax | packages.NeedDeps, } - initial, err := packages.LoadEx(prog.TypeSizes(), cfg, fileOrPkg) + initial, err := packages.LoadEx(prog.TypeSizes, cfg, fileOrPkg) check(err) _, pkgs := ssautil.AllPackages(initial, ssa.SanityCheckFunctions) diff --git a/internal/packages/load.go b/internal/packages/load.go index 0797e0994..18d49d632 100644 --- a/internal/packages/load.go +++ b/internal/packages/load.go @@ -101,17 +101,14 @@ func refine(ld *loader, response *packages.DriverResponse) ([]*Package, error) // return an error. Clients may need to handle such errors before // proceeding with further analysis. The PrintErrors function is // provided for convenient display of all errors. -func LoadEx(sizes types.Sizes, cfg *Config, patterns ...string) ([]*Package, error) { +func LoadEx(sizes func(types.Sizes) types.Sizes, cfg *Config, patterns ...string) ([]*Package, error) { ld := newLoader(cfg) response, external, err := defaultDriver(&ld.Config, patterns...) if err != nil { return nil, err } - if sizes == nil { - sizes = types.SizesFor(response.Compiler, response.Arch) - } - ld.sizes = sizes + ld.sizes = types.SizesFor(response.Compiler, response.Arch) if ld.sizes == nil && ld.Config.Mode&(NeedTypes|NeedTypesSizes|NeedTypesInfo) != 0 { // Type size information is needed but unavailable. if external { @@ -130,6 +127,9 @@ func LoadEx(sizes types.Sizes, cfg *Config, patterns ...string) ([]*Package, err } } + if sizes != nil { + ld.sizes = sizes(ld.sizes) + } return refine(ld, response) } diff --git a/ssa/package.go b/ssa/package.go index b80d06e9b..38fa3ae5f 100644 --- a/ssa/package.go +++ b/ssa/package.go @@ -101,6 +101,7 @@ func Initialize(flags InitFlags) { type aProgram struct { ctx llvm.Context typs typeutil.Map // rawType -> Type + sizes types.Sizes // provided by Go compiler gocvt goTypes rt *types.Package diff --git a/ssa/type.go b/ssa/type.go index b112fdfb4..1dfa1afd8 100644 --- a/ssa/type.go +++ b/ssa/type.go @@ -74,6 +74,31 @@ func indexType(t types.Type) types.Type { // ----------------------------------------------------------------------------- +type goProgram aProgram + +// Alignof returns the alignment of a variable of type T. +// Alignof must implement the alignment guarantees required by the spec. +// The result must be >= 1. +func (p *goProgram) Alignof(T types.Type) int64 { + return p.sizes.Alignof(T) +} + +// Offsetsof returns the offsets of the given struct fields, in bytes. +// Offsetsof must implement the offset guarantees required by the spec. +// A negative entry in the result indicates that the struct is too large. +func (p *goProgram) Offsetsof(fields []*types.Var) []int64 { + return p.sizes.Offsetsof(fields) +} + +// Sizeof returns the size of a variable of type T. +// Sizeof must implement the size guarantees required by the spec. +// A negative result indicates that T is too large. +func (p *goProgram) Sizeof(T types.Type) int64 { + return p.sizes.Sizeof(T) +} + +// ----------------------------------------------------------------------------- + type rawType struct { Type types.Type } @@ -92,8 +117,9 @@ func (t Type) RawType() types.Type { } // TypeSizes returns the sizes of the types. -func (p Program) TypeSizes() types.Sizes { - return nil // TODO(xsw) +func (p Program) TypeSizes(sizes types.Sizes) types.Sizes { + p.sizes = sizes + return (*goProgram)(p) } // TODO(xsw): From 8091c9e7373c969fd22f45ee926fe2aa10f07cd7 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 28 May 2024 17:32:09 +0800 Subject: [PATCH 2/3] goProgram: SizeOf/Offsetof fix --- internal/abi/llgo_autogen.lla | Bin 3353 -> 3353 bytes internal/runtime/llgo_autogen.lla | Bin 13137 -> 13142 bytes ssa/type.go | 33 +++++++++++++++++++++++++++--- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/internal/abi/llgo_autogen.lla b/internal/abi/llgo_autogen.lla index fefd48723d89c6558412e0b71ba38072952c3ffa..f5f43eca19dfe0c520e46c1e0a118cf7a3f26de6 100644 GIT binary patch delta 49 zcmbO!HB*W=z?+#xgn@y9gW+ZOo{7Aw?5Rsa)6$oOZnSLVVFn6K-pgam3>2IEnMVx( DYXlIY delta 49 zcmbO!HB*W=z?+#xgn@y9gJD+G?uopr>>_`H)5QJ+Z?tUWVFn6K-pgam3>2IEnMVx( DQrZu% diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 5a32a2dcec228851006e91d880595e89eed7f7aa..d723b748bd1d2a1dd044d1eb4109eb00d213edf3 100644 GIT binary patch delta 11015 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%0D@C;S7FvcNnQ=_NT$Wye@NWz zh&300iM^?TJt-z45L^(2qTVB_< zM#4~rv?(}gm&l+2>nB=9otQbMH4ZK6O_}ATHheju^T>Gn)W^q~EXEpG3E}pIeKA$Z z#L{fTs!cu-$Zv=kCppyv@I}+;7u)*}?S7S$PGRM^4fx_|UGZ}9;>C-L#ntUShmhZT zr@l4y_+iA?>!pghxD#v1fBEZ$`%QhfuMe^_m6xem27W_qd(J~*6qzIix!4Uxg^ND0qKeDSNKBuQ^j zT=BJzsC9I`haL{iQDl-RxeIjr>uz9A~S=>kl76 zK{oNcU001w( B@reKc delta 11009 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 Date: Tue, 28 May 2024 17:41:50 +0800 Subject: [PATCH 3/3] build fix: llssa.Initialize before NewProgram --- internal/build/build.go | 18 +++++++++--------- ssa/type.go | 2 ++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/internal/build/build.go b/internal/build/build.go index ec9d73c37..5e161979d 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -88,15 +88,21 @@ const ( ) func Do(args []string, conf *Config) { - prog := llssa.NewProgram(nil) - sizes := prog.TypeSizes - flags, patterns, verbose := ParseArgs(args, buildFlags) cfg := &packages.Config{ Mode: loadSyntax | packages.NeedDeps | packages.NeedModule | packages.NeedExportFile, BuildFlags: flags, } + llssa.Initialize(llssa.InitAll) + if verbose { + llssa.SetDebug(llssa.DbgFlagAll) + cl.SetDebug(cl.DbgFlagAll) + } + + prog := llssa.NewProgram(nil) + sizes := prog.TypeSizes + if patterns == nil { patterns = []string{"."} } @@ -117,12 +123,6 @@ func Do(args []string, conf *Config) { return } - llssa.Initialize(llssa.InitAll) - if verbose { - llssa.SetDebug(llssa.DbgFlagAll) - cl.SetDebug(cl.DbgFlagAll) - } - var needRt bool var rt []*packages.Package load := func() []*packages.Package { diff --git a/ssa/type.go b/ssa/type.go index 0f9ed1f44..36bbc0893 100644 --- a/ssa/type.go +++ b/ssa/type.go @@ -170,10 +170,12 @@ func SizeOf(prog Program, t Type, n ...int64) Expr { return prog.IntVal(size, prog.Uintptr()) } +/* func OffsetOf(prog Program, t Type, i int) Expr { offset := prog.OffsetOf(t, i) return prog.IntVal(offset, prog.Uintptr()) } +*/ func (p Program) PointerSize() int { return p.td.PointerSize()