Skip to content

[CFI] duplicate symbols on aliased weak function #150070

@vitalybuka

Description

@vitalybuka

cat ../b.c

void f(void) {}

int main(int argc, char **argv) {
  argv[0] = (char *)f;
  void (*fp)(void) = (void (*)(void))argv[0];
  fp();
}

cat ../a.c

__attribute__((weak)) void f(void) {}

extern void ff(void) __attribute__((alias("f")));

clang ../b.c ../a.c -fsanitize=cfi-icall -flto=thin -fvisibility=hidden -fuse-ld=lld -o x -Wl,-save-temps -Wl,--thinlto-jobs=1

ld.lld: error: duplicate symbol: f.cfi
>>> defined at b.c
>>>            /tmp/x.lto.b-0cd040.o:(f.cfi)
>>> defined at a.c
>>>            /tmp/x.lto.a-1b6f8e.o:(.text.f.cfi+0x0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    LTOLink time optimization (regular/full LTO or ThinLTO)compiler-rt:cfiControl Flow Integrity

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions