aboutsummaryrefslogtreecommitdiff
path: root/gcc/go/gofrontend
AgeCommit message (Collapse)AuthorFilesLines
2019-07-02compiler: refactoring in Export class to encapsulate type refs mapIan Lance Taylor3-22/+35
Convert the Export::type_refs map from a static object to a field contained (indirectly, via an impl class) in Export itself, for better encapsulation and to be able to reclaim its memory when exporting is done. No change in compiler functionality. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/184170 From-SVN: r272919
2019-06-26libgo/testsuite: ignore symbols with a leading dot in symtogoIan Lance Taylor1-1/+1
On AIX, a function has two symbols, a text symbol (with a leading dot) and a data one (without it). As the tests must be run only once, only the data symbol can be used to retrieve the final go symbol. Therefore, all symbols beginning with a dot are ignored by symtogo. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/177837 From-SVN: r272666
2019-06-26cmd/go: silence ar with D flag failuresIan Lance Taylor1-1/+1
The first call of ar must not show its output in order to avoid useless error messages about D flag. The corresponding Go toolchain patch is CL 182077. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183817 From-SVN: r272661
2019-06-25runtime: mark memequal and memclrNoHeapPointers nosplitIan Lance Taylor1-1/+1
They are wrappers of libc functions that use no stack. Mark them nosplit so the linker won't patch it to call __morestack_non_split. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183629 From-SVN: r272633
2019-06-24compiler: open code string equalityIan Lance Taylor3-15/+52
Open code string equality with builtin memcmp. This allows further optimizations in the backend. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183538 From-SVN: r272624
2019-06-24compiler: use builtin memcmp directlyIan Lance Taylor3-3/+4
Instead of going through a C function __go_memcmp, we can just use __builtin_memcmp directly. This allows more optimizations in the compiler backend. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183537 From-SVN: r272620
2019-06-23compiler: edit error messages to avoid -Wformat-diag warningsIan Lance Taylor10-35/+38
GCC recently introduced -Wformat-diag to scrutinize GCC error messages. It reports a number of warnings about gofrontend code, such as: ../../trunk/gcc/go/gofrontend/import.cc: In member function ‘Type* Import::type_for_index(int, const string&, size_t, bool*)’: ../../trunk/gcc/go/gofrontend/import.cc:1129:48: warning: unquoted operator ‘>=’ in format [-Wformat-diag] 1129 | "error in %s at %lu: bad type index %d >= %d", | ^~ ../../trunk/gcc/go/gofrontend/ast-dump.cc: In member function ‘void Ast_dump_context::dump(Gogo*, const char*)’: ../../trunk/gcc/go/gofrontend/ast-dump.cc:203:25: warning: unquoted option name ‘-fgo-dump-ast’ in format [-Wformat-diag] 203 | "cannot open %s:%m, -fgo-dump-ast ignored", dumpname.c_str()); | ^~~~~~~~~~~~~ ../../trunk/gcc/go/gofrontend/expressions.cc: In static member function ‘static Bexpression* Func_expression::get_code_pointer(Gogo*, Named_object*, Location)’: ../../trunk/gcc/go/gofrontend/expressions.cc:1350:29: warning: misspelled term ‘builtin function’ in format; use ‘built-in function’ instead [-Wformat-diag] 1350 | "invalid use of special builtin function %qs; must be called", | ^~~~~~~~~~~~~~~~ ../../trunk/gcc/go/gofrontend/gogo.cc: In member function ‘void Gogo::add_linkname(const string&, bool, const string&, Location)’: ../../trunk/gcc/go/gofrontend/gogo.cc:2527:4: warning: unquoted sequence of 2 consecutive punctuation characters ‘//’ in format [-Wformat-diag] 2527 | ("%s is not a function; " | ~^~~~~~~~~~~~~~~~~~~~~~~~ 2528 | "//go:linkname is only supported for functions"), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This CL edits error messages to avoid these warnings. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183497 * go.test/test/blank1.go: Update for diagnostic message changes. From-SVN: r272608
2019-06-23compiler: add go_debug and use it for debug messagesIan Lance Taylor6-103/+137
GCC recently added a new warning -Wformat-diag which does a lot of rigorous checks on GCC diagnostic messages. This produces a number of unnecessary diagnostics on gofrontend diagnostic output, such as ../../trunk/gcc/go/gofrontend/escape.cc: In member function ‘virtual int Escape_analysis_assign::statement(Block*, size_t*, Statement*)’: ../../trunk/gcc/go/gofrontend/escape.cc:1336:33: warning: spurious leading punctuation sequence ‘[’ in format [-Wformat-diag] 1336 | go_inform(s->location(), "[%d] %s esc: %s", | ^ ../../trunk/gcc/go/gofrontend/escape.cc: In member function ‘void Escape_analysis_assign::call(Call_expression*)’: ../../trunk/gcc/go/gofrontend/escape.cc:1964:17: warning: unquoted operator ‘::’ in format [-Wformat-diag] 1964 | "esccall:: indirect call <- %s, untracked", | ^~ ../../trunk/gcc/go/gofrontend/escape.cc:1964:34: warning: unbalanced punctuation character ‘<’ in format [-Wformat-diag] 1964 | "esccall:: indirect call <- %s, untracked", | ^ Avoid these messages by adding a new function go_debug that uses only printf formatting, not GCC diagnostic formatting, and change all the optimization debugging messages to use it. None of the debugging messages used the GCC diagnostic formatting specifiers anyhow. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183437 From-SVN: r272607
2019-06-21compiler: intrinsify some math/bits functionsCherry Zhang4-8/+161
Let the Go frontend recognize some math/bits functions and turn them into intrinsics. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183266 * go-gcc.cc (Gcc_backend::Gcc_backend): Define math/bits builtins. From-SVN: r272579
2019-06-21runtime: inline and remove eqtypeIan Lance Taylor1-1/+1
Now that type equality is just a pointer equality, write it inlined and remove the eqtype function. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/182978 From-SVN: r272578
2019-06-21compiler: open code some type assertionsIan Lance Taylor6-38/+41
Now that type equality is just simple pointer equality, we can open code some type assertions instead of making runtime calls. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/182977 From-SVN: r272577
2019-06-21compiler: omit write barrier for assignment to *(convert(&local))Ian Lance Taylor2-1/+21
Assignments to local variables don't need a write barrier. But currently the compiler inserts a write barrier if the LHS is a local variable with type converted, as *(convert(&local)). Let the compiler recognize this pattern and omit the write barrier. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/182541 From-SVN: r272550
2019-06-21compiler: open code string slice expressionsIan Lance Taylor5-22/+74
Currently a string slice expression is implemented with a runtime call __go_string_slice. Change it to open code it, which is more efficient, and allows the backend to further optimize it. Also omit the write barrier for length-only update (i.e. s = s[:n]). Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/182540 From-SVN: r272549
2019-06-19compiler: optimize string concatenationsIan Lance Taylor3-62/+20
runtime.concatstring{2,3,4,5} are just wrappers of concatstrings. These wrappers don't provide any benefit, at least in the C calling convention we use, where passing arrays by value isn't an efficient thing. Change it to always use concatstrings. Also, the cap field of the slice passed to concatstrings is not necessary. So change it to pass a pointer and a length directly, which is more efficient than passing a slice header by value. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/182539 From-SVN: r272476
2019-06-19compiler: stack allocate a buffer for non-escaping string opsIan Lance Taylor3-18/+101
For string concatenation, string to/from byte or rune slice conversion, and int to string conversion, if the result does not escape, we can allocate a small (32-element, or 4-byte for int to string) buffer on stack, and pass it to the runtime function. If the result fits in the buffer, it doesn't need to do a heap allocation. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/182538 From-SVN: r272468
2019-06-18compiler: avoid copy for string([]byte) conversion used in string concatenationCherry Zhang2-1/+21
If a string([]byte) conversion is used immediately in a string concatenation, we don't need to copy the backing store of the byte slice, as the runtime function doesn't hold any reference to it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/182437 * go.dg/concatstring.go: New test. From-SVN: r272460
2019-06-10compiler: support inlining functions that use index expressionsIan Lance Taylor6-11/+129
Also move the determine_types pass on an inlined function body to one place, rather than doing it ad hoc as needed. This adds 79 new inlinable functions in the standard library, such as bytes.HasPrefix and bytes.LastIndexByte. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181261 From-SVN: r272133
2019-06-10compiler: make heap expression's write barrier conditionalIan Lance Taylor4-21/+53
Heap_expression::do_get_backend emits an unconditional write barrier if the type has pointers and it is not a stack allocation. This CL changes it to use a write barrier for the assignment only when write barriers are enabled. While here, also change it to call gcWriteBarrier instead of typedmemmove for pointer-shaped types. For this to work, Function::build needs to be adjusted so that Heap_expression::do_get_backend is called when there is a parent block. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181540 From-SVN: r272132
2019-06-10compiler: permit inlining functions with labels and goto statementsIan Lance Taylor7-25/+321
This permits inlining functions with for loops and some switches, as they are lowered to if and goto statements before exporting them. This by itself only adds three new inlinable functions in the standard library: sort.Search, context.(*emptyCtx).String, and cmd/go/internal/work.(*Builder).disableBuildID. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181197 From-SVN: r272131
2019-06-10compiler: use gcWriteBarrier for pointer-shaped struct/arrayIan Lance Taylor2-9/+16
If a struct/array is pointer-shaped (i.e. having a single field that is pointer-shaped), we can use gcWriteBarrier instead of typedmemmove for the write barrier. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181539 From-SVN: r272130
2019-06-10compiler: make escape analysis work with imported inlineable functionsIan Lance Taylor3-14/+9
The escape analysis was written before we import inlineable function bodies, and in some places it skipped functions that are not in the local package. Now that there are imported function bodies, make the escape analysis work with them. Note that it is necessary for the escape analysis to run on imported function bodies, even if they are already tagged. The tags only have the information of the parameters (receiver, results), but not the internal nodes, e.g. local variables. We still need to do the analysis to get all the information. (In the future maybe we could export/import escape info for internal nodes also, then we don't need to redo the analysis.) Also add assertions to ensure that if we analyze the same function in multiple places, they'd better agree with each other. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181537 From-SVN: r272124
2019-06-07compiler: improve write barrier generationIan Lance Taylor3-7/+116
For string, slice, interface values, do assignments field by field instead of using typedmemmove. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181297 From-SVN: r272055
2019-06-07compiler: support inlining functions with if statementsIan Lance Taylor4-20/+131
This increases the number of inlinable functions from 455 to 500. An example of a newly inlinable function is strings.Compare. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181137 From-SVN: r272045
2019-06-07compiler: do simple deadcode eliminationIan Lance Taylor7-1/+240
Normally the backend will do deadcode elimination and this is sufficient. However, the escape analysis operates on the AST that may have deadcode, and may cause things to escape that otherwise do not. This CL adds a simple deadcode elimination, run before the escape analysis. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/181080 From-SVN: r272043
2019-06-07go/internal/gccgoimporter: ignore unexported and imported namesIan Lance Taylor1-1/+1
Due to inlining, we can now see unexported functions and variables, and functions and variables imported from different packages. Ignore them rather than reporting them from this package. Handle $hash and $equal functions consistently, so that we discard the inline body if there is one. Ignore names created for result parameters for inlining purposes. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/180758 From-SVN: r272023
2019-06-06compiler: permit inlining temporary statements and referencesIan Lance Taylor9-6/+255
This increases the number of inlinable functions from 439 to 455. An example is math/bits.Mul32, which uses temporaries to handle the tuple assignment. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/180837 From-SVN: r272022
2019-06-06compiler: make use of specialized fast map routinesIan Lance Taylor7-114/+409
In the runtime there are specialized fast map routines for certain kep types. This CL lets the compiler make use of these functions, instead of always using the generic ones. As we now generate multiple versions of map delete calls, to make things easier we delay the expansion of the built-in delete function to flatten phase. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/180858 From-SVN: r271983
2019-06-05compiler: inline call expressions and function referencesIan Lance Taylor7-49/+330
Scan inlinable methods for references to global variables and functions (forgot to do that earlier). Track all packages mentioned by exports (that should have been done earlier too). Record assembler name in export data, so that we can inline calls to non-Go functions. Modify gccgoimporter code to skip assembler name. This increases the number of inlinable functions in the standard library from 215 to 439. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/180677 From-SVN: r271976
2019-06-05compiler: statically allocate constant interface dataIan Lance Taylor2-4/+21
When converting a constant to interface, such as interface{}(42) or interface{}("hello"), if the interface escapes, we currently generate a heap allocation to hold the constant value. This CL changes it to generate a static allocation instead, as the gc compiler does. This reduces allocations in such cases. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/180277 From-SVN: r271945
2019-06-03compiler, runtime, reflect: generate unique type descriptorsIan Lance Taylor6-2/+219
Currently, the compiler already generates common symbols for type descriptors, so the type descriptors are unique. However, when a type is created through reflection, it is not deduplicated with compiler-generated types. As a consequence, we cannot assume type descriptors are unique, and cannot use pointer equality to compare them. Also, when constructing a reflect.Type, it has to go through a canonicalization map, which introduces overhead to reflect.TypeOf, and lock contentions in concurrent programs. In order for the reflect package to deduplicate types with compiler-created types, we register all the compiler-created type descriptors at startup time. The reflect package, when it needs to create a type, looks up the registry of compiler-created types before creates a new one. There is no lock contention since the registry is read-only after initialization. This lets us get rid of the canonicalization map, and also makes it possible to compare type descriptors with pointer equality. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179598 From-SVN: r271894
2019-06-03libgo: delay applying profile stack-frame skip until fixupIan Lance Taylor1-1/+1
When the runtime collects a stack trace to associate it with some profiling event (mem alloc, mutex, etc) there is a skip count passed to runtime.Callers (or equivalent) to skip some known count of frames in order to get to the "interesting" frame corresponding to the profile event. Now that the profiling mechanism uses lazy fixup (when removing compiler artifacts like thunks, morestack calls etc), we also need to move the frame skipping logic after the fixup, so as to insure that the skip count isn't thrown off by these artifacts. Fixes golang/go#32290. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179740 From-SVN: r271892
2019-06-03compiler: permit inlining references to global variablesIan Lance Taylor9-87/+482
This requires tracking all references to unexported variables, so that we can make them global symbols in the object file, and can export them so that other compilations can see the right definition for their own inline bodies. This introduces a syntax for referencing names defined in other packages: a <pNN> prefix, where NN is the package index. This will need to be added to gccgoimporter, but I didn't do it yet since it isn't yet possible to create an object for which gccgoimporter will see a <pNN> prefix. This increases the number of inlinable functions in the standard library from 181 to 215, adding functions like context.Background. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/177920 From-SVN: r271891
2019-06-03runtime: remove unnecessary functions calling between C and GoIan Lance Taylor1-1/+1
These functions were needed during the transition of the runtime from C to Go, but are no longer necessary. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179879 From-SVN: r271890
2019-06-03runtime: fix assembly syntaxIan Lance Taylor1-1/+1
Some assembler doesn't accept ULL suffix. In fact the suffix is not really necessary. Drop it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/180217 From-SVN: r271883
2019-05-31runtime: drop unused C type reflection codeIan Lance Taylor1-1/+1
In particular, drop __go_type_descriptors_equal, which is no longer used, and will be made obsolete by CL 179598. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179858 From-SVN: r271823
2019-05-31compiler: optimize append of makeIan Lance Taylor7-84/+251
The gc compiler recognizes append(s, make([]T, n)...), and generates code to directly zero the tail instead of allocating a new slice and copying. This CL lets the Go frontend do basically the same. The difficulty is that at the point we handle append, there may already be temporaries introduced (e.g. in order_evaluations), which makes it hard to find the append-of-make pattern. The compiler could "see through" the value of a temporary, but it is only safe to do if the temporary is not assigned multiple times. For this, we add tracking of assignments and uses for temporaries. This also helps in optimizing non-escape slice make. We already optimize non-escape slice make with constant len/cap to stack allocation. But it failed to handle things like f(make([]T, n)) (where the slice doesn't escape and n is constant), because of the temporary. With tracking of temporary assignments and uses, it can handle this now as well. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179597 From-SVN: r271822
2019-05-31compiler: handle int-to-string conversion with large integer constantIan Lance Taylor2-4/+13
Currently, Type_conversion_expression::do_is_constant thinks the int-to-string conversion is constant if the integer operand is constant, but Type_conversion_expression::do_get_backend actually generates a call to runtime.intstring if the integer does not fit in a "ushort", which makes it not suitable in constant context, such as static initializer. This CL makes it handle all constant integer input as constant, generating constant string. Fixes golang/go#32347. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179777 From-SVN: r271821
2019-05-31runtime: implement cheaper context switch on Linux/AMD64Ian Lance Taylor1-1/+1
Currently, goroutine switches are implemented with libc getcontext/setcontext functions, which saves/restores the machine register states and also the signal context. This does more than what we need, and performs an expensive syscall. This CL implements a simplified version of getcontext/setcontext, in assembly, that only saves/restores the necessary part, i.e. the callee-save registers, and the PC, SP. A simplified version of makecontext, written in C, is also added. Currently this is only implemented on Linux/AMD64. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/178298 From-SVN: r271818
2019-05-30compiler: intrinsify sync/atomic functionsIan Lance Taylor3-12/+112
Let the Go frontend recognize sync/atomic functions and turn them into intrinsics. Also make sure not to intrinsify calls in go or defer statements. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/178937 From-SVN: r271784
2019-05-30re PR go/90669 (go/gofrontend/types.cc:2805 contains range-based ‘for’ ↵Ian Lance Taylor2-3/+8
loops which are not C++98) PR go/90669 compiler: remove range-based 'for' loop Fix for GCC PR/90669: remove range-based 'for' loop to preserve buildability with g++ version 4.X. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179397 From-SVN: r271761
2019-05-27re PR go/90635 (typo in libgo/configure.ac)Ian Lance Taylor1-1/+1
PR go/90635 libgo: correct typo in USE_LIBFFI AM_CONDITIONAL Only affects the case of passing --without-libffi to configure. Fixes https://gcc.gnu.org/PR90635 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/178998 From-SVN: r271640
2019-05-27re PR go/90614 (gcc-9.1.0/libgo/go/syscall/wait.c:54:22: error: unused ↵Ian Lance Taylor1-1/+1
parameter ‘w’ [-Werror=unused-parameter] Continued (uint32_t *w)) PR go/90614 syscall: avoid unused parameter error if WIFCONTINUED not defined Fixes https://gcc.gnu.org/PR90614 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/178997 From-SVN: r271638
2019-05-17compiler: use SHA1-hash for symname for long gcbits symbolsIan Lance Taylor2-10/+32
The current scheme used by the compiler for "gcbits" symbols involves generating a symbol name based on a 32-char encoding of the bits data. This scheme works well in most cases but can generate very long symbol names in rare cases. To help avoid such long symbol names, switch to a different encoding scheme based on the SHA1 digest of the payload if the symbol size would be too large. Fixes golang/go#32083. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/177598 From-SVN: r271322
2019-05-17re PR go/90482 (Many 32-bit Solaris/SPARC tests FAIL with SIGBUS)Ian Lance Taylor5-19/+42
PR go/90482 compiler: make value method of direct interface type takes pointer Currently, a value method of a direct interface type takes the value of the receiver, which is pointer shaped, as the first parameter. When this method is called through interface, we actually pass the interface data as a pointer. On most platforms this is ok, as the underlying calling convention is the same, except that on SPARC32, the calling convention is actually different. This CL changes the method function actually takes a pointer. The function will convert the pointer to the pointer-shaped receiver type (a no-op conversion from machine code's aspect). For a direct call, in the caller we convert the receiver to a pointer (also no-op conversion) before invoking the method. For an interface call, we pass the pointer as before. This way, it is consistent that we always pass a pointer. Hopefully this fixes SPARC32 build and https://gcc.gnu.org/PR90482. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/177758 From-SVN: r271310
2019-05-17compiler: intrinsify runtime/internal/atomic functionsCherry Zhang4-1/+283
Currently runtime/internal/atomic functions are implemented in C using C compiler intrinsics. This CL lets the Go frontend recognize these functions and turn them into intrinsics directly. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176918 * go-gcc.cc (Gcc_backend::Gcc_backend): Define atomic builtins. From-SVN: r271308
2019-05-16compiler: add intrinsics for runtime/internal/sys functionsIan Lance Taylor7-109/+149
runtime/internal/sys.Ctz32/64 and Bswap32/64 are currently implemented with compiler builtin functions. But if they are called from another package, the compiler does not know and therefore cannot turn them into compiler intrinsics. This CL makes the compiler recognize these functions and turn them into intrinsics directly, as the gc compiler does. This CL sets up a way for adding intrinsics in the compiler. More intrinsics will be added in later CLs. Also move the handling of runtime.getcallerpc/sp to the new way of generating intrinsics. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176917 From-SVN: r271303
2019-05-16compiler: improve escape analysis on interface conversionsCherry Zhang9-22/+360
If an interface does not escape, it doesn't need a heap allocation to hold the data (for non-direct interface type). This CL improves the escape analysis to track interface conversions, and reduces these allocations. Implicit interface conversions were mostly added late in the compilation pipeline, after the escape analysis. For the escape analysis to see them, we move the introduction of these conversions earlier, right before the escape analysis. Now that the compiler can generate interface conversions inlined, gcc/testsuite/go.test/test/nilptr2.go needs to be adjusted as in golang.org/cl/176579, so the use function does an actual use. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176459 * go.test/test/nilptr2.go: Change use function to actually do something. From-SVN: r271276
2019-05-14libgo: reduce overhead for memory/block/mutex profilingIan Lance Taylor1-1/+1
Revise the gccgo version of memory/block/mutex profiling to reduce runtime overhead. The main change is to collect raw stack traces while the profile is on line, then post-process the stacks just prior to the point where we are ready to use the final product. Memory profiling (at a very low sampling rate) is enabled by default, and the overhead of the symbolization / DWARF-reading from backtrace_full was slowing things down relative to the main Go runtime. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/171497 From-SVN: r271172
2019-05-13libgo: drop Solaris 10 supportIan Lance Taylor1-1/+1
Based on patch by Rainer Orth. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176938 From-SVN: r271135
2019-05-11runtime: set up g earlyIan Lance Taylor1-1/+1
runtime.throw needs a g to work properly. Set up g early, to ensure that if something goes wrong in the runtime startup (e.g. runtime.check fails), the program terminates in a reasonable way. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176657 From-SVN: r271088