podman

Форк
0
119 строк · 3.7 Кб
1
//go:build go1.21 && !go1.22
2
// +build go1.21,!go1.22
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
    `unsafe`
24
    `github.com/bytedance/sonic/internal/rt`
25
)
26

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

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

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

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

57
    ptab []ptabEntry
58

59
    pluginpath string
60
    pkghashes  []modulehash
61

62
    // This slice records the initializing tasks that need to be
63
	// done to start up the program. It is built by the linker.
64
	inittasks []unsafe.Pointer
65

66
    modulename   string
67
    modulehashes []modulehash
68

69
    hasmain uint8 // 1 if module contains the main function, 0 otherwise
70

71
    gcdatamask, gcbssmask bitVector
72

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

75
    bad bool // module failed to load and should be ignored
76

77
    next *moduledata
78
}
79

80
type _func struct {
81
    entryOff uint32 // start pc, as offset from moduledata.text/pcHeader.textStart
82
    nameOff  int32  // function name, as index into moduledata.funcnametab.
83

84
    args        int32  // in/out args size
85
    deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any.
86

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

102
    // pcdata contains the offset into moduledata.pctab for the start of
103
    // that index's table. e.g.,
104
    // &moduledata.pctab[_func.pcdata[_PCDATA_UnsafePoint]] is the start of
105
    // the unsafe point table.
106
    //
107
    // An offset of 0 indicates that there is no table.
108
    //
109
    // pcdata [npcdata]uint32
110

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

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

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

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

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