121 lines · plain
1## Show that when bitcode is added to an archive it is handled correctly.2## The symbol table is as expected and it can be extracted without issue.3 4# RUN: rm -rf %t5# RUN: split-file %s %t && mkdir -p %t/extracted6# RUN: cd %t7# RUN: llvm-as a.ll -o a.bc8 9## Create symtab from bitcode for a new archive.10# RUN: llvm-ar rcs new.a a.bc11# RUN: llvm-ar t new.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}12# RUN: llvm-nm --print-armap new.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}13 14# FILES: a.bc15 16# SYMS: Archive map17# SYMS-NEXT: gfunc in a.bc18# SYMS-NEXT: gdata in a.bc19 20# SYMS: a.bc:21# SYMS-NEXT: -------- D gdata22# SYMS-NEXT: -------- T gfunc23# SYMS-NEXT: -------- d ldata24# SYMS-NEXT: -------- t lfunc25 26## Update symtab from bitcode in an existing archive.27# RUN: llvm-ar rcS update.a a.bc28# RUN: llvm-ar t update.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}29## Check no symbol table is present.30# RUN: llvm-nm --print-armap update.a | FileCheck --check-prefix=NOSYMS %s --implicit-check-not={{.}}31# RUN: llvm-ar s update.a32# RUN: llvm-ar t update.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}33# RUN: llvm-nm --print-armap update.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}34 35# NOSYMS: a.bc:36# NOSYMS-NEXT: -------- D gdata37# NOSYMS-NEXT: -------- T gfunc38# NOSYMS-NEXT: -------- d ldata39# NOSYMS-NEXT: -------- t lfunc40 41## Create symtab from bitcode for a regular archive via MRI script.42# RUN: llvm-ar -M < add.mri43# RUN: llvm-ar t mri.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}44# RUN: llvm-nm --print-armap mri.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}45 46## Create symtab from bitcode for a new thin archive.47# RUN: llvm-ar rcs --thin new-thin.a a.bc48# RUN: llvm-ar t new-thin.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}49# RUN: llvm-nm --print-armap new-thin.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}50 51## Update symtab from bitcode in an existing thin archive.52# RUN: llvm-ar rcS --thin update-thin.a a.bc53# RUN: llvm-ar t update-thin.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}54## Check no symbol table is present.55# RUN: llvm-nm --print-armap update-thin.a | FileCheck --check-prefix=NOSYMS %s --implicit-check-not={{.}}56# RUN: llvm-ar s update-thin.a57# RUN: llvm-ar t update-thin.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}58# RUN: llvm-nm --print-armap update-thin.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}59 60## Create symtab from bitcode for a thin archive via MRI script.61# RUN: llvm-ar -M < add-thin.mri62# RUN: llvm-ar t mri-thin.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}63# RUN: llvm-nm --print-armap mri-thin.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}64 65## Create symtab from bitcode from another archive.66# RUN: llvm-ar rcs input.a a.bc67# RUN: llvm-ar cqsL lib.a input.a68# RUN: llvm-ar t lib.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}69# RUN: llvm-nm --print-armap lib.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}70 71## Create symtab from bitcode from another archive via MRI script.72# RUN: llvm-ar -M < addlib.mri73# RUN: llvm-ar t mri-addlib.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}74# RUN: llvm-nm --print-armap mri-addlib.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}75 76## Create symtab from bitcode from another thin archive.77# RUN: llvm-ar rcs --thin input-thin.a a.bc78# RUN: llvm-ar cqsL --thin lib-thin.a input-thin.a79# RUN: llvm-ar t lib-thin.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}80# RUN: llvm-nm --print-armap lib-thin.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}81 82## Create symtab from bitcode from another thin archive via MRI script.83# RUN: llvm-ar -M < addlib-thin.mri84# RUN: llvm-ar t mri-addlib-thin.a | FileCheck --check-prefix=FILES %s --implicit-check-not={{.}}85# RUN: llvm-nm --print-armap mri-addlib-thin.a | FileCheck --check-prefix=SYMS %s --implicit-check-not={{.}}86 87## Extract bitcode and ensure it has not been changed.88# RUN: cd extracted89# RUN: llvm-ar x ../new.a a.bc90# RUN: cmp a.bc a.bc91 92#--- a.ll93@gdata = global i32 094@ldata = internal global i32 095define void @gfunc() { ret void }96define internal void @lfunc() { ret void }97 98#--- add.mri99CREATE mri.a100ADDMOD a.bc101SAVE102END103 104#--- add-thin.mri105CREATETHIN mri-thin.a106ADDMOD a.bc107SAVE108END109 110#--- addlib.mri111CREATE mri-addlib.a112ADDLIB input.a113SAVE114END115 116#--- addlib-thin.mri117CREATE mri-addlib-thin.a118ADDLIB input-thin.a119SAVE120END121