diff --git a/Makefile b/Makefile
index a7101cc..264f65d 100644
--- a/Makefile
+++ b/Makefile
@@ -37,21 +37,24 @@
 
 # We should only run pwd once, not every time we refer to ${BUILD}.
 SRCDIR := $(shell pwd)
-BUILD ?= $(SRCDIR)/build
+BUILD = $(SRCDIR)/build
 export BUILD
 
 # Stuff for 'make install'
-INSTALL ?= install
-DESTDIR ?= /usr/local/bin
+INSTALL = install
+DESTDIR = /usr/local/bin
+OLDDIR = /old_bins
 
 ifeq (${MINIMAL},)
 # Host install just puts everything in one place
-UB_DIR=${DESTDIR}
-SB_DIR=${DESTDIR}
-VB_DIR=${DESTDIR}
+FT_DIR=${DESTDIR}
+F_DIR=${DESTDIR}
+UB_DIR=${DESTDIR}${OLDDIR}
 else
 # Target install puts things into DESTDIR subdirectories
-UB_DIR=${DESTDIR}/usr/bin
+FT_DIR=/usr/bin
+F_DIR=${DESTDIR}${FT_DIR}
+UB_DIR=${F_DIR}${OLDDIR}
 SB_DIR=${DESTDIR}/sbin
 VB_DIR=${DESTDIR}/usr/share/vboot/bin
 endif
@@ -135,6 +138,10 @@
 CFLAGS += -DNDEBUG
 endif
 
+ifneq (${WITH_LOGGING},)
+CFLAGS += -DWITH_LOGGING
+endif
+
 # Create / use dependency files
 CFLAGS += -MMD -MF $@.d
 
@@ -429,8 +436,13 @@
 # The unified firmware utility will eventually replace all the others
 FUTIL_BIN = ${BUILD}/futility/futility
 
+# These are the others it will replace.
+FUTIL_OLD = $(notdir ${CGPT} ${UTIL_BINS} ${UTIL_SCRIPTS} \
+		${SIGNING_SCRIPTS} ${SIGNING_SCRIPTS_DEV})
+
 FUTIL_SRCS = \
-	futility/IGNOREME.c
+	futility/futility.c \
+	futility/cmd_foo.c
 
 FUTIL_LDS = futility/futility.lds
 
@@ -696,13 +708,15 @@
 # And some signing stuff for the target
 .PHONY: signing_install
 signing_install: ${SIGNING_SCRIPTS} ${SIGNING_SCRIPTS_DEV} ${SIGNING_COMMON}
-ifneq (${MINIMAL},)
 	@printf "    INSTALL       SIGNING\n"
 	${Q}mkdir -p ${UB_DIR}
 	${Q}${INSTALL} -t ${UB_DIR} ${SIGNING_SCRIPTS}
+	${Q}${INSTALL} -t ${UB_DIR} ${SIGNING_SCRIPTS_DEV}
+	${Q}${INSTALL} -t ${UB_DIR} -m 'u=rw,go=r,a-s' ${SIGNING_COMMON}
+ifneq (${VB_DIR},)
 	${Q}mkdir -p ${VB_DIR}
-	${Q}${INSTALL} -t ${VB_DIR} ${SIGNING_SCRIPTS_DEV}
-	${Q}${INSTALL} -t ${VB_DIR} -m 'u=rw,go=r,a-s' ${SIGNING_COMMON}
+	${Q}for prog in $(notdir ${SIGNING_SCRIPTS_DEV}); do \
+		ln -sf "${FT_DIR}/futility" "${VB_DIR}/$$prog"; done
 endif
 
 # ----------------------------------------------------------------------------
@@ -718,9 +732,10 @@
 .PHONY: futil_install
 futil_install: ${FUTIL_BIN}
 	@printf "    INSTALL       futility\n"
-	${Q}mkdir -p ${UB_DIR}
-	${Q}${INSTALL} -t ${UB_DIR} $^
-
+	${Q}mkdir -p ${F_DIR}
+	${Q}${INSTALL} -t ${F_DIR} ${FUTIL_BIN}
+	${Q}for prog in ${FUTIL_OLD}; do \
+		ln -sf futility "${F_DIR}/$$prog"; done
 
 # ----------------------------------------------------------------------------
 # Utility to generate TLCL structure definition header file.
@@ -791,6 +806,10 @@
 # GBB utility needs C++ linker. TODO: It shouldn't.
 ${BUILD}/utility/gbb_utility: LD = ${CXX}
 
+# Because we play some clever linker script games to add new commands without
+# changing any header files, futility must be linked with ld.bfd, not gold.
+${FUTIL_BIN}: LDFLAGS += -fuse-ld=bfd
+
 # Some utilities need external crypto functions
 ${BUILD}/utility/dumpRSAPublicKey: LDLIBS += ${CRYPTO_LIBS}
 ${BUILD}/utility/pad_digest_utility: LDLIBS += ${CRYPTO_LIBS}
@@ -855,7 +874,7 @@
 
 ifeq (${MINIMAL},)
 # Bitmap utility isn't compiled for minimal variant
-test_targets:: runbmptests
+test_targets:: runbmptests runfutiltests
 # Scripts don't work under qemu testing
 # TODO: convert scripts to makefile so they can be called directly
 test_targets:: runtestscripts
@@ -938,9 +957,9 @@
 	${RUNTEST} ${BUILD_RUN}/tests/vboot_nvstorage_test
 
 .PHONY: runfutiltests
-runfutiltests: DESTDIR := ${TEST_INSTALL_DIR}
+runfutiltests: override DESTDIR = ${TEST_INSTALL_DIR}
 runfutiltests: test_setup install
-	@echo "$@ passed"
+	futility/tests/run_futility_tests.sh ${DESTDIR}
 
 # Run long tests, including all permutations of encryption keys (instead of
 # just the ones we use) and tests of currently-unused code.
@@ -987,4 +1006,3 @@
 else
 coverage: coverage_init runtests coverage_html
 endif
-
diff --git a/futility/IGNOREME.c b/futility/IGNOREME.c
deleted file mode 100644
index c90c87e..0000000
--- a/futility/IGNOREME.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-  printf("Pay no attention to that man behind the curtain.\n");
-  return 1;
-}
diff --git a/futility/cmd_foo.c b/futility/cmd_foo.c
new file mode 100644
index 0000000..e02a9ff
--- /dev/null
+++ b/futility/cmd_foo.c
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <stdio.h>
+
+#include "futility.h"
+
+static int do_something(int argc, char *argv[])
+{
+  int i;
+  printf("this is %s\n", __func__);
+  for (i = 0; i < argc; i++)
+    printf("argv[%d] = %s\n", i, argv[i]);
+  return 0;
+}
+
+DECLARE_FUTIL_COMMAND(foo, do_something, "invoke a foo");
+DECLARE_FUTIL_COMMAND(bar, do_something, "go to bar");
+DECLARE_FUTIL_COMMAND(hey, do_something, "shout");
diff --git a/futility/futility.c b/futility/futility.c
new file mode 100644
index 0000000..dd70b68
--- /dev/null
+++ b/futility/futility.c
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#define _GNU_SOURCE
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "futility.h"
+
+#define MYNAME "futility"
+#define SUBDIR "old_bins"
+
+/* HEY: FIXME: Hardcoding logs on for now. Delete these lines for real use. */
+#ifndef WITH_LOGGING
+#define WITH_LOGGING
+#endif
+
+/******************************************************************************/
+
+static const char * const usage= "\n\
+Usage: " MYNAME " PROGRAM|COMMAND [args...]\n\
+\n\
+This is the unified firmware utility, which will eventually replace\n\
+all the distinct userspace tools formerly produced by the\n\
+vboot_reference package.\n\
+\n\
+When symlinked under the name of one of those previous tools, it can\n\
+do one of two things: either it will fully implement the original\n\
+behavior, or (until that functionality is complete) it will just exec\n\
+the original binary.\n\
+\n\
+In either case it may also record some usage information in /tmp to\n\
+help improve coverage and correctness.\n\
+\n\
+If you invoke it directly instead of via a symlink, it requires one\n\
+argument, which is the name of the old binary to exec. That binary\n\
+must be located in a directory named \"" SUBDIR "\" underneath\n\
+the " MYNAME " executable.\n\
+\n";
+
+static int help(int argc, char *argv[])
+{
+  futil_cmd_t *cmd;
+  int i;
+
+  fputs(usage, stdout);
+
+  printf("The following commands are built-in:\n");
+
+  for (cmd = futil_cmds_start(); cmd < futil_cmds_end(); cmd++)
+    printf("  %-20s %s\n",
+           cmd->name, cmd->shorthelp);
+
+  printf("\n");
+
+  printf("FYI, you added these args that I'm ignoring:\n");
+  for (i = 0; i < argc; i++)
+    printf("argv[%d] = %s\n", i, argv[i]);
+
+  return 0;
+}
+DECLARE_FUTIL_COMMAND(help, help, "Show a bit of help");
+
+
+#ifdef WITH_LOGGING
+/******************************************************************************/
+/* Logging stuff */
+
+#define LOGFILE "/tmp/futility.log"
+
+static int log_fd = -1;
+
+/* Write the string and a newline. Silently give up on errors */
+static void log_str(char *str)
+{
+  int len, done, n;
+
+  if (log_fd < 0)
+    return;
+
+  if (!str)
+    str = "(NULL)";
+
+  len = strlen(str);
+  if (len == 0) {
+    str = "(EMPTY)";
+    len = strlen(str);
+  }
+
+  for (done = 0; done < len; done += n) {
+    n = write(log_fd, str+done, len-done);
+    if (n < 0)
+      return;
+  }
+
+  write(log_fd, "\n", 1);
+}
+
+static void log_close(void)
+{
+  struct flock lock;
+
+  if (log_fd >= 0) {
+    memset(&lock, 0, sizeof(lock));
+    lock.l_type = F_UNLCK;
+    lock.l_whence = SEEK_SET;
+    if (fcntl(log_fd, F_SETLKW, &lock))
+      perror("Unable to unlock log file");
+
+    close(log_fd);
+    log_fd = -1;
+  }
+}
+
+static void log_open(void)
+{
+  struct flock lock;
+  int ret;
+
+  log_fd = open(LOGFILE, O_WRONLY|O_APPEND|O_CREAT, 0666);
+  if (log_fd < 0) {
+
+    if (errno != EACCES)
+      return;
+
+    /* Permission problems should improve shortly ... */
+    sleep(1);
+    log_fd = open(LOGFILE, O_WRONLY|O_APPEND|O_CREAT, 0666);
+    if (log_fd < 0)                     /* Nope, they didn't */
+      return;
+  }
+
+  /* Let anyone have a turn */
+  fchmod(log_fd, 0666);
+
+  /* But only one at a time */
+  memset(&lock, 0, sizeof(lock));
+  lock.l_type = F_WRLCK;
+  lock.l_whence = SEEK_END;
+
+  ret = fcntl(log_fd, F_SETLKW, &lock); /* this blocks */
+  if (ret < 0)
+    log_close();
+}
+
+static void log_args(int argc, char *argv[])
+{
+  int i;
+  ssize_t r;
+  pid_t parent;
+  char buf[80];
+  char truename[PATH_MAX+10];
+
+  log_open();
+
+  /* delimiter */
+  log_str("##### HEY #####");
+
+  /* Can we tell who called us? */
+  parent = getppid();
+  snprintf(buf, 80, "/proc/%d/exe", parent);
+  strncat(truename, "CALLER:", 7);
+  r = readlink(buf, truename+7, PATH_MAX-1);
+  if (r >= 0) {
+    truename[r+7] = '\0';
+    log_str(truename);
+  }
+
+  /* Now log the stuff about ourselves */
+  for (i = 0; i < argc; i++)
+    log_str(argv[i]);
+
+  log_close();
+}
+#else
+#define log_args(...)
+#endif /* WITH_LOGGING */
+
+
+/******************************************************************************/
+/* Here we go */
+
+int main(int argc, char *argv[], char *envp[])
+{
+  char *progname;
+  char truename[PATH_MAX];
+  char oldname[PATH_MAX];
+  char buf[80];
+  pid_t myproc;
+  ssize_t r;
+  char *s;
+  futil_cmd_t *cmd;
+
+  log_args(argc, argv);
+
+  /* How were we invoked? */
+  progname = strrchr(argv[0], '/');
+  if (progname)
+    progname++;
+  else
+    progname = argv[0];
+
+  /* Invoked directly by name */
+  if (0 == strcmp(progname, MYNAME)) {
+    if (argc < 2) {                     /* must have an argument */
+      fputs(usage, stderr);
+      exit(1);
+    }
+
+    /* We can just pass the rest along, then */
+    argc--;
+    argv++;
+
+    /* So now what name do we want to invoke? */
+    progname = strrchr(argv[0], '/');
+    if (progname)
+      progname++;
+    else
+      progname = argv[0];
+  }
+
+  /* See if it's asking for something we know how to do ourselves */
+  for (cmd = futil_cmds_start(); cmd < futil_cmds_end(); cmd++)
+    if (0 == strcmp(cmd->name, progname))
+      return cmd->handler(argc, argv);
+
+  /* Nope, it must be wrapped */
+
+  /* The old binaries live under the true executable. Find out where that is. */
+  myproc = getpid();
+  snprintf(buf, 80, "/proc/%d/exe", myproc);
+  r = readlink(buf, truename, PATH_MAX-1);
+  if (r < 0) {
+    fprintf(stderr, "%s is lost: %s => %s: %s\n", MYNAME, argv[0],
+            buf, strerror(errno));
+    exit(1);
+  }
+  truename[r] = '\0';
+  s = strrchr(truename, '/');           /* Find the true directory */
+  if (s) {
+    *s = '\0';
+  } else {                              /* I don't think this can happen */
+    fprintf(stderr, "%s says %s doesn't make sense\n", MYNAME, truename);
+    exit(1);
+  }
+  /* We've allocated PATH_MAX. If the old binary path doesn't fit, it can't be
+   * in the filesystem. */
+  snprintf(oldname, PATH_MAX, "%s/%s/%s", truename, SUBDIR, progname);
+
+  fflush(0);
+  execve(oldname, argv, envp);
+
+  fprintf(stderr, "%s failed to exec %s: %s\n", MYNAME,
+          oldname, strerror(errno));
+  return 1;
+}
diff --git a/futility/futility.h b/futility/futility.h
new file mode 100644
index 0000000..ed26890
--- /dev/null
+++ b/futility/futility.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#include <stdint.h>
+
+#ifndef VBOOT_REFERENCE_FUTILITY_H_
+#define VBOOT_REFERENCE_FUTILITY_H_
+
+/*
+  Here's a structure to define the commands that futility implements.
+ */
+typedef struct {
+  const char const * name;
+  int (*handler)(int argc, char **argv);
+  const char const * shorthelp;
+} __attribute__ ((aligned (16))) futil_cmd_t ; /* align for x86_64 ABI */
+
+/*
+ * Create an instance in a separate section. We'll have a linker script to
+ * gather them all up later, so we can refer to them without explictly
+ * declaring every function in a header somewhere
+ */
+#define DECLARE_FUTIL_COMMAND(name, handler, shorthelp)          \
+        static const char __futil_cmd_name_##name[] = #name;     \
+        const futil_cmd_t __futil_cmd_##name                     \
+        __attribute__((section(".futil_cmds." #name)))           \
+          = { __futil_cmd_name_##name, handler, shorthelp }
+
+/*
+ * Functions to find the command table. We have to play some games here,
+ * because the x86_64 ABI says this:
+ *
+ *   An array uses the same alignment as its elements, except that a local or
+ *   global array variable that requires at least 16 bytes, or a C99 local or
+ *   global variable-length array variable, always has alignment of at least
+ *   16 bytes.
+ *
+ * The linker script doesn't know what alignment to use for __futil_cmds_start,
+ * because that's determined at compile-time and unavailable to the script
+ * unless we define one global futil_cmd_t in advance.
+ */
+static inline futil_cmd_t *futil_cmds_start(void)
+{
+  extern uintptr_t __futil_cmds_start[]; /* from linker script */
+  uintptr_t mask = sizeof(futil_cmd_t) - 1;
+  uintptr_t addr = (uintptr_t)(__futil_cmds_start);
+  return (futil_cmd_t *)((addr + mask) & ~mask);
+}
+static inline futil_cmd_t *futil_cmds_end(void)
+{
+  extern uintptr_t __futil_cmds_end[]; /* from linker script */
+  return (futil_cmd_t *)(&__futil_cmds_end[0]);
+}
+
+#endif /* VBOOT_REFERENCE_FUTILITY_H_ */
diff --git a/futility/futility.lds b/futility/futility.lds
index e428ddc..e03ab5c 100644
--- a/futility/futility.lds
+++ b/futility/futility.lds
@@ -4,4 +4,11 @@
  * found in the LICENSE file.
  */
 
-/* Nothing to see here. Move along... */
+SECTIONS
+{
+  .rodata : {
+    __futil_cmds_start = .;
+    *(SORT(.futil_cmds.*));
+    __futil_cmds_end = .;
+  }
+}
diff --git a/futility/tests/common.sh b/futility/tests/common.sh
new file mode 100755
index 0000000..0105b0c
--- /dev/null
+++ b/futility/tests/common.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Color output encodings.
+COL_RED='\E[31;1m'
+COL_GREEN='\E[32;1m'
+COL_YELLOW='\E[33;1m'
+COL_BLUE='\E[34;1m'
+COL_STOP='\E[0;m'
+
+# args: [message]
+function green {
+  echo -e "${COL_GREEN}$*${COL_STOP}"
+}
+
+# args: [message]
+function yellow {
+  echo -e "${COL_YELLOW}WARNING: $*${COL_STOP}"
+}
+
+function red {
+  echo -e "${COL_RED}$*${COL_STOP}"
+}
+
+# args: [nested level [message]]
+function error {
+  local lev=${1:-}
+  case "${1:-}" in
+    [0-9]*)
+      lev=$1
+      shift
+      ;;
+    *) lev=0
+      ;;
+  esac
+  local x=$(caller $lev)
+  local cline=${x%% *}
+  local cfunc=${x#* }
+  cfunc=${cfunc##*/}
+  local args="$*"
+  local spacer=${args:+: }
+  red "at ${cfunc}, line ${cline}${spacer}${args}" 1>&2
+  exit 1
+}
diff --git a/futility/tests/run_futility_tests.sh b/futility/tests/run_futility_tests.sh
new file mode 100755
index 0000000..ff2de4b
--- /dev/null
+++ b/futility/tests/run_futility_tests.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Load common constants and variables.
+. "$(dirname "$0")/common.sh"
+
+# Where are the programs I'm testing against?
+[ -z "${1:-}" ] && error "Directory argument is required"
+BINDIR="$1"
+shift
+
+FUTILITY="$BINDIR/futility"
+OLDDIR="$BINDIR/old_bins"
+
+BUILD=$(dirname "${BINDIR}")
+
+# Here are the old programs to be wrapped
+# FIXME(chromium-os:37062): There are others besides these.
+# FIXME: dev_debug_vboot isn't tested right now.
+PROGS=${*:-cgpt crossystem dev_sign_file dumpRSAPublicKey
+           dump_fmap dump_kernel_config enable_dev_usb_boot gbb_utility
+           tpm_init_temp_fix tpmc vbutil_firmware vbutil_kernel vbutil_key
+           vbutil_keyblock vbutil_what_keys}
+
+# Get ready
+pass=0
+progs=0
+pwd
+OUTDIR="${BUILD}/tests/futility_test_dir"
+[ -d "$OUTDIR" ] || mkdir -p "$OUTDIR"
+
+# For now just compare results of invoking each program with no args.
+# FIXME(chromium-os:37062): Create true rigorous tests for every program.
+for i in $PROGS; do
+  : $(( progs++ ))
+
+  # Try the real thing first
+  echo -n "$i ... "
+  rc=$("${OLDDIR}/$i" \
+    1>"${OUTDIR}/$i.stdout.orig" 2>"${OUTDIR}/$i.stderr.orig" \
+    || echo "$?")
+  echo "${rc:-0}" > "${OUTDIR}/$i.return.orig"
+
+  # Then try the symlink
+  rc=$("$BINDIR/$i" 1>"${OUTDIR}/$i.stdout.link" \
+       2>"${OUTDIR}/$i.stderr.link" || echo "$?")
+  echo "${rc:-0}" > "${OUTDIR}/$i.return.link"
+
+  # And finally try the explicit wrapper
+  rc=$("$FUTILITY" "$i" 1>"${OUTDIR}/$i.stdout.futil" \
+       2>"${OUTDIR}/$i.stderr.futil" || echo "$?")
+  echo "${rc:-0}" > "${OUTDIR}/$i.return.futil"
+
+  # Different?
+  if cmp -s "${OUTDIR}/$i.return.orig" "${OUTDIR}/$i.return.link" &&
+     cmp -s "${OUTDIR}/$i.stdout.orig" "${OUTDIR}/$i.stdout.link" &&
+     cmp -s "${OUTDIR}/$i.stderr.orig" "${OUTDIR}/$i.stderr.link" &&
+     cmp -s "${OUTDIR}/$i.return.orig" "${OUTDIR}/$i.return.futil" &&
+     cmp -s "${OUTDIR}/$i.stdout.orig" "${OUTDIR}/$i.stdout.futil" &&
+     cmp -s "${OUTDIR}/$i.stderr.orig" "${OUTDIR}/$i.stderr.futil" ; then
+    green "passed"
+    : $(( pass++ ))
+    rm -f ${OUTDIR}/$i.{stdout,stderr,return}.{orig,link,futil}
+  else
+    red "failed"
+  fi
+done
+
+# done
+if [ "$pass" -eq "$progs" ]; then
+  green "Success: $pass / $progs passed"
+  exit 0
+fi
+
+red "FAIL: $pass / $progs passed"
+exit 1
diff --git a/utility/dumpRSAPublicKey.c b/utility/dumpRSAPublicKey.c
index da8597a..113e9a0 100644
--- a/utility/dumpRSAPublicKey.c
+++ b/utility/dumpRSAPublicKey.c
@@ -141,9 +141,15 @@
   X509* cert = NULL;
   RSA* pubkey = NULL;
   EVP_PKEY* key;
+  char *progname;
 
   if (argc != 3 || (strcmp(argv[1], "-cert") && strcmp(argv[1], "-pub"))) {
-    fprintf(stderr, "Usage: %s <-cert | -pub> <file>\n", argv[0]);
+    progname = strrchr(argv[0], '/');
+    if (progname)
+      progname++;
+    else
+      progname = argv[0];
+    fprintf(stderr, "Usage: %s <-cert | -pub> <file>\n", progname);
     return -1;
   }
 
diff --git a/utility/gbb_utility.cc b/utility/gbb_utility.cc
index 52135d0..e68bd9b 100644
--- a/utility/gbb_utility.cc
+++ b/utility/gbb_utility.cc
@@ -486,6 +486,11 @@
 
 // utility function: provide usage of this utility and exit.
 static void usagehelp_exit(const char *prog_name) {
+  const char *basename = strrchr(prog_name, '/');
+  if (basename)
+    basename++;
+  else
+    basename = prog_name;
   fprintf(stderr,
     "Utility to manage Google Binary Block (GBB)\n"
     "Usage: %s [-g|-s|-c] [OPTIONS] bios_file [output_file]\n"
@@ -516,7 +521,7 @@
     "  %s -g bios.bin\n"
     "  %s --set --hwid='New Model' -k key.bin bios.bin newbios.bin\n"
     "  %s -c 0x100,0x1000,0x03DE80,0x1000 gbb.blob\n",
-    prog_name, prog_name, prog_name, prog_name);
+    basename, basename, basename, basename);
   exit(1);
 }
 
diff --git a/utility/tpmc.c b/utility/tpmc.c
index 898e255..9302dd1 100644
--- a/utility/tpmc.c
+++ b/utility/tpmc.c
@@ -412,9 +412,16 @@
 static int n_commands = sizeof(command_table) / sizeof(command_table[0]);
 
 int main(int argc, char* argv[]) {
+  char *progname;
+  progname = strrchr(argv[0], '/');
+  if (progname)
+    progname++;
+  else
+    progname = argv[0];
+
   if (argc < 2) {
     fprintf(stderr, "usage: %s <TPM command> [args]\n   or: %s help\n",
-            argv[0], argv[0]);
+            progname, progname);
     return OTHER_ERROR;
   } else {
     command_record* c;
@@ -439,7 +446,7 @@
     }
 
     /* No command matched. */
-    fprintf(stderr, "%s: unknown command: %s\n", argv[0], cmd);
+    fprintf(stderr, "%s: unknown command: %s\n", progname, cmd);
     return OTHER_ERROR;
   }
 }
