[PATCH] D27218: Prefix path when displaying thin archives

Mark Santaniello via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 29 10:46:32 PST 2016


marksantaniello created this revision.
marksantaniello added a reviewer: rafael.
marksantaniello added a subscriber: llvm-commits.
marksantaniello set the repository for this revision to rL LLVM.

On thin archives, we store relative paths from the archive itself to its members.  When displaying the contents of the archive, gnu ar converts back by prefixing the path portion of path/to/archive.  Here we match the gnu ar behavior.

Note that https://reviews.llvm.org/D27217 adds a new test (test/Object/archive-thin-create.test) which will be broken by this change.   Depending on which one lands first, the other will need to be slightly modified.


Repository:
  rL LLVM

https://reviews.llvm.org/D27218

Files:
  test/Object/archive-toc.test
  tools/llvm-ar/llvm-ar.cpp


Index: tools/llvm-ar/llvm-ar.cpp
===================================================================
--- tools/llvm-ar/llvm-ar.cpp
+++ tools/llvm-ar/llvm-ar.cpp
@@ -359,6 +359,12 @@
     outs() << ' ' << ModTimeOrErr.get();
     outs() << ' ';
   }
+
+  if (C.getParent()->isThin()) {
+    outs() << sys::path::parent_path(ArchiveName);
+    outs() << sys::path::get_separator();
+  }
+  
   outs() << Name << "\n";
 }
 
Index: test/Object/archive-toc.test
===================================================================
--- test/Object/archive-toc.test
+++ test/Object/archive-toc.test
@@ -1,46 +1,48 @@
+RUN: cd %p
+
 Test reading an archive created by gnu ar
-RUN: env TZ=GMT llvm-ar tv %p/Inputs/GNU.a | FileCheck %s --check-prefix=GNU -strict-whitespace
+RUN: env TZ=GMT llvm-ar tv Inputs/GNU.a | FileCheck %s --check-prefix=GNU -strict-whitespace
 
 GNU:      rw-r--r-- 500/500      8 2004-11-19 02:57:37.000000000 evenlen
 GNU-NEXT: rw-r--r-- 500/500      7 2004-11-19 02:57:21.000000000 oddlen
 GNU-NEXT: rwxr-xr-x 500/500   1465 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc
 GNU-NEXT: rw-r--r-- 500/500   2280 2004-11-19 03:04:30.000000000 IsNAN.o
 
 
 Test reading an archive createdy by Mac OS X ar
-RUN: env TZ=GMT llvm-ar tv %p/Inputs/MacOSX.a | FileCheck %s --check-prefix=OSX -strict-whitespace
+RUN: env TZ=GMT llvm-ar tv Inputs/MacOSX.a | FileCheck %s --check-prefix=OSX -strict-whitespace
 
 OSX-NOT: __.SYMDEF
 OSX:      rw-r--r-- 501/501      8 2004-11-19 02:57:37.000000000 evenlen
 OSX-NEXT: rw-r--r-- 501/501      8 2004-11-19 02:57:21.000000000 oddlen
 OSX-NEXT: rw-r--r-- 502/502   1465 2010-02-04 06:59:14.000000000 very_long_bytecode_file_name.bc
 OSX-NEXT: rw-r--r-- 501/501   2280 2004-11-19 04:32:06.000000000 IsNAN.o
 
 Test reading an archive created on Solaris by /usr/ccs/bin/ar
-RUN: env TZ=GMT llvm-ar tv %p/Inputs/SVR4.a | FileCheck %s -strict-whitespace
+RUN: env TZ=GMT llvm-ar tv Inputs/SVR4.a | FileCheck %s -strict-whitespace
 
 Test reading an archive created on Solaris by /usr/xpg4/bin/ar
-RUN: env TZ=GMT llvm-ar tv %p/Inputs/xpg4.a | FileCheck %s -strict-whitespace
+RUN: env TZ=GMT llvm-ar tv Inputs/xpg4.a | FileCheck %s -strict-whitespace
 
 CHECK:      rw-r--r-- 1002/102      8 2004-11-19 03:24:02.000000000 evenlen
 CHECK-NEXT: rw-r--r-- 1002/102      7 2004-11-19 03:24:02.000000000 oddlen
 CHECK-NEXT: rwxr-xr-x 1002/102   1465 2004-11-19 03:24:02.000000000 very_long_bytecode_file_name.bc
 CHECK-NEXT: rw-r--r-- 1002/102   2280 2004-11-19 03:24:02.000000000 IsNAN.o
 
 Test reading a thin archive created by gnu ar
-RUN: env TZ=GMT llvm-ar tv %p/Inputs/thin.a | FileCheck %s --check-prefix=THIN -strict-whitespace
+RUN: env TZ=GMT llvm-ar tv Inputs/thin.a | FileCheck %s --check-prefix=THIN -strict-whitespace
 
-THIN:      rw-r--r-- 1000/1000      8 2014-12-16 00:56:27.000000000 evenlen
-THIN-NEXT: rw-r--r-- 1000/1000      7 2014-12-16 00:56:27.000000000 oddlen
-THIN-NEXT: rwxr-xr-x 1000/1000   1465 2014-12-16 00:56:27.000000000 very_long_bytecode_file_name.bc
-THIN-NEXT: rw-r--r-- 1000/1000   2280 2014-12-16 00:56:27.000000000 IsNAN.o
+THIN:      rw-r--r-- 1000/1000      8 2014-12-16 00:56:27.000000000 Inputs/evenlen
+THIN-NEXT: rw-r--r-- 1000/1000      7 2014-12-16 00:56:27.000000000 Inputs/oddlen
+THIN-NEXT: rwxr-xr-x 1000/1000   1465 2014-12-16 00:56:27.000000000 Inputs/very_long_bytecode_file_name.bc
+THIN-NEXT: rw-r--r-- 1000/1000   2280 2014-12-16 00:56:27.000000000 Inputs/IsNAN.o
 
 Test reading an archive with just a symbol table. We use to reject them.
-RUN: llvm-ar tv %p/Inputs/symtab-only.a | FileCheck --allow-empty --check-prefix=EMPTY %s
+RUN: llvm-ar tv Inputs/symtab-only.a | FileCheck --allow-empty --check-prefix=EMPTY %s
 EMPTY-NOT: {{.}}
 
 Test reading a thin archive with directory names.
-RUN: env TZ=GMT llvm-ar tv %p/Inputs/thin-path.a | FileCheck %s --check-prefix=THINPATH -strict-whitespace
+RUN: env TZ=GMT llvm-ar tv Inputs/thin-path.a | FileCheck %s --check-prefix=THINPATH -strict-whitespace
 
-THINPATH: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 test.o
-THINPATH-NEXT: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 t/test2.o
+THINPATH: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 Inputs/test.o
+THINPATH-NEXT: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 Inputs/t/test2.o


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27218.79603.patch
Type: text/x-patch
Size: 4326 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161129/a93b32f9/attachment.bin>


More information about the llvm-commits mailing list