]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo/internal/test: only test specific frames in testCallbackCallersSEH
authorqmuntal <quimmuntal@gmail.com>
Wed, 29 Nov 2023 10:15:54 +0000 (11:15 +0100)
committerGopher Robot <gobot@golang.org>
Wed, 29 Nov 2023 16:01:37 +0000 (16:01 +0000)
testCallbackCallersSEH will break if anything in this call chain is
refactored to have a different number of function calls.

This change makes the test more robust by only testing the frames
that are actually relevant to the test.

Change-Id: Idb51514d7079f55da6e6ddc52ad43b1ffe32c8c8
Reviewed-on: https://go-review.googlesource.com/c/go/+/545755
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Auto-Submit: Quim Muntal <quimmuntal@gmail.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/cgo/internal/test/callback_windows.go

index 95e97c9af9bc24bc40352c372d631e0ecc22c676..77bdfa4dd371acb08d9bed408e917a1bd76f077e 100644 (file)
@@ -29,7 +29,7 @@ USHORT backtrace(ULONG FramesToCapture, PVOID *BackTrace) {
                }
 
                ControlPc = context.Rip;
-        // Check if we left the user range.
+               // Check if we left the user range.
                if (ControlPc < 0x10000) {
                        break;
                }
@@ -65,32 +65,17 @@ func testCallbackCallersSEH(t *testing.T) {
                // TODO: support SEH on other architectures.
                t.Skip("skipping on non-amd64")
        }
-       const cgoexpPrefix = "_cgoexp_"
+       // Only frames in the test package are checked.
        want := []string{
-               "runtime.asmcgocall_landingpad",
-               "runtime.asmcgocall",
-               "runtime.cgocall",
                "test._Cfunc_backtrace",
                "test.testCallbackCallersSEH.func1.1",
                "test.testCallbackCallersSEH.func1",
                "test.goCallback",
-               cgoexpPrefix + "goCallback",
-               "runtime.cgocallbackg1",
-               "runtime.cgocallbackg",
-               "runtime.cgocallbackg",
-               "runtime.cgocallback",
-               "crosscall2",
-               "runtime.asmcgocall_landingpad",
-               "runtime.asmcgocall",
-               "runtime.cgocall",
                "test._Cfunc_callback",
                "test.nestedCall.func1",
                "test.nestedCall",
                "test.testCallbackCallersSEH",
                "test.TestCallbackCallersSEH",
-               "testing.tRunner",
-               "testing.(*T).Run.gowrap1",
-               "runtime.goexit",
        }
        pc := make([]uintptr, 100)
        n := 0
@@ -105,26 +90,17 @@ func testCallbackCallersSEH(t *testing.T) {
                }
                fname := f.Name()
                switch fname {
-               case "goCallback", "callback":
-                       // TODO(qmuntal): investigate why these functions don't appear
+               case "goCallback":
+                       // TODO(qmuntal): investigate why this function doesn't appear
                        // when using the external linker.
                        continue
                }
-               // Skip cgo-generated functions, the runtime might not know about them,
-               // depending on the link mode.
-               if strings.HasPrefix(fname, "_cgo_") {
-                       continue
-               }
-               // Remove the cgo-generated random prefix.
-               if strings.HasPrefix(fname, cgoexpPrefix) {
-                       idx := strings.Index(fname[len(cgoexpPrefix):], "_")
-                       if idx >= 0 {
-                               fname = cgoexpPrefix + fname[len(cgoexpPrefix)+idx+1:]
-                       }
-               }
                // In module mode, this package has a fully-qualified import path.
                // Remove it if present.
                fname = strings.TrimPrefix(fname, "cmd/cgo/internal/")
+               if !strings.HasPrefix(fname, "test.") {
+                       continue
+               }
                got = append(got, fname)
        }
        if !reflect.DeepEqual(want, got) {