123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // go:build go1.18 && !go1.20
- //go:build go1.18 && !go1.20
- // +build go1.18,!go1.20
- /*
- * Copyright 2021 ByteDance Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package loader
- import (
- `github.com/bytedance/sonic/internal/rt`
- )
- const (
- _Magic uint32 = 0xfffffff0
- )
- type moduledata struct {
- pcHeader *pcHeader
- funcnametab []byte
- cutab []uint32
- filetab []byte
- pctab []byte
- pclntable []byte
- ftab []funcTab
- findfunctab uintptr
- minpc, maxpc uintptr // first func address, last func address + last func size
- text, etext uintptr // start/end of text, (etext-text) must be greater than MIN_FUNC
- noptrdata, enoptrdata uintptr
- data, edata uintptr
- bss, ebss uintptr
- noptrbss, enoptrbss uintptr
- end, gcdata, gcbss uintptr
- types, etypes uintptr
- rodata uintptr
- gofunc uintptr // go.func.* is actual funcinfo object in image
- textsectmap []textSection // see runtime/symtab.go: textAddr()
- typelinks []int32 // offsets from types
- itablinks []*rt.GoItab
- ptab []ptabEntry
- pluginpath string
- pkghashes []modulehash
- modulename string
- modulehashes []modulehash
- hasmain uint8 // 1 if module contains the main function, 0 otherwise
- gcdatamask, gcbssmask bitVector
- typemap map[int32]*rt.GoType // offset to *_rtype in previous module
- bad bool // module failed to load and should be ignored
- next *moduledata
- }
- type _func struct {
- entryOff uint32 // start pc, as offset from moduledata.text/pcHeader.textStart
- nameOff int32 // function name, as index into moduledata.funcnametab.
- args int32 // in/out args size
- deferreturn uint32 // offset of start of a deferreturn call instruction from entry, if any.
- pcsp uint32
- pcfile uint32
- pcln uint32
- npcdata uint32
- cuOffset uint32 // runtime.cutab offset of this function's CU
- funcID uint8 // set for certain special runtime functions
- flag uint8
- _ [1]byte // pad
- nfuncdata uint8 //
-
- // The end of the struct is followed immediately by two variable-length
- // arrays that reference the pcdata and funcdata locations for this
- // function.
- // pcdata contains the offset into moduledata.pctab for the start of
- // that index's table. e.g.,
- // &moduledata.pctab[_func.pcdata[_PCDATA_UnsafePoint]] is the start of
- // the unsafe point table.
- //
- // An offset of 0 indicates that there is no table.
- //
- // pcdata [npcdata]uint32
- // funcdata contains the offset past moduledata.gofunc which contains a
- // pointer to that index's funcdata. e.g.,
- // *(moduledata.gofunc + _func.funcdata[_FUNCDATA_ArgsPointerMaps]) is
- // the argument pointer map.
- //
- // An offset of ^uint32(0) indicates that there is no entry.
- //
- // funcdata [nfuncdata]uint32
- }
|