llvm-project/llvm/test/tools/llvm-ar/thin-archive.test
Fangrui Song dd6e7e0d57 [llvm-ar] Add --thin for creating a thin archive
In GNU ar (since 2008), the modifier 'T' means creating a thin archive.
In many other ar implementations (FreeBSD, macOS, elfutils, etc), -T
means "allow filename truncation of extracted files", as specified by
X/Open System Interface.

For portability, 'T' with thin archive semantics should be avoided.

See https://sourceware.org/bugzilla/show_bug.cgi?id=28759 binutils 2.38
will deprecate 'T' (without diagnostic) and add --thin.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D116979
2022-02-01 09:56:50 -08:00

50 lines
2.0 KiB
Plaintext

RUN: rm -rf %t && mkdir -p %t/foo/bar/
RUN: yaml2obj %S/Inputs/elf.yaml -o %t/foo/elf.o
RUN: cp %t/foo/elf.o %t/foo/bar/elf.o
RUN: cp %t/foo/bar/elf.o %t/delete.o
Test that modules can be added with absolute paths when the archive is created using an absolute path
RUN: llvm-ar rc --thin %t/absolute-1a.ar %t/foo/elf.o %t/delete.o %t/foo/bar/elf.o
RUN: llvm-ar --thin d %t/absolute-1a.ar delete.o
RUN: FileCheck --input-file=%t/absolute-1a.ar --check-prefixes=THIN,CHECK %s -DPATH=%/t/
RUN: llvm-ar t %t/absolute-1a.ar | FileCheck %s -DPATH=%/t/
RUN: llvm-ar rTc %t/absolute-1b.ar %t/foo/elf.o %t/delete.o %t/foo/bar/elf.o
RUN: llvm-ar dT %t/absolute-1b.ar delete.o
RUN: cmp %t/absolute-1a.ar %t/absolute-1b.ar
These tests must be run in %t/foo. cd %t is included on each line to make debugging this test case easier.
Test that modules can be added with absolute paths when the archive is created using a relative path
RUN: cd %t/foo && llvm-ar rTc bar/absolute-2.ar %t/foo/elf.o %t/delete.o %t/foo/bar/elf.o
RUN: cd %t/foo && llvm-ar dT bar/absolute-2.ar %t/delete.o
RUN: FileCheck -input-file=%t/foo/bar/absolute-2.ar --check-prefixes=THIN,CHECK %s -DPATH=%/t/
RUN: llvm-ar t %t/foo/bar/absolute-2.ar | FileCheck %s -DPATH=%/t/
Test that modules can be added with relative paths when the archive is created using a relative path
RUN: cd %t/foo && llvm-ar rTc ../relative-1.ar elf.o ../delete.o bar/elf.o
RUN: cd %t/foo && llvm-ar dT ../relative-1.ar delete.o
RUN: FileCheck -input-file=%t/relative-1.ar --check-prefixes=THIN,CHECK %s -DPATH=
RUN: llvm-ar t %t/relative-1.ar | FileCheck %s -DPATH=%/t/
Test that modules can be added with relative paths when the archive is created using a absolute path
RUN: cd %t/foo && llvm-ar rTc %t/relative-2.ar elf.o ../delete.o bar/elf.o
RUN: cd %t/foo && llvm-ar dT %t/relative-2.ar delete.o
RUN: FileCheck -input-file=%t/relative-2.ar --check-prefixes=THIN,CHECK %s -DPATH=
RUN: llvm-ar t %t/relative-2.ar | FileCheck %s -DPATH=%/t/
THIN: !<thin>
CHECK-NOT: delete.o
CHECK: {{^}}[[PATH]]foo/elf.o
CHECK: {{^}}[[PATH]]foo/bar/elf.o