110 Commits

Author SHA1 Message Date
Rafael Espindola
bd6cb260b9 Use open+fstat instead of stat+open.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186381 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-16 03:34:31 +00:00
Rafael Espindola
289e241d77 Remember that we have a null terminated string.
This is a micro optimization. Instead of going char*->StringRef->Twine->char*,
go char*->Twine->char* and avoid having to copy the filename on the stack.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186380 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-16 03:30:10 +00:00
Rafael Espindola
718af78920 Try to open the file before use data from stat.
Looks like on mingw we get bogus last modification times on directories.
Should fix the mingw bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186240 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-13 05:07:22 +00:00
Rafael Espindola
c951651894 Add r186216 back, but make the test tolerant of different uids and gids.
original message:
Fix a off by one error about which members need to use the string table.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186238 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-13 04:14:13 +00:00
Chandler Carruth
1dedabdfad Revert commit r186216 -- it's breaking bots:
http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/6897/steps/check-all/logs/LLVM%3A%3Aarchive-format.test

Original commit log:
  Fix a off by one error about which members need to use the string
  table.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186232 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-13 00:42:56 +00:00
Rafael Espindola
6383ef98fa Fix a off by one error about which members need to use the string table.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186216 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-12 22:22:34 +00:00
Rafael Espindola
33ccfb2d26 Fix the build with c++03.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186198 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-12 20:28:02 +00:00
Rafael Espindola
34ac52d937 Change llvm-ar to use lib/Object.
This fixes two bugs is lib/Object that the use in llvm-ar found:
* In OS X created archives, the name can be padded with nulls. Strip them.
* In the constructor, remember the first non special member and use that in
  begin_children. This makes sure we skip all special members, not just the
  first one.

The change to llvm-ar itself consist of
* Using lib/Object for reading archives instead of ArchiveReader.cpp.
* Writing the modified archive directly, instead of creating an in memory
  representation.

The old Archive library was way more general than what is needed, as can
be seen by the diffstat of this patch.

Having llvm-ar using lib/Object now opens the way for creating regular symbol
tables for both native objects and bitcode files so that we can use those
archives for LTO.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186197 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-12 20:21:39 +00:00
Rafael Espindola
2494dfcf17 Add static.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186170 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-12 16:29:27 +00:00
Rafael Espindola
4d5b0da81b Use %llu to print a 64 bit number. Should fix the ARM bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186113 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-11 20:01:30 +00:00
Rafael Espindola
1b3e3eef1f InsertBefore is the same as AddBefore. Delete it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186094 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-11 15:54:53 +00:00
Rafael Espindola
71857ccdb8 Fix a FIXME about the format and add a test.
While at it, use strftime on Unix too and use the thread safe versions
of localtime.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186090 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-11 15:35:23 +00:00
Rafael Espindola
1b0dc64919 Remove the 'N' modifier from llvm-ar.
* It is not present on OS X.
* It is untested.
* It is not needed for using ar in a build system.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186080 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-11 13:03:27 +00:00
Rafael Espindola
55804a089e Delete dead code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186079 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-11 12:54:11 +00:00
Rafael Espindola
ab7348f8b1 Remove support for truncating names in archives.
* All systems we support have some form of long name support.
* The options has different names and semantics in different implementations
  ('f' on gnu, 'T' on OS X), which makes it unlikely it is normally used on
  build systems.
* It was completely untested.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186078 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-11 12:38:02 +00:00
Rafael Espindola
4f2779b809 Sync llvm-ar's help string with the options it supports.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186076 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-11 12:28:36 +00:00
Rafael Espindola
35637fc623 Create files with the correct permission instead of changing it afterwards.
No intended functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185832 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-08 16:16:51 +00:00
Michael Gottesman
2be430d251 [llvm-ar] Added llvm_unreachable to quiet -Wreturn-type warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185751 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-06 02:39:51 +00:00
Rafael Espindola
61de142984 Don't create an archive if, for example, we are asked to print the index.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185697 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-05 13:03:07 +00:00
Rafael Espindola
ef2703a1fb Use simpler version of exists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185695 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-05 12:44:49 +00:00
Rafael Espindola
87b8a7f999 Remove NoOperation.
parseCommandLine prints and error and exists if no operation is specified, so
it never returns NoOperation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185691 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-05 12:12:43 +00:00
Rafael Espindola
24663f69cc Don't treat bitcode files specially in llvm-ar.
We really want bitcode files to behave as regular object files in archives, so
we don't need to track that a member is bitcode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185681 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-05 04:19:32 +00:00
Rafael Espindola
8874cc242b Add a fixme.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184486 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 22:04:56 +00:00
Rafael Espindola
11ca2e508c Add a setLastModificationAndAccessTime to PathV2.
With this we can remove the last use of PathV1 from llvm-ar.cpp.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184464 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 20:56:14 +00:00
Rafael Espindola
f9f44f3d5a Use a raw_fd_ostream instead of a std::ofstream.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184460 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 19:50:39 +00:00
Rafael Espindola
201c66c9b0 Remove a trivial use of sys::Path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184455 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 18:55:44 +00:00
Rafael Espindola
29c17db650 Add support for getting the last modification time from a file_status.
Use that in llvm-ar.cpp to replace a use of sys::PathWithStatus.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184450 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 18:42:04 +00:00
Rafael Espindola
eb729e004b Use only the filename when deciding if a file is a duplicate.
Matches gnu ar behavior.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184448 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 18:30:37 +00:00
Rafael Espindola
122c57c0b8 Add r184420 back, but also handle long file names.
Original message:

Don't include directory names in archives.

This matches the behavior of both gnu and os x versions of ar.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184423 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 13:41:51 +00:00
Rafael Espindola
9d39cb1d64 Revert "Don't include directory names in archives."
This reverts commit 184420.
Investigating the bot failures.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184421 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 13:23:48 +00:00
Rafael Espindola
be984d6376 Don't include directory names in archives.
This matches the behavior of both gnu and os x versions of ar.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184420 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 13:16:44 +00:00
Rafael Espindola
6f2c88a08b Remove remaining bits of the old LLVM specific symtab handling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184418 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 13:00:30 +00:00
Rafael Espindola
436cd0cfcf Convert a use of sys::Path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184412 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 11:59:19 +00:00
Rafael Espindola
b4900b132e Remove last use of PathV1.h from Archive.h
Store the individual fields we need instead of a sys::FileStatus.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184353 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 21:13:59 +00:00
Rafael Espindola
27ff1f3f7d Always set the mode.
This matches GNU ar behavior. Also remove the now unused getFileStatus method.
Not sure how to add a test, it would have to run ls -l or something like that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184337 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 19:17:15 +00:00
Rafael Espindola
13f4fd77b9 Remove more uses of sys::Path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184328 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 17:49:07 +00:00
Rafael Espindola
3baf01bd95 Another attempt at fixing the bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184318 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 16:16:13 +00:00
Rafael Espindola
7391366cdf Attempt at fixing some bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184316 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 15:56:53 +00:00
Rafael Espindola
4d07abbb01 Reduce sys::Path usage in llvm-ar.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184315 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 15:45:37 +00:00
Rafael Espindola
8fe960ed50 Remove the 'R' modifier.
It is not present in GNU or OS X versions and doesn't make a lot of sense
for llvm-ar.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184306 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 14:58:16 +00:00
Rafael Espindola
8496faea07 Move lib/Archive to tools/llvm-ar.
llvm-ar is the only tool that needs to write archive files. Every other tool
should be able to use the lib/Object interface.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184083 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-17 15:47:20 +00:00
Rafael Espindola
250bfb1745 Remove the LLVM specific archive index.
Archive files (.a) can have a symbol table indicating which object
files in them define which symbols. The purpose of this symbol table
is to speed up linking by allowing the linker the read only the .o
files it is actually going to use instead of having to parse every
object's symbol table.

LLVM's archive library currently supports a LLVM specific format for
such table. It is hard to see any value in that now that llvm-ld is
gone:

* System linkers don't use it: GNU ar uses the same plugin as the
linker to create archive files with a regular index. The OS X ar
creates no symbol table for IL files, I assume the linker just parses
all IL files.

* It doesn't interact well with archives having both IL and native objects.

* We probably don't want to be responsible for yet another archive
format variant.

This patch then:

* Removes support for creating and reading such index from lib/Archive.
* Remove llvm-ranlib, since there is nothing left for it to do.

We should in the future add support for regular indexes to llvm-ar for
both native and IL objects. When we do that, llvm-ranlib should be
reimplemented as a symlink to llvm-ar, as it is equivalent to "ar s".

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184019 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-14 23:25:53 +00:00
Chandler Carruth
0b8c9a80f2 Move all of the header files which are involved in modelling the LLVM IR
into their new header subdirectory: include/llvm/IR. This matches the
directory structure of lib, and begins to correct a long standing point
of file layout clutter in LLVM.

There are still more header files to move here, but I wanted to handle
them in separate commits to make tracking what files make sense at each
layer easier.

The only really questionable files here are the target intrinsic
tablegen files. But that's a battle I'd rather not fight today.

I've updated both CMake and Makefile build systems (I think, and my
tests think, but I may have missed something).

I've also re-sorted the includes throughout the project. I'll be
committing updates to Clang, DragonEgg, and Polly momentarily.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171366 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-02 11:36:10 +00:00
Chandler Carruth
f010c464a1 Sort the #include lines for tools/...
Again, tools are trickier to pick the main module header for than
library source files. I've started to follow the pattern of using
LLVMContext.h when it is included as a stub for program source files.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169252 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-04 10:44:52 +00:00
Joerg Sonnenberger
975bc072ae Adjust llvm-ar and llvm-ranlib to not depend on exception handling.
Always use an exit code of 1, but print the help message if useful.
Remove the exception handling tag in llvm-as, llvm-dis and
llvm-bcanalyzer, where it isn't used.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166767 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-26 10:49:15 +00:00
Rafael Espindola
94bc246a8b Remove references to compression in llvm-ar. It has been a long time since we
switched from a bytecode+bzip2 to the current bitcode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161651 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-10 01:57:52 +00:00
Michael J. Spencer
83a113b77c Fix Whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123152 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-10 02:34:40 +00:00
Michael J. Spencer
54453f2978 Support/Path: Deprecate PathV1::exists and replace all uses with PathV2::fs::exists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123151 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-10 02:34:23 +00:00
Chris Lattner
424a04ec4e convert llvm-ar and llvm-ranlib to raw_ostream from iostreams.
Patch by Danil Malyshev!



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120341 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-29 23:02:20 +00:00
Michael J. Spencer
1f6efa3996 Merge System into Support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120298 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-29 18:16:10 +00:00