mirror of
				https://github.com/go-delve/delve.git
				synced 2025-11-01 03:42:59 +08:00 
			
		
		
		
	proc: fix runtime type handling for Go 1.21 (#3370)
Go 1.21 renamed runtime._type to internal/abi.Type and changed the name of its fields. Update Delve so that it uses the new names for loading interfaces and generic type parameters.
This commit is contained in:
		 Alessandro Arzilli
					Alessandro Arzilli
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							e95ae9c21b
						
					
				
				
					commit
					674bd63996
				
			| @ -122,6 +122,8 @@ func runtimeTypeToDIE(_type *Variable, dataAddr uint64) (typ godwarf.Type, kind | ||||
| 				if rtdie.kind == -1 { | ||||
| 					if kindField := _type.loadFieldNamed("kind"); kindField != nil && kindField.Value != nil { | ||||
| 						rtdie.kind, _ = constant.Int64Val(kindField.Value) | ||||
| 					} else if kindField := _type.loadFieldNamed("Kind_"); kindField != nil && kindField.Value != nil { | ||||
| 						rtdie.kind, _ = constant.Int64Val(kindField.Value) | ||||
| 					} | ||||
| 				} | ||||
| 				return typ, rtdie.kind, nil | ||||
| @ -146,7 +148,7 @@ func resolveParametricType(bi *BinaryInfo, mem MemoryReadWriter, t godwarf.Type, | ||||
| 	if err != nil { | ||||
| 		return ptyp.TypedefType.Type, err | ||||
| 	} | ||||
| 	runtimeType, err := bi.findType("runtime._type") | ||||
| 	runtimeType, err := bi.findType(bi.runtimeTypeTypename()) | ||||
| 	if err != nil { | ||||
| 		return ptyp.TypedefType.Type, err | ||||
| 	} | ||||
| @ -189,13 +191,16 @@ func dwarfToRuntimeType(bi *BinaryInfo, mem MemoryReadWriter, typ godwarf.Type) | ||||
|  | ||||
| 	typeAddr = uint64(md.types) + off | ||||
|  | ||||
| 	rtyp, err := bi.findType("runtime._type") | ||||
| 	rtyp, err := bi.findType(bi.runtimeTypeTypename()) | ||||
| 	if err != nil { | ||||
| 		return 0, 0, false, err | ||||
| 	} | ||||
| 	_type := newVariable("", typeAddr, rtyp, bi, mem) | ||||
| 	kindv := _type.loadFieldNamed("kind") | ||||
| 	if kindv.Unreadable != nil || kindv.Kind != reflect.Uint { | ||||
| 	if kindv == nil || kindv.Unreadable != nil || kindv.Kind != reflect.Uint { | ||||
| 		kindv = _type.loadFieldNamed("Kind_") | ||||
| 	} | ||||
| 	if kindv == nil || kindv.Unreadable != nil || kindv.Kind != reflect.Uint { | ||||
| 		return 0, 0, false, fmt.Errorf("unreadable interface type: %v", kindv.Unreadable) | ||||
| 	} | ||||
| 	typeKind, _ = constant.Uint64Val(kindv.Value) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user