Skip to content

ARM asm fails with latest Clang, non-private labels cannot appear between .cfi_startproc / .cfi_endproc pairs #807

Open
@mstorsjo

Description

@mstorsjo

The ARM assembly, in particular https://github.com/libffi/libffi/blob/master/src/arm/sysv.S#L139-L213 (the sequence of ffi_call_VFP followed by ffi_call_SYSV) fails to compile for Windows/ARM with the very latest Clang (the latest nightly since today).

The breaking change in Clang is this commit: https://reviews.llvm.org/D155245

[MC][AsmParser] Diagnose improperly nested .cfi frames

Compiling fails with an error like this:

../src/arm/sysv.S:156:37: error: non-private labels cannot appear between .cfi_startproc / .cfi_endproc pairs
.globl ffi_call_SYSV; ; .align 3; ; ffi_call_SYSV:
                                    ^
../src/arm/sysv.S:141:2: error: previous .cfi_startproc was here
 .cfi_startproc
 ^

For unknown reasons, this error doesn't seem to trigger on Linux targets, as mentioned in https://reviews.llvm.org/D155245#4657075. However the overall sentiment seems to be that this construct, having one CFI region cover two global functions, is invalid.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions