mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:56:42 +00:00

When faced with command line options such as "crtbegin.o appmain.o -lsomelib crtend.o", GNU ld pulls in all necessary object files from somelib before proceeding to crtend.o. LLD operates differently, only loading object files from any referenced static libraries after processing all input object files. This uses a similar hack as in the ELF linker. Here, it moves crtend.o to the end of the vector of object files. This makes sure that terminator chunks for sections such as .eh_frame gets ordered last, fixing DWARF exception handling for libgcc and gcc's crtend.o. Differential Revision: https://reviews.llvm.org/D60628 llvm-svn: 358394
27 lines
780 B
ArmAsm
27 lines
780 B
ArmAsm
// REQUIRES: x86
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-windows-gnu %s -o %t.main.o
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-windows-gnu \
|
|
// RUN: %p/Inputs/eh_frame_terminator-otherfunc.s -o %t.otherfunc.o
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-windows-gnu \
|
|
// RUN: %p/Inputs/eh_frame_terminator-crtend.s -o %t.crtend.o
|
|
// RUN: rm -f %t.otherfunc.lib
|
|
// RUN: llvm-ar rcs %t.otherfunc.lib %t.otherfunc.o
|
|
// RUN: lld-link -lldmingw %t.main.o %t.otherfunc.lib %t.crtend.o -out:%t.exe
|
|
// RUN: llvm-objdump -s %t.exe | FileCheck %s
|
|
|
|
.text
|
|
.globl main
|
|
main:
|
|
call otherfunc
|
|
ret
|
|
|
|
.globl mainCRTStartup
|
|
mainCRTStartup:
|
|
call main
|
|
|
|
.section .eh_frame,"dr"
|
|
.byte 1
|
|
|
|
// CHECK: Contents of section .eh_fram:
|
|
// CHECK-NEXT: 140003000 010203
|