diff --git a/src/base/loader/object_file.cc b/src/base/loader/object_file.cc
index a82314e..86278e4 100644
--- a/src/base/loader/object_file.cc
+++ b/src/base/loader/object_file.cc
@@ -40,6 +40,7 @@
 #include <cstdio>
 #include <list>
 #include <string>
+#include <vector>
 
 #include "base/cprintf.hh"
 #include "base/loader/aout_object.hh"
@@ -97,6 +98,37 @@
             && loadSection(&bss, mem_proxy, addr_mask, offset));
 }
 
+namespace
+{
+
+typedef std::vector<ObjectFile::Loader *> LoaderList;
+
+LoaderList &
+object_file_loaders()
+{
+    static LoaderList loaders;
+    return loaders;
+}
+
+} // anonymous namespace
+
+ObjectFile::Loader::Loader()
+{
+    object_file_loaders().emplace_back(this);
+}
+
+Process *
+ObjectFile::tryLoaders(ProcessParams *params, ObjectFile *obj_file)
+{
+    for (auto &loader: object_file_loaders()) {
+        Process *p = loader->load(params, obj_file);
+        if (p)
+            return p;
+    }
+
+    return nullptr;
+}
+
 static bool
 hasGzipMagic(int fd)
 {
diff --git a/src/base/loader/object_file.hh b/src/base/loader/object_file.hh
index 09c453b..5da7e3c 100644
--- a/src/base/loader/object_file.hh
+++ b/src/base/loader/object_file.hh
@@ -39,6 +39,8 @@
 #include "base/types.hh"
 
 class PortProxy;
+class Process;
+class ProcessParams;
 class SymbolTable;
 
 class ObjectFile
@@ -150,6 +152,38 @@
      * @param a address to load the binary/text section at
      */
     void setTextBase(Addr a) { text.baseAddr = a; }
+
+    /**
+     * Each instance of a Loader subclass will have a chance to try to load
+     * an object file when tryLoaders is called. If they can't because they
+     * aren't compatible with it (wrong arch, wrong OS, etc), then they
+     * silently fail by returning nullptr so other loaders can try.
+     */
+    class Loader
+    {
+      public:
+        Loader();
+
+        /* Loader instances are singletons. */
+        Loader(const Loader &) = delete;
+        void operator=(const Loader &) = delete;
+
+        virtual ~Loader() {}
+
+        /**
+         * Each subclass needs to implement this method. If the loader is
+         * compatible with the passed in object file, it should return the
+         * created Process object corresponding to it. If not, it should fail
+         * silently and return nullptr. If there's a non-compatibliity related
+         * error like file IO errors, etc., those should fail non-silently
+         * with a panic or fail as normal.
+         */
+        virtual Process *load(ProcessParams *params, ObjectFile *obj_file) = 0;
+    };
+
+    // Try all the Loader instance's "load" methods one by one until one is
+    // successful. If none are, complain and fail.
+    static Process *tryLoaders(ProcessParams *params, ObjectFile *obj_file);
 };
 
 ObjectFile *createObjectFile(const std::string &fname, bool raw = false);
