Commit Diff


commit - 9c635587071dcd7db349ec24ece1b397d24ac486
commit + f9aa99c72e86fa546a504d34ade4b3ca3164d9da
blob - 712831c01ecd14b4db2f8a5ee7379516120f285f
blob + 0d1909ceba9cd0e3415bd7bb426af44f83a7ffa7
--- src/cmd/acid/main.c
+++ src/cmd/acid/main.c
@@ -24,6 +24,29 @@ usage(void)
 {
 	fprint(2, "usage: acid [-c core] [-l module] [-m machine] [-qrw] [-k] [pid] [file]\n");
 	exits("usage");
+}
+
+Map*
+dumbmap(int fd)
+{
+	Map *dumb;
+	Seg s;
+
+	dumb = allocmap();
+	memset(&s, 0, sizeof s);
+	s.fd = fd;
+	s.base = 0;
+	s.offset = 0;
+	s.size = 0xFFFFFFFF;
+	s.name = "data";
+	s.file = "<dumb>";
+	if(addseg(dumb, s) < 0){
+		freemap(dumb);
+		return nil;
+	}
+	if(mach == nil)
+		mach = machcpu;
+	return dumb;
 }
 
 void
@@ -150,7 +173,7 @@ main(int argc, char *argv[])
 static int
 attachfiles(int argc, char **argv)
 {
-	int pid;
+	int fd, pid;
 	char *s;
 	int i, omode;
 	Fhdr *hdr;
@@ -182,6 +205,14 @@ attachfiles(int argc, char **argv)
 		}
 		if((hdr = crackhdr(argv[i], omode)) == nil){
 			fprint(2, "crackhdr %s: %r\n", argv[i]);
+			if(argc == 1 && (fd = open(argv[i], omode)) > 0){
+				fprint(2, "loading %s direct mapped\n", argv[i]);
+				symmap = dumbmap(fd);
+				cormap = dumbmap(fd);
+				symfil = argv[i];
+				corfil = argv[i];
+				goto Run;
+			}
 			continue;
 		}
 		fprint(2, "%s: %s %s %s\n", argv[i], hdr->aname, hdr->mname, hdr->fname);
@@ -245,6 +276,7 @@ attachfiles(int argc, char **argv)
 		mapfile(symhdr, 0, cormap, nil);
 	}
 
+Run:
 	l = mkvar("objtype");
 	v = l->v;
 	v->store.fmt = 's';