touch-packages team mailing list archive
-
touch-packages team
-
Mailing list archive
-
Message #27045
[Bug 517081] Re: Floating-point assembly and disassembly bugs on armel
fixed in 14.04 LTS
** Changed in: binutils (Ubuntu)
Status: Confirmed => Fix Released
--
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to binutils in Ubuntu.
https://bugs.launchpad.net/bugs/517081
Title:
Floating-point assembly and disassembly bugs on armel
Status in Linaro Binutils:
Fix Released
Status in “binutils” package in Ubuntu:
Fix Released
Bug description:
Binary package hint: binutils
Distro: lucid
Package: binutils (2.20-5ubuntu1)
Architecture: armel
Two low-priority issues here:
1) gas wrongly accepts an address index for the NEON element loads and
stores VLD1, VST2 etc. gas also wrongly accepts e.g., vld1 d0,
<label> (where <label> is a local literal label and implies [pc, <some
offset>]).
There is no instruction encoding allowing an offset in these
instructions: gas should throw an error.
2) binutils incorrectly annotates the target address when
disassembling pc-relative vldr instructions in Thumb-2. The
annotation is done as if the CPU did not align PC down to a word
boundary before doing the address calculation; however, the assembled
code looks correct.
The same problem might apply to other 32-bit instruction encodings,
bit I'm not aware of any except for vldr and vstr at the moment (pc-
relative vstr is not permitted in Thumb-2 by the architecture and
should possibly be rejected by the assembler).
See the attached file for a test case.
I get:
$ as -mfpu=neon -o vldr-dis.o vldr-dis.s
$ objdump -d vldr-dis.o
...
Disassembly of section .text:
00000000 <f>:
0: ed9f 0b0e vldr d0, [pc, #56] ; 3c <float>
4: bf00 nop
6: ed9f 0b0d vldr d0, [pc, #52] ; 3e <float+0x2>
^^ should be ... ; 3c <float>
a: bf00 nop
c: ed8f 0b0b vstr d0, [pc, #44] ; 3c <float>
10: bf00 nop
12: ed8f 0b0a vstr d0, [pc, #40] ; 3e <float+0x2>
^^ should be ... ; 3c <float>; however, use of the pc as base register is not permitted in Thumb; gas should probably reject this instruction.
16: bf00 nop
18: f8df 0020 ldr.w r0, [pc, #32] ; 3c <float>
1c: bf00 nop
1e: f8df 001c ldr.w r0, [pc, #28] ; 3c <float>
22: bf00 nop
24: f92f 070f vld1.8 {d0}, [pc]
^^ gas should have rejected this instruction, which had an offset in the source
28: bf00 nop
2a: f90f 070f vst1.8 {d0}, [pc]
^^ gas should have rejected this instruction, which had an offset in the source
2e: bf00 nop
30: f92f 070f vld1.8 {d0}, [pc]
^^ gas should have rejected this instruction, which had an offset in the source
34: bf00 nop
36: f92f 070f vld1.8 {d0}, [pc]
^^ gas should have rejected this instruction, which had an offset in the source
3a: 46c0 nop ; (mov r8, r8)
0000003c <float>:
...
To manage notifications about this bug go to:
https://bugs.launchpad.net/binutils-linaro/+bug/517081/+subscriptions