James Y Knight 9c2d52014c Fix support for distinguishing archive members by timestamp on Darwin.
On Darwin, the binary's symbol table points to debug info in object
files -- potentially object files within a static library. Such a
library may have multiple entries with the same name, distinguished
only by timestamp.

The code was already _attempting_ to handle this case (see the code in
ObjectContainerBSDArchive::Archive::FindObject which disambiguates via
timestamp). But, unfortunately, while the timestamp was taken into
account on the _first_ lookup, the result was then cached in a map
keyed only off of the path.

Added the timestamp to the cache, and added a test case.

Differential Revision: https://reviews.llvm.org/D47660

llvm-svn: 333813
2018-06-02 02:44:10 +00:00

23 lines
590 B
Makefile

LEVEL = ../../make
C_SOURCES := main.c
# Make an archive that has two object files with the same name, but
# different timestamps. Do it all in one rule so that the timestamps
# can be controlled without confusing Make.
libfoo.a: a.c sub1/a.c
$(CC) $(CFLAGS) -c $(<D)/a.c -o a.o
mkdir -p sub1
$(CC) $(CFLAGS) -c $(<D)/sub1/a.c -o sub1/a.o
touch -t '198001010000.00' a.o
touch -t '198001010000.01' sub1/a.o
$(AR) $(ARFLAGS) $@ a.o sub1/a.o
rm a.o sub1/a.o
include $(LEVEL)/Makefile.rules
# Needs to come after include
OBJECTS += libfoo.a
$(EXE) : libfoo.a
.DEFAULT_GOAL := $(EXE)