Compare commits
55 Commits
private-da
...
master
Author | SHA1 | Date |
---|---|---|
Jakub Jelinek | 891cef7d9b | |
Jakub Jelinek | 9bce8e2449 | |
Jakub Jelinek | 55f9b2f336 | |
Fedora Release Engineering | f8b6352429 | |
Jakub Jelinek | 5e141990fb | |
Jakub Jelinek | 912e74c756 | |
Jakub Jelinek | b84725ac52 | |
Jakub Jelinek | 7de85a2603 | |
Jakub Jelinek | 576d41c1c6 | |
Jakub Jelinek | 562d27c22f | |
Jakub Jelinek | 57a884df51 | |
Jakub Jelinek | 04dfce99db | |
Jakub Jelinek | b05570344e | |
Jakub Jelinek | 52eb664223 | |
Florian Weimer | 0d8c061e19 | |
Jerry James | 56772a9401 | |
Jerry James | 4110c03341 | |
Jerry James | 4c8c128cd0 | |
Miro Hrončok | f684732e50 | |
Jakub Jelinek | 4562ca924e | |
Fedora Release Engineering | 90028182f3 | |
Jakub Jelinek | 6919aa138f | |
Jakub Jelinek | 672c273c6d | |
Jakub Jelinek | 94498d7104 | |
Jakub Jelinek | 28742415b7 | |
Jakub Jelinek | f2dc6d80c8 | |
Jakub Jelinek | b2a5d6a477 | |
Jakub Jelinek | fd99b9378d | |
Jakub Jelinek | a3fcce8f5b | |
Jakub Jelinek | 84af04ddb6 | |
Jakub Jelinek | b6b1340286 | |
Jakub Jelinek | 84ce3f0d05 | |
Jakub Jelinek | 5c04074052 | |
Jakub Jelinek | 4d0e748417 | |
Jakub Jelinek | 1d6c11d8df | |
Jakub Jelinek | 843493ecf7 | |
Jakub Jelinek | bad9bc25a4 | |
Jakub Jelinek | f790525bec | |
Jakub Jelinek | fc147e70c0 | |
Jakub Jelinek | 8ccdd26200 | |
Jakub Jelinek | d1c6bd89f3 | |
Jakub Jelinek | e0c920a406 | |
Jakub Jelinek | d228ee264c | |
Jakub Jelinek | e6073613ef | |
Jakub Jelinek | f147a68289 | |
Jakub Jelinek | 7ee3a099fa | |
Jakub Jelinek | fe09f8496b | |
Jakub Jelinek | 16bcddd9d4 | |
Fedora Release Engineering | 7545ecb969 | |
Jakub Jelinek | a6c3c8f082 | |
Igor Gnatenko | d895623061 | |
Igor Gnatenko | a71fb3364e | |
Igor Gnatenko | db0aca6b64 | |
Jakub Jelinek | 215844b31b | |
Jakub Jelinek | 80dc8803df |
|
@ -1,61 +1,8 @@
|
|||
/gcc-7.0.1-20170126.tar.bz2
|
||||
/nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.bz2
|
||||
/nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.bz2
|
||||
/gcc-7.0.1-20170128.tar.bz2
|
||||
/gcc-7.0.1-20170131.tar.bz2
|
||||
/gcc-7.0.1-20170201.tar.bz2
|
||||
/gcc-7.0.1-20170204.tar.bz2
|
||||
/gcc-7.0.1-20170209.tar.bz2
|
||||
/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
|
||||
/gcc-8.1.1-20180620.tar.xz
|
||||
/gcc-8.1.1-20180626.tar.xz
|
||||
/gcc-8.1.1-20180712.tar.xz
|
||||
/gcc-8.2.1-20180726.tar.xz
|
||||
/gcc-8.2.1-20180801.tar.xz
|
||||
/gcc-8.2.1-20180905.tar.xz
|
||||
/gcc-8.2.1-20181011.tar.xz
|
||||
/gcc-8.2.1-20181105.tar.xz
|
||||
/gcc-8.2.1-20181215.tar.xz
|
||||
/gcc-8.2.1-20190109.tar.xz
|
||||
/gcc-9.0.0-20190119.tar.xz
|
||||
/gcc-9.0.0-20190121.tar.xz
|
||||
/gcc-10.0.1-20200118.tar.xz
|
||||
/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||
/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
||||
/gcc-10.0.1-20200121.tar.xz
|
||||
/gcc-10.0.1-20200123.tar.xz
|
||||
/gcc-10.0.1-20200126.tar.xz
|
||||
/gcc-10.0.1-20200130.tar.xz
|
||||
/gcc-10.0.1-20200216.tar.xz
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +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]),
|
||||
[],[enable_build_format_warnings=yes])
|
||||
AS_IF([test $enable_build_format_warnings = no],
|
||||
|
@ -13,7 +13,7 @@
|
|||
+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
|
||||
ACX_PROG_CXX_WARNING_OPTS(
|
||||
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 2017-02-25 12:42:50.041946391 +0100
|
||||
@@ -6647,7 +6647,7 @@ else
|
|
@ -58,7 +58,7 @@ libgomp/
|
|||
|
||||
enum lto_mode_d {
|
||||
LTO_MODE_NONE, /* Not doing LTO. */
|
||||
@@ -820,6 +821,12 @@ compile_offload_image (const char *targe
|
||||
@@ -822,6 +823,12 @@ compile_offload_image (const char *targe
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -70,8 +70,8 @@ libgomp/
|
|||
+
|
||||
if (!compiler)
|
||||
fatal_error (input_location,
|
||||
"could not find %s in %s (consider using '-B')\n", suffix + 1,
|
||||
@@ -883,6 +890,7 @@ compile_images_for_offload_targets (unsi
|
||||
"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);
|
||||
|
||||
int next_name_entry = 0;
|
||||
|
@ -79,7 +79,7 @@ libgomp/
|
|||
const char *compiler_path = getenv ("COMPILER_PATH");
|
||||
if (!compiler_path)
|
||||
goto out;
|
||||
@@ -895,18 +903,26 @@ 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
|
||||
it. */
|
||||
if (strcmp (names[i], "hsa") == 0)
|
||||
|
@ -95,7 +95,7 @@ libgomp/
|
|||
linker_opts, linker_opt_count);
|
||||
if (!offload_names[next_name_entry])
|
||||
- fatal_error (input_location,
|
||||
- "problem with building target image for %s\n", names[i]);
|
||||
- "problem with building target image for %s", names[i]);
|
||||
+ continue;
|
||||
next_name_entry++;
|
||||
}
|
|
@ -1,15 +1,15 @@
|
|||
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
||||
+++ 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.
|
||||
LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
|
||||
$(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
|
||||
-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||
+BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||
$(ZLIB)
|
||||
$(ZLIB) $(ZSTD_LIB)
|
||||
# Any system libraries needed just for GNAT.
|
||||
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)
|
||||
$(COMPILE) $<
|
||||
$(POSTCOMPILE)
|
|
@ -4,7 +4,7 @@
|
|||
<a class="link" href="https://www.fsf.org" target="_top">FSF
|
||||
</a>
|
||||
</p><p>
|
||||
+ Release 9.0.0
|
||||
+ Release 10.0.1
|
||||
+ </p><p>
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
|
@ -17,7 +17,7 @@
|
|||
</p><p>
|
||||
- The API documentation, rendered into HTML, can be viewed online
|
||||
+ The API documentation, rendered into HTML, can be viewed locally
|
||||
+ <a class="link" href="api/index.html" target="_top">for the 9.0.0 release</a>,
|
||||
+ <a class="link" href="api/index.html" target="_top">for the 10.0.1 release</a>,
|
||||
+ online
|
||||
<a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
|
||||
and
|
|
@ -12,7 +12,7 @@ these notes only confer that there is no other annobin markup.
|
|||
|
||||
--- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100
|
||||
+++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200
|
||||
@@ -244,6 +244,7 @@
|
||||
@@ -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 \
|
||||
|
@ -20,12 +20,11 @@ these notes only confer that there is no other annobin markup.
|
|||
$(INHIBIT_LIBC_CFLAGS)
|
||||
|
||||
# Additional options to use when compiling libgcc2.a.
|
||||
@@ -297,6 +298,7 @@
|
||||
@@ -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)
|
||||
$(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY)
|
||||
|
||||
# Extra flags to use when compiling crt{begin,end}.o.
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/87064
|
||||
* config/rs6000/vsx.md (*vsx_reduc_<VEC_reduc_name>_v2df_scalar):
|
||||
Disable for little endian.
|
||||
|
||||
--- gcc/config/rs6000/vsx.md.jj 2019-01-19 09:39:13.224924063 +0100
|
||||
+++ gcc/config/rs6000/vsx.md 2019-01-21 23:39:27.527774247 +0100
|
||||
@@ -4351,7 +4351,7 @@ (define_insn_and_split "*vsx_reduc_<VEC_
|
||||
(match_dup 1))
|
||||
(parallel [(const_int 1)])))
|
||||
(clobber (match_scratch:DF 2 "=0,0,&wd,&wa"))]
|
||||
- "VECTOR_UNIT_VSX_P (V2DFmode)"
|
||||
+ "BYTES_BIG_ENDIAN && VECTOR_UNIT_VSX_P (V2DFmode)"
|
||||
"#"
|
||||
""
|
||||
[(const_int 0)]
|
|
@ -1,18 +0,0 @@
|
|||
2019-01-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/88044
|
||||
* tree-ssa-loop-niter.c (number_of_iterations_cond): If condition
|
||||
is false in the first iteration, but !every_iteration, return false
|
||||
instead of true with niter->niter zero.
|
||||
|
||||
--- gcc/tree-ssa-loop-niter.c.jj 2019-01-10 11:43:02.254577008 +0100
|
||||
+++ gcc/tree-ssa-loop-niter.c 2019-01-18 19:51:00.245504728 +0100
|
||||
@@ -1824,6 +1824,8 @@ number_of_iterations_cond (struct loop *
|
||||
tree tem = fold_binary (code, boolean_type_node, iv0->base, iv1->base);
|
||||
if (tem && integer_zerop (tem))
|
||||
{
|
||||
+ if (!every_iteration)
|
||||
+ return false;
|
||||
niter->niter = build_int_cst (unsigned_type_for (type), 0);
|
||||
niter->max = 0;
|
||||
return true;
|
|
@ -1,122 +0,0 @@
|
|||
2019-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR bootstrap/88714
|
||||
* config/arm/ldrdstrd.md: If alias sets on the SImode MEMs are
|
||||
different, clear alias set on the DImode MEM. Clear MEM_EXPR.
|
||||
|
||||
* gcc.c-torture/execute/pr88714.c: New test.
|
||||
|
||||
--- gcc/config/arm/ldrdstrd.md.jj 2019-01-16 09:35:03.851334889 +0100
|
||||
+++ gcc/config/arm/ldrdstrd.md 2019-01-17 17:37:40.860791779 +0100
|
||||
@@ -39,6 +39,10 @@ (define_peephole2 ; ldrd
|
||||
/* In ARM state, the destination registers of LDRD/STRD must be
|
||||
consecutive. We emit DImode access. */
|
||||
operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));
|
||||
+ if (MEM_ALIAS_SET (operands[2])
|
||||
+ && MEM_ALIAS_SET (operands[2]) != MEM_ALIAS_SET (operands[3]))
|
||||
+ set_mem_alias_set (operands[2], 0);
|
||||
+ set_mem_expr (operands[2], NULL_TREE);
|
||||
operands[2] = adjust_address (operands[2], DImode, 0);
|
||||
/* Emit [(set (match_dup 0) (match_dup 2))] */
|
||||
emit_insn (gen_rtx_SET (operands[0], operands[2]));
|
||||
@@ -71,6 +75,10 @@ (define_peephole2 ; strd
|
||||
/* In ARM state, the destination registers of LDRD/STRD must be
|
||||
consecutive. We emit DImode access. */
|
||||
operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));
|
||||
+ if (MEM_ALIAS_SET (operands[2])
|
||||
+ && MEM_ALIAS_SET (operands[2]) != MEM_ALIAS_SET (operands[3]))
|
||||
+ set_mem_alias_set (operands[2], 0);
|
||||
+ set_mem_expr (operands[2], NULL_TREE);
|
||||
operands[2] = adjust_address (operands[2], DImode, 0);
|
||||
/* Emit [(set (match_dup 2) (match_dup 0))] */
|
||||
emit_insn (gen_rtx_SET (operands[2], operands[0]));
|
||||
@@ -106,6 +114,10 @@ (define_peephole2 ; strd of constants
|
||||
else if (TARGET_ARM)
|
||||
{
|
||||
rtx tmp = gen_rtx_REG (DImode, REGNO (operands[0]));
|
||||
+ if (MEM_ALIAS_SET (operands[2])
|
||||
+ && MEM_ALIAS_SET (operands[2]) != MEM_ALIAS_SET (operands[3]))
|
||||
+ set_mem_alias_set (operands[2], 0);
|
||||
+ set_mem_expr (operands[2], NULL_TREE);
|
||||
operands[2] = adjust_address (operands[2], DImode, 0);
|
||||
/* Emit the pattern:
|
||||
[(set (match_dup 0) (match_dup 4))
|
||||
@@ -149,6 +161,10 @@ (define_peephole2 ; strd of constants
|
||||
else if (TARGET_ARM)
|
||||
{
|
||||
rtx tmp = gen_rtx_REG (DImode, REGNO (operands[0]));
|
||||
+ if (MEM_ALIAS_SET (operands[2])
|
||||
+ && MEM_ALIAS_SET (operands[2]) != MEM_ALIAS_SET (operands[3]))
|
||||
+ set_mem_alias_set (operands[2], 0);
|
||||
+ set_mem_expr (operands[2], NULL_TREE);
|
||||
operands[2] = adjust_address (operands[2], DImode, 0);
|
||||
/* Emit the pattern
|
||||
[(set (match_dup 0) (match_dup 4))
|
||||
@@ -203,6 +219,10 @@ (define_peephole2 ; swap the destination
|
||||
else
|
||||
{
|
||||
operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));
|
||||
+ if (MEM_ALIAS_SET (operands[2])
|
||||
+ && MEM_ALIAS_SET (operands[2]) != MEM_ALIAS_SET (operands[3]))
|
||||
+ set_mem_alias_set (operands[2], 0);
|
||||
+ set_mem_expr (operands[2], NULL_TREE);
|
||||
operands[2] = adjust_address (operands[2], DImode, 0);
|
||||
}
|
||||
}
|
||||
@@ -238,6 +258,10 @@ (define_peephole2 ; swap the destination
|
||||
else
|
||||
{
|
||||
operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));
|
||||
+ if (MEM_ALIAS_SET (operands[2])
|
||||
+ && MEM_ALIAS_SET (operands[2]) != MEM_ALIAS_SET (operands[3]))
|
||||
+ set_mem_alias_set (operands[2], 0);
|
||||
+ set_mem_expr (operands[2], NULL_TREE);
|
||||
operands[2] = adjust_address (operands[2], DImode, 0);
|
||||
}
|
||||
}
|
||||
--- gcc/testsuite/gcc.c-torture/execute/pr88714.c.jj 2019-01-17 17:39:42.074828164 +0100
|
||||
+++ gcc/testsuite/gcc.c-torture/execute/pr88714.c 2019-01-17 17:21:26.810575783 +0100
|
||||
@@ -0,0 +1,43 @@
|
||||
+/* PR bootstrap/88714 */
|
||||
+
|
||||
+struct S { int a, b, c; int *d; };
|
||||
+struct T { int *e, *f, *g; } *t = 0;
|
||||
+int *o = 0;
|
||||
+
|
||||
+__attribute__((noipa))
|
||||
+void bar (int *x, int y, int z, int w)
|
||||
+{
|
||||
+ if (w == -1)
|
||||
+ {
|
||||
+ if (x != 0 || y != 0 || z != 0)
|
||||
+ __builtin_abort ();
|
||||
+ }
|
||||
+ else if (w != 0 || x != t->g || y != 0 || z != 12)
|
||||
+ __builtin_abort ();
|
||||
+}
|
||||
+
|
||||
+__attribute__((noipa)) void
|
||||
+foo (struct S *x, struct S *y, int *z, int w)
|
||||
+{
|
||||
+ *o = w;
|
||||
+ if (w)
|
||||
+ bar (0, 0, 0, -1);
|
||||
+ x->d = z;
|
||||
+ if (y->d)
|
||||
+ y->c = y->c + y->d[0];
|
||||
+ bar (t->g, 0, y->c, 0);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ int a[4] = { 8, 9, 10, 11 };
|
||||
+ struct S s = { 1, 2, 3, &a[0] };
|
||||
+ struct T u = { 0, 0, &a[3] };
|
||||
+ o = &a[2];
|
||||
+ t = &u;
|
||||
+ foo (&s, &s, &a[1], 5);
|
||||
+ if (s.c != 12 || s.d != &a[1])
|
||||
+ __builtin_abort ();
|
||||
+ return 0;
|
||||
+}
|
|
@ -1,77 +0,0 @@
|
|||
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/88904
|
||||
* cfgcleanup.c (thread_jump): Verify cond2 doesn't mention
|
||||
any nonequal registers before processing BB_END (b).
|
||||
|
||||
* gcc.c-torture/execute/pr88904.c: New test.
|
||||
|
||||
--- gcc/cfgcleanup.c.jj 2019-01-01 12:37:19.147942300 +0100
|
||||
+++ gcc/cfgcleanup.c 2019-01-21 16:45:52.576636305 +0100
|
||||
@@ -338,6 +338,13 @@ thread_jump (edge e, basic_block b)
|
||||
insn != NEXT_INSN (BB_END (b)) && !failed;
|
||||
insn = NEXT_INSN (insn))
|
||||
{
|
||||
+ /* cond2 must not mention any register that is not equal to the
|
||||
+ former block. Check this before processing that instruction,
|
||||
+ as BB_END (b) could contain also clobbers. */
|
||||
+ if (insn == BB_END (b)
|
||||
+ && mentions_nonequal_regs (cond2, nonequal))
|
||||
+ goto failed_exit;
|
||||
+
|
||||
if (INSN_P (insn))
|
||||
{
|
||||
rtx pat = PATTERN (insn);
|
||||
@@ -362,11 +369,6 @@ thread_jump (edge e, basic_block b)
|
||||
goto failed_exit;
|
||||
}
|
||||
|
||||
- /* cond2 must not mention any register that is not equal to the
|
||||
- former block. */
|
||||
- if (mentions_nonequal_regs (cond2, nonequal))
|
||||
- goto failed_exit;
|
||||
-
|
||||
EXECUTE_IF_SET_IN_REG_SET (nonequal, 0, i, rsi)
|
||||
goto failed_exit;
|
||||
|
||||
--- gcc/testsuite/gcc.c-torture/execute/pr88904.c.jj 2019-01-21 16:47:16.194265770 +0100
|
||||
+++ gcc/testsuite/gcc.c-torture/execute/pr88904.c 2019-01-21 16:46:59.278543027 +0100
|
||||
@@ -0,0 +1,38 @@
|
||||
+/* PR rtl-optimization/88904 */
|
||||
+
|
||||
+volatile int v;
|
||||
+
|
||||
+__attribute__((noipa)) void
|
||||
+bar (const char *x, const char *y, int z)
|
||||
+{
|
||||
+ if (!v)
|
||||
+ __builtin_abort ();
|
||||
+ asm volatile ("" : "+g" (x));
|
||||
+ asm volatile ("" : "+g" (y));
|
||||
+ asm volatile ("" : "+g" (z));
|
||||
+}
|
||||
+
|
||||
+#define my_assert(e) ((e) ? (void) 0 : bar (#e, __FILE__, __LINE__))
|
||||
+
|
||||
+typedef struct {
|
||||
+ unsigned M1;
|
||||
+ unsigned M2 : 1;
|
||||
+ int : 0;
|
||||
+ unsigned M3 : 1;
|
||||
+} S;
|
||||
+
|
||||
+S
|
||||
+foo ()
|
||||
+{
|
||||
+ S result = {0, 0, 1};
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ S ret = foo ();
|
||||
+ my_assert (ret.M2 == 0);
|
||||
+ my_assert (ret.M3 == 1);
|
||||
+ return 0;
|
||||
+}
|
|
@ -1,142 +0,0 @@
|
|||
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/88905
|
||||
* optabs.c (add_equal_note): Add op0_mode argument, use it instead of
|
||||
GET_MODE (op0).
|
||||
(expand_binop_directly, expand_doubleword_clz,
|
||||
expand_doubleword_popcount, expand_ctz, expand_ffs,
|
||||
expand_unop_direct, maybe_emit_unop_insn): Adjust callers.
|
||||
|
||||
* gcc.dg/pr88905.c: New test.
|
||||
|
||||
--- gcc/optabs.c.jj 2019-01-01 12:37:17.711965861 +0100
|
||||
+++ gcc/optabs.c 2019-01-21 13:56:18.263446049 +0100
|
||||
@@ -55,7 +55,7 @@ void debug_optab_libfuncs (void);
|
||||
|
||||
/* Add a REG_EQUAL note to the last insn in INSNS. TARGET is being set to
|
||||
the result of operation CODE applied to OP0 (and OP1 if it is a binary
|
||||
- operation).
|
||||
+ operation). OP0_MODE is OP0's mode.
|
||||
|
||||
If the last insn does not set TARGET, don't do anything, but return 1.
|
||||
|
||||
@@ -64,7 +64,8 @@ void debug_optab_libfuncs (void);
|
||||
try again, ensuring that TARGET is not one of the operands. */
|
||||
|
||||
static int
|
||||
-add_equal_note (rtx_insn *insns, rtx target, enum rtx_code code, rtx op0, rtx op1)
|
||||
+add_equal_note (rtx_insn *insns, rtx target, enum rtx_code code, rtx op0,
|
||||
+ rtx op1, machine_mode op0_mode)
|
||||
{
|
||||
rtx_insn *last_insn;
|
||||
rtx set;
|
||||
@@ -136,16 +137,16 @@ add_equal_note (rtx_insn *insns, rtx tar
|
||||
case POPCOUNT:
|
||||
case PARITY:
|
||||
case BSWAP:
|
||||
- if (GET_MODE (op0) != VOIDmode && GET_MODE (target) != GET_MODE (op0))
|
||||
+ if (op0_mode != VOIDmode && GET_MODE (target) != op0_mode)
|
||||
{
|
||||
- note = gen_rtx_fmt_e (code, GET_MODE (op0), copy_rtx (op0));
|
||||
- if (GET_MODE_UNIT_SIZE (GET_MODE (op0))
|
||||
+ note = gen_rtx_fmt_e (code, op0_mode, copy_rtx (op0));
|
||||
+ if (GET_MODE_UNIT_SIZE (op0_mode)
|
||||
> GET_MODE_UNIT_SIZE (GET_MODE (target)))
|
||||
note = simplify_gen_unary (TRUNCATE, GET_MODE (target),
|
||||
- note, GET_MODE (op0));
|
||||
+ note, op0_mode);
|
||||
else
|
||||
note = simplify_gen_unary (ZERO_EXTEND, GET_MODE (target),
|
||||
- note, GET_MODE (op0));
|
||||
+ note, op0_mode);
|
||||
break;
|
||||
}
|
||||
/* FALLTHRU */
|
||||
@@ -1127,7 +1128,7 @@ expand_binop_directly (enum insn_code ic
|
||||
if (INSN_P (pat) && NEXT_INSN (pat) != NULL_RTX
|
||||
&& ! add_equal_note (pat, ops[0].value,
|
||||
optab_to_code (binoptab),
|
||||
- ops[1].value, ops[2].value))
|
||||
+ ops[1].value, ops[2].value, mode0))
|
||||
{
|
||||
delete_insns_since (last);
|
||||
return expand_binop (mode, binoptab, op0, op1, NULL_RTX,
|
||||
@@ -2298,7 +2299,7 @@ expand_doubleword_clz (scalar_int_mode m
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
- add_equal_note (seq, target, CLZ, xop0, 0);
|
||||
+ add_equal_note (seq, target, CLZ, xop0, NULL_RTX, mode);
|
||||
emit_insn (seq);
|
||||
return target;
|
||||
|
||||
@@ -2340,7 +2341,7 @@ expand_doubleword_popcount (scalar_int_m
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
- add_equal_note (seq, t, POPCOUNT, op0, 0);
|
||||
+ add_equal_note (seq, t, POPCOUNT, op0, NULL_RTX, mode);
|
||||
emit_insn (seq);
|
||||
return t;
|
||||
}
|
||||
@@ -2511,7 +2512,7 @@ expand_ctz (scalar_int_mode mode, rtx op
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
- add_equal_note (seq, temp, CTZ, op0, 0);
|
||||
+ add_equal_note (seq, temp, CTZ, op0, NULL_RTX, mode);
|
||||
emit_insn (seq);
|
||||
return temp;
|
||||
}
|
||||
@@ -2589,7 +2590,7 @@ expand_ffs (scalar_int_mode mode, rtx op
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
- add_equal_note (seq, temp, FFS, op0, 0);
|
||||
+ add_equal_note (seq, temp, FFS, op0, NULL_RTX, mode);
|
||||
emit_insn (seq);
|
||||
return temp;
|
||||
|
||||
@@ -2736,7 +2737,7 @@ expand_unop_direct (machine_mode mode, o
|
||||
if (INSN_P (pat) && NEXT_INSN (pat) != NULL_RTX
|
||||
&& ! add_equal_note (pat, ops[0].value,
|
||||
optab_to_code (unoptab),
|
||||
- ops[1].value, NULL_RTX))
|
||||
+ ops[1].value, NULL_RTX, mode))
|
||||
{
|
||||
delete_insns_since (last);
|
||||
return expand_unop (mode, unoptab, op0, NULL_RTX, unsignedp);
|
||||
@@ -3588,7 +3589,8 @@ maybe_emit_unop_insn (enum insn_code ico
|
||||
|
||||
if (INSN_P (pat) && NEXT_INSN (pat) != NULL_RTX
|
||||
&& code != UNKNOWN)
|
||||
- add_equal_note (pat, ops[0].value, code, ops[1].value, NULL_RTX);
|
||||
+ add_equal_note (pat, ops[0].value, code, ops[1].value, NULL_RTX,
|
||||
+ GET_MODE (op0));
|
||||
|
||||
emit_insn (pat);
|
||||
|
||||
--- gcc/testsuite/gcc.dg/pr88905.c.jj 2019-01-21 14:19:17.279746531 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr88905.c 2019-01-21 14:18:56.264091537 +0100
|
||||
@@ -0,0 +1,21 @@
|
||||
+/* PR target/88905 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-Og -fno-tree-ccp" } */
|
||||
+/* { dg-additional-options "-mabm" { target { i?86-*-* x86_64-*-* } } } */
|
||||
+
|
||||
+int a, b, c;
|
||||
+extern void baz (int);
|
||||
+
|
||||
+static inline int
|
||||
+bar (unsigned u)
|
||||
+{
|
||||
+ int i = __builtin_popcountll (-(unsigned long long) u);
|
||||
+ baz (i & c);
|
||||
+ return a + b + c;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (void)
|
||||
+{
|
||||
+ bar (2376498292ULL);
|
||||
+}
|
|
@ -1,94 +0,0 @@
|
|||
2019-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/49429
|
||||
PR target/49454
|
||||
PR rtl-optimization/86334
|
||||
PR target/88906
|
||||
* expr.c (emit_block_move_hints): Move marking of MEM_EXPRs
|
||||
addressable from here...
|
||||
(emit_block_op_via_libcall): ... to here.
|
||||
|
||||
* gcc.target/i386/pr86334.c: New test.
|
||||
* gcc.target/i386/pr88906.c: New test.
|
||||
|
||||
--- gcc/expr.c.jj 2019-01-10 11:43:08.958466880 +0100
|
||||
+++ gcc/expr.c 2019-01-21 12:06:41.782406169 +0100
|
||||
@@ -1631,14 +1631,6 @@ emit_block_move_hints (rtx x, rtx y, rtx
|
||||
if (may_use_call < 0)
|
||||
return pc_rtx;
|
||||
|
||||
- /* Since x and y are passed to a libcall, mark the corresponding
|
||||
- tree EXPR as addressable. */
|
||||
- tree y_expr = MEM_EXPR (y);
|
||||
- tree x_expr = MEM_EXPR (x);
|
||||
- if (y_expr)
|
||||
- mark_addressable (y_expr);
|
||||
- if (x_expr)
|
||||
- mark_addressable (x_expr);
|
||||
retval = emit_block_copy_via_libcall (x, y, size,
|
||||
method == BLOCK_OP_TAILCALL);
|
||||
}
|
||||
@@ -1884,6 +1876,15 @@ emit_block_op_via_libcall (enum built_in
|
||||
tree call_expr, dst_tree, src_tree, size_tree;
|
||||
machine_mode size_mode;
|
||||
|
||||
+ /* Since dst and src are passed to a libcall, mark the corresponding
|
||||
+ tree EXPR as addressable. */
|
||||
+ tree dst_expr = MEM_EXPR (dst);
|
||||
+ tree src_expr = MEM_EXPR (src);
|
||||
+ if (dst_expr)
|
||||
+ mark_addressable (dst_expr);
|
||||
+ if (src_expr)
|
||||
+ mark_addressable (src_expr);
|
||||
+
|
||||
dst_addr = copy_addr_to_reg (XEXP (dst, 0));
|
||||
dst_addr = convert_memory_address (ptr_mode, dst_addr);
|
||||
dst_tree = make_tree (ptr_type_node, dst_addr);
|
||||
--- gcc/testsuite/gcc.target/i386/pr86334.c.jj 2019-01-21 17:52:04.408370956 +0100
|
||||
+++ gcc/testsuite/gcc.target/i386/pr86334.c 2019-01-21 17:52:58.504482908 +0100
|
||||
@@ -0,0 +1,21 @@
|
||||
+/* PR rtl-optimization/86334 */
|
||||
+/* { dg-do run { target ia32 } } */
|
||||
+/* { dg-options "-O -march=i386 -mtune=athlon -minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:align -Wno-psabi" } */
|
||||
+
|
||||
+typedef int V __attribute__ ((vector_size (64)));
|
||||
+
|
||||
+static inline V
|
||||
+foo (V g)
|
||||
+{
|
||||
+ g[0] = 4;
|
||||
+ return g;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ V x = foo ((V) { });
|
||||
+ if (x[0] != 4 || x[1] || x[2] || x[3] || x[4] || x[5] || x[6] || x[7])
|
||||
+ __builtin_abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/pr88906.c.jj 2019-01-21 12:08:53.110252030 +0100
|
||||
+++ gcc/testsuite/gcc.target/i386/pr88906.c 2019-01-21 17:53:08.082325657 +0100
|
||||
@@ -0,0 +1,21 @@
|
||||
+/* PR target/88906 */
|
||||
+/* { dg-do run { target ia32 } } */
|
||||
+/* { dg-options "-O -march=i386 -mtune=k6 -minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:align -Wno-psabi" } */
|
||||
+
|
||||
+typedef unsigned V __attribute__ ((vector_size (16)));
|
||||
+
|
||||
+static inline V
|
||||
+foo (V v)
|
||||
+{
|
||||
+ __builtin_sub_overflow (0, 0, &v[0]);
|
||||
+ return v;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ V v = foo ((V) { ~0 });
|
||||
+ if (v[0] || v[1] || v[2] || v[3])
|
||||
+ __builtin_abort ();
|
||||
+ return 0;
|
||||
+}
|
|
@ -1,78 +0,0 @@
|
|||
PR go/88927
|
||||
|
||||
From aa3469119f6256799badc9722861976a416abbcc Mon Sep 17 00:00:00 2001
|
||||
From: Ian Lance Taylor <iant@golang.org>
|
||||
Date: Sat, 19 Jan 2019 22:40:27 -0800
|
||||
Subject: [PATCH] runtime, internal/cpu: fix build for ARM GNU/Linux
|
||||
|
||||
Was failing with
|
||||
|
||||
../../../libgo/go/internal/cpu/cpu.go:138:2: error: reference to undefined name 'doinit'
|
||||
138 | doinit()
|
||||
| ^
|
||||
|
||||
Fix it by adding in Go 1.12 internal/cpu/cpu_arm.go, and the code in
|
||||
runtime that initializes the values.
|
||||
|
||||
Fixes https://gcc.gnu.org/PR88927.
|
||||
|
||||
Change-Id: Ib376fcbd443acf428fa93d4aa77ec74edbaa71ee
|
||||
---
|
||||
|
||||
--- libgo/go/internal/cpu/cpu_arm.go
|
||||
+++ libgo/go/internal/cpu/cpu_arm.go
|
||||
@@ -0,0 +1,33 @@
|
||||
+// Copyright 2017 The Go Authors. All rights reserved.
|
||||
+// Use of this source code is governed by a BSD-style
|
||||
+// license that can be found in the LICENSE file.
|
||||
+
|
||||
+package cpu
|
||||
+
|
||||
+// arm doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2.
|
||||
+// These are linknamed in runtime/os_(linux|freebsd)_arm.go and are
|
||||
+// initialized by archauxv().
|
||||
+// These should not be changed after they are initialized.
|
||||
+var HWCap uint
|
||||
+var HWCap2 uint
|
||||
+
|
||||
+// HWCAP/HWCAP2 bits. These are exposed by Linux and FreeBSD.
|
||||
+const (
|
||||
+ hwcap_VFPv4 = 1 << 16
|
||||
+ hwcap_IDIVA = 1 << 17
|
||||
+)
|
||||
+
|
||||
+func doinit() {
|
||||
+ options = []option{
|
||||
+ {Name: "vfpv4", Feature: &ARM.HasVFPv4},
|
||||
+ {Name: "idiva", Feature: &ARM.HasIDIVA},
|
||||
+ }
|
||||
+
|
||||
+ // HWCAP feature bits
|
||||
+ ARM.HasVFPv4 = isSet(HWCap, hwcap_VFPv4)
|
||||
+ ARM.HasIDIVA = isSet(HWCap, hwcap_IDIVA)
|
||||
+}
|
||||
+
|
||||
+func isSet(hwc uint, value uint) bool {
|
||||
+ return hwc&value != 0
|
||||
+}
|
||||
--- libgo/go/runtime/os_linux_arm.go
|
||||
+++ libgo/go/runtime/os_linux_arm.go
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
package runtime
|
||||
|
||||
+import "internal/cpu"
|
||||
+
|
||||
var randomNumber uint32
|
||||
|
||||
func archauxv(tag, val uintptr) {
|
||||
@@ -14,5 +16,9 @@
|
||||
// it as a byte array.
|
||||
randomNumber = uint32(startupRandomData[4]) | uint32(startupRandomData[5])<<8 |
|
||||
uint32(startupRandomData[6])<<16 | uint32(startupRandomData[7])<<24
|
||||
+ case _AT_HWCAP:
|
||||
+ cpu.HWCap = uint(val)
|
||||
+ case _AT_HWCAP2:
|
||||
+ cpu.HWCap2 = uint(val)
|
||||
}
|
||||
}
|
|
@ -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-9.0.0-20190121.tar.xz) = 18dda8f278e99e1cf93fb30f60faa2b4828c13f289de7412e62d59076357b0674f5ae891ac879d7d47a18cf0c291fdb34795162180fc9c9b2651ad42ca08f478
|
||||
SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.xz) = 94f7089365296f7dfa485107b4143bebc850a81586f3460fd896bbbb6ba099a00217d4042133424fd2183b352132f4fd367e6a60599bdae2a26dfd48a77d0e04
|
||||
SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.xz) = a688cb12cf805950a5abbb13b52f45c81dbee98e310b7ed57ae20e76dbfa5964a16270148374a6426d177db71909d28360490f091c86a5d19d4faa5127beeee1
|
||||
SHA512 (gcc-10.0.1-20200216.tar.xz) = 56507e273b00e85ed4145e80df65d9b4e4791f23e7cb5d931f85b9420cbf3a7125ba49978dc73c2987c0a6101f741dc5a60a08cb3346d4c5082400cbcfcdd008
|
||||
SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 9ceea0b883185fe489724d54a7e909bb6ed4785fcadf80162033dc6a133e2657337175601278e4155d1f8fac275ff9c8a02572aea876166c608774c809f832e9
|
||||
SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7
|
||||
|
|
|
@ -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