Mark bad types as erroneous, to avoid generating further errors.
This required some code using array types to check for errors.
For golang/go#19880
Change-Id: I04d287cd66da84c123865fa1aa153ffa47c410ca
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273626
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Was
assign.go:59:28: error: multiple assignments to x
Now
assign.go:59:28: error: ‘x’ repeated on left side of :=
Change-Id: I4b69a96950a6077145822ef625fb2117424897f3
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273546
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
In the conversion of a constant integer to a string type, the value of
the constant integer was being silently truncated from unsigned long
to unsigned int, producing the wrong string value. Add an explicit
overflow check to avoid this problem.
For golang/go#42790
Change-Id: I3407410bb02c24edd114e5f78a1f60ab66378656
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/272611
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Overhaul the mangling scheme to avoid ambiguities if the package path
contains a dot. Instead of using dot both to separate components and
to mangle characters, use dot only to separate components and use
underscore to mangle characters.
For golang/go#41862
Change-Id: Iddc04422673a4cdc6773d24d3d75fc8945266773
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/271726
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
This is a port of two patches in the master repository.
https://golang.org/cl/259298
cmd/cgo: split gofrontend mangling checks into cmd/internal/pkgpath
This is a step toward porting https://golang.org/cl/219817 from the
gofrontend repo to the main repo.
Note that this also corrects the implementation of the v2 mangling
scheme to use ..u and ..U where appropriate.
https://golang.org/cl/259299
cmd/go: use cmd/internal/pkgpath for gccgo pkgpath symbol
For golang/go#37272
For golang/go#41862
Change-Id: Id276ca1bac7e1d850408a9d222c19e57b26ba001
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/270637
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
On NetBSD, for backwards compatibility, various libc symbols are
renamed to a symbol with a version suffix. For example, this is the
(abbreviated) definition of sigaction:
int sigaction(...) __asm__ ("__sigaction14")
This poses a challenge for libgo, which attempts to link sigaction by
way of an "//extern" comment:
//extern sigaction
func sigaction(...)
This results in a reference to the deprecated compatibility symbol
"sigaction", rather than the desired "__sigaction14" symbol.
This patch introduces a new "//extern-sysinfo" comment to handle this
situation. The new mklinknames.awk script scans a package for these
comments and outputs a "//go:linkname" directive that links the wrapper
to the correct versioned symbol, as determined by parsing the __asm__
annotation on the function's declaration in gen-sysinfo.go.
For now, only the following packages are scanned by mklinknames.awk:
os
os/user
runtime
syscall
Change-Id: I31b475098aecb9eb0579e8bb5952405e93ac960c
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265125
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Emmanuel Odeke <emmanuel@orijtech.com>
This new file was based on master sources that are built for *BSD
but not Solaris
Change-Id: Ie170daa4c572e112fe332cc6505eff974f01ec69
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/266017
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
This is the gofrontend version of https://golang.org/cl/259297.
This is required now because that change is in the 1.15.3 release.
This requires changing the go/internal/gccgoimporter package, to skip
the new annotation. This change will need to be ported to the gc and
x/tools repos.
For golang/go#41761
Change-Id: I81d63db7e7c41d168dfa5f1539c063c1c2413568
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265258
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
This member variable was added in https://golang.org/cl/46490, but it
was never used. The code uses Named_type::in_heap_ instead.
Change-Id: I155ddbc35270295a2b66f3b82ea84cdf8a324adb
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265257
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Import additional code from upstream for handing system
calls on BSD systems. This makes the syscall package on
NetBSD complete enough to compile the standard library.
Updates golang/go#38538.
Change-Id: I15644dbbd78b1acebcaf45b49403f07c929d97ed
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265123
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Benny Siegert <bsiegert@gmail.com>
Incorporate upstream modifications to the cgi package's set of rules
about which environment variables should be inherited by child processes
by default on each platform. In particular this permits tests to pass on
NetBSD by preserving the value of the LD_LIBRARY_PATH environment
variable.
This is a partial backport of the following upstream CLs:
https://golang.org/cl/263802https://golang.org/cl/263577https://golang.org/cl/254740
Change-Id: Iedda007372fd4e99fcc231978d663b6ffefb6718
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/264097
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
Only compile the __go_ptrace varargs shim on Linux to avoid compilation
failures on some other platforms. The C ptrace function is not entirely
portable (e.g., NetBSD has `int data` instead of `void* data`), and so
far Linux is the only platform that needs the varargs shim.
Additionally, make the types in the ptrace and raw_ptrace function
declarations match. This makes it more clear that the only difference
between the two is that calls via the former are allowed to block while
calls via the latter are not.
Change-Id: Ib589ffd504e12440b726490c0a212d9ba570eb2c
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/263517
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Benny Siegert <bsiegert@gmail.com>
Import some missing upstream code for BSD sockets and sysctls and
adapt it for gccgo.
Updates golang/go#38538.
Change-Id: I3b08bf01b499b5be55ef79b4633f47ba266d0148
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261137
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Benny Siegert <bsiegert@gmail.com>
The backwards-compatibility guarantees of the syscall package
require some munging of the C API inferred by mksysinfo.sh.
Specifically, the RTM_RESOLVE constant must be added if it is
missing, and the stat_t struct must use the suffix "timespec"
rather than "tim" for its time-related fields.
Change-Id: I08d9c68e0a299fdf91f14402b63e25377ffa6b59
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/263519
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Benny Siegert <bsiegert@gmail.com>
Trust: Benny Siegert <bsiegert@gmail.com>
NetBSD does not support the sendfile syscall.
Change-Id: I9d8f6145e63011dff1fcd357e1dadd54fe294e85
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/263521
Reviewed-by: Benny Siegert <bsiegert@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Benny Siegert <bsiegert@gmail.com>
When hashing a function type the parameter names are ignored.
Therefore, we should not write them into the export data.
Otherwise, minor changes in the order in which we process the
types can cause the export data to change uselessly, leading to
unnecessary rebuilds.
Change-Id: If3c79474f1ace8a31ee468aa0ec36c846f784aba
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/262818
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Make the types of the addr and data arguments in the __go_ptrace shim
match the types declared in Go and the types declared by the C ptrace
function, i.e., void*. This avoids a warning about an implicit
int-to-pointer cast on some platforms.
Change-Id: Icf251b9a756e2dcff2a336ca97e109e7fbeaada7
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/262340
Trust: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Also consolidate the identical code for constant type export into a
pair of static methods.
Fixesgolang/go#35739
Change-Id: Ifdccd944dbfc032a7bfb29121a5a6e93bcdeb7b7
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/262437
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Calls to _Unwind_RaiseException and friends *can* return due to bugs in
libgo or memory corruption. When this occurs, print a message to stderr
with the reason code before aborting to aid debugging.
Change-Id: Iadd7bfca40def25fa7fa9208dca52a56dbbe2208
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261257
Trust: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
The syscall package depends on many NetBSD-specific types on NetBSD.
Teach mksysinfo.sh to export these types.
This alone is not sufficient to get the syscall package to compile on
NetBSD, but it's a start.
Note that the IfMsgHdr type is recapitalized to IfMsghdr, which requires
changes in the AIX port. The new capitalization is what's used by
upstream in existing NetBSD-specific code and is more consistent with
the capitalization of other C structs with the "hdr" suffix.
Updates golang/go#38538.
Change-Id: I56d8d8d887b293d5a9195114cc7f7b44a5b738cb
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261739
Reviewed-by: Benny Siegert <bsiegert@gmail.com>
Trust: Benny Siegert <bsiegert@gmail.com>
Trust: Than McIntosh <thanm@google.com>
NetBSD's semaphores use the underlying lighweight process mechanism
(LWP) on NetBSD, rather than pthreads. This means the m.prodcid needs
to be set to the LWP ID rather than the pthread ID in order for unpark
notifications to get sent to the right place.
Introduce a new getProcID() method that selects the correct ID for the
platform.
Change-Id: I897406e5a9d5bb9025088680ee9f89b9a6c8ff11
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261742
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
Trust: Than McIntosh <thanm@google.com>
Trust: Benny Siegert <bsiegert@gmail.com>
Reviewed-by: Benny Siegert <bsiegert@gmail.com>
The NetBSD libc provides an architecture-independent macro that can
extract the PC from a ucontext struct.
Change-Id: I94534ee32d54bae4ead5cafc964bdace058a4322
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261740
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Than McIntosh <thanm@google.com>
NetBSD does not include the null terminator when in its reported socket
length. Port the upstream bugfix for the issue (#6627).
This was likely missed during the usual upstream merge because the gc
and gccgo socket implementations have diverged quite a bit.
Change-Id: Id808bae481b5de494cfc641ca9d7f56fef6acd41
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261741
Trust: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
On AIX, duplication of type descriptors can occur if one is
declared in the libgo and one in the Go program being compiled.
The AIX linker isn't able to merge them together as Linux one does.
One solution is to always load libgo first but that needs a huge mechanism in
gcc core. Thus, this patch ensures that the duplication isn't visible
for the end user.
In reflect and internal/reflectlite, the comparison of rtypes is made on their
name and not only on their addresses.
In reflect, toType() function is using a canonicalization map to force rtypes
having the same rtype.String() to return the same Type. This can't be made in
internal/reflectlite as it needs sync package. But, for now, it doesn't matter
as internal/reflectlite is not widely used.
Fixesgolang/go#39276
Change-Id: I56f04f8e7068fbda4ec6b24159c02b7d7fa8b8c5
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/260158
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Than McIntosh <thanm@google.com>
Trust: Cherry Zhang <cherryyz@google.com>
This option is no longer needed. There is no crash without it since
at least gcc-9.
Change-Id: I1f55cf8cbff3ce00eed2d701f4c599381d0936fa
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/260157
Trust: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
match.sh was not correctly handling build constraints for Go versions
that have a two-digit suffix, like "go1.10".
The same issue will arise with Go 1.100, but that is a long ways off.
Change-Id: I0d41d60aad800d681a12ede68fbe0763289ec268
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/260077
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Than McIntosh <thanm@google.com>
For some implementations of Stream, advancing the stream will invalidate
the previously-returned peek buffer. Copy the peek buffer before
advancing in Import::read to avoid this undefined behavior.
Change-Id: Icfd56cf5e6f0d94a582d44e63bc51e75c24b8804
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/259438
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Than McIntosh <thanm@google.com>
The implementation of Stream_from_file mishandled several cases:
* It reversed the check for whether bytes were already available in
the peek buffer.
* It considered positive return values from lseek to be an error, when
only a -1 return value indicates an error.
Change-Id: Ic699d3ff7fe589f5ca2362b3db2971a6b9dc9022
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/259437
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Cherry Zhang <cherryyz@google.com>
Add support for the 32-bit RISC-V (RV32) ISA matching the 64-bit RISC-V
(RV64) port except for async preemption added as a stub only.
Change-Id: I0aacceb7e85243cc0e422d55baf61e1b6185b998
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/251179
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Than McIntosh <thanm@google.com>
Patch from Svante Signell.
Change-Id: I8b4efdc7a6c92ce74b9544b7fb8d0c72d74f5600
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/257857
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
AIX ptrace syscalls doesn't have the same semantic than the glibc one.
The syscall package is already handling it correctly so disable the new
__go_ptrace C function for AIX.
Change-Id: I5a2abe0dceaf2726ec0f6ad240869a630ab6727b
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/256777
Trust: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Syscall function can't be used on AIX. Therefore, Ioctl in
TestForeground must call raw_ioctl.
Change-Id: I96c3b52ee2d61073ae367028d4dfa926107402ba
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/175080
Trust: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
ptrace is available only for 32 bits programs.
Change-Id: Ie0c81b799f5f2c4aae78cd06a34709460529d94f
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/252558
Trust: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
All type switch clauses must call runtime.eqtype if the linker isn't
able to merge type descriptors pointers. Previously, only interface-type
clauses were doing it.
Updates golang/go#39276
Change-Id: Ic06d95081e837122c409a2aba377d1afae676342
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/255202
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Cherry Zhang <cherryyz@google.com>
Previously we would finalize the methods of the alias type itself, but
since its a type alias we really need to finalize the methods of the
aliased type.
Also, handle method expressions of unnamed struct types.
Test case is https://golang.org/cl/251168.
Fixesgolang/go#38125
Change-Id: I84c98883ae8641c5fa2b6c5209bf5ef9bb38e57b
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/251279
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>