mirror of
				https://github.com/go-delve/delve.git
				synced 2025-10-31 10:47:27 +08:00 
			
		
		
		
	 d2f748f1bd
			
		
	
	d2f748f1bd
	
	
	
		
			
			* delve: support linux-loong64 native debug LoongArch is a new RISC ISA, which is independently designed by Loongson Technology. LoongArch includes a reduced 32-bit version (LA32R), a standard 32-bit version (LA32S) and a 64-bit version (LA64), and loong64 is the 64-bit version of LoongArch. LoongArch documentation: https://github.com/loongson/LoongArch-Documentation.git * *: mark loong64 port as experimental --------- Co-authored-by: Huang Qiqi <huangqiqi@loongson.cn>
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //go:build !windows
 | |
| 
 | |
| package debugger
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| 	"path/filepath"
 | |
| 	"runtime"
 | |
| 	"strings"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/creack/pty"
 | |
| 	"github.com/go-delve/delve/pkg/gobuild"
 | |
| 	protest "github.com/go-delve/delve/pkg/proc/test"
 | |
| 	"github.com/go-delve/delve/service/api"
 | |
| )
 | |
| 
 | |
| func TestDebugger_LaunchNoExecutablePerm(t *testing.T) {
 | |
| 	fixturesDir := protest.FindFixturesDir()
 | |
| 	buildtestdir := filepath.Join(fixturesDir, "buildtest")
 | |
| 	debugname := "debug"
 | |
| 	switchOS := map[string]string{
 | |
| 		"darwin":  "linux",
 | |
| 		"windows": "linux",
 | |
| 		"freebsd": "windows",
 | |
| 		"linux":   "windows",
 | |
| 	}
 | |
| 	if runtime.GOARCH == "arm64" && runtime.GOOS == "linux" {
 | |
| 		t.Setenv("GOARCH", "amd64")
 | |
| 	}
 | |
| 	if runtime.GOARCH == "ppc64le" && runtime.GOOS == "linux" {
 | |
| 		t.Setenv("GOARCH", "amd64")
 | |
| 	}
 | |
| 	if runtime.GOARCH == "riscv64" && runtime.GOOS == "linux" {
 | |
| 		t.Setenv("GOARCH", "amd64")
 | |
| 	}
 | |
| 	if runtime.GOARCH == "loong64" && runtime.GOOS == "linux" {
 | |
| 		t.Setenv("GOARCH", "amd64")
 | |
| 	}
 | |
| 	t.Setenv("GOOS", switchOS[runtime.GOOS])
 | |
| 	exepath := filepath.Join(buildtestdir, debugname)
 | |
| 	defer os.Remove(exepath)
 | |
| 	if err := gobuild.GoBuild(debugname, []string{buildtestdir}, fmt.Sprintf("-o %s", exepath)); err != nil {
 | |
| 		t.Fatalf("go build error %v", err)
 | |
| 	}
 | |
| 	if err := os.Chmod(exepath, 0644); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	d := new(Debugger)
 | |
| 	_, err := d.Launch([]string{exepath}, ".")
 | |
| 	if err == nil {
 | |
| 		t.Fatalf("expected error but none was generated")
 | |
| 	}
 | |
| 	if err != api.ErrNotExecutable {
 | |
| 		t.Fatalf("expected error %q got \"%v\"", api.ErrNotExecutable, err)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestDebugger_LaunchWithTTY(t *testing.T) {
 | |
| 	if os.Getenv("CI") == "true" {
 | |
| 		if _, err := exec.LookPath("lsof"); err != nil {
 | |
| 			t.Skip("skipping test in CI, system does not contain lsof")
 | |
| 		}
 | |
| 	}
 | |
| 	// Ensure no env meddling is leftover from previous tests.
 | |
| 	t.Setenv("GOOS", runtime.GOOS)
 | |
| 	t.Setenv("GOARCH", runtime.GOARCH)
 | |
| 
 | |
| 	p, tty, err := pty.Open()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	defer p.Close()
 | |
| 	defer tty.Close()
 | |
| 
 | |
| 	fixturesDir := protest.FindFixturesDir()
 | |
| 	buildtestdir := filepath.Join(fixturesDir, "buildtest")
 | |
| 	debugname := "debugtty"
 | |
| 	exepath := filepath.Join(buildtestdir, debugname)
 | |
| 	if err := gobuild.GoBuild(debugname, []string{buildtestdir}, fmt.Sprintf("-o %s", exepath)); err != nil {
 | |
| 		t.Fatalf("go build error %v", err)
 | |
| 	}
 | |
| 	defer os.Remove(exepath)
 | |
| 	var backend string
 | |
| 	protest.DefaultTestBackend(&backend)
 | |
| 	conf := &Config{TTY: tty.Name(), Backend: backend}
 | |
| 	pArgs := []string{exepath}
 | |
| 	d, err := New(conf, pArgs)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	openFileCmd, wantTTYName := "lsof", tty.Name()
 | |
| 	if runtime.GOOS == "freebsd" {
 | |
| 		openFileCmd = "fstat"
 | |
| 		wantTTYName = strings.TrimPrefix(wantTTYName, "/dev/")
 | |
| 	}
 | |
| 	cmd := exec.Command(openFileCmd, "-p", fmt.Sprintf("%d", d.ProcessPid()))
 | |
| 	result, err := cmd.CombinedOutput()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if !bytes.Contains(result, []byte(wantTTYName)) {
 | |
| 		t.Fatalf("process open file list does not contain expected tty %q", wantTTYName)
 | |
| 	}
 | |
| }
 |