podman

Форк
0
114 строк · 3.5 Кб
1
//go:build go1.20 && !go1.21
2
// +build go1.20,!go1.21
3

4
/*
5
 * Copyright 2021 ByteDance Inc.
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 */
19

20
package loader
21

22
import (
23
    `github.com/bytedance/sonic/internal/rt`
24
)
25

26
const (
27
    _Magic uint32 = 0xFFFFFFF1
28
)
29

30
type moduledata struct {
31
    pcHeader     *pcHeader
32
    funcnametab  []byte
33
    cutab        []uint32
34
    filetab      []byte
35
    pctab        []byte
36
    pclntable    []byte
37
    ftab         []funcTab
38
    findfunctab  uintptr
39
    minpc, maxpc uintptr // first func address, last func address + last func size
40

41
    text, etext           uintptr // start/end of text, (etext-text) must be greater than MIN_FUNC
42
    noptrdata, enoptrdata uintptr
43
    data, edata           uintptr
44
    bss, ebss             uintptr
45
    noptrbss, enoptrbss   uintptr
46
    covctrs, ecovctrs     uintptr
47
    end, gcdata, gcbss    uintptr
48
    types, etypes         uintptr
49
    rodata                uintptr
50
    gofunc                uintptr // go.func.* is actual funcinfo object in image
51

52
    textsectmap []textSection // see runtime/symtab.go: textAddr()
53
    typelinks   []int32 // offsets from types
54
    itablinks   []*rt.GoItab
55

56
    ptab []ptabEntry
57

58
    pluginpath string
59
    pkghashes  []modulehash
60

61
    modulename   string
62
    modulehashes []modulehash
63

64
    hasmain uint8 // 1 if module contains the main function, 0 otherwise
65

66
    gcdatamask, gcbssmask bitVector
67

68
    typemap map[int32]*rt.GoType // offset to *_rtype in previous module
69

70
    bad bool // module failed to load and should be ignored
71

72
    next *moduledata
73
}
74

75
type _func struct {
76
    entryOff uint32 // start pc, as offset from moduledata.text/pcHeader.textStart
77
    nameOff  int32  // function name, as index into moduledata.funcnametab.
78

79
    args        int32  // in/out args size
80
    deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any.
81

82
    pcsp      uint32 
83
    pcfile    uint32
84
    pcln      uint32
85
    npcdata   uint32
86
    cuOffset  uint32 // runtime.cutab offset of this function's CU
87
    startLine int32  // line number of start of function (func keyword/TEXT directive)
88
    funcID    uint8 // set for certain special runtime functions
89
    flag      uint8
90
    _         [1]byte // pad
91
    nfuncdata uint8   // 
92
    
93
    // The end of the struct is followed immediately by two variable-length
94
    // arrays that reference the pcdata and funcdata locations for this
95
    // function.
96

97
    // pcdata contains the offset into moduledata.pctab for the start of
98
    // that index's table. e.g.,
99
    // &moduledata.pctab[_func.pcdata[_PCDATA_UnsafePoint]] is the start of
100
    // the unsafe point table.
101
    //
102
    // An offset of 0 indicates that there is no table.
103
    //
104
    // pcdata [npcdata]uint32
105

106
    // funcdata contains the offset past moduledata.gofunc which contains a
107
    // pointer to that index's funcdata. e.g.,
108
    // *(moduledata.gofunc +  _func.funcdata[_FUNCDATA_ArgsPointerMaps]) is
109
    // the argument pointer map.
110
    //
111
    // An offset of ^uint32(0) indicates that there is no entry.
112
    //
113
    // funcdata [nfuncdata]uint32
114
}
115

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.