Commit Graph

1387 Commits

Author SHA1 Message Date
Ian Lance Taylor
08dfde5a30 libgo: fix DejaGNU testsuite compiler when using build sysroot
Patch from Thomas Schwinge.

PR testsuite/109951
* configure.ac: 'AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)'.
* Makefile.in: Regenerate.
* configure: Likewise.
* testsuite/Makefile.in: Likewise.
* testsuite/lib/libgo.exp (libgo_init): If
'--with-build-sysroot=[...]' was specified, use it for build-tree
testing.
* testsuite/libgo-test-support.exp.in (GOC_UNDER_TEST): Don't set.
(SYSROOT_CFLAGS_FOR_TARGET): Set.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/527755
2023-09-12 13:19:42 -07:00
Ian Lance Taylor
dab7163fee cmd/go: permit $AR to include options
Handle the AR environment variable, used by gccgo,
the same way we handle the CC environment variable.

This ports https://go.dev/cl/526275 to the gofrontend repo.

This is needed for gccgo testing because the top-level GCC Makefile
now passes a --plugin option to ar if it supports one.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/526295
2023-09-06 11:37:20 -07:00
Ian Lance Taylor
4e9ed68ee7 cmd/go: don't collect package CGOLDFLAGS when using gccgo
They are already collected via cmd/cgo.

The gccgo_link_c test is tweaked to do real linking as with this
change the cgo ldflags are not fully reflected in go build -n output,
since they now only come from the built archive.

This is a backport of https://go.dev/cl/497117 from the main repo.

For golang/go#60287

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/511675
2023-07-20 12:29:11 -07:00
Ian Lance Taylor
6b724427aa compiler, libgo: support bootstrapping gc compiler
In the Go 1.21 release the package internal/profile imports
internal/lazyregexp.  That works when bootstrapping with Go 1.17,
because that compiler has internal/lazyregep and permits importing it.
We also have internal/lazyregexp in libgo, but since it is not installed
it is not available for importing.  This CL adds internal/lazyregexp
to the list of internal packages that are installed for bootstrapping.

The Go 1.21, and earlier, releases have a couple of functions in
the internal/abi package that are always fully intrinsified.
The gofrontend recognizes and intrinsifies those functions as well.
However, the gofrontend was also building function descriptors
for references to the functions without calling them, which
failed because there was nothing to refer to.  That is OK for the
gc compiler, which guarantees that the functions are only called,
not referenced.  This CL arranges to not generate function descriptors
for these functions.

For golang/go#60913

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/504798
2023-06-23 16:17:11 -07:00
Ian Lance Taylor
efecb298d8 runtime: use a C function to call mmap
The final argument to mmap, of type off_t, varies.
In CL 445375 we changed it to always use the C off_t type,
but that broke 32-bit big-endian Linux systems.  On those systems,
using the C off_t type requires calling the mmap64 function.
In C this is automatically handled by the <sys/mman.h> file.
In Go, we would have to change the magic //extern comment to
call mmap64 when appropriate.  Rather than try to get that right,
we instead go through a C function that uses C implicit type
conversions to pick the right type.

Fixes PR go/110297

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/504415
2023-06-20 09:55:58 -07:00
Ian Lance Taylor
bc6bd0d608 libgo/testsuite: add benchmarks and examples to list
In CL 384695 I simplified the code that built lists of benchmarks,
examples, and fuzz tests, and managed to break it. This CL corrects
the code to once again make the benchmarks available, and to run
the examples with output and the fuzz targets.

Doing this revealed a test failure in internal/fuzz on 32-bit x86:
a signalling NaN is turned into a quiet NaN on the 387 floating-point
stack that GCC uses by default. This CL skips the test.

Fixes golang/go#60826

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/503798
2023-06-16 12:29:04 -07:00
Ian Lance Taylor
fd95566fda syscall: add prlimit
As of https://go.dev/cl/476695 golang.org/x/sys/unix can call
syscall.prlimit, so we need such a function in libgo.

For golang/go#46279
Fixes golang/go#59712

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/486576
2023-05-11 09:17:48 -07:00
Ian Lance Taylor
f22c12d736 mime: remove test ordering dependency
Backport CL 421442 from upstream.

Original description:

Arrange for tests that call setMimeInit to fully restore the old values,
by clearing the sync.Once that controls initialization.

Once we've done that, call initMime in initMimeUnixTest because
otherwise the test types loaded there will be cleared by the call to
initMime that previously was not being done.

For golang/go#51648

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/483117
2023-04-07 14:07:10 -07:00
Ian Lance Taylor
c5e77e98af libgo: revert incorrectly committed change
This directory should be changed upstream, not in the GCC repo.
2023-03-05 20:01:56 -08:00
LIU Hao
902c755930 Always define WIN32_LEAN_AND_MEAN before <windows.h>
Recently, mingw-w64 has got updated <msxml.h> from Wine which is included
indirectly by <windows.h> if `WIN32_LEAN_AND_MEAN` is not defined. The
`IXMLDOMDocument` class has a member function named `abort()`, which gets
affected by our `abort()` macro in "system.h".

`WIN32_LEAN_AND_MEAN` should, nevertheless, always be defined. This
can exclude 'APIs such as Cryptography, DDE, RPC, Shell, and Windows
Sockets' [1], and speed up compilation of these files a bit.

[1] https://learn.microsoft.com/en-us/windows/win32/winprog/using-the-windows-headers

gcc/

	PR middle-end/108300
	* config/xtensa/xtensa-dynconfig.c: Define `WIN32_LEAN_AND_MEAN`
	before <windows.h>.
	* diagnostic-color.cc: Likewise.
	* plugin.cc: Likewise.
	* prefix.cc: Likewise.

gcc/ada/

	PR middle-end/108300
	* adaint.c: Define `WIN32_LEAN_AND_MEAN` before `#include
	<windows.h>`.
	* cio.c: Likewise.
	* ctrl_c.c: Likewise.
	* expect.c: Likewise.
	* gsocket.h: Likewise.
	* mingw32.h: Likewise.
	* mkdir.c: Likewise.
	* rtfinal.c: Likewise.
	* rtinit.c: Likewise.
	* seh_init.c: Likewise.
	* sysdep.c: Likewise.
	* terminals.c: Likewise.
	* tracebak.c: Likewise.

gcc/jit/

	PR middle-end/108300
	* jit-w32.h: Define `WIN32_LEAN_AND_MEAN` before <windows.h>.

libatomic/

	PR middle-end/108300
	* config/mingw/lock.c: Define `WIN32_LEAN_AND_MEAN` before
	<windows.h>.

libffi/

	PR middle-end/108300
	* src/aarch64/ffi.c: Define `WIN32_LEAN_AND_MEAN` before
	<windows.h>.

libgcc/

	PR middle-end/108300
	* config/i386/enable-execute-stack-mingw32.c: Define
	`WIN32_LEAN_AND_MEAN` before <windows.h>.
	* libgcc2.c: Likewise.
	* unwind-generic.h: Likewise.

libgfortran/

	PR middle-end/108300
	* intrinsics/sleep.c: Define `WIN32_LEAN_AND_MEAN` before
	<windows.h>.

libgomp/

	PR middle-end/108300
	* config/mingw32/proc.c: Define `WIN32_LEAN_AND_MEAN` before
	<windows.h>.

libiberty/

	PR middle-end/108300
	* make-temp-file.c: Define `WIN32_LEAN_AND_MEAN` before <windows.h>.
	* pex-win32.c: Likewise.

libssp/

	PR middle-end/108300
	* ssp.c: Define `WIN32_LEAN_AND_MEAN` before <windows.h>.

libstdc++-v3/

	PR middle-end/108300
	* src/c++11/system_error.cc: Define `WIN32_LEAN_AND_MEAN` before
	<windows.h>.
	* src/c++11/thread.cc: Likewise.
	* src/c++17/fs_ops.cc: Likewise.
	* src/filesystem/ops.cc: Likewise.

libvtv/

	PR middle-end/108300
	* vtv_malloc.cc: Define `WIN32_LEAN_AND_MEAN` before <windows.h>.
	* vtv_rts.cc: Likewise.
	* vtv_utils.cc: Likewise.
2023-01-07 06:51:06 +00:00
Ian Lance Taylor
2b1a604a9b libgo: check for makecontext in -lucontext
Patch from Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/458396
2022-12-20 19:34:55 -08:00
Ian Lance Taylor
11c72cd3c8 libgo: bump major version
PR go/108057

The current version is the same as for the previous GCC release,
but there have been minor changes like new type descriptors that
make it impossible to run Go programs built with the previous GCC
release with the current libgo.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/456976
2022-12-12 14:18:14 -08:00
Ian Lance Taylor
91607eba8f runtime: force XSI strerror on hurd
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/454275
2022-11-30 12:21:15 -08:00
Ian Lance Taylor
b6c6a3d64f syscall, runtime: always call XSI strerror_r
This does the right thing for either glibc or musl on GNU/Linux.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/454176
2022-11-29 16:09:13 -08:00
Ian Lance Taylor
0a2984dd10 runtime: use _libgo_off_t_type when calling C mmap
The last argument to the C mmap function is type off_t, not uintptr.
On some 32-bit systems, off_t is larger than uintptr.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/445735
2022-10-27 17:12:57 -07:00
Ian Lance Taylor
e73d9fcafb runtime: portable access to sigev_notify_thread_id
Previously, libgo relied on the _sigev_un implementation-specific
field in struct sigevent, which is only available on glibc.
This patch uses the sigev_notify_thread_id macro instead which is
mandated by timer_create(2). In theory, this should work with any libc
implementation for Linux. Unfortunately, there is an open glibc bug
as glibc does not define this macro. For this reason, a glibc-specific
workaround is required. Other libcs (such as musl) define the macro
and don't require the workaround.

See https://sourceware.org/bugzilla/show_bug.cgi?id=27417

This makes libgo compatible with musl libc.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/434755
2022-09-27 09:30:23 -07:00
melonedo
f38162977e runtime: synchronize empty struct field handling
In GCCGO and gollvm, the logic for allocating one byte for the last field is:
1. the last field has zero size
2. the struct itself does not have zero size
3. the last field is not blank
this commit adds the last two conditions to runtime.structToFFI.

For golang/go#55146

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/431735
2022-09-27 09:28:39 -07:00
Ian Lance Taylor
f35be1268c cmd/cgo: add and use runtime/cgo.Incomplete instead of //go:notinheap
This ports https://go.dev/cl/421879 to libgo. This is a quick port to
update gofrontend to work with the version of cgo in gc mainline.
A more complete port will follow, changing the gc version of cmd/cgo to
choose an approach based on feature testing the gccgo in use.

Updates golang/go#46731

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/432338
2022-09-22 06:28:19 -07:00
Ian Lance Taylor
c0852b51b7 runtime: ignore __morestack function in runtime.Callers
We were ignoring all functions starting with "__morestack_", but not
the function "__morestack" itself.  Without this change, some tests
such as recover.go started failing recently, though I'm not sure
exactly what changed.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/427935
2022-09-06 18:39:50 -07:00
Ian Lance Taylor
a63b99f24d libgo: use SYS_timer_settime32
Musl defines SYS_timer_settime32, not SYS_timer_settime, on 32-bit systems.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/420222
2022-07-30 10:35:23 -07:00
Ian Lance Taylor
cf17256105 libgo: use POSIX shell arithmetic expansion
Avoid bash-specific ((expression)) syntax.  As the bash syntax
converts a non-zero value to a zero status (and a zero value to a 1
status), and POSIX arithmetic expansion does not, we have to negate
the result.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/419154
2022-07-22 11:57:18 -07:00
Ian Lance Taylor
f35d65517a libgo: don't include <linux/fs.h> when building gen-sysinfo.go
Removing this doesn't change anything at least with glibc 2.33.
The include was added in https://go.dev/cl/6100049 but it's not
clear why.

Fixes PR go/106266

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/417294
2022-07-13 09:02:20 -07:00
Ian Lance Taylor
762fd5e554 libgo: handle stat st_atim32 field and SYS_SECCOMP
Patches for musl support, from Sören Tempel.

Fixes PR go/105225

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/415294
2022-06-30 12:35:08 -07:00
Ian Lance Taylor
53c4ef1e3c libgo: make runtime.Version return a meaningful string
Fixes golang/go#51850

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/414734
2022-06-28 10:19:58 -07:00
Ian Lance Taylor
7905a9ac26 libgo: #include <sys/types.h> when checking for loff_t
PR go/106033

Fixes golang/go#53469

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/413214
2022-06-21 08:03:17 -07:00
Ian Lance Taylor
7f195a2270 libgo: permit loff_t and off_t to be macros
They are macros in musl libc, rather than typedefs, and -fgo-dump-spec
doesn't handle that case.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/412075
2022-06-17 14:27:06 -07:00
Ian Lance Taylor
cf79b1117b syscall: gofmt
Add blank lines after //sys comments where needed, and then run gofmt
on the syscall package with the new formatter.

This is the libgo version of CL 407136.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/412074
2022-06-14 15:11:17 -07:00
Ian Lance Taylor
6a4e993454 runtime: use correct field name for PPC32 GLIBC registers
One of these days we will get this right.

Fixes PR go/105315

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/401374
2022-04-20 17:49:44 -07:00
Ian Lance Taylor
4a1a72a89c libgo: make a couple of sed uses POSIX compliant
Patch from Jonathan Wakely.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/401054
2022-04-19 12:49:42 -07:00
Sören Tempel
ace4928a29 libgo: only add signum to siglist if it doesn't exist yet
This fixes a build issue on musl libc where the same signal number
is used for SIGIO and SIGPOLL.  This causes a compilation error since
the signal numbers must be unique for the signal table.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/400595
2022-04-18 15:17:16 -07:00
A. Wilcox
208b7d85d7 runtime: add special handling for signal 34
The musl libc uses signal 34 internally for setgid (similar to how glibc
uses signal 32 and signal 33).  For this reason, special handling is
needed for this signal in the runtime. The gc implementation already
handles the signal accordingly.  As such, this commit intends to
simply copy the behavior of the Google Go implementation to libgo.

See https://go.dev/issues/39343

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/400594
2022-04-18 15:16:35 -07:00
Ian Lance Taylor
d00dd52ea1 compiler: revert for package-scope "a = b; b = x" just set "a = x"
Revert CL 245098.  It caused incorrect initialization ordering.

Adjust the runtime package to work even with the CL reverted.

Original description of CL 245098:

    This avoids requiring an init function to initialize the variable.
    This can only be done if x is a static initializer.

    The go1.15rc1 runtime package relies on this optimization.
    The package has a variable "var maxSearchAddr = maxOffAddr".
    The maxSearchAddr variable is used by code that runs before package
    initialization is complete.

For golang/go#51913

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/395994
2022-04-15 14:27:05 -07:00
Ian Lance Taylor
af27d545dc runtime: use regset indexes for PPC register values
Using names depended on <asm/ptrace.h>, which glibc includes somewhere
but musl did not.  Change to just always use indexes.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/400214
2022-04-14 15:14:57 -07:00
Ian Lance Taylor
0abc1cbad1 runtime: support PPC32 MUSL register access
Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/397394
2022-03-31 13:26:13 -07:00
Ian Lance Taylor
69921f4a7e libgo: update to final Go 1.18 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/393377
2022-03-16 13:52:32 -07:00
Ian Lance Taylor
c3402486af mkruntimeinc: skip _FILE
We don't need it, and it breaks uclibc.

	PR go/101246

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/390021
2022-03-04 10:46:55 -08:00
Clément Chigot
e71079517f libgo: move golang.org/x/sync/semaphore to gotool packages
golang/x/sync/semaphore is required by gofmt.go.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/388634
2022-03-04 10:27:10 -08:00
Clément Chigot
6be8281c16 libgo: fix AIX build for the Go1.18 update
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/388635
2022-03-04 10:19:50 -08:00
Ian Lance Taylor
3d54f1ffaf libgo: update README.gcc
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/387514
2022-02-22 15:34:46 -08:00
Ian Lance Taylor
a7eeaa4898 runtime/internal/syscall: build dummy package if not Linux
Fixes libgo build on non-Linux systems.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/387134
2022-02-21 13:24:38 -08:00
Ian Lance Taylor
3343e7e2c4 libgo: update Hurd support
Patches from Svante Signell for PR go/104290.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386797
2022-02-18 15:33:32 -08:00
Ian Lance Taylor
20a33efdf3 libgo: update to Go1.18rc1 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386594
2022-02-18 13:12:08 -08:00
Ian Lance Taylor
3f2a6b041d net: add hurd build tag for setReadMsgCloseOnExec
Patch from Svante Signell.

	PR go/103573
	PR go/104290

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386216
2022-02-17 09:30:02 -08:00
Ian Lance Taylor
24ca97325c libgo: restore building on Solaris
Add build tags and a few other changes so that libgo builds on Solaris.

Patch partially from Rainer Orth.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386215
2022-02-16 12:20:10 -08:00
Ian Lance Taylor
58aeb75d40 runtime: call timer functions via syscall
It turns out to be painful to require linking against -lrt on
GNU/Linux, as that makes it harder to link Go code into C programs.
Instead just call the timer syscalls directly.  That is what the
upstream library does anyhow.

gcc/go/
	* gospec.cc: Revert 2022-02-09 change:
	(RTLIB, RT_LIBRARY): Don't define.
	(lang_specific_driver): Don't add -lrt if linking statically
	on GNU/Linux.

gotools/
	* configure.ac: Revert 2022-02-09 change:
	(RT_LIBS): Don't define.
	* Makefile.am (check-runtime): Don't set GOLIBS to $(RT_LIBS).
	* configure, Makefile.in: Regenerate.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/385475
2022-02-13 11:03:45 -08:00
Ian Lance Taylor
8dc2499aa6 libgo: update to Go1.18beta2
gotools/
	* Makefile.am (go_cmd_cgo_files): Add ast_go118.go
	(check-go-tool): Copy golang.org/x/tools directories.
	* Makefile.in: Regenerate.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/384695
2022-02-11 15:01:19 -08:00
Ian Lance Taylor
3ab49b1c82 compiler, internal/abi: implement FuncPCABI0, FuncPCABIInternal
The Go 1.18 standard library uses an internal/abi package with two
functions that are implemented in the compiler. This patch implements
them in the gofrontend, to support the upcoming update to 1.18.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/383514
2022-02-08 20:08:09 -08:00
David Seifert
45ba6bf28b make -Werror optional in libatomic/libbacktrace/libgomp/libitm/libsanitizer
* `-Werror` can cause issues when a more recent version of GCC compiles
  an older version:
  - https://bugs.gentoo.org/229059
  - https://bugs.gentoo.org/475350
  - https://bugs.gentoo.org/667104

libatomic/ChangeLog:

	* configure.ac: Support --disable-werror.
	* configure: Regenerate.

libbacktrace/ChangeLog:

	* configure.ac: Support --disable-werror.
	* configure: Regenerate.

libgomp/ChangeLog:

	* configure.ac: Support --disable-werror.
	* configure: Regenerate.

libitm/ChangeLog:

	* configure.ac: Support --disable-werror.
	* configure: Regenerate.

libsanitizer/ChangeLog:

	* configure.ac: Support --disable-werror.
	* aclocal.m4: Include also ../config/warnings.m4.
	* libbacktrace/Makefile.am (WARN_FLAGS): Remove.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* asan/Makefile.in: Regenerate.
	* hwasan/Makefile.in: Regenerate.
	* interception/Makefile.in: Regenerate.
	* libbacktrace/Makefile.in: Regenerate.
	* lsan/Makefile.in: Regenerate.
	* sanitizer_common/Makefile.in: Regenerate.
	* tsan/Makefile.in: Regenerate.
	* ubsan/Makefile.in: Regenerate.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
2022-02-03 16:10:18 +01:00
Ian Lance Taylor
39cd3cce52 runtime: build panic32.go on amd64p32
Fixes https://gcc.gnu.org/PR104149

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/380054
2022-01-20 19:06:50 -08:00
Ian Lance Taylor
62c3f75fd2 compiler, libgo: don't pad sparc64-linux epollevent
Change the compiler to not add zero padding because of zero-sized
fields named "_", since those can't be referenced anyhow.

Change the sparc-linux64 epollevent struct to name the alignment
field "_", to avoid zero padding.

Fixes PR go/103847

	PR go/103847
	* godump.c (go_force_record_alignment): Name the alignment
	field "_".

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/374914
2021-12-29 15:52:23 -08:00