diff options
author | XieZhiheng <xiezhiheng@huawei.com> | 2020-04-21 15:09:23 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-04-21 15:09:23 +0100 |
commit | 6c0ab626113ef20ee2986cb8a102b5394aeb888a (patch) | |
tree | b61cc551a97dac02c1192f41958c9fbfecf8827a | |
parent | f2c8be187e8eb061e44166ac41646285821be6a6 (diff) | |
download | gcc-6c0ab626113ef20ee2986cb8a102b5394aeb888a.zip gcc-6c0ab626113ef20ee2986cb8a102b5394aeb888a.tar.gz gcc-6c0ab626113ef20ee2986cb8a102b5394aeb888a.tar.bz2 |
aarch64: Add an error message in large code model for ilp32 [PR94577]
The option -mabi=ilp32 should not be used in large code model. An error
message is added for the option conflict.
2020-04-21 Duan bo <duanbo3@huawei.com>
gcc/
PR target/94577
* config/aarch64/aarch64.c: Add an error message for option conflict.
* doc/invoke.texi (-mcmodel=large): Mention that -mcmodel=large is
incompatible with -fpic, -fPIC and -mabi=ilp32.
gcc/testsuite/
PR target/94577
* gcc.target/aarch64/pr94577.c: New test.
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 51 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/pr94577.c | 10 |
5 files changed, 53 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c3572ca..dc831f6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2020-04-21 Duan bo <duanbo3@huawei.com> + + PR target/94577 + * config/aarch64/aarch64.c: Add an error message for option conflict. + * doc/invoke.texi (-mcmodel=large): Mention that -mcmodel=large is + incompatible with -fpic, -fPIC and -mabi=ilp32. + 2020-04-21 Frederik Harwath <frederik@codesourcery.com> PR other/94629 diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index ee6a2de7..f728ac5 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -14777,32 +14777,37 @@ aarch64_init_expanders (void) static void initialize_aarch64_code_model (struct gcc_options *opts) { - if (opts->x_flag_pic) - { - switch (opts->x_aarch64_cmodel_var) - { - case AARCH64_CMODEL_TINY: - aarch64_cmodel = AARCH64_CMODEL_TINY_PIC; - break; - case AARCH64_CMODEL_SMALL: + aarch64_cmodel = opts->x_aarch64_cmodel_var; + switch (opts->x_aarch64_cmodel_var) + { + case AARCH64_CMODEL_TINY: + if (opts->x_flag_pic) + aarch64_cmodel = AARCH64_CMODEL_TINY_PIC; + break; + case AARCH64_CMODEL_SMALL: + if (opts->x_flag_pic) + { #ifdef HAVE_AS_SMALL_PIC_RELOCS - aarch64_cmodel = (flag_pic == 2 - ? AARCH64_CMODEL_SMALL_PIC - : AARCH64_CMODEL_SMALL_SPIC); + aarch64_cmodel = (flag_pic == 2 + ? AARCH64_CMODEL_SMALL_PIC + : AARCH64_CMODEL_SMALL_SPIC); #else - aarch64_cmodel = AARCH64_CMODEL_SMALL_PIC; + aarch64_cmodel = AARCH64_CMODEL_SMALL_PIC; #endif - break; - case AARCH64_CMODEL_LARGE: - sorry ("code model %qs with %<-f%s%>", "large", - opts->x_flag_pic > 1 ? "PIC" : "pic"); - break; - default: - gcc_unreachable (); - } - } - else - aarch64_cmodel = opts->x_aarch64_cmodel_var; + } + break; + case AARCH64_CMODEL_LARGE: + if (opts->x_flag_pic) + sorry ("code model %qs with %<-f%s%>", "large", + opts->x_flag_pic > 1 ? "PIC" : "pic"); + if (opts->x_aarch64_abi == AARCH64_ABI_ILP32) + sorry ("code model %qs not supported in ilp32 mode", "large"); + break; + case AARCH64_CMODEL_TINY_PIC: + case AARCH64_CMODEL_SMALL_PIC: + case AARCH64_CMODEL_SMALL_SPIC: + gcc_unreachable (); + } } /* Implement TARGET_OPTION_SAVE. */ diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8b5cd82..d474882 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -16759,7 +16759,9 @@ dynamically linked. This is the default code model. @item -mcmodel=large @opindex mcmodel=large Generate code for the large code model. This makes no assumptions about -addresses and sizes of sections. Programs can be statically linked only. +addresses and sizes of sections. Programs can be statically linked only. The +@option{-mcmodel=large} option is incompatible with @option{-mabi=ilp32}, +@option{-fpic} and @option{-fPIC}. @item -mstrict-align @itemx -mno-strict-align diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 372a89f..0de5a47 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-04-21 Duan bo <duanbo3@huawei.com> + + PR target/94577 + * gcc.target/aarch64/pr94577.c: New test. + 2020-04-21 Jakub Jelinek <jakub@redhat.com> PR c/94686 diff --git a/gcc/testsuite/gcc.target/aarch64/pr94577.c b/gcc/testsuite/gcc.target/aarch64/pr94577.c new file mode 100644 index 0000000..6f2d361 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr94577.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-mcmodel=large -mabi=ilp32" } */ + +void +foo () +{ + // Do nothing +} + +/* { dg-message "sorry, unimplemented: code model 'large' not supported in ilp32 mode" "" { target *-*-* } 0 } */ |