# REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-mingw32 -o %t.o %s # RUN: lld-link -lldmingw -dll -out:%t.dll %t.o -entry:__ImageBase 2>&1 | FileCheck %s --allow-empty --check-prefix=NOWARNING # RUN: llvm-readobj --coff-exports %t.dll | FileCheck %s # RUN: lld-link -lldmingw -dll -out:%t.dll %t.o -entry:__ImageBase -export:otherfunc 2>&1 | FileCheck %s --check-prefix=WARNING # RUN: llvm-readobj --coff-exports %t.dll | FileCheck %s # Check that the export table contains the manually crafted content # instead of the linker generated exports. # CHECK: Export { # CHECK-NEXT: Ordinal: 1 # CHECK-NEXT: Name: myfunc # CHECK-NEXT: RVA: # CHECK-NEXT: } # CHECK-EMPTY: # NOWARNING-NOT: warning # WARNING: warning: literal .edata sections override exports .text .globl myfunc myfunc: ret .globl otherfunc otherfunc: ret // The object contains a manually crafted .edata section, which exports // myfunc, not otherfunc. .section .edata, "drw" .align 4 exports: .long 0 // ExportFlags .long 0 // TimeDateStamp .long 0 // MajorVersion + MinorVersion .rva name // NameRVA .long 1 // OrdinalBase .long 1 // AddressTableEntries .long 1 // NumberOfNamePointers .rva functions // ExportAddressTableRVA .rva names // NamePointerRVA .rva nameordinals // OrdinalTableRVA names: .rva funcname_myfunc nameordinals: .short 0 functions: .rva myfunc .long 0 funcname_myfunc: .asciz "myfunc" name: .asciz "mydll.dll"