Skip to content

Invalid relocation in ubsan_signals_standalone.cpp on FreeBSD/aarch64 #63418

Closed
llvm/llvm-project-release-prs
#632
@VoxSciurorum

Description

@VoxSciurorum

My build of LLVM main on FreeBSD AArch64 fails:

[ 20%] Linking CXX shared library /usr/obj/llvm/llvm-17/lib/clang/17/lib/aarch64-unknown-freebsd13.2/libclang_rt.ubsan_standalone.so
ld: error: CMakeFiles/RTUbsan_standalone.aarch64.dir/ubsan_signals_standalone.cpp.o:(function __ubsan::InitializeDeadlySignals(): .text._ZN7__ubsan23InitializeDeadlySignalsEv+0x78): improper alignment for relocation R_AARCH64_LD64_GOT_LO12_NC: 0x5E73C is not aligned to 8 bytes

The problem is apparently this line of assembly:

        ldr     x2, [x2, :got_lo12:sigaction]

This is an 8 byte load and the relocation expects it to be aligned to 8 bytes. Earlier in the file I see in the .text segment

.set sigaction, __interceptor_trampoline_sigaction
        .globl  __interceptor_trampoline_sigaction
        .type   __interceptor_trampoline_sigaction,@function
__interceptor_trampoline_sigaction:
        .cfi_startproc
        b       __interceptor_sigaction
        .cfi_endproc
.Ltmp1: 
        .size   __interceptor_trampoline_sigaction, .Ltmp1-__interceptor_trampoline_sigaction   

There is no explicit alignment and the function happens to land at an odd multiple of 4 bytes.

Compile the attached file with

clang++ --target=aarch64-unknown-freebsd13.2 -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -O3 -std=c++17 -march=armv8-a -fno-builtin -fno-exceptions -fomit-frame-pointer -funwind-tables -fno-stack-protector -fno-sanitize=safe-stack -fvisibility=hidden -fno-lto -gline-tables-only -Wno-gnu -Wno-variadic-macros -Wno-c99-extensions -nostdinc++ -fno-rtti -S ubsan_signals_standalone.ii

ubsan_signals_standalone.txt

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions