Skip to content

armhf binaries still use NEON #36913

@cuviper

Description

@cuviper

I was just investigating a report that Fedora's rust binaries for armv7hl use NEON, but they should not per #35590, supposedly fixed in #35814. (Fedora's build is 1.11, but I applied that patch.) I can see the exact same issue in the latest official rustc-nightly-armv7-unknown-linux-gnueabihf.tar.gz, whose version file says 1.14.0-nightly (289f3a4ca 2016-09-29).

# arm-linux-gnu-objdump -d libstd-*.so | grep '<.*lang_start.*>:' -A30
0006ccf0 <_ZN3std2rt10lang_start17hdfc48bc748089cb2E>:
   6ccf0:       e92d4ff0        push    {r4, r5, r6, r7, r8, r9, sl, fp, lr}
   6ccf4:       e24ddf45        sub     sp, sp, #276    ; 0x114
   6ccf8:       e1a09001        mov     r9, r1
   6ccfc:       e1a0b000        mov     fp, r0
   6cd00:       e3a0000d        mov     r0, #13
   6cd04:       e3a01001        mov     r1, #1
   6cd08:       e1a0a002        mov     sl, r2
   6cd0c:       ebff5534        bl      421e4 <signal@plt>
   6cd10:       e3700001        cmn     r0, #1
   6cd14:       0a000134        beq     6d1ec <_ZN3std2rt10lang_start17hdfc48bc748089cb2E+0x4fc>
   6cd18:       e59f0788        ldr     r0, [pc, #1928] ; 6d4a8 <_ZN3std2rt10lang_start17hdfc48bc748089cb2E+0x7b8>
   6cd1c:       e08f0000        add     r0, pc, r0
   6cd20:       ebff5856        bl      42e80 <_ZN5alloc3oom15set_oom_handler17hfc02679a00c1734eE@plt>
   6cd24:       e3a0001e        mov     r0, #30
   6cd28:       ebff5509        bl      42154 <sysconf@plt>
   6cd2c:       e1a07000        mov     r7, r0
   6cd30:       e28d0050        add     r0, sp, #80     ; 0x50
   6cd34:       f2c00050        vmov.i32        q8, #0  ; 0x00000000
   6cd38:       e3a06000        mov     r6, #0
   6cd3c:       e1a01000        mov     r1, r0
   6cd40:       f4410acd        vst1.64 {d16-d17}, [r1]!
   6cd44:       f4410acf        vst1.64 {d16-d17}, [r1]
   6cd48:       e58d6070        str     r6, [sp, #112]  ; 0x70
   6cd4c:       ebff57d1        bl      42c98 <pthread_attr_init@plt>
   6cd50:       e59f1754        ldr     r1, [pc, #1876] ; 6d4ac <_ZN3std2rt10lang_start17hdfc48bc748089cb2E+0x7bc>
   6cd54:       e28d8c01        add     r8, sp, #256    ; 0x100
   6cd58:       e58d0100        str     r0, [sp, #256]  ; 0x100
   6cd5c:       e3500000        cmp     r0, #0
   6cd60:       e58d80f4        str     r8, [sp, #244]  ; 0xf4
   6cd64:       e08f1001        add     r1, pc, r1

In particular, they flagged that vmov.i32 q8, #0 as a problem. I'm no ARM expert, but from this it appears the qN registers are NEON-only. I believe those instructions using {d16-d17} are also a problem, because with VFP3-D16 we should only have d0 to d15.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions