pdp11: Fix handling of common (local and global) vars [PR94134]
authorJakub Jelinek <jakub@redhat.com>
Wed, 11 Mar 2020 17:35:13 +0000 (18:35 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 11 Mar 2020 17:35:13 +0000 (18:35 +0100)
commitd42ff1d3b62521829d90e5b972baba2a0339e2bf
treeb8ba19dc256c9ec4cf86ad40db785ab88557fa6f
parent5fea87cc7902c7c03c0d3c8cf7784cd99db8315d
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.
gcc/ChangeLog
gcc/config/pdp11/pdp11.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr94134.c [new file with mode: 0644]