// Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package runtime_test import ( "os" "regexp" "runtime" "testing" ) func validateMapLabels(t *testing.T, labels []string) { // These are the specific region labels that need get added during the // runtime phase. Hence they are the ones that need to be confirmed as // present at the time the test reads its own region labels, which // is sufficient to validate that the default `decoratemappings` value // (enabled) was set early enough in the init process. regions := map[string]bool{ "allspans array": false, "gc bits": false, "heap": false, "heap index": false, "heap reservation": false, "immortal metadata": false, "page alloc": false, "page alloc index": false, "page summary": false, "scavenge index": false, } for _, label := range labels { if _, ok := regions[label]; !ok { t.Logf("unexpected region label found: \"%s\"", label) } regions[label] = true } for label, found := range regions { if !found { t.Logf("region label missing: \"%s\"", label) } } } func TestDecorateMappings(t *testing.T) { if runtime.GOOS != "linux" { t.Skip("decoratemappings is only supported on Linux") // /proc/self/maps is also Linux-specific } var labels []string if rawMaps, err := os.ReadFile("/proc/self/maps"); err != nil { t.Fatalf("failed to read /proc/self/maps: %v", err) } else { t.Logf("maps:%s\n", string(rawMaps)) matches := regexp.MustCompile("[^[]+ \\[anon: Go: (.+)\\]\n").FindAllSubmatch(rawMaps, -1) for _, match_pair := range matches { // match_pair consists of the matching substring and the parenthesized group labels = append(labels, string(match_pair[1])) } } t.Logf("DebugDecorateMappings: %v", *runtime.DebugDecorateMappings) if *runtime.DebugDecorateMappings != 0 && runtime.SetVMANameSupported() { validateMapLabels(t, labels) } else { if len(labels) > 0 { t.Errorf("unexpected mapping labels present: %v", labels) } else { t.Skip("mapping labels absent as expected") } } }