# REQUIRES: x86
# RUN: llvm-mc -triple i686-pc-win32 %s -filetype=obj -o %t.obj
# RUN: lld-link -safeseh:no %t.obj -guard:cf -out:%t.exe -entry:main
# RUN: llvm-readobj --coff-load-config %t.exe | FileCheck %s --check-prefix=CHECK

# Only f and _main should go in the table.
# (use /lldmap:map.txt to check their addresses).
#
# CHECK: GuardFidTable [
# CHECK-NEXT: 0x401000
# CHECK-NEXT: 0x401030
# CHECK-NEXT: ]

# The input was loosly based on studying this program:
#
#  void foo() { return; }
#  void bar() { return; }
#  int main() {
#    foo();
#    void (*arr[])() = { &bar };
#    (*arr[0])();
#    return 0;
#  }
# cl /c a.cc && dumpbin /disasm a.obj > a.txt &&
#   link a.obj /guard:cf /map:map.txt && dumpbin /loadconfig a.exe



        .def    f;
        .scl    3;
        .type   32;
        .endef
        .section       .text,"xr",one_only,f
        .p2align 4
f:      movl $1, %eax
        ret


        .def    g;
        .scl    3;
        .type   32;
        .endef
        .section       .text,"xr",one_only,g
        .p2align 4
g:      movl $2, %eax
        ret


        .def    label;
        .scl    6;     # StorageClass: Label
        .type   0;     # Type: Not a function.
        .endef
        .section       .text,"xr",one_only,label
        .p2align 4
label:  ret


        .data
        .globl fp
        .p2align 4
fp:     .long f        # DIR32 relocation to function
        .long label    # DIR32 relocation to label


        .def    _main;
        .scl    2;
        .type   32;
        .endef
        .section       .text,"xr",one_only,_main
        .globl  _main
        .p2align 4
_main:  call *fp       # DIR32 relocation to data
        call g         # REL32 relocation to function
        ret


# Load configuration directory entry (winnt.h _IMAGE_LOAD_CONFIG_DIRECTORY32).
# The linker will define the ___guard_* symbols.
        .section .rdata,"dr"
.globl __load_config_used
__load_config_used:
        .long 104  # Size.
        .fill 76, 1, 0
        .long ___guard_fids_table
        .long ___guard_fids_count
        .long ___guard_flags
        .fill 12, 1, 0
