public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r8-10462] pdp11: Fix handling of common (local and global) vars [PR94134]
@ 2020-09-17 14:24 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2020-09-17 14:24 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:4910b2e4cfe25c95fef18cf54125b788c190cfb2
commit r8-10462-g4910b2e4cfe25c95fef18cf54125b788c190cfb2
Author: Jakub Jelinek <jakub@redhat.com>
Date: Wed Mar 11 18:35:13 2020 +0100
pdp11: Fix handling of common (local and global) vars [PR94134]
As mentioned in the PR, the generic code decides to put the a variable into
lcomm_section, which is a NOSWITCH section and thus the generic code doesn't
switch into a particular section before using
ASM_OUTPUT{_ALIGNED{,_DECL}_}_LOCAL, on many targets that results just in
.lcomm (or for non-local .comm) directives which don't need a switch to some
section, other targets put switch_to_section (bss_section) at the start of
that macro.
pdp11 doesn't do that (and doesn't have bss_section), and so emits the
lcomm/comm variables in whatever section is current (it has only .text/.data
and for DEC assembler rodata).
The following patch fixes that by putting it always into data section, and
additionally avoids emitting an empty line in the assembly for the lcomm
vars.
2020-03-11 Jakub Jelinek <jakub@redhat.com>
PR target/94134
* config/pdp11/pdp11.c (pdp11_asm_output_var): Call switch_to_section
at the start to switch to data section. Don't print extra newline if
.globl directive has not been emitted.
* gcc.c-torture/execute/pr94134.c: New test.
(cherry picked from commit f1125cf88ac0c97d819e4f81d556fbcd1161270e)
Diff:
---
gcc/config/pdp11/pdp11.c | 3 ++-
gcc/testsuite/gcc.c-torture/execute/pr94134.c | 14 ++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c
index 38c55fbb3df..3c4351477e9 100644
--- a/gcc/config/pdp11/pdp11.c
+++ b/gcc/config/pdp11/pdp11.c
@@ -720,14 +720,15 @@ void
pdp11_asm_output_var (FILE *file, const char *name, int size,
int align, bool global)
{
+ switch_to_section (data_section);
if (align > 8)
fprintf (file, "\n\t.even\n");
if (global)
{
fprintf (file, ".globl ");
assemble_name (file, name);
+ fprintf (file, "\n");
}
- fprintf (file, "\n");
assemble_name (file, name);
fprintf (file, ": .=.+ %#ho\n", (unsigned short)size);
}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr94134.c b/gcc/testsuite/gcc.c-torture/execute/pr94134.c
new file mode 100644
index 00000000000..b1b44c3b184
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr94134.c
@@ -0,0 +1,14 @@
+/* PR target/94134 */
+
+static volatile int a = 0;
+static volatile int b = 1;
+
+int
+main ()
+{
+ a++;
+ b++;
+ if (a != 1 || b != 2)
+ __builtin_abort ();
+ return 0;
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-09-17 14:24 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-17 14:24 [gcc r8-10462] pdp11: Fix handling of common (local and global) vars [PR94134] Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).