Add a simple forwarding option in the MinGW frontend, and implement the private -wrap option in the COFF linker. The feature in lld-link isn't gated by the -lldmingw option, but the option is left as a private, undocumented option primarily used by the MinGW driver. The implementation is significantly based on the support for --wrap in the ELF linker, but many small nuance details are different between the ELF and COFF linkers, ending up with more than a few implementation differences. This fixes https://bugs.llvm.org/show_bug.cgi?id=47384. Differential Revision: https://reviews.llvm.org/D89004 Reapplied with the bitfield member canInline fixed so it doesn't break builds targeting windows.
52 lines
1.6 KiB
ArmAsm
52 lines
1.6 KiB
ArmAsm
// REQUIRES: x86
|
|
// RUN: split-file %s %t.dir
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-win32-gnu %t.dir/main.s -o %t.main.obj
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-win32-gnu %t.dir/other.s -o %t.other.obj
|
|
|
|
// RUN: lld-link -out:%t.exe %t.main.obj %t.other.obj -entry:entry -subsystem:console -debug:symtab -wrap:foo -wrap:nosuchsym
|
|
// RUN: llvm-objdump -d --print-imm-hex %t.exe | FileCheck %s
|
|
// RUN: lld-link -out:%t.exe %t.main.obj %t.other.obj -entry:entry -subsystem:console -debug:symtab -wrap:foo -wrap:foo -wrap:nosuchsym
|
|
// RUN: llvm-objdump -d --print-imm-hex %t.exe | FileCheck %s
|
|
|
|
// CHECK: <entry>:
|
|
// CHECK-NEXT: movl $0x11010, %edx
|
|
// CHECK-NEXT: movl $0x11010, %edx
|
|
// CHECK-NEXT: movl $0x11000, %edx
|
|
|
|
// RUN: llvm-readobj --symbols %t.exe > %t.dump
|
|
// RUN: FileCheck --check-prefix=SYM1 %s < %t.dump
|
|
// RUN: FileCheck --check-prefix=SYM2 %s < %t.dump
|
|
// RUN: FileCheck --check-prefix=SYM3 %s < %t.dump
|
|
|
|
// foo = 0xC0011000 = 3221295104
|
|
// __wrap_foo = 0xC0011010 = 3221295120
|
|
// SYM1: Name: foo
|
|
// SYM1-NEXT: Value: 3221295104
|
|
// SYM1-NEXT: Section: IMAGE_SYM_ABSOLUTE
|
|
// SYM1-NEXT: BaseType: Null
|
|
// SYM1-NEXT: ComplexType: Null
|
|
// SYM1-NEXT: StorageClass: External
|
|
// SYM2: Name: __wrap_foo
|
|
// SYM2-NEXT: Value: 3221295120
|
|
// SYM2-NEXT: Section: IMAGE_SYM_ABSOLUTE
|
|
// SYM2-NEXT: BaseType: Null
|
|
// SYM2-NEXT: ComplexType: Null
|
|
// SYM2-NEXT: StorageClass: External
|
|
// SYM3-NOT: Name: __real_foo
|
|
|
|
#--- main.s
|
|
.global entry
|
|
entry:
|
|
movl $foo, %edx
|
|
movl $__wrap_foo, %edx
|
|
movl $__real_foo, %edx
|
|
|
|
#--- other.s
|
|
.global foo
|
|
.global __wrap_foo
|
|
.global __real_foo
|
|
|
|
foo = 0x11000
|
|
__wrap_foo = 0x11010
|
|
__real_foo = 0x11020
|