63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // Copyright 2016 The Go Authors. All rights reserved. | ||
|  | // Use of this source code is governed by a BSD-style | ||
|  | // license that can be found in the LICENSE file. | ||
|  | 
 | ||
|  | // +build ignore | ||
|  | 
 | ||
|  | // mkpost processes the output of cgo -godefs to | ||
|  | // modify the generated types. It is used to clean up | ||
|  | // the sys API in an architecture specific manner. | ||
|  | // | ||
|  | // mkpost is run after cgo -godefs by mkall.sh. | ||
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 	"go/format" | ||
|  | 	"io/ioutil" | ||
|  | 	"log" | ||
|  | 	"os" | ||
|  | 	"regexp" | ||
|  | ) | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	b, err := ioutil.ReadAll(os.Stdin) | ||
|  | 	if err != nil { | ||
|  | 		log.Fatal(err) | ||
|  | 	} | ||
|  | 	s := string(b) | ||
|  | 
 | ||
|  | 	goarch := os.Getenv("GOARCH") | ||
|  | 	goos := os.Getenv("GOOS") | ||
|  | 	if goarch == "s390x" && goos == "linux" { | ||
|  | 		// Export the types of PtraceRegs fields. | ||
|  | 		re := regexp.MustCompile("ptrace(Psw|Fpregs|Per)") | ||
|  | 		s = re.ReplaceAllString(s, "Ptrace$1") | ||
|  | 
 | ||
|  | 		// Replace padding fields inserted by cgo with blank identifiers. | ||
|  | 		re = regexp.MustCompile("Pad_cgo[A-Za-z0-9_]*") | ||
|  | 		s = re.ReplaceAllString(s, "_") | ||
|  | 
 | ||
|  | 		// Replace other unwanted fields with blank identifiers. | ||
|  | 		re = regexp.MustCompile("X_[A-Za-z0-9_]*") | ||
|  | 		s = re.ReplaceAllString(s, "_") | ||
|  | 
 | ||
|  | 		// Replace the control_regs union with a blank identifier for now. | ||
|  | 		re = regexp.MustCompile("(Control_regs)\\s+\\[0\\]uint64") | ||
|  | 		s = re.ReplaceAllString(s, "_ [0]uint64") | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// gofmt | ||
|  | 	b, err = format.Source([]byte(s)) | ||
|  | 	if err != nil { | ||
|  | 		log.Fatal(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Append this command to the header to show where the new file | ||
|  | 	// came from. | ||
|  | 	re := regexp.MustCompile("(cgo -godefs [a-zA-Z0-9_]+\\.go.*)") | ||
|  | 	b = re.ReplaceAll(b, []byte("$1 | go run mkpost.go")) | ||
|  | 
 | ||
|  | 	fmt.Printf("%s", b) | ||
|  | } |