This can happen when manually emitting strings into .drectve sections
with `__attribute__((section(".drectve")))`, which is a way to emulate
`#pragma comment(linker, "...")` for mingw compilers, without requiring
building with -fms-extensions.
Normally, this doesn't generate any comdat, but if compiled with
-fsanitize=address, this section does get turned into a comdat section.
This fixes #67261. This issue can be seen as a regression; a change in
the "lli" tool in 17.x triggers this case, if compiled with ASAN
enabled, triggering this unsupported corner case in LLD. With this
change, LLD can handle it.
32 lines
860 B
ArmAsm
32 lines
860 B
ArmAsm
# REQUIRES: x86
|
|
|
|
# RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t.obj
|
|
|
|
# RUN: lld-link %t.obj -out:%t.exe -debug:symtab -subsystem:console
|
|
# RUN: llvm-readobj --coff-exports %t.exe | FileCheck %s
|
|
|
|
# CHECK: Name: exportedFunc
|
|
|
|
## This assembly snippet has been reduced from what Clang generates from
|
|
## this C snippet, with -fsanitize=address. Normally, the .drectve
|
|
## section would be a regular section - but when compiled with
|
|
## -fsanitize=address, it becomes a comdat section.
|
|
##
|
|
# void exportedFunc(void) {}
|
|
# void mainCRTStartup(void) {}
|
|
# static __attribute__((section(".drectve"), used)) const char export_chkstk[] =
|
|
# "-export:exportedFunc";
|
|
|
|
.text
|
|
.globl exportedFunc
|
|
exportedFunc:
|
|
retq
|
|
|
|
.globl mainCRTStartup
|
|
mainCRTStartup:
|
|
retq
|
|
|
|
.section .drectve,"dr",one_only,export_chkstk
|
|
export_chkstk:
|
|
.asciz "-export:exportedFunc"
|