x86/ELF: fix .ds.x output
authorJan Beulich <jbeulich@suse.com>
Wed, 11 Aug 2021 06:31:03 +0000 (08:31 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 11 Aug 2021 06:31:03 +0000 (08:31 +0200)
commite74e2b4c336fad993b0dd31b859af919ad52ec9e
treed2da95940234a9ed70a44738a018f4ee2919bd53
parente2295dade838ad296e1e1cd1096177058139b6b3
x86/ELF: fix .ds.x output

The ELF psABI-s are quite clear here: On 32-bit the underlying data type
is 12 bytes long (with 2 bytes of trailing padding), while on 64-bit it
is 16 bytes long (with 6 bytes of padding). Make s_space() capable of
handling 'x' (and 'p') type floating point being other than 12 bytes
wide (also adjusting documentation). This requires duplicating the
definition of X_PRECISION in the target speciifc header; the compiler
would complain if this was out of sync with config/atof-ieee.c.

Note that for now padding space doesn't get separated from actual
storage, which means that things will work correctly only for little-
endian cases, and which also means that by specifying large enough
numbers padding space can be set to non-zero. Since the logic is needed
for a single little-endian architecture only for now, I'm hoping that
this might be acceptable for the time being; otherwise the change will
become more intrusive.

Note also that this brings the emitted data size of .ds.x vs .tfloat in
line for non-ELF targets as well; the issue will be even more obvious
when further taking into account a subsequent patch fixing .dc.x/.dcb.x
(where output sizes currently differ depending on input format).

Extend existing x86 testcases.
gas/config/tc-i386.h
gas/doc/as.texi
gas/read.c
gas/testsuite/gas/i386/fp-elf32.d
gas/testsuite/gas/i386/fp-elf64.d
gas/testsuite/gas/i386/fp.d
gas/testsuite/gas/i386/fp.s