mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 07:12:26 -05:00 
			
		
		
		
	Bumps [github.com/gin-contrib/gzip](https://github.com/gin-contrib/gzip) from 1.0.1 to 1.1.0. - [Release notes](https://github.com/gin-contrib/gzip/releases) - [Changelog](https://github.com/gin-contrib/gzip/blob/master/.goreleaser.yaml) - [Commits](https://github.com/gin-contrib/gzip/compare/v1.0.1...v1.1.0) --- updated-dependencies: - dependency-name: github.com/gin-contrib/gzip dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
 | |
| /*
 | |
|  * 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/loader/internal/rt`
 | |
| )
 | |
| 
 | |
| // LoadFuncs loads only one function as module, and returns the function pointer
 | |
| //   - text: machine code
 | |
| //   - funcName: function name
 | |
| //   - frameSize: stack frame size. 
 | |
| //   - argSize: argument total size (in bytes)
 | |
| //   - argPtrs: indicates if a slot (8 Bytes) of arguments memory stores pointer, from low to high
 | |
| //   - localPtrs: indicates if a slot (8 Bytes) of local variants memory stores pointer, from low to high
 | |
| // 
 | |
| // WARN: 
 | |
| //   - the function MUST has fixed SP offset equaling to this, otherwise it go.gentraceback will fail
 | |
| //   - the function MUST has only one stack map for all arguments and local variants
 | |
| func (self Loader) LoadOne(text []byte, funcName string, frameSize int, argSize int, argPtrs []bool, localPtrs []bool) Function {
 | |
|     size := uint32(len(text))
 | |
| 
 | |
|     fn := Func{
 | |
|         Name: funcName,
 | |
|         TextSize: size,
 | |
|         ArgsSize: int32(argSize),
 | |
|     }
 | |
| 
 | |
|     // NOTICE: suppose the function has fixed SP offset equaling to frameSize, thus make only one pcsp pair
 | |
|     fn.Pcsp = &Pcdata{
 | |
|         {PC: size, Val: int32(frameSize)},
 | |
|     }
 | |
| 
 | |
|     if self.NoPreempt {
 | |
|         fn.PcUnsafePoint = &Pcdata{
 | |
|             {PC: size, Val: PCDATA_UnsafePointUnsafe},
 | |
|         }
 | |
|     } else {
 | |
|         fn.PcUnsafePoint = &Pcdata{
 | |
|             {PC: size, Val: PCDATA_UnsafePointSafe},
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // NOTICE: suppose the function has only one stack map at index 0
 | |
|     fn.PcStackMapIndex = &Pcdata{
 | |
|         {PC: size, Val: 0},
 | |
|     }
 | |
| 
 | |
|     if argPtrs != nil {
 | |
|         args := rt.StackMapBuilder{}
 | |
|         for _, b := range argPtrs {
 | |
|             args.AddField(b)
 | |
|         }
 | |
|         fn.ArgsPointerMaps = args.Build()
 | |
|     }
 | |
|     
 | |
|     if localPtrs != nil {
 | |
|         locals := rt.StackMapBuilder{}
 | |
|         for _, b := range localPtrs {
 | |
|             locals.AddField(b)
 | |
|         }
 | |
|         fn.LocalsPointerMaps = locals.Build()
 | |
|     }
 | |
| 
 | |
|     out := Load(text, []Func{fn}, self.Name + funcName, []string{self.File})
 | |
|     return out[0]
 | |
| }
 | |
| 
 | |
| // Load loads given machine codes and corresponding function information into go moduledata
 | |
| // and returns runnable function pointer
 | |
| // WARN: this API is experimental, use it carefully
 | |
| func Load(text []byte, funcs []Func, modulename string, filenames []string) (out []Function) {
 | |
|     ids := make([]string, len(funcs))
 | |
|     for i, f := range funcs {
 | |
|         ids[i] = f.Name
 | |
|     }
 | |
|     // generate module data and allocate memory address
 | |
|     mod := makeModuledata(modulename, filenames, &funcs, text)
 | |
| 
 | |
|     // verify and register the new module
 | |
|     moduledataverify1(mod)
 | |
|     registerModule(mod)
 | |
| 
 | |
|     // 
 | |
|     // encapsulate function address
 | |
|     out = make([]Function, len(funcs))
 | |
|     for i, s := range ids {
 | |
|         for _, f := range funcs {
 | |
|             if f.Name == s {
 | |
|                 m := uintptr(mod.text + uintptr(f.EntryOff))
 | |
|                 out[i] = Function(&m)
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     return 
 | |
| }
 |