Skip to content

Commit

Permalink
add infrastructure to record and report the version of libc.so
Browse files Browse the repository at this point in the history
this is still experimental and subject to change. for git checkouts,
an attempt is made to record the exact revision to aid in bug reports
and debugging. no version information is recorded in the static libc.a
or binaries it's linked into.
  • Loading branch information
richfelker committed Dec 1, 2013
1 parent 6ec82a3 commit 179ab5a
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 3 deletions.
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ SRCS = $(sort $(wildcard src/*/*.c arch/$(ARCH)/src/*.c))
OBJS = $(SRCS:.c=.o)
LOBJS = $(OBJS:.o=.lo)
GENH = include/bits/alltypes.h
GENH_INT = src/internal/version.h
IMPH = src/internal/stdio_impl.h src/internal/pthread_impl.h src/internal/libc.h

LDFLAGS =
Expand Down Expand Up @@ -64,7 +65,7 @@ clean:
rm -f $(LOBJS)
rm -f $(ALL_LIBS) lib/*.[ao] lib/*.so
rm -f $(ALL_TOOLS)
rm -f $(GENH)
rm -f $(GENH) $(GENH_INT)
rm -f include/bits

distclean: clean
Expand All @@ -79,6 +80,11 @@ include/bits/alltypes.h.in: include/bits
include/bits/alltypes.h: include/bits/alltypes.h.in include/alltypes.h.in tools/mkalltypes.sed
sed -f tools/mkalltypes.sed include/bits/alltypes.h.in include/alltypes.h.in > $@

src/internal/version.h: $(wildcard VERSION .git .git/*)
printf '#define VERSION "%s"\n' "$$(sh tools/version.sh)" > $@

src/internal/version.lo: src/internal/version.h

src/ldso/dynlink.lo: arch/$(ARCH)/reloc.h

crt/crt1.o crt/Scrt1.o: $(wildcard arch/$(ARCH)/crt_arch.h)
Expand Down
1 change: 1 addition & 0 deletions VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.9.14
12 changes: 12 additions & 0 deletions src/internal/version.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifdef SHARED

#include "version.h"

static const char version[] = VERSION;

const char *__libc_get_version()
{
return version;
}

#endif
9 changes: 7 additions & 2 deletions src/ldso/dynlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ void __init_ssp(size_t *);
void *__install_initial_tls(void *);
void __init_libc(char **, char *);

const char *__libc_get_version(void);

static struct dso *head, *tail, *ldso, *fini_head;
static char *env_path, *sys_path;
static unsigned long long gencnt;
Expand Down Expand Up @@ -1040,8 +1042,11 @@ void *__dynlink(int argc, char **argv)
*argv++ = (void *)-1;
if (argv[0] && !strcmp(argv[0], "--")) *argv++ = (void *)-1;
if (!argv[0]) {
dprintf(2, "musl libc/dynamic program loader\n");
dprintf(2, "usage: %s pathname%s\n", ldname,
dprintf(2, "musl libc\n"
"Version %s\n"
"Dynamic Program Loader\n"
"Usage: %s [--] pathname%s\n",
__libc_get_version(), ldname,
ldd_mode ? "" : " [args]");
_exit(1);
}
Expand Down
12 changes: 12 additions & 0 deletions tools/version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh

if test -d .git ; then
if type git >/dev/null 2>&1 ; then
git describe --tags --match 'v[0-9]*' 2>/dev/null \
| sed -e 's/^v//' -e 's/-/-git-/'
else
sed 's/$/-git/' < VERSION
fi
else
cat VERSION
fi

0 comments on commit 179ab5a

Please sign in to comment.