Compare commits
84 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
891cef7d9b | ||
|
9bce8e2449 | ||
|
55f9b2f336 | ||
|
f8b6352429 | ||
|
5e141990fb | ||
|
912e74c756 | ||
|
b84725ac52 | ||
|
7de85a2603 | ||
|
576d41c1c6 | ||
|
562d27c22f | ||
|
57a884df51 | ||
|
04dfce99db | ||
|
b05570344e | ||
|
52eb664223 | ||
|
0d8c061e19 | ||
|
56772a9401 | ||
|
4110c03341 | ||
|
4c8c128cd0 | ||
|
f684732e50 | ||
|
4562ca924e | ||
|
90028182f3 | ||
|
6919aa138f | ||
|
672c273c6d | ||
|
94498d7104 | ||
|
28742415b7 | ||
|
f2dc6d80c8 | ||
|
b2a5d6a477 | ||
|
fd99b9378d | ||
|
a3fcce8f5b | ||
|
84af04ddb6 | ||
|
b6b1340286 | ||
|
84ce3f0d05 | ||
|
5c04074052 | ||
|
4d0e748417 | ||
|
1d6c11d8df | ||
|
843493ecf7 | ||
|
bad9bc25a4 | ||
|
f790525bec | ||
|
fc147e70c0 | ||
|
8ccdd26200 | ||
|
d1c6bd89f3 | ||
|
e0c920a406 | ||
|
d228ee264c | ||
|
e6073613ef | ||
|
f147a68289 | ||
|
7ee3a099fa | ||
|
fe09f8496b | ||
|
16bcddd9d4 | ||
|
7545ecb969 | ||
|
a6c3c8f082 | ||
|
d895623061 | ||
|
a71fb3364e | ||
|
db0aca6b64 | ||
|
215844b31b | ||
|
80dc8803df | ||
|
3759f6f554 | ||
|
adee8bcb39 | ||
|
cee0dddd34 | ||
|
da335fc250 | ||
|
bcdeb85901 | ||
|
1321d9a8de | ||
|
3694befabb | ||
|
2a22f8c83a | ||
|
866b034132 | ||
|
17d43f4d58 | ||
|
b627ff6a1c | ||
|
98b4937fcb | ||
|
858f1e25fb | ||
|
e66bcabdd3 | ||
|
a2239731d4 | ||
|
c05efdcd33 | ||
|
6e4a12be24 | ||
|
7df147abdd | ||
|
2edf51cd28 | ||
|
3deee803bf | ||
|
8602ede777 | ||
|
8fb0e5b0d3 | ||
|
7ad4cfb1f2 | ||
|
c01972f342 | ||
|
b1fe12b88a | ||
|
0aaf98d346 | ||
|
c0d3a20ab3 | ||
|
4b90559c50 | ||
|
e0b3768e1a |
57
.gitignore
vendored
57
.gitignore
vendored
@ -1,49 +1,8 @@
|
|||||||
/gcc-7.0.1-20170126.tar.bz2
|
/gcc-10.0.1-20200118.tar.xz
|
||||||
/nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.bz2
|
/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||||
/nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.bz2
|
/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
||||||
/gcc-7.0.1-20170128.tar.bz2
|
/gcc-10.0.1-20200121.tar.xz
|
||||||
/gcc-7.0.1-20170131.tar.bz2
|
/gcc-10.0.1-20200123.tar.xz
|
||||||
/gcc-7.0.1-20170201.tar.bz2
|
/gcc-10.0.1-20200126.tar.xz
|
||||||
/gcc-7.0.1-20170204.tar.bz2
|
/gcc-10.0.1-20200130.tar.xz
|
||||||
/gcc-7.0.1-20170209.tar.bz2
|
/gcc-10.0.1-20200216.tar.xz
|
||||||
/gcc-7.0.1-20170211.tar.bz2
|
|
||||||
/gcc-7.0.1-20170219.tar.bz2
|
|
||||||
/gcc-7.0.1-20170225.tar.bz2
|
|
||||||
/gcc-7.0.1-20170308.tar.bz2
|
|
||||||
/gcc-7.0.1-20170309.tar.bz2
|
|
||||||
/gcc-7.0.1-20170327.tar.bz2
|
|
||||||
/gcc-7.0.1-20170410.tar.bz2
|
|
||||||
/gcc-7.0.1-20170421.tar.bz2
|
|
||||||
/gcc-7.0.1-20170425.tar.bz2
|
|
||||||
/gcc-7.1.1-20170503.tar.bz2
|
|
||||||
/gcc-7.1.1-20170526.tar.bz2
|
|
||||||
/gcc-7.1.1-20170622.tar.bz2
|
|
||||||
/gcc-7.1.1-20170708.tar.bz2
|
|
||||||
/gcc-7.1.1-20170711.tar.bz2
|
|
||||||
/gcc-7.1.1-20170718.tar.bz2
|
|
||||||
/gcc-7.1.1-20170802.tar.bz2
|
|
||||||
/gcc-7.2.1-20170829.tar.bz2
|
|
||||||
/gcc-7.2.1-20170915.tar.bz2
|
|
||||||
/gcc-7.2.1-20180101.tar.bz2
|
|
||||||
/gcc-7.2.1-20180104.tar.bz2
|
|
||||||
/gcc-7.2.1-20180117.tar.bz2
|
|
||||||
/gcc-7.3.1-20180125.tar.bz2
|
|
||||||
/gcc-8.0.1-20180127.tar.xz
|
|
||||||
/nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.xz
|
|
||||||
/nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.xz
|
|
||||||
/gcc-8.0.1-20180830.tar.xz
|
|
||||||
/gcc-8.0.1-20180130.tar.xz
|
|
||||||
/gcc-8.0.1-20180131.tar.xz
|
|
||||||
/gcc-8.0.1-20180207.tar.xz
|
|
||||||
/gcc-8.0.1-20180210.tar.xz
|
|
||||||
/gcc-8.0.1-20180218.tar.xz
|
|
||||||
/gcc-8.0.1-20180220.tar.xz
|
|
||||||
/gcc-8.0.1-20180222.tar.xz
|
|
||||||
/gcc-8.0.1-20180310.tar.xz
|
|
||||||
/gcc-8.0.1-20180312.tar.xz
|
|
||||||
/gcc-8.0.1-20180317.tar.xz
|
|
||||||
/gcc-8.0.1-20180324.tar.xz
|
|
||||||
/gcc-8.0.1-20180410.tar.xz
|
|
||||||
/gcc-8.0.1-20180424.tar.xz
|
|
||||||
/gcc-8.0.1-20180425.tar.xz
|
|
||||||
/gcc-8.1.1-20180502.tar.xz
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
|
--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
|
||||||
+++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
|
+++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
|
||||||
@@ -481,7 +481,7 @@ AC_ARG_ENABLE(build-format-warnings,
|
@@ -480,7 +480,7 @@ AC_ARG_ENABLE(build-format-warnings,
|
||||||
AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
|
AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
|
||||||
[],[enable_build_format_warnings=yes])
|
[],[enable_build_format_warnings=yes])
|
||||||
AS_IF([test $enable_build_format_warnings = no],
|
AS_IF([test $enable_build_format_warnings = no],
|
||||||
@ -13,7 +13,7 @@
|
|||||||
+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
|
+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
|
||||||
ACX_PROG_CXX_WARNING_OPTS(
|
ACX_PROG_CXX_WARNING_OPTS(
|
||||||
m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
|
m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
|
||||||
[-Wcast-qual $wf_opt])), [loose_warn])
|
[-Wcast-qual -Wno-error=format-diag $wf_opt])),
|
||||||
--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
|
--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
|
||||||
+++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
|
+++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
|
||||||
@@ -6647,7 +6647,7 @@ else
|
@@ -6647,7 +6647,7 @@ else
|
20
gcc10-d-shared-libphobos.patch
Normal file
20
gcc10-d-shared-libphobos.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
2019-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* d-spec.cc (lang_specific_driver): Make -shared-libphobos
|
||||||
|
the default rather than -static-libphobos.
|
||||||
|
|
||||||
|
--- gcc/d/d-spec.cc.jj 2019-01-01 12:37:49.502444257 +0100
|
||||||
|
+++ gcc/d/d-spec.cc 2019-01-17 17:09:45.364949246 +0100
|
||||||
|
@@ -405,9 +405,9 @@ lang_specific_driver (cl_decoded_option
|
||||||
|
/* Add `-lgphobos' if we haven't already done so. */
|
||||||
|
if (phobos_library != PHOBOS_NOLINK && need_phobos)
|
||||||
|
{
|
||||||
|
- /* Default to static linking. */
|
||||||
|
- if (phobos_library != PHOBOS_DYNAMIC)
|
||||||
|
- phobos_library = PHOBOS_STATIC;
|
||||||
|
+ /* Default to shared linking. */
|
||||||
|
+ if (phobos_library != PHOBOS_STATIC)
|
||||||
|
+ phobos_library = PHOBOS_DYNAMIC;
|
||||||
|
|
||||||
|
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||||
|
if (phobos_library == PHOBOS_DYNAMIC && static_link)
|
@ -1,14 +1,15 @@
|
|||||||
2017-01-20 Jakub Jelinek <jakub@redhat.com>
|
2019-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* gcc.c (offload_targets_default): New variable.
|
* gcc.c (offload_targets_default): New variable.
|
||||||
(process_command): Set it if -foffload is defaulted.
|
(process_command): Set it if -foffload is defaulted.
|
||||||
(driver::maybe_putenv_OFFLOAD_TARGETS): Add OFFLOAD_TARGET_DEFAULT=1
|
(driver::maybe_putenv_OFFLOAD_TARGETS): Add OFFLOAD_TARGET_DEFAULT=1
|
||||||
into environment if -foffload has been defaulted.
|
into environment if -foffload has been defaulted.
|
||||||
* lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define.
|
* lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define.
|
||||||
(compile_images_for_offload_targets): If OFFLOAD_TARGET_DEFAULT
|
(compile_offload_image): If OFFLOAD_TARGET_DEFAULT
|
||||||
is in the environment, don't fail if corresponding mkoffload
|
is in the environment, don't fail if corresponding mkoffload
|
||||||
can't be found. Free and clear offload_names if no valid offload
|
can't be found.
|
||||||
is found.
|
(compile_images_for_offload_targets): Likewise. Free and clear
|
||||||
|
offload_names if no valid offload is found.
|
||||||
libgomp/
|
libgomp/
|
||||||
* target.c (gomp_load_plugin_for_device): If a plugin can't be
|
* target.c (gomp_load_plugin_for_device): If a plugin can't be
|
||||||
dlopened, assume it has no devices silently.
|
dlopened, assume it has no devices silently.
|
||||||
@ -57,18 +58,28 @@ libgomp/
|
|||||||
|
|
||||||
enum lto_mode_d {
|
enum lto_mode_d {
|
||||||
LTO_MODE_NONE, /* Not doing LTO. */
|
LTO_MODE_NONE, /* Not doing LTO. */
|
||||||
@@ -790,8 +791,10 @@ compile_images_for_offload_targets (unsi
|
@@ -822,6 +823,12 @@ compile_offload_image (const char *targe
|
||||||
if (!target_names)
|
break;
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
+ if (!compiler && getenv (OFFLOAD_TARGET_DEFAULT_ENV))
|
||||||
|
+ {
|
||||||
|
+ free_array_of_ptrs ((void **) paths, n_paths);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!compiler)
|
||||||
|
fatal_error (input_location,
|
||||||
|
"could not find %s in %s (consider using %<-B%>)",
|
||||||
|
@@ -885,6 +892,7 @@ compile_images_for_offload_targets (unsi
|
||||||
unsigned num_targets = parse_env_var (target_names, &names, NULL);
|
unsigned num_targets = parse_env_var (target_names, &names, NULL);
|
||||||
+ const char *target_names_default = getenv (OFFLOAD_TARGET_DEFAULT_ENV);
|
|
||||||
|
|
||||||
int next_name_entry = 0;
|
int next_name_entry = 0;
|
||||||
+ bool hsa_seen = false;
|
+ bool hsa_seen = false;
|
||||||
const char *compiler_path = getenv ("COMPILER_PATH");
|
const char *compiler_path = getenv ("COMPILER_PATH");
|
||||||
if (!compiler_path)
|
if (!compiler_path)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -804,18 +807,32 @@ compile_images_for_offload_targets (unsi
|
@@ -897,18 +905,26 @@ compile_images_for_offload_targets (unsi
|
||||||
/* HSA does not use LTO-like streaming and a different compiler, skip
|
/* HSA does not use LTO-like streaming and a different compiler, skip
|
||||||
it. */
|
it. */
|
||||||
if (strcmp (names[i], "hsa") == 0)
|
if (strcmp (names[i], "hsa") == 0)
|
||||||
@ -84,14 +95,8 @@ libgomp/
|
|||||||
linker_opts, linker_opt_count);
|
linker_opts, linker_opt_count);
|
||||||
if (!offload_names[next_name_entry])
|
if (!offload_names[next_name_entry])
|
||||||
- fatal_error (input_location,
|
- fatal_error (input_location,
|
||||||
- "problem with building target image for %s\n", names[i]);
|
- "problem with building target image for %s", names[i]);
|
||||||
+ {
|
|
||||||
+ if (target_names_default != NULL)
|
|
||||||
+ continue;
|
+ continue;
|
||||||
+ fatal_error (input_location,
|
|
||||||
+ "problem with building target image for %s\n",
|
|
||||||
+ names[i]);
|
|
||||||
+ }
|
|
||||||
next_name_entry++;
|
next_name_entry++;
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,8 @@
|
|||||||
--- libada/Makefile.in.jj 2009-01-14 12:07:35.000000000 +0100
|
--- libada/Makefile.in.jj 2019-01-09 13:01:18.015608205 +0100
|
||||||
+++ libada/Makefile.in 2009-01-15 14:25:33.000000000 +0100
|
+++ libada/Makefile.in 2019-01-11 18:16:23.441726931 +0100
|
||||||
@@ -66,18 +66,40 @@ libsubdir := $(libdir)/gcc/$(target_nonc
|
@@ -71,18 +71,40 @@ version := $(shell @get_gcc_base_ver@ $(
|
||||||
|
libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
|
||||||
ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
|
ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
|
||||||
ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR))
|
|
||||||
|
|
||||||
+DEFAULTMULTIFLAGS :=
|
+DEFAULTMULTIFLAGS :=
|
||||||
+ifeq ($(MULTISUBDIR),)
|
+ifeq ($(MULTISUBDIR),)
|
||||||
@ -45,17 +45,17 @@
|
|||||||
"PICFLAG_FOR_TARGET=$(PICFLAG)" \
|
"PICFLAG_FOR_TARGET=$(PICFLAG)" \
|
||||||
"THREAD_KIND=$(THREAD_KIND)" \
|
"THREAD_KIND=$(THREAD_KIND)" \
|
||||||
"TRACE=$(TRACE)" \
|
"TRACE=$(TRACE)" \
|
||||||
@@ -88,7 +110,7 @@ LIBADA_FLAGS_TO_PASS = \
|
@@ -93,7 +115,7 @@ LIBADA_FLAGS_TO_PASS = \
|
||||||
"exeext=.exeext.should.not.be.used " \
|
"exeext=.exeext.should.not.be.used " \
|
||||||
'CC=the.host.compiler.should.not.be.needed' \
|
'CC=the.host.compiler.should.not.be.needed' \
|
||||||
"GCC_FOR_TARGET=$(CC)" \
|
"GCC_FOR_TARGET=$(CC)" \
|
||||||
- "CFLAGS=$(CFLAGS)"
|
- "CFLAGS=$(CFLAGS)"
|
||||||
+ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)"
|
+ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)"
|
||||||
|
|
||||||
# Rules to build gnatlib.
|
.PHONY: libada gnatlib gnatlib-shared gnatlib-sjlj gnatlib-zcx osconstool
|
||||||
.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool
|
|
||||||
--- config-ml.in.jj 2010-06-30 09:50:44.000000000 +0200
|
--- config-ml.in.jj 2019-01-09 12:50:16.646501448 +0100
|
||||||
+++ config-ml.in 2010-07-02 21:24:17.994211151 +0200
|
+++ config-ml.in 2019-01-11 18:16:23.442726914 +0100
|
||||||
@@ -511,6 +511,8 @@ multi-do:
|
@@ -511,6 +511,8 @@ multi-do:
|
||||||
ADAFLAGS="$(ADAFLAGS) $${flags}" \
|
ADAFLAGS="$(ADAFLAGS) $${flags}" \
|
||||||
prefix="$(prefix)" \
|
prefix="$(prefix)" \
|
||||||
@ -63,42 +63,44 @@
|
|||||||
+ mandir="$(mandir)" \
|
+ mandir="$(mandir)" \
|
||||||
+ infodir="$(infodir)" \
|
+ infodir="$(infodir)" \
|
||||||
GOCFLAGS="$(GOCFLAGS) $${flags}" \
|
GOCFLAGS="$(GOCFLAGS) $${flags}" \
|
||||||
|
GDCFLAGS="$(GDCFLAGS) $${flags}" \
|
||||||
CXXFLAGS="$(CXXFLAGS) $${flags}" \
|
CXXFLAGS="$(CXXFLAGS) $${flags}" \
|
||||||
LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
|
--- libcpp/macro.c.jj 2019-01-09 13:01:21.420552123 +0100
|
||||||
--- libcpp/macro.c.jj 2015-01-14 11:01:34.000000000 +0100
|
+++ libcpp/macro.c 2019-01-11 18:18:17.736876285 +0100
|
||||||
+++ libcpp/macro.c 2015-01-14 14:22:19.286949884 +0100
|
@@ -3256,8 +3256,6 @@ static cpp_macro *
|
||||||
@@ -2947,8 +2947,6 @@ create_iso_definition (cpp_reader *pfile
|
create_iso_definition (cpp_reader *pfile)
|
||||||
cpp_token *token;
|
{
|
||||||
const cpp_token *ctoken;
|
|
||||||
bool following_paste_op = false;
|
bool following_paste_op = false;
|
||||||
- const char *paste_op_error_msg =
|
- const char *paste_op_error_msg =
|
||||||
- N_("'##' cannot appear at either end of a macro expansion");
|
- N_("'##' cannot appear at either end of a macro expansion");
|
||||||
unsigned int num_extra_tokens = 0;
|
unsigned int num_extra_tokens = 0;
|
||||||
|
unsigned nparms = 0;
|
||||||
/* Get the first token of the expansion (or the '(' of a
|
cpp_hashnode **params = NULL;
|
||||||
@@ -3059,7 +3057,8 @@ create_iso_definition (cpp_reader *pfile
|
@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile
|
||||||
function-like macros, but not at the end. */
|
function-like macros, but not at the end. */
|
||||||
if (following_paste_op)
|
if (following_paste_op)
|
||||||
{
|
{
|
||||||
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
||||||
+ cpp_error (pfile, CPP_DL_ERROR,
|
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||||
+ "'##' cannot appear at either end of a macro expansion");
|
+ "'##' cannot appear at either end of a macro "
|
||||||
return false;
|
+ "expansion");
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
break;
|
if (!vaopt_tracker.completed ())
|
||||||
@@ -3072,7 +3071,8 @@ create_iso_definition (cpp_reader *pfile
|
@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile
|
||||||
function-like macros, but not at the beginning. */
|
function-like macros, but not at the beginning. */
|
||||||
if (macro->count == 1)
|
if (macro->count == 1)
|
||||||
{
|
{
|
||||||
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
||||||
+ cpp_error (pfile, CPP_DL_ERROR,
|
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||||
+ "'##' cannot appear at either end of a macro expansion");
|
+ "'##' cannot appear at either end of a macro "
|
||||||
return false;
|
+ "expansion");
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
--- libcpp/expr.c.jj 2015-01-14 11:01:34.000000000 +0100
|
--- libcpp/expr.c.jj 2019-01-09 13:01:22.415535734 +0100
|
||||||
+++ libcpp/expr.c 2015-01-14 14:35:52.851002344 +0100
|
+++ libcpp/expr.c 2019-01-11 18:16:23.444726882 +0100
|
||||||
@@ -672,16 +672,17 @@ cpp_classify_number (cpp_reader *pfile,
|
@@ -788,16 +788,17 @@ cpp_classify_number (cpp_reader *pfile,
|
||||||
if ((result & CPP_N_WIDTH) == CPP_N_LARGE
|
if ((result & CPP_N_WIDTH) == CPP_N_LARGE
|
||||||
&& CPP_OPTION (pfile, cpp_warn_long_long))
|
&& CPP_OPTION (pfile, cpp_warn_long_long))
|
||||||
{
|
{
|
@ -1,15 +1,15 @@
|
|||||||
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
||||||
+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
|
+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
|
||||||
@@ -1046,7 +1046,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
|
@@ -1063,7 +1063,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
|
||||||
# and the system's installed libraries.
|
# and the system's installed libraries.
|
||||||
LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
|
LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
|
||||||
$(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
|
$(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
|
||||||
-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||||
+BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
+BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||||
$(ZLIB)
|
$(ZLIB) $(ZSTD_LIB)
|
||||||
# Any system libraries needed just for GNAT.
|
# Any system libraries needed just for GNAT.
|
||||||
SYSLIBS = @GNAT_LIBEXC@
|
SYSLIBS = @GNAT_LIBEXC@
|
||||||
@@ -2196,6 +2196,15 @@ $(out_object_file): $(out_file)
|
@@ -2302,6 +2302,15 @@ $(out_object_file): $(out_file)
|
||||||
$(common_out_object_file): $(common_out_file)
|
$(common_out_object_file): $(common_out_file)
|
||||||
$(COMPILE) $<
|
$(COMPILE) $<
|
||||||
$(POSTCOMPILE)
|
$(POSTCOMPILE)
|
||||||
@ -27,10 +27,10 @@
|
|||||||
# and compile them.
|
# and compile them.
|
||||||
--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
|
--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
|
||||||
+++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
|
+++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
|
||||||
@@ -37,6 +37,590 @@ along with GCC; see the file COPYING3.
|
@@ -39,6 +39,590 @@ along with GCC; see the file COPYING3.
|
||||||
#include <isl/schedule.h>
|
|
||||||
#include <isl/ast_build.h>
|
|
||||||
#include <isl/schedule_node.h>
|
#include <isl/schedule_node.h>
|
||||||
|
#include <isl/id.h>
|
||||||
|
#include <isl/space.h>
|
||||||
+#include <isl/version.h>
|
+#include <isl/version.h>
|
||||||
+#include <dlfcn.h>
|
+#include <dlfcn.h>
|
||||||
+
|
+
|
@ -4,7 +4,7 @@
|
|||||||
<a class="link" href="https://www.fsf.org" target="_top">FSF
|
<a class="link" href="https://www.fsf.org" target="_top">FSF
|
||||||
</a>
|
</a>
|
||||||
</p><p>
|
</p><p>
|
||||||
+ Release 8.1.1
|
+ Release 10.0.1
|
||||||
+ </p><p>
|
+ </p><p>
|
||||||
Permission is granted to copy, distribute and/or modify this
|
Permission is granted to copy, distribute and/or modify this
|
||||||
document under the terms of the GNU Free Documentation
|
document under the terms of the GNU Free Documentation
|
||||||
@ -17,7 +17,7 @@
|
|||||||
</p><p>
|
</p><p>
|
||||||
- The API documentation, rendered into HTML, can be viewed online
|
- The API documentation, rendered into HTML, can be viewed online
|
||||||
+ The API documentation, rendered into HTML, can be viewed locally
|
+ The API documentation, rendered into HTML, can be viewed locally
|
||||||
+ <a class="link" href="api/index.html" target="_top">for the 8.1.1 release</a>,
|
+ <a class="link" href="api/index.html" target="_top">for the 10.0.1 release</a>,
|
||||||
+ online
|
+ online
|
||||||
<a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
|
||||||
and
|
and
|
@ -1,8 +1,6 @@
|
|||||||
2010-02-08 Roland McGrath <roland@redhat.com>
|
2010-02-08 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
* config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the
|
* config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker.
|
||||||
linker.
|
|
||||||
* config/gnu-user.h (LINK_EH_SPEC): Likewise.
|
|
||||||
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
||||||
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
||||||
|
|
||||||
@ -28,7 +26,7 @@
|
|||||||
#define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
|
#define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
|
||||||
--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100
|
--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100
|
||||||
+++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100
|
+++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100
|
||||||
@@ -133,7 +133,7 @@ see the files COPYING3 and COPYING.RUNTI
|
@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI
|
||||||
#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
|
#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
|
||||||
|
|
||||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||||
@ -36,15 +34,4 @@
|
|||||||
+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
|
+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
#define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
|
||||||
--- gcc/config/rs6000/sysv4.h.jj 2011-01-03 13:02:18.255994215 +0100
|
|
||||||
+++ gcc/config/rs6000/sysv4.h 2011-01-04 18:14:10.933888871 +0100
|
|
||||||
@@ -816,7 +816,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF
|
|
||||||
-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
|
|
||||||
|
|
||||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
|
||||||
-# define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
|
||||||
+# define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
|
|
30
gcc10-rh1574936.patch
Normal file
30
gcc10-rh1574936.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
crt files and statically linked libgcc objects cause false positives
|
||||||
|
in annobin coverage, so we add the assembler flag to generate notes
|
||||||
|
for them.
|
||||||
|
|
||||||
|
The patch also adds notes to libgcc_s.so, but this is harmless because
|
||||||
|
these notes only confer that there is no other annobin markup.
|
||||||
|
|
||||||
|
2018-07-25 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
* Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add
|
||||||
|
-Wa,--generate-missing-build-notes=yes.
|
||||||
|
|
||||||
|
--- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100
|
||||||
|
+++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200
|
||||||
|
@@ -246,6 +246,7 @@ LIBGCC2_DEBUG_CFLAGS = -g
|
||||||
|
LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
|
||||||
|
$(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \
|
||||||
|
-fbuilding-libgcc -fno-stack-protector \
|
||||||
|
+ -Wa,--generate-missing-build-notes=yes \
|
||||||
|
$(INHIBIT_LIBC_CFLAGS)
|
||||||
|
|
||||||
|
# Additional options to use when compiling libgcc2.a.
|
||||||
|
@@ -301,6 +302,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(IN
|
||||||
|
$(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
|
||||||
|
-fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
|
||||||
|
-fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \
|
||||||
|
+ -Wa,--generate-missing-build-notes=yes \
|
||||||
|
$(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY)
|
||||||
|
|
||||||
|
# Extra flags to use when compiling crt{begin,end}.o.
|
@ -1,17 +0,0 @@
|
|||||||
2018-04-24 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
* config/i386/i386.opt (mcet): Remporarily re-add as alias to -mshstk.
|
|
||||||
|
|
||||||
--- gcc/config/i386/i386.opt (revision 259613)
|
|
||||||
+++ gcc/config/i386/i386.opt (revision 259612)
|
|
||||||
@@ -1006,6 +1006,10 @@ mgeneral-regs-only
|
|
||||||
Target Report RejectNegative Mask(GENERAL_REGS_ONLY) Var(ix86_target_flags) Save
|
|
||||||
Generate code which uses only the general registers.
|
|
||||||
|
|
||||||
+mcet
|
|
||||||
+Target Undocumented Alias(mshstk)
|
|
||||||
+;; Deprecated
|
|
||||||
+
|
|
||||||
mshstk
|
|
||||||
Target Report Mask(ISA_SHSTK) Var(ix86_isa_flags) Save
|
|
||||||
Enable shadow stack built-in functions from Control-flow Enforcement
|
|
@ -1,445 +0,0 @@
|
|||||||
--- gcc/config/aarch64/aarch64.c
|
|
||||||
+++ gcc/config/aarch64/aarch64.c
|
|
||||||
@@ -3799,7 +3799,14 @@ aarch64_output_probe_stack_range (rtx reg1, rtx reg2)
|
|
||||||
output_asm_insn ("sub\t%0, %0, %1", xops);
|
|
||||||
|
|
||||||
/* Probe at TEST_ADDR. */
|
|
||||||
- output_asm_insn ("str\txzr, [%0]", xops);
|
|
||||||
+ if (flag_stack_clash_protection)
|
|
||||||
+ {
|
|
||||||
+ gcc_assert (xops[0] == stack_pointer_rtx);
|
|
||||||
+ xops[1] = GEN_INT (PROBE_INTERVAL - 8);
|
|
||||||
+ output_asm_insn ("str\txzr, [%0, %1]", xops);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ output_asm_insn ("str\txzr, [%0]", xops);
|
|
||||||
|
|
||||||
/* Test if TEST_ADDR == LAST_ADDR. */
|
|
||||||
xops[1] = reg2;
|
|
||||||
@@ -4589,6 +4596,133 @@ aarch64_set_handled_components (sbitmap components)
|
|
||||||
cfun->machine->reg_is_wrapped_separately[regno] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Allocate POLY_SIZE bytes of stack space using TEMP1 and TEMP2 as scratch
|
|
||||||
+ registers. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
|
|
||||||
+ poly_int64 poly_size)
|
|
||||||
+{
|
|
||||||
+ HOST_WIDE_INT size;
|
|
||||||
+ if (!poly_size.is_constant (&size))
|
|
||||||
+ {
|
|
||||||
+ sorry ("stack probes for SVE frames");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ HOST_WIDE_INT probe_interval
|
|
||||||
+ = 1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL);
|
|
||||||
+ HOST_WIDE_INT guard_size
|
|
||||||
+ = 1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE);
|
|
||||||
+ HOST_WIDE_INT guard_used_by_caller = 1024;
|
|
||||||
+
|
|
||||||
+ /* SIZE should be large enough to require probing here. ie, it
|
|
||||||
+ must be larger than GUARD_SIZE - GUARD_USED_BY_CALLER.
|
|
||||||
+
|
|
||||||
+ We can allocate GUARD_SIZE - GUARD_USED_BY_CALLER as a single chunk
|
|
||||||
+ without any probing. */
|
|
||||||
+ gcc_assert (size >= guard_size - guard_used_by_caller);
|
|
||||||
+ aarch64_sub_sp (temp1, temp2, guard_size - guard_used_by_caller, true);
|
|
||||||
+ HOST_WIDE_INT orig_size = size;
|
|
||||||
+ size -= (guard_size - guard_used_by_caller);
|
|
||||||
+
|
|
||||||
+ HOST_WIDE_INT rounded_size = size & -probe_interval;
|
|
||||||
+ HOST_WIDE_INT residual = size - rounded_size;
|
|
||||||
+
|
|
||||||
+ /* We can handle a small number of allocations/probes inline. Otherwise
|
|
||||||
+ punt to a loop. */
|
|
||||||
+ if (rounded_size && rounded_size <= 4 * probe_interval)
|
|
||||||
+ {
|
|
||||||
+ /* We don't use aarch64_sub_sp here because we don't want to
|
|
||||||
+ repeatedly load TEMP1. */
|
|
||||||
+ rtx step = GEN_INT (-probe_interval);
|
|
||||||
+ if (probe_interval > ARITH_FACTOR)
|
|
||||||
+ {
|
|
||||||
+ emit_move_insn (temp1, step);
|
|
||||||
+ step = temp1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (HOST_WIDE_INT i = 0; i < rounded_size; i += probe_interval)
|
|
||||||
+ {
|
|
||||||
+ rtx_insn *insn = emit_insn (gen_add2_insn (stack_pointer_rtx, step));
|
|
||||||
+ add_reg_note (insn, REG_STACK_CHECK, const0_rtx);
|
|
||||||
+
|
|
||||||
+ if (probe_interval > ARITH_FACTOR)
|
|
||||||
+ {
|
|
||||||
+ RTX_FRAME_RELATED_P (insn) = 1;
|
|
||||||
+ rtx adj = plus_constant (Pmode, stack_pointer_rtx, -probe_interval);
|
|
||||||
+ add_reg_note (insn, REG_CFA_ADJUST_CFA,
|
|
||||||
+ gen_rtx_SET (stack_pointer_rtx, adj));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
|
|
||||||
+ (probe_interval
|
|
||||||
+ - GET_MODE_SIZE (word_mode))));
|
|
||||||
+ emit_insn (gen_blockage ());
|
|
||||||
+ }
|
|
||||||
+ dump_stack_clash_frame_info (PROBE_INLINE, size != rounded_size);
|
|
||||||
+ }
|
|
||||||
+ else if (rounded_size)
|
|
||||||
+ {
|
|
||||||
+ /* Compute the ending address. */
|
|
||||||
+ unsigned int scratchreg = REGNO (temp1);
|
|
||||||
+ emit_move_insn (temp1, GEN_INT (-rounded_size));
|
|
||||||
+ rtx_insn *insn
|
|
||||||
+ = emit_insn (gen_add3_insn (temp1, stack_pointer_rtx, temp1));
|
|
||||||
+
|
|
||||||
+ /* For the initial allocation, we don't have a frame pointer
|
|
||||||
+ set up, so we always need CFI notes. If we're doing the
|
|
||||||
+ final allocation, then we may have a frame pointer, in which
|
|
||||||
+ case it is the CFA, otherwise we need CFI notes.
|
|
||||||
+
|
|
||||||
+ We can determine which allocation we are doing by looking at
|
|
||||||
+ the temporary register. IP0 is the initial allocation, IP1
|
|
||||||
+ is the final allocation. */
|
|
||||||
+ if (scratchreg == IP0_REGNUM || !frame_pointer_needed)
|
|
||||||
+ {
|
|
||||||
+ /* We want the CFA independent of the stack pointer for the
|
|
||||||
+ duration of the loop. */
|
|
||||||
+ add_reg_note (insn, REG_CFA_DEF_CFA,
|
|
||||||
+ plus_constant (Pmode, temp1,
|
|
||||||
+ (rounded_size + (orig_size - size))));
|
|
||||||
+ RTX_FRAME_RELATED_P (insn) = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* This allocates and probes the stack.
|
|
||||||
+
|
|
||||||
+ It also probes at a 4k interval regardless of the value of
|
|
||||||
+ PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL. */
|
|
||||||
+ insn = emit_insn (gen_probe_stack_range (stack_pointer_rtx,
|
|
||||||
+ stack_pointer_rtx, temp1));
|
|
||||||
+
|
|
||||||
+ /* Now reset the CFA register if needed. */
|
|
||||||
+ if (scratchreg == IP0_REGNUM || !frame_pointer_needed)
|
|
||||||
+ {
|
|
||||||
+ add_reg_note (insn, REG_CFA_DEF_CFA,
|
|
||||||
+ plus_constant (Pmode, stack_pointer_rtx,
|
|
||||||
+ (rounded_size + (orig_size - size))));
|
|
||||||
+ RTX_FRAME_RELATED_P (insn) = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ emit_insn (gen_blockage ());
|
|
||||||
+ dump_stack_clash_frame_info (PROBE_LOOP, size != rounded_size);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ dump_stack_clash_frame_info (PROBE_INLINE, size != rounded_size);
|
|
||||||
+
|
|
||||||
+ /* Handle any residuals.
|
|
||||||
+ Note that any residual must be probed. */
|
|
||||||
+ if (residual)
|
|
||||||
+ {
|
|
||||||
+ aarch64_sub_sp (temp1, temp2, residual, true);
|
|
||||||
+ add_reg_note (get_last_insn (), REG_STACK_CHECK, const0_rtx);
|
|
||||||
+ emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
|
|
||||||
+ (residual - GET_MODE_SIZE (word_mode))));
|
|
||||||
+ emit_insn (gen_blockage ());
|
|
||||||
+ }
|
|
||||||
+ return;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Add a REG_CFA_EXPRESSION note to INSN to say that register REG
|
|
||||||
is saved at BASE + OFFSET. */
|
|
||||||
|
|
||||||
@@ -4686,7 +4820,54 @@ aarch64_expand_prologue (void)
|
|
||||||
rtx ip0_rtx = gen_rtx_REG (Pmode, IP0_REGNUM);
|
|
||||||
rtx ip1_rtx = gen_rtx_REG (Pmode, IP1_REGNUM);
|
|
||||||
|
|
||||||
- aarch64_sub_sp (ip0_rtx, ip1_rtx, initial_adjust, true);
|
|
||||||
+ /* We do not fully protect aarch64 against stack clash style attacks
|
|
||||||
+ as doing so would be prohibitively expensive with less utility over
|
|
||||||
+ time as newer compilers are deployed.
|
|
||||||
+
|
|
||||||
+ We assume the guard is at least 64k. Furthermore, we assume that
|
|
||||||
+ the caller has not pushed the stack pointer more than 1k into
|
|
||||||
+ the guard. A caller that pushes the stack pointer than 1k into
|
|
||||||
+ the guard is considered invalid.
|
|
||||||
+
|
|
||||||
+ Note that the caller's ability to push the stack pointer into the
|
|
||||||
+ guard is a function of the number and size of outgoing arguments and/or
|
|
||||||
+ dynamic stack allocations due to the mandatory save of the link register
|
|
||||||
+ in the caller's frame.
|
|
||||||
+
|
|
||||||
+ With those assumptions the callee can allocate up to 63k of stack
|
|
||||||
+ space without probing.
|
|
||||||
+
|
|
||||||
+ When probing is needed, we emit a probe at the start of the prologue
|
|
||||||
+ and every PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL bytes thereafter.
|
|
||||||
+
|
|
||||||
+ We have to track how much space has been allocated, but we do not
|
|
||||||
+ track stores into the stack as implicit probes except for the
|
|
||||||
+ fp/lr store. */
|
|
||||||
+ HOST_WIDE_INT guard_size
|
|
||||||
+ = 1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE);
|
|
||||||
+ HOST_WIDE_INT guard_used_by_caller = 1024;
|
|
||||||
+ if (flag_stack_clash_protection)
|
|
||||||
+ {
|
|
||||||
+ if (known_eq (frame_size, 0))
|
|
||||||
+ dump_stack_clash_frame_info (NO_PROBE_NO_FRAME, false);
|
|
||||||
+ else if (known_lt (initial_adjust, guard_size - guard_used_by_caller)
|
|
||||||
+ && known_lt (final_adjust, guard_size - guard_used_by_caller))
|
|
||||||
+ dump_stack_clash_frame_info (NO_PROBE_SMALL_FRAME, true);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* In theory we should never have both an initial adjustment
|
|
||||||
+ and a callee save adjustment. Verify that is the case since the
|
|
||||||
+ code below does not handle it for -fstack-clash-protection. */
|
|
||||||
+ gcc_assert (known_eq (initial_adjust, 0) || callee_adjust == 0);
|
|
||||||
+
|
|
||||||
+ /* Only probe if the initial adjustment is larger than the guard
|
|
||||||
+ less the amount of the guard reserved for use by the caller's
|
|
||||||
+ outgoing args. */
|
|
||||||
+ if (flag_stack_clash_protection
|
|
||||||
+ && maybe_ge (initial_adjust, guard_size - guard_used_by_caller))
|
|
||||||
+ aarch64_allocate_and_probe_stack_space (ip0_rtx, ip1_rtx, initial_adjust);
|
|
||||||
+ else
|
|
||||||
+ aarch64_sub_sp (ip0_rtx, ip1_rtx, initial_adjust, true);
|
|
||||||
|
|
||||||
if (callee_adjust != 0)
|
|
||||||
aarch64_push_regs (reg1, reg2, callee_adjust);
|
|
||||||
@@ -4742,7 +4923,31 @@ aarch64_expand_prologue (void)
|
|
||||||
callee_adjust != 0 || emit_frame_chain);
|
|
||||||
aarch64_save_callee_saves (DFmode, callee_offset, V0_REGNUM, V31_REGNUM,
|
|
||||||
callee_adjust != 0 || emit_frame_chain);
|
|
||||||
- aarch64_sub_sp (ip1_rtx, ip0_rtx, final_adjust, !frame_pointer_needed);
|
|
||||||
+
|
|
||||||
+ /* We may need to probe the final adjustment as well. */
|
|
||||||
+ if (flag_stack_clash_protection && maybe_ne (final_adjust, 0))
|
|
||||||
+ {
|
|
||||||
+ /* First probe if the final adjustment is larger than the guard size
|
|
||||||
+ less the amount of the guard reserved for use by the caller's
|
|
||||||
+ outgoing args. */
|
|
||||||
+ if (maybe_ge (final_adjust, guard_size - guard_used_by_caller))
|
|
||||||
+ aarch64_allocate_and_probe_stack_space (ip1_rtx, ip0_rtx,
|
|
||||||
+ final_adjust);
|
|
||||||
+ else
|
|
||||||
+ aarch64_sub_sp (ip1_rtx, ip0_rtx, final_adjust, !frame_pointer_needed);
|
|
||||||
+
|
|
||||||
+ /* We must also probe if the final adjustment is larger than the guard
|
|
||||||
+ that is assumed used by the caller. This may be sub-optimal. */
|
|
||||||
+ if (maybe_ge (final_adjust, guard_used_by_caller))
|
|
||||||
+ {
|
|
||||||
+ if (dump_file)
|
|
||||||
+ fprintf (dump_file,
|
|
||||||
+ "Stack clash aarch64 large outgoing arg, probing\n");
|
|
||||||
+ emit_stack_probe (stack_pointer_rtx);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ aarch64_sub_sp (ip1_rtx, ip0_rtx, final_adjust, !frame_pointer_needed);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return TRUE if we can use a simple_return insn.
|
|
||||||
@@ -10476,6 +10681,12 @@ aarch64_override_options_internal (struct gcc_options *opts)
|
|
||||||
&& opts->x_optimize >= aarch64_tune_params.prefetch->default_opt_level)
|
|
||||||
opts->x_flag_prefetch_loop_arrays = 1;
|
|
||||||
|
|
||||||
+ /* We assume the guard page is 64k. */
|
|
||||||
+ maybe_set_param_value (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
|
|
||||||
+ 16,
|
|
||||||
+ opts->x_param_values,
|
|
||||||
+ global_options_set.x_param_values);
|
|
||||||
+
|
|
||||||
aarch64_override_options_after_change_1 (opts);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -17161,6 +17372,28 @@ aarch64_sched_can_speculate_insn (rtx_insn *insn)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* It has been decided that to allow up to 1kb of outgoing argument
|
|
||||||
+ space to be allocated w/o probing. If more than 1kb of outgoing
|
|
||||||
+ argment space is allocated, then it must be probed and the last
|
|
||||||
+ probe must occur no more than 1kbyte away from the end of the
|
|
||||||
+ allocated space.
|
|
||||||
+
|
|
||||||
+ This implies that the residual part of an alloca allocation may
|
|
||||||
+ need probing in cases where the generic code might not otherwise
|
|
||||||
+ think a probe is needed.
|
|
||||||
+
|
|
||||||
+ This target hook returns TRUE when allocating RESIDUAL bytes of
|
|
||||||
+ alloca space requires an additional probe, otherwise FALSE is
|
|
||||||
+ returned. */
|
|
||||||
+
|
|
||||||
+static bool
|
|
||||||
+aarch64_stack_clash_protection_final_dynamic_probe (rtx residual)
|
|
||||||
+{
|
|
||||||
+ return (residual == CONST0_RTX (Pmode)
|
|
||||||
+ || GET_CODE (residual) != CONST_INT
|
|
||||||
+ || INTVAL (residual) >= 1024);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Implement TARGET_COMPUTE_PRESSURE_CLASSES. */
|
|
||||||
|
|
||||||
static int
|
|
||||||
@@ -17669,6 +17902,10 @@ aarch64_libgcc_floating_mode_supported_p
|
|
||||||
#undef TARGET_CONSTANT_ALIGNMENT
|
|
||||||
#define TARGET_CONSTANT_ALIGNMENT aarch64_constant_alignment
|
|
||||||
|
|
||||||
+#undef TARGET_STACK_CLASH_PROTECTION_FINAL_DYNAMIC_PROBE
|
|
||||||
+#define TARGET_STACK_CLASH_PROTECTION_FINAL_DYNAMIC_PROBE \
|
|
||||||
+ aarch64_stack_clash_protection_final_dynamic_probe
|
|
||||||
+
|
|
||||||
#undef TARGET_COMPUTE_PRESSURE_CLASSES
|
|
||||||
#define TARGET_COMPUTE_PRESSURE_CLASSES aarch64_compute_pressure_classes
|
|
||||||
|
|
||||||
--- gcc/config/aarch64/aarch64.md
|
|
||||||
+++ gcc/config/aarch64/aarch64.md
|
|
||||||
@@ -5812,7 +5812,7 @@
|
|
||||||
)
|
|
||||||
|
|
||||||
(define_insn "probe_stack_range"
|
|
||||||
- [(set (match_operand:DI 0 "register_operand" "=r")
|
|
||||||
+ [(set (match_operand:DI 0 "register_operand" "=rk")
|
|
||||||
(unspec_volatile:DI [(match_operand:DI 1 "register_operand" "0")
|
|
||||||
(match_operand:DI 2 "register_operand" "r")]
|
|
||||||
UNSPECV_PROBE_STACK_RANGE))]
|
|
||||||
--- gcc/testsuite/gcc.target/aarch64/stack-check-12.c
|
|
||||||
+++ gcc/testsuite/gcc.target/aarch64/stack-check-12.c
|
|
||||||
@@ -0,0 +1,20 @@
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=12" } */
|
|
||||||
+/* { dg-require-effective-target supports_stack_clash_protection } */
|
|
||||||
+
|
|
||||||
+extern void arf (unsigned long int *, unsigned long int *);
|
|
||||||
+void
|
|
||||||
+frob ()
|
|
||||||
+{
|
|
||||||
+ unsigned long int num[1000];
|
|
||||||
+ unsigned long int den[1000];
|
|
||||||
+ arf (den, num);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* This verifies that the scheduler did not break the dependencies
|
|
||||||
+ by adjusting the offsets within the probe and that the scheduler
|
|
||||||
+ did not reorder around the stack probes. */
|
|
||||||
+/* { dg-final { scan-assembler-times "sub\\tsp, sp, #4096\\n\\tstr\\txzr, .sp, 4088." 3 } } */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+
|
|
||||||
--- gcc/testsuite/gcc.target/aarch64/stack-check-13.c
|
|
||||||
+++ gcc/testsuite/gcc.target/aarch64/stack-check-13.c
|
|
||||||
@@ -0,0 +1,28 @@
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=12" } */
|
|
||||||
+/* { dg-require-effective-target supports_stack_clash_protection } */
|
|
||||||
+
|
|
||||||
+#define ARG32(X) X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X
|
|
||||||
+#define ARG192(X) ARG32(X),ARG32(X),ARG32(X),ARG32(X),ARG32(X),ARG32(X)
|
|
||||||
+void out1(ARG192(__int128));
|
|
||||||
+int t1(int);
|
|
||||||
+
|
|
||||||
+int t3(int x)
|
|
||||||
+{
|
|
||||||
+ if (x < 1000)
|
|
||||||
+ return t1 (x) + 1;
|
|
||||||
+
|
|
||||||
+ out1 (ARG192(1));
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* This test creates a large (> 1k) outgoing argument area that needs
|
|
||||||
+ to be probed. We don't test the exact size of the space or the
|
|
||||||
+ exact offset to make the test a little less sensitive to trivial
|
|
||||||
+ output changes. */
|
|
||||||
+/* { dg-final { scan-assembler-times "sub\\tsp, sp, #....\\n\\tstr\\txzr, \\\[sp" 1 } } */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+
|
|
||||||
--- gcc/testsuite/gcc.target/aarch64/stack-check-14.c
|
|
||||||
+++ gcc/testsuite/gcc.target/aarch64/stack-check-14.c
|
|
||||||
@@ -0,0 +1,25 @@
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=12" } */
|
|
||||||
+/* { dg-require-effective-target supports_stack_clash_protection } */
|
|
||||||
+
|
|
||||||
+int t1(int);
|
|
||||||
+
|
|
||||||
+int t2(int x)
|
|
||||||
+{
|
|
||||||
+ char *p = __builtin_alloca (4050);
|
|
||||||
+ x = t1 (x);
|
|
||||||
+ return p[x];
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* This test has a constant sized alloca that is smaller than the
|
|
||||||
+ probe interval. But it actually requires two probes instead
|
|
||||||
+ of one because of the optimistic assumptions we made in the
|
|
||||||
+ aarch64 prologue code WRT probing state.
|
|
||||||
+
|
|
||||||
+ The form can change quite a bit so we just check for two
|
|
||||||
+ probes without looking at the actual address. */
|
|
||||||
+/* { dg-final { scan-assembler-times "str\\txzr," 2 } } */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+
|
|
||||||
--- gcc/testsuite/gcc.target/aarch64/stack-check-15.c
|
|
||||||
+++ gcc/testsuite/gcc.target/aarch64/stack-check-15.c
|
|
||||||
@@ -0,0 +1,24 @@
|
|
||||||
+/* { dg-do compile } */
|
|
||||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=12" } */
|
|
||||||
+/* { dg-require-effective-target supports_stack_clash_protection } */
|
|
||||||
+
|
|
||||||
+int t1(int);
|
|
||||||
+
|
|
||||||
+int t2(int x)
|
|
||||||
+{
|
|
||||||
+ char *p = __builtin_alloca (x);
|
|
||||||
+ x = t1 (x);
|
|
||||||
+ return p[x];
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* This test has a variable sized alloca. It requires 3 probes.
|
|
||||||
+ One in the loop, one for the residual and at the end of the
|
|
||||||
+ alloca area.
|
|
||||||
+
|
|
||||||
+ The form can change quite a bit so we just check for two
|
|
||||||
+ probes without looking at the actual address. */
|
|
||||||
+/* { dg-final { scan-assembler-times "str\\txzr," 3 } } */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+
|
|
||||||
--- gcc/testsuite/lib/target-supports.exp
|
|
||||||
+++ gcc/testsuite/lib/target-supports.exp
|
|
||||||
@@ -9201,14 +9201,9 @@ proc check_effective_target_autoincdec { } {
|
|
||||||
#
|
|
||||||
proc check_effective_target_supports_stack_clash_protection { } {
|
|
||||||
|
|
||||||
- # Temporary until the target bits are fully ACK'd.
|
|
||||||
-# if { [istarget aarch*-*-*] } {
|
|
||||||
-# return 1
|
|
||||||
-# }
|
|
||||||
-
|
|
||||||
if { [istarget x86_64-*-*] || [istarget i?86-*-*]
|
|
||||||
|| [istarget powerpc*-*-*] || [istarget rs6000*-*-*]
|
|
||||||
- || [istarget s390*-*-*] } {
|
|
||||||
+ || [istarget aarch64*-**] || [istarget s390*-*-*] } {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
@@ -9217,9 +9212,9 @@ proc check_effective_target_supports_stack_clash_protection { } {
|
|
||||||
# Return 1 if the target creates a frame pointer for non-leaf functions
|
|
||||||
# Note we ignore cases where we apply tail call optimization here.
|
|
||||||
proc check_effective_target_frame_pointer_for_non_leaf { } {
|
|
||||||
- if { [istarget aarch*-*-*] } {
|
|
||||||
- return 1
|
|
||||||
- }
|
|
||||||
+# if { [istarget aarch*-*-*] } {
|
|
||||||
+# return 1
|
|
||||||
+# }
|
|
||||||
|
|
||||||
# Solaris/x86 defaults to -fno-omit-frame-pointer.
|
|
||||||
if { [istarget i?86-*-solaris*] || [istarget x86_64-*-solaris*] } {
|
|
@ -1,11 +0,0 @@
|
|||||||
--- nvptx-tools/nvptx-as.c.jj 2017-01-20 12:40:18.000000000 +0100
|
|
||||||
+++ nvptx-tools/nvptx-as.c 2017-01-20 12:43:53.864271442 +0100
|
|
||||||
@@ -939,7 +939,7 @@ fork_execute (const char *prog, char *co
|
|
||||||
fatal_error ("%s: %m", errmsg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- fatal_error (errmsg);
|
|
||||||
+ fatal_error ("%s", errmsg);
|
|
||||||
}
|
|
||||||
do_wait (prog, pex);
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
--- nvptx-tools/configure.ac.jj 2017-01-13 12:48:31.000000000 +0100
|
|
||||||
+++ nvptx-tools/configure.ac 2017-05-03 10:26:57.076092259 +0200
|
|
||||||
@@ -66,6 +66,8 @@ CPPFLAGS=$save_CPPFLAGS
|
|
||||||
LDFLAGS=$save_LDFLAGS
|
|
||||||
LIBS=$save_LIBS
|
|
||||||
|
|
||||||
+AC_CHECK_DECLS(getopt)
|
|
||||||
+
|
|
||||||
AC_CONFIG_SUBDIRS([libiberty])
|
|
||||||
AC_CONFIG_FILES([Makefile dejagnu.exp])
|
|
||||||
AC_OUTPUT
|
|
||||||
--- nvptx-tools/configure.jj 2017-01-13 12:48:54.000000000 +0100
|
|
||||||
+++ nvptx-tools/configure 2017-05-03 10:27:13.503876809 +0200
|
|
||||||
@@ -3963,6 +3963,18 @@ CPPFLAGS=$save_CPPFLAGS
|
|
||||||
LDFLAGS=$save_LDFLAGS
|
|
||||||
LIBS=$save_LIBS
|
|
||||||
|
|
||||||
+ac_fn_c_check_decl "$LINENO" "getopt" "ac_cv_have_decl_getopt" "$ac_includes_default"
|
|
||||||
+if test "x$ac_cv_have_decl_getopt" = x""yes; then :
|
|
||||||
+ ac_have_decl=1
|
|
||||||
+else
|
|
||||||
+ ac_have_decl=0
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define HAVE_DECL_GETOPT $ac_have_decl
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
|
|
||||||
subdirs="$subdirs libiberty"
|
|
@ -1,947 +0,0 @@
|
|||||||
--- nvptx-tools/configure.ac
|
|
||||||
+++ nvptx-tools/configure.ac
|
|
||||||
@@ -51,6 +51,7 @@ LIBS="$LIBS -lcuda"
|
|
||||||
AC_CHECK_FUNCS([[cuGetErrorName] [cuGetErrorString]])
|
|
||||||
AC_CHECK_DECLS([[cuGetErrorName], [cuGetErrorString]],
|
|
||||||
[], [], [[#include <cuda.h>]])
|
|
||||||
+AC_CHECK_HEADERS(unistd.h sys/stat.h)
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for extra programs to build requiring -lcuda])
|
|
||||||
NVPTX_RUN=
|
|
||||||
--- nvptx-tools/include/libiberty.h
|
|
||||||
+++ nvptx-tools/include/libiberty.h
|
|
||||||
@@ -390,6 +390,17 @@ extern void hex_init (void);
|
|
||||||
/* Save files used for communication between processes. */
|
|
||||||
#define PEX_SAVE_TEMPS 0x4
|
|
||||||
|
|
||||||
+/* Max number of alloca bytes per call before we must switch to malloc.
|
|
||||||
+
|
|
||||||
+ ?? Swiped from gnulib's regex_internal.h header. Is this actually
|
|
||||||
+ the case? This number seems arbitrary, though sane.
|
|
||||||
+
|
|
||||||
+ The OS usually guarantees only one guard page at the bottom of the stack,
|
|
||||||
+ and a page size can be as small as 4096 bytes. So we cannot safely
|
|
||||||
+ allocate anything larger than 4096 bytes. Also care for the possibility
|
|
||||||
+ of a few compiler-allocated temporary stack slots. */
|
|
||||||
+#define MAX_ALLOCA_SIZE 4032
|
|
||||||
+
|
|
||||||
/* Prepare to execute one or more programs, with standard output of
|
|
||||||
each program fed to standard input of the next.
|
|
||||||
FLAGS As above.
|
|
||||||
--- nvptx-tools/nvptx-as.c
|
|
||||||
+++ nvptx-tools/nvptx-as.c
|
|
||||||
@@ -30,6 +30,9 @@
|
|
||||||
#include <string.h>
|
|
||||||
#include <wait.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
+#ifdef HAVE_SYS_STAT_H
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+#endif
|
|
||||||
#include <errno.h>
|
|
||||||
#define obstack_chunk_alloc malloc
|
|
||||||
#define obstack_chunk_free free
|
|
||||||
@@ -42,6 +45,38 @@
|
|
||||||
|
|
||||||
#include "version.h"
|
|
||||||
|
|
||||||
+#ifndef R_OK
|
|
||||||
+#define R_OK 4
|
|
||||||
+#define W_OK 2
|
|
||||||
+#define X_OK 1
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#ifndef DIR_SEPARATOR
|
|
||||||
+# define DIR_SEPARATOR '/'
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#if defined (_WIN32) || defined (__MSDOS__) \
|
|
||||||
+ || defined (__DJGPP__) || defined (__OS2__)
|
|
||||||
+# define HAVE_DOS_BASED_FILE_SYSTEM
|
|
||||||
+# define HAVE_HOST_EXECUTABLE_SUFFIX
|
|
||||||
+# define HOST_EXECUTABLE_SUFFIX ".exe"
|
|
||||||
+# ifndef DIR_SEPARATOR_2
|
|
||||||
+# define DIR_SEPARATOR_2 '\\'
|
|
||||||
+# endif
|
|
||||||
+# define PATH_SEPARATOR ';'
|
|
||||||
+#else
|
|
||||||
+# define PATH_SEPARATOR ':'
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#ifndef DIR_SEPARATOR_2
|
|
||||||
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
|
|
||||||
+#else
|
|
||||||
+# define IS_DIR_SEPARATOR(ch) \
|
|
||||||
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#define DIR_UP ".."
|
|
||||||
+
|
|
||||||
static const char *outname = NULL;
|
|
||||||
|
|
||||||
static void __attribute__ ((format (printf, 1, 2)))
|
|
||||||
@@ -816,7 +851,7 @@ traverse (void **slot, void *data)
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
-process (FILE *in, FILE *out)
|
|
||||||
+process (FILE *in, FILE *out, int verify, const char *outname)
|
|
||||||
{
|
|
||||||
symbol_table = htab_create (500, hash_string_hash, hash_string_eq,
|
|
||||||
NULL);
|
|
||||||
@@ -824,6 +859,18 @@ process (FILE *in, FILE *out)
|
|
||||||
const char *input = read_file (in);
|
|
||||||
Token *tok = tokenize (input);
|
|
||||||
|
|
||||||
+ /* By default, when ptxas is not in PATH, do minimalistic verification,
|
|
||||||
+ just require that the first non-comment directive is .version. */
|
|
||||||
+ if (verify < 0)
|
|
||||||
+ {
|
|
||||||
+ size_t i;
|
|
||||||
+ for (i = 0; tok[i].kind == K_comment; i++)
|
|
||||||
+ ;
|
|
||||||
+ if (tok[i].kind != K_dotted || !is_keyword (&tok[i], "version"))
|
|
||||||
+ fatal_error ("missing .version directive at start of file '%s'",
|
|
||||||
+ outname);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
do
|
|
||||||
tok = parse_file (tok);
|
|
||||||
while (tok->kind);
|
|
||||||
@@ -897,9 +944,83 @@ fork_execute (const char *prog, char *const *argv)
|
|
||||||
do_wait (prog, pex);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Determine if progname is available in PATH. */
|
|
||||||
+static bool
|
|
||||||
+program_available (const char *progname)
|
|
||||||
+{
|
|
||||||
+ char *temp = getenv ("PATH");
|
|
||||||
+ if (temp)
|
|
||||||
+ {
|
|
||||||
+ char *startp, *endp, *nstore, *alloc_ptr = NULL;
|
|
||||||
+ size_t prefixlen = strlen (temp) + 1;
|
|
||||||
+ size_t len;
|
|
||||||
+ if (prefixlen < 2)
|
|
||||||
+ prefixlen = 2;
|
|
||||||
+
|
|
||||||
+ len = prefixlen + strlen (progname) + 1;
|
|
||||||
+#ifdef HAVE_HOST_EXECUTABLE_SUFFIX
|
|
||||||
+ len += strlen (HOST_EXECUTABLE_SUFFIX);
|
|
||||||
+#endif
|
|
||||||
+ if (len < MAX_ALLOCA_SIZE)
|
|
||||||
+ nstore = (char *) alloca (len);
|
|
||||||
+ else
|
|
||||||
+ alloc_ptr = nstore = (char *) malloc (len);
|
|
||||||
+
|
|
||||||
+ startp = endp = temp;
|
|
||||||
+ while (1)
|
|
||||||
+ {
|
|
||||||
+ if (*endp == PATH_SEPARATOR || *endp == 0)
|
|
||||||
+ {
|
|
||||||
+ if (endp == startp)
|
|
||||||
+ {
|
|
||||||
+ nstore[0] = '.';
|
|
||||||
+ nstore[1] = DIR_SEPARATOR;
|
|
||||||
+ nstore[2] = '\0';
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ memcpy (nstore, startp, endp - startp);
|
|
||||||
+ if (! IS_DIR_SEPARATOR (endp[-1]))
|
|
||||||
+ {
|
|
||||||
+ nstore[endp - startp] = DIR_SEPARATOR;
|
|
||||||
+ nstore[endp - startp + 1] = 0;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ nstore[endp - startp] = 0;
|
|
||||||
+ }
|
|
||||||
+ strcat (nstore, progname);
|
|
||||||
+ if (! access (nstore, X_OK)
|
|
||||||
+#ifdef HAVE_HOST_EXECUTABLE_SUFFIX
|
|
||||||
+ || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK)
|
|
||||||
+#endif
|
|
||||||
+ )
|
|
||||||
+ {
|
|
||||||
+#if defined (HAVE_SYS_STAT_H) && defined (S_ISREG)
|
|
||||||
+ struct stat st;
|
|
||||||
+ if (stat (nstore, &st) >= 0 && S_ISREG (st.st_mode))
|
|
||||||
+#endif
|
|
||||||
+ {
|
|
||||||
+ free (alloc_ptr);
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (*endp == 0)
|
|
||||||
+ break;
|
|
||||||
+ endp = startp = endp + 1;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ endp++;
|
|
||||||
+ }
|
|
||||||
+ free (alloc_ptr);
|
|
||||||
+ }
|
|
||||||
+ return false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static struct option long_options[] = {
|
|
||||||
{"traditional-format", no_argument, 0, 0 },
|
|
||||||
{"save-temps", no_argument, 0, 0 },
|
|
||||||
+ {"verify", no_argument, 0, 0 },
|
|
||||||
{"no-verify", no_argument, 0, 0 },
|
|
||||||
{"help", no_argument, 0, 'h' },
|
|
||||||
{"version", no_argument, 0, 'V' },
|
|
||||||
@@ -912,7 +1033,7 @@ main (int argc, char **argv)
|
|
||||||
FILE *in = stdin;
|
|
||||||
FILE *out = stdout;
|
|
||||||
bool verbose __attribute__((unused)) = false;
|
|
||||||
- bool verify = true;
|
|
||||||
+ int verify = -1;
|
|
||||||
const char *smver = "sm_30";
|
|
||||||
|
|
||||||
int o;
|
|
||||||
@@ -923,7 +1044,9 @@ main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
if (option_index == 2)
|
|
||||||
- verify = false;
|
|
||||||
+ verify = 1;
|
|
||||||
+ else if (option_index == 3)
|
|
||||||
+ verify = 0;
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
verbose = true;
|
|
||||||
@@ -948,7 +1071,8 @@ Usage: nvptx-none-as [option...] [asmfile]\n\
|
|
||||||
Options:\n\
|
|
||||||
-o FILE Write output to FILE\n\
|
|
||||||
-v Be verbose\n\
|
|
||||||
+ --verify Do verify output is acceptable to ptxas\n\
|
|
||||||
--no-verify Do not verify output is acceptable to ptxas\n\
|
|
||||||
--help Print this help and exit\n\
|
|
||||||
--version Print version number and exit\n\
|
|
||||||
\n\
|
|
||||||
@@ -983,11 +1108,17 @@ This program has absolutely no warranty.\n",
|
|
||||||
if (!in)
|
|
||||||
fatal_error ("cannot open input ptx file");
|
|
||||||
|
|
||||||
- process (in, out);
|
|
||||||
- if (outname)
|
|
||||||
+ if (outname == NULL)
|
|
||||||
+ verify = 0;
|
|
||||||
+ else if (verify == -1)
|
|
||||||
+ if (program_available ("ptxas"))
|
|
||||||
+ verify = 1;
|
|
||||||
+
|
|
||||||
+ process (in, out, verify, outname);
|
|
||||||
+ if (outname)
|
|
||||||
fclose (out);
|
|
||||||
|
|
||||||
- if (verify && outname)
|
|
||||||
+ if (verify > 0)
|
|
||||||
{
|
|
||||||
struct obstack argv_obstack;
|
|
||||||
obstack_init (&argv_obstack);
|
|
||||||
--- nvptx-tools/configure
|
|
||||||
+++ nvptx-tools/configure
|
|
||||||
@@ -168,7 +168,8 @@ test x\$exitcode = x0 || exit 1"
|
|
||||||
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
|
|
||||||
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
|
|
||||||
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
|
|
||||||
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
|
|
||||||
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
|
|
||||||
+test \$(( 1 + 1 )) = 2 || exit 1"
|
|
||||||
if (eval "$as_required") 2>/dev/null; then :
|
|
||||||
as_have_required=yes
|
|
||||||
else
|
|
||||||
@@ -552,11 +553,50 @@ PACKAGE_URL=
|
|
||||||
|
|
||||||
ac_unique_file="nvptx-tools"
|
|
||||||
ac_unique_file="nvptx-as.c"
|
|
||||||
+# Factoring default headers for most tests.
|
|
||||||
+ac_includes_default="\
|
|
||||||
+#include <stdio.h>
|
|
||||||
+#ifdef HAVE_SYS_TYPES_H
|
|
||||||
+# include <sys/types.h>
|
|
||||||
+#endif
|
|
||||||
+#ifdef HAVE_SYS_STAT_H
|
|
||||||
+# include <sys/stat.h>
|
|
||||||
+#endif
|
|
||||||
+#ifdef STDC_HEADERS
|
|
||||||
+# include <stdlib.h>
|
|
||||||
+# include <stddef.h>
|
|
||||||
+#else
|
|
||||||
+# ifdef HAVE_STDLIB_H
|
|
||||||
+# include <stdlib.h>
|
|
||||||
+# endif
|
|
||||||
+#endif
|
|
||||||
+#ifdef HAVE_STRING_H
|
|
||||||
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
|
|
||||||
+# include <memory.h>
|
|
||||||
+# endif
|
|
||||||
+# include <string.h>
|
|
||||||
+#endif
|
|
||||||
+#ifdef HAVE_STRINGS_H
|
|
||||||
+# include <strings.h>
|
|
||||||
+#endif
|
|
||||||
+#ifdef HAVE_INTTYPES_H
|
|
||||||
+# include <inttypes.h>
|
|
||||||
+#endif
|
|
||||||
+#ifdef HAVE_STDINT_H
|
|
||||||
+# include <stdint.h>
|
|
||||||
+#endif
|
|
||||||
+#ifdef HAVE_UNISTD_H
|
|
||||||
+# include <unistd.h>
|
|
||||||
+#endif"
|
|
||||||
+
|
|
||||||
enable_option_checking=no
|
|
||||||
ac_subst_vars='LTLIBOBJS
|
|
||||||
LIBOBJS
|
|
||||||
subdirs
|
|
||||||
NVPTX_RUN
|
|
||||||
+EGREP
|
|
||||||
+GREP
|
|
||||||
+CPP
|
|
||||||
CUDA_DRIVER_LDFLAGS
|
|
||||||
CUDA_DRIVER_CPPFLAGS
|
|
||||||
AR
|
|
||||||
@@ -635,7 +675,8 @@ LIBS
|
|
||||||
CPPFLAGS
|
|
||||||
CXX
|
|
||||||
CXXFLAGS
|
|
||||||
-CCC'
|
|
||||||
+CCC
|
|
||||||
+CPP'
|
|
||||||
ac_subdirs_all='libiberty'
|
|
||||||
|
|
||||||
# Initialize some variables set by options.
|
|
||||||
@@ -1267,6 +1308,7 @@ Some influential environment variables:
|
|
||||||
you have headers in a nonstandard directory <include dir>
|
|
||||||
CXX C++ compiler command
|
|
||||||
CXXFLAGS C++ compiler flags
|
|
||||||
+ CPP C preprocessor
|
|
||||||
|
|
||||||
Use these variables to override the choices made by `configure' or to help
|
|
||||||
it to find libraries and programs with nonstandard names/locations.
|
|
||||||
@@ -1575,6 +1617,203 @@ $as_echo "$ac_res" >&6; }
|
|
||||||
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
||||||
|
|
||||||
} # ac_fn_c_check_decl
|
|
||||||
+
|
|
||||||
+# ac_fn_c_try_cpp LINENO
|
|
||||||
+# ----------------------
|
|
||||||
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
|
|
||||||
+ac_fn_c_try_cpp ()
|
|
||||||
+{
|
|
||||||
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
||||||
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
|
|
||||||
+case "(($ac_try" in
|
|
||||||
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
||||||
+ *) ac_try_echo=$ac_try;;
|
|
||||||
+esac
|
|
||||||
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
|
||||||
+$as_echo "$ac_try_echo"; } >&5
|
|
||||||
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
|
|
||||||
+ ac_status=$?
|
|
||||||
+ if test -s conftest.err; then
|
|
||||||
+ grep -v '^ *+' conftest.err >conftest.er1
|
|
||||||
+ cat conftest.er1 >&5
|
|
||||||
+ mv -f conftest.er1 conftest.err
|
|
||||||
+ fi
|
|
||||||
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
||||||
+ test $ac_status = 0; } >/dev/null && {
|
|
||||||
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
|
|
||||||
+ test ! -s conftest.err
|
|
||||||
+ }; then :
|
|
||||||
+ ac_retval=0
|
|
||||||
+else
|
|
||||||
+ $as_echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+ ac_retval=1
|
|
||||||
+fi
|
|
||||||
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
||||||
+ return $ac_retval
|
|
||||||
+
|
|
||||||
+} # ac_fn_c_try_cpp
|
|
||||||
+
|
|
||||||
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
|
|
||||||
+# -------------------------------------------------------
|
|
||||||
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
|
|
||||||
+# the include files in INCLUDES and setting the cache variable VAR
|
|
||||||
+# accordingly.
|
|
||||||
+ac_fn_c_check_header_mongrel ()
|
|
||||||
+{
|
|
||||||
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
||||||
+ if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
|
||||||
+$as_echo_n "checking for $2... " >&6; }
|
|
||||||
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
|
||||||
+ $as_echo_n "(cached) " >&6
|
|
||||||
+fi
|
|
||||||
+eval ac_res=\$$3
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
|
||||||
+$as_echo "$ac_res" >&6; }
|
|
||||||
+else
|
|
||||||
+ # Is the header compilable?
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
|
|
||||||
+$as_echo_n "checking $2 usability... " >&6; }
|
|
||||||
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+$4
|
|
||||||
+#include <$2>
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
+ ac_header_compiler=yes
|
|
||||||
+else
|
|
||||||
+ ac_header_compiler=no
|
|
||||||
+fi
|
|
||||||
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
|
|
||||||
+$as_echo "$ac_header_compiler" >&6; }
|
|
||||||
+
|
|
||||||
+# Is the header present?
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
|
|
||||||
+$as_echo_n "checking $2 presence... " >&6; }
|
|
||||||
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <$2>
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_cpp "$LINENO"; then :
|
|
||||||
+ ac_header_preproc=yes
|
|
||||||
+else
|
|
||||||
+ ac_header_preproc=no
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
|
|
||||||
+$as_echo "$ac_header_preproc" >&6; }
|
|
||||||
+
|
|
||||||
+# So? What about this header?
|
|
||||||
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
|
|
||||||
+ yes:no: )
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
|
|
||||||
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
|
|
||||||
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
|
|
||||||
+ ;;
|
|
||||||
+ no:yes:* )
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
|
|
||||||
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
|
|
||||||
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
|
|
||||||
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
|
|
||||||
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
|
|
||||||
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
|
|
||||||
+ ;;
|
|
||||||
+esac
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
|
||||||
+$as_echo_n "checking for $2... " >&6; }
|
|
||||||
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
|
||||||
+ $as_echo_n "(cached) " >&6
|
|
||||||
+else
|
|
||||||
+ eval "$3=\$ac_header_compiler"
|
|
||||||
+fi
|
|
||||||
+eval ac_res=\$$3
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
|
||||||
+$as_echo "$ac_res" >&6; }
|
|
||||||
+fi
|
|
||||||
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
||||||
+
|
|
||||||
+} # ac_fn_c_check_header_mongrel
|
|
||||||
+
|
|
||||||
+# ac_fn_c_try_run LINENO
|
|
||||||
+# ----------------------
|
|
||||||
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
|
|
||||||
+# that executables *can* be run.
|
|
||||||
+ac_fn_c_try_run ()
|
|
||||||
+{
|
|
||||||
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
||||||
+ if { { ac_try="$ac_link"
|
|
||||||
+case "(($ac_try" in
|
|
||||||
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
||||||
+ *) ac_try_echo=$ac_try;;
|
|
||||||
+esac
|
|
||||||
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
|
||||||
+$as_echo "$ac_try_echo"; } >&5
|
|
||||||
+ (eval "$ac_link") 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
||||||
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
|
|
||||||
+ { { case "(($ac_try" in
|
|
||||||
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
||||||
+ *) ac_try_echo=$ac_try;;
|
|
||||||
+esac
|
|
||||||
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
|
||||||
+$as_echo "$ac_try_echo"; } >&5
|
|
||||||
+ (eval "$ac_try") 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
||||||
+ test $ac_status = 0; }; }; then :
|
|
||||||
+ ac_retval=0
|
|
||||||
+else
|
|
||||||
+ $as_echo "$as_me: program exited with status $ac_status" >&5
|
|
||||||
+ $as_echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+ ac_retval=$ac_status
|
|
||||||
+fi
|
|
||||||
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
|
|
||||||
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
||||||
+ return $ac_retval
|
|
||||||
+
|
|
||||||
+} # ac_fn_c_try_run
|
|
||||||
+
|
|
||||||
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
|
|
||||||
+# -------------------------------------------------------
|
|
||||||
+# Tests whether HEADER exists and can be compiled using the include files in
|
|
||||||
+# INCLUDES, setting the cache variable VAR accordingly.
|
|
||||||
+ac_fn_c_check_header_compile ()
|
|
||||||
+{
|
|
||||||
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
|
||||||
+$as_echo_n "checking for $2... " >&6; }
|
|
||||||
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
|
||||||
+ $as_echo_n "(cached) " >&6
|
|
||||||
+else
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+$4
|
|
||||||
+#include <$2>
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
+ eval "$3=yes"
|
|
||||||
+else
|
|
||||||
+ eval "$3=no"
|
|
||||||
+fi
|
|
||||||
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+fi
|
|
||||||
+eval ac_res=\$$3
|
|
||||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
|
||||||
+$as_echo "$ac_res" >&6; }
|
|
||||||
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
|
||||||
+
|
|
||||||
+} # ac_fn_c_check_header_compile
|
|
||||||
cat >config.log <<_ACEOF
|
|
||||||
This file contains any messages produced by compilers while
|
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
|
||||||
@@ -3284,6 +3523,418 @@ cat >>confdefs.h <<_ACEOF
|
|
||||||
#define HAVE_DECL_CUGETERRORSTRING $ac_have_decl
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
+ac_ext=c
|
|
||||||
+ac_cpp='$CPP $CPPFLAGS'
|
|
||||||
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
||||||
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
||||||
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
|
|
||||||
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
|
|
||||||
+# On Suns, sometimes $CPP names a directory.
|
|
||||||
+if test -n "$CPP" && test -d "$CPP"; then
|
|
||||||
+ CPP=
|
|
||||||
+fi
|
|
||||||
+if test -z "$CPP"; then
|
|
||||||
+ if test "${ac_cv_prog_CPP+set}" = set; then :
|
|
||||||
+ $as_echo_n "(cached) " >&6
|
|
||||||
+else
|
|
||||||
+ # Double quotes because CPP needs to be expanded
|
|
||||||
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
|
|
||||||
+ do
|
|
||||||
+ ac_preproc_ok=false
|
|
||||||
+for ac_c_preproc_warn_flag in '' yes
|
|
||||||
+do
|
|
||||||
+ # Use a header file that comes with gcc, so configuring glibc
|
|
||||||
+ # with a fresh cross-compiler works.
|
|
||||||
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
||||||
+ # <limits.h> exists even on freestanding compilers.
|
|
||||||
+ # On the NeXT, cc -E runs the code through the compiler's parser,
|
|
||||||
+ # not just through cpp. "Syntax error" is here to catch this case.
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#ifdef __STDC__
|
|
||||||
+# include <limits.h>
|
|
||||||
+#else
|
|
||||||
+# include <assert.h>
|
|
||||||
+#endif
|
|
||||||
+ Syntax error
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_cpp "$LINENO"; then :
|
|
||||||
+
|
|
||||||
+else
|
|
||||||
+ # Broken: fails on valid input.
|
|
||||||
+continue
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+
|
|
||||||
+ # OK, works on sane cases. Now check whether nonexistent headers
|
|
||||||
+ # can be detected and how.
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <ac_nonexistent.h>
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_cpp "$LINENO"; then :
|
|
||||||
+ # Broken: success on invalid input.
|
|
||||||
+continue
|
|
||||||
+else
|
|
||||||
+ # Passes both tests.
|
|
||||||
+ac_preproc_ok=:
|
|
||||||
+break
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+
|
|
||||||
+done
|
|
||||||
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+if $ac_preproc_ok; then :
|
|
||||||
+ break
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+ done
|
|
||||||
+ ac_cv_prog_CPP=$CPP
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+ CPP=$ac_cv_prog_CPP
|
|
||||||
+else
|
|
||||||
+ ac_cv_prog_CPP=$CPP
|
|
||||||
+fi
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
|
|
||||||
+$as_echo "$CPP" >&6; }
|
|
||||||
+ac_preproc_ok=false
|
|
||||||
+for ac_c_preproc_warn_flag in '' yes
|
|
||||||
+do
|
|
||||||
+ # Use a header file that comes with gcc, so configuring glibc
|
|
||||||
+ # with a fresh cross-compiler works.
|
|
||||||
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
||||||
+ # <limits.h> exists even on freestanding compilers.
|
|
||||||
+ # On the NeXT, cc -E runs the code through the compiler's parser,
|
|
||||||
+ # not just through cpp. "Syntax error" is here to catch this case.
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#ifdef __STDC__
|
|
||||||
+# include <limits.h>
|
|
||||||
+#else
|
|
||||||
+# include <assert.h>
|
|
||||||
+#endif
|
|
||||||
+ Syntax error
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_cpp "$LINENO"; then :
|
|
||||||
+
|
|
||||||
+else
|
|
||||||
+ # Broken: fails on valid input.
|
|
||||||
+continue
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+
|
|
||||||
+ # OK, works on sane cases. Now check whether nonexistent headers
|
|
||||||
+ # can be detected and how.
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <ac_nonexistent.h>
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_cpp "$LINENO"; then :
|
|
||||||
+ # Broken: success on invalid input.
|
|
||||||
+continue
|
|
||||||
+else
|
|
||||||
+ # Passes both tests.
|
|
||||||
+ac_preproc_ok=:
|
|
||||||
+break
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+
|
|
||||||
+done
|
|
||||||
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+if $ac_preproc_ok; then :
|
|
||||||
+
|
|
||||||
+else
|
|
||||||
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
||||||
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
||||||
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
|
|
||||||
+See \`config.log' for more details." "$LINENO" 5; }
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+ac_ext=c
|
|
||||||
+ac_cpp='$CPP $CPPFLAGS'
|
|
||||||
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
||||||
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
||||||
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
|
|
||||||
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
|
|
||||||
+if test "${ac_cv_path_GREP+set}" = set; then :
|
|
||||||
+ $as_echo_n "(cached) " >&6
|
|
||||||
+else
|
|
||||||
+ if test -z "$GREP"; then
|
|
||||||
+ ac_path_GREP_found=false
|
|
||||||
+ # Loop through the user's path and test for each of PROGNAME-LIST
|
|
||||||
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
||||||
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
|
||||||
+do
|
|
||||||
+ IFS=$as_save_IFS
|
|
||||||
+ test -z "$as_dir" && as_dir=.
|
|
||||||
+ for ac_prog in grep ggrep; do
|
|
||||||
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
||||||
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
|
|
||||||
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
|
|
||||||
+# Check for GNU ac_path_GREP and select it if it is found.
|
|
||||||
+ # Check for GNU $ac_path_GREP
|
|
||||||
+case `"$ac_path_GREP" --version 2>&1` in
|
|
||||||
+*GNU*)
|
|
||||||
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
|
|
||||||
+*)
|
|
||||||
+ ac_count=0
|
|
||||||
+ $as_echo_n 0123456789 >"conftest.in"
|
|
||||||
+ while :
|
|
||||||
+ do
|
|
||||||
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
|
|
||||||
+ mv "conftest.tmp" "conftest.in"
|
|
||||||
+ cp "conftest.in" "conftest.nl"
|
|
||||||
+ $as_echo 'GREP' >> "conftest.nl"
|
|
||||||
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
|
||||||
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
|
||||||
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
|
|
||||||
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
|
|
||||||
+ # Best one so far, save it but keep looking for a better one
|
|
||||||
+ ac_cv_path_GREP="$ac_path_GREP"
|
|
||||||
+ ac_path_GREP_max=$ac_count
|
|
||||||
+ fi
|
|
||||||
+ # 10*(2^10) chars as input seems more than enough
|
|
||||||
+ test $ac_count -gt 10 && break
|
|
||||||
+ done
|
|
||||||
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
|
||||||
+esac
|
|
||||||
+
|
|
||||||
+ $ac_path_GREP_found && break 3
|
|
||||||
+ done
|
|
||||||
+ done
|
|
||||||
+ done
|
|
||||||
+IFS=$as_save_IFS
|
|
||||||
+ if test -z "$ac_cv_path_GREP"; then
|
|
||||||
+ as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
||||||
+ fi
|
|
||||||
+else
|
|
||||||
+ ac_cv_path_GREP=$GREP
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
|
|
||||||
+$as_echo "$ac_cv_path_GREP" >&6; }
|
|
||||||
+ GREP="$ac_cv_path_GREP"
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
|
|
||||||
+$as_echo_n "checking for egrep... " >&6; }
|
|
||||||
+if test "${ac_cv_path_EGREP+set}" = set; then :
|
|
||||||
+ $as_echo_n "(cached) " >&6
|
|
||||||
+else
|
|
||||||
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
|
|
||||||
+ then ac_cv_path_EGREP="$GREP -E"
|
|
||||||
+ else
|
|
||||||
+ if test -z "$EGREP"; then
|
|
||||||
+ ac_path_EGREP_found=false
|
|
||||||
+ # Loop through the user's path and test for each of PROGNAME-LIST
|
|
||||||
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
||||||
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
|
||||||
+do
|
|
||||||
+ IFS=$as_save_IFS
|
|
||||||
+ test -z "$as_dir" && as_dir=.
|
|
||||||
+ for ac_prog in egrep; do
|
|
||||||
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
||||||
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
|
|
||||||
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
|
|
||||||
+# Check for GNU ac_path_EGREP and select it if it is found.
|
|
||||||
+ # Check for GNU $ac_path_EGREP
|
|
||||||
+case `"$ac_path_EGREP" --version 2>&1` in
|
|
||||||
+*GNU*)
|
|
||||||
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
|
|
||||||
+*)
|
|
||||||
+ ac_count=0
|
|
||||||
+ $as_echo_n 0123456789 >"conftest.in"
|
|
||||||
+ while :
|
|
||||||
+ do
|
|
||||||
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
|
|
||||||
+ mv "conftest.tmp" "conftest.in"
|
|
||||||
+ cp "conftest.in" "conftest.nl"
|
|
||||||
+ $as_echo 'EGREP' >> "conftest.nl"
|
|
||||||
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
|
||||||
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
|
||||||
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
|
|
||||||
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
|
|
||||||
+ # Best one so far, save it but keep looking for a better one
|
|
||||||
+ ac_cv_path_EGREP="$ac_path_EGREP"
|
|
||||||
+ ac_path_EGREP_max=$ac_count
|
|
||||||
+ fi
|
|
||||||
+ # 10*(2^10) chars as input seems more than enough
|
|
||||||
+ test $ac_count -gt 10 && break
|
|
||||||
+ done
|
|
||||||
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
|
||||||
+esac
|
|
||||||
+
|
|
||||||
+ $ac_path_EGREP_found && break 3
|
|
||||||
+ done
|
|
||||||
+ done
|
|
||||||
+ done
|
|
||||||
+IFS=$as_save_IFS
|
|
||||||
+ if test -z "$ac_cv_path_EGREP"; then
|
|
||||||
+ as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
||||||
+ fi
|
|
||||||
+else
|
|
||||||
+ ac_cv_path_EGREP=$EGREP
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+ fi
|
|
||||||
+fi
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
|
|
||||||
+$as_echo "$ac_cv_path_EGREP" >&6; }
|
|
||||||
+ EGREP="$ac_cv_path_EGREP"
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
|
|
||||||
+$as_echo_n "checking for ANSI C header files... " >&6; }
|
|
||||||
+if test "${ac_cv_header_stdc+set}" = set; then :
|
|
||||||
+ $as_echo_n "(cached) " >&6
|
|
||||||
+else
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <stdarg.h>
|
|
||||||
+#include <string.h>
|
|
||||||
+#include <float.h>
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+
|
|
||||||
+ ;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
+ ac_cv_header_stdc=yes
|
|
||||||
+else
|
|
||||||
+ ac_cv_header_stdc=no
|
|
||||||
+fi
|
|
||||||
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+
|
|
||||||
+if test $ac_cv_header_stdc = yes; then
|
|
||||||
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <string.h>
|
|
||||||
+
|
|
||||||
+_ACEOF
|
|
||||||
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
||||||
+ $EGREP "memchr" >/dev/null 2>&1; then :
|
|
||||||
+
|
|
||||||
+else
|
|
||||||
+ ac_cv_header_stdc=no
|
|
||||||
+fi
|
|
||||||
+rm -f conftest*
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+if test $ac_cv_header_stdc = yes; then
|
|
||||||
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+
|
|
||||||
+_ACEOF
|
|
||||||
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
||||||
+ $EGREP "free" >/dev/null 2>&1; then :
|
|
||||||
+
|
|
||||||
+else
|
|
||||||
+ ac_cv_header_stdc=no
|
|
||||||
+fi
|
|
||||||
+rm -f conftest*
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+if test $ac_cv_header_stdc = yes; then
|
|
||||||
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
|
|
||||||
+ if test "$cross_compiling" = yes; then :
|
|
||||||
+ :
|
|
||||||
+else
|
|
||||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <ctype.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#if ((' ' & 0x0FF) == 0x020)
|
|
||||||
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
|
||||||
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
|
|
||||||
+#else
|
|
||||||
+# define ISLOWER(c) \
|
|
||||||
+ (('a' <= (c) && (c) <= 'i') \
|
|
||||||
+ || ('j' <= (c) && (c) <= 'r') \
|
|
||||||
+ || ('s' <= (c) && (c) <= 'z'))
|
|
||||||
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ for (i = 0; i < 256; i++)
|
|
||||||
+ if (XOR (islower (i), ISLOWER (i))
|
|
||||||
+ || toupper (i) != TOUPPER (i))
|
|
||||||
+ return 2;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+_ACEOF
|
|
||||||
+if ac_fn_c_try_run "$LINENO"; then :
|
|
||||||
+
|
|
||||||
+else
|
|
||||||
+ ac_cv_header_stdc=no
|
|
||||||
+fi
|
|
||||||
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
|
||||||
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+fi
|
|
||||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
|
|
||||||
+$as_echo "$ac_cv_header_stdc" >&6; }
|
|
||||||
+if test $ac_cv_header_stdc = yes; then
|
|
||||||
+
|
|
||||||
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
|
|
||||||
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
|
|
||||||
+ inttypes.h stdint.h unistd.h
|
|
||||||
+do :
|
|
||||||
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
|
|
||||||
+"
|
|
||||||
+eval as_val=\$$as_ac_Header
|
|
||||||
+ if test "x$as_val" = x""yes; then :
|
|
||||||
+ cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+for ac_header in unistd.h sys/stat.h
|
|
||||||
+do :
|
|
||||||
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
|
||||||
+eval as_val=\$$as_ac_Header
|
|
||||||
+ if test "x$as_val" = x""yes; then :
|
|
||||||
+ cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra programs to build requiring -lcuda" >&5
|
|
||||||
$as_echo_n "checking for extra programs to build requiring -lcuda... " >&6; }
|
|
6
sources
6
sources
@ -1,3 +1,3 @@
|
|||||||
SHA512 (gcc-8.1.1-20180502.tar.xz) = 037da465ab28fb5fc04a28e94c7a0914fae7d25175fe9041abc86c141cafbe6791bc98a13002efc9ca6c1f14022e34571891fd9188171a2d9138dfc70df1e6c3
|
SHA512 (gcc-10.0.1-20200216.tar.xz) = 56507e273b00e85ed4145e80df65d9b4e4791f23e7cb5d931f85b9420cbf3a7125ba49978dc73c2987c0a6101f741dc5a60a08cb3346d4c5082400cbcfcdd008
|
||||||
SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.xz) = 94f7089365296f7dfa485107b4143bebc850a81586f3460fd896bbbb6ba099a00217d4042133424fd2183b352132f4fd367e6a60599bdae2a26dfd48a77d0e04
|
SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 9ceea0b883185fe489724d54a7e909bb6ed4785fcadf80162033dc6a133e2657337175601278e4155d1f8fac275ff9c8a02572aea876166c608774c809f832e9
|
||||||
SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.xz) = a688cb12cf805950a5abbb13b52f45c81dbee98e310b7ed57ae20e76dbfa5964a16270148374a6426d177db71909d28360490f091c86a5d19d4faa5127beeee1
|
SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7
|
||||||
|
7
update-gcc.sh
Executable file
7
update-gcc.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
[ -d gcc-dir.tmp ] && echo gcc-dir.tmp already exists && exit 1
|
||||||
|
git clone --depth 1 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp
|
||||||
|
git --git-dir=gcc-dir.tmp/.git fetch --depth 1 origin $1
|
||||||
|
d=`date --iso | sed 's/-//g'`
|
||||||
|
git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-10.0.1-$d/ $1 | xz -9e > gcc-10.0.1-$d.tar.xz
|
||||||
|
rm -rf gcc-dir.tmp
|
Loading…
Reference in New Issue
Block a user