...
Run Format

Source file src/cmd/link/internal/ld/util.go

Documentation: cmd/link/internal/ld

     1  // Copyright 2015 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package ld
     6  
     7  import (
     8  	"cmd/link/internal/sym"
     9  	"encoding/binary"
    10  	"fmt"
    11  	"os"
    12  	"time"
    13  )
    14  
    15  var startTime time.Time
    16  
    17  // TODO(josharian): delete. See issue 19865.
    18  func Cputime() float64 {
    19  	if startTime.IsZero() {
    20  		startTime = time.Now()
    21  	}
    22  	return time.Since(startTime).Seconds()
    23  }
    24  
    25  var atExitFuncs []func()
    26  
    27  func AtExit(f func()) {
    28  	atExitFuncs = append(atExitFuncs, f)
    29  }
    30  
    31  // Exit exits with code after executing all atExitFuncs.
    32  func Exit(code int) {
    33  	for i := len(atExitFuncs) - 1; i >= 0; i-- {
    34  		atExitFuncs[i]()
    35  	}
    36  	os.Exit(code)
    37  }
    38  
    39  // Exitf logs an error message then calls Exit(2).
    40  func Exitf(format string, a ...interface{}) {
    41  	fmt.Fprintf(os.Stderr, os.Args[0]+": "+format+"\n", a...)
    42  	nerrors++
    43  	Exit(2)
    44  }
    45  
    46  // Errorf logs an error message.
    47  //
    48  // If more than 20 errors have been printed, exit with an error.
    49  //
    50  // Logging an error means that on exit cmd/link will delete any
    51  // output file and return a non-zero error code.
    52  func Errorf(s *sym.Symbol, format string, args ...interface{}) {
    53  	if s != nil {
    54  		format = s.Name + ": " + format
    55  	}
    56  	format += "\n"
    57  	fmt.Fprintf(os.Stderr, format, args...)
    58  	nerrors++
    59  	if *flagH {
    60  		panic("error")
    61  	}
    62  	if nerrors > 20 {
    63  		Exitf("too many errors")
    64  	}
    65  }
    66  
    67  func artrim(x []byte) string {
    68  	i := 0
    69  	j := len(x)
    70  	for i < len(x) && x[i] == ' ' {
    71  		i++
    72  	}
    73  	for j > i && x[j-1] == ' ' {
    74  		j--
    75  	}
    76  	return string(x[i:j])
    77  }
    78  
    79  func stringtouint32(x []uint32, s string) {
    80  	for i := 0; len(s) > 0; i++ {
    81  		var buf [4]byte
    82  		s = s[copy(buf[:], s):]
    83  		x[i] = binary.LittleEndian.Uint32(buf[:])
    84  	}
    85  }
    86  
    87  var start = time.Now()
    88  
    89  func elapsed() float64 {
    90  	return time.Since(start).Seconds()
    91  }
    92  

View as plain text