Implement /bin/as wrapper around /bin/aspdp11
authorNick Downing <nick@ndcode.org>
Tue, 9 Aug 2022 06:12:57 +0000 (16:12 +1000)
committerNick Downing <nick@ndcode.org>
Tue, 9 Aug 2022 06:16:14 +0000 (16:16 +1000)
27 files changed:
.gitignore
bin/aspdp11
usr/src/cmd/as.c [new file with mode: 0644]
usr/src/cmd/asold/as11.s [moved from usr/src/cmd/as/as11.s with 100% similarity]
usr/src/cmd/asold/as12.s [moved from usr/src/cmd/as/as12.s with 100% similarity]
usr/src/cmd/asold/as13.s [moved from usr/src/cmd/as/as13.s with 100% similarity]
usr/src/cmd/asold/as14.s [moved from usr/src/cmd/as/as14.s with 100% similarity]
usr/src/cmd/asold/as15.s [moved from usr/src/cmd/as/as15.s with 100% similarity]
usr/src/cmd/asold/as16.s [moved from usr/src/cmd/as/as16.s with 100% similarity]
usr/src/cmd/asold/as17.s [moved from usr/src/cmd/as/as17.s with 100% similarity]
usr/src/cmd/asold/as18.s [moved from usr/src/cmd/as/as18.s with 100% similarity]
usr/src/cmd/asold/as19.s [moved from usr/src/cmd/as/as19.s with 100% similarity]
usr/src/cmd/asold/as21.s [moved from usr/src/cmd/as/as21.s with 100% similarity]
usr/src/cmd/asold/as22.s [moved from usr/src/cmd/as/as22.s with 100% similarity]
usr/src/cmd/asold/as23.s [moved from usr/src/cmd/as/as23.s with 100% similarity]
usr/src/cmd/asold/as24.s [moved from usr/src/cmd/as/as24.s with 100% similarity]
usr/src/cmd/asold/as25.s [moved from usr/src/cmd/as/as25.s with 100% similarity]
usr/src/cmd/asold/as26.s [moved from usr/src/cmd/as/as26.s with 100% similarity]
usr/src/cmd/asold/as27.s [moved from usr/src/cmd/as/as27.s with 100% similarity]
usr/src/cmd/asold/as28.s [moved from usr/src/cmd/as/as28.s with 100% similarity]
usr/src/cmd/asold/as29.s [moved from usr/src/cmd/as/as29.s with 100% similarity]
usr/src/cmd/asold/makefile [moved from usr/src/cmd/as/makefile with 100% similarity]
usr/src/cmd/c.sh
usr/src/cmd/n.sh
usr/src/libc/a.sh
usr/src/libc/n.sh
usr/sys/conf/n.sh

index 0572c63..0e66134 100644 (file)
@@ -1,3 +1,4 @@
 *.a
 *.o
+/tmp
 /usr/sys/conf/unix
index 73cae92..e0dbce6 100755 (executable)
Binary files a/bin/aspdp11 and b/bin/aspdp11 differ
diff --git a/usr/src/cmd/as.c b/usr/src/cmd/as.c
new file mode 100644 (file)
index 0000000..fa2d3d4
--- /dev/null
@@ -0,0 +1,133 @@
+#include <errno.h>
+#include <stdio.h>
+
+char temp_asm[] = "/tmp/atmaXXXXXX.asm";
+char temp_rel[] = "/tmp/atmrXXXXXX.rel";
+char *args[] = {
+  "/bin/aspdp11",
+  "-o",
+  temp_rel,
+  temp_asm,
+  NULL
+};
+
+mktemp_with_ext(as)
+char *as;
+{
+  register char *s;
+  register unsigned pid;
+  register i;
+
+  pid = getpid();
+  s = as;
+  while (*s++)
+    ;
+  s--;
+  while (*--s != 'X')
+    ;
+  s++;
+  while (*--s == 'X') {
+    *s = (pid % 10) + '0';
+    pid /= 10;
+  }
+  s++;
+  i = 'a';
+  while (access(as, 0) != -1) {
+    if (i == 'z') {
+      fprintf(stderr, "cannot create temporary file\n");
+      exit(1);
+    }
+    *s = i++;
+  }
+}
+
+copy(path_in, path_out)
+char *path_in, *path_out;
+{
+  FILE *fp_in, *fp_out;
+  int c;
+
+  fp_in = fopen(path_in, "r");
+  if (fp_in == NULL) {
+    perror(path_in);
+    exit(1);
+  }
+
+  fp_out = fopen(path_out, "w");
+  if (fp_out == NULL) {
+    perror(path_out);
+    exit(1);
+  }
+
+  while ((c = getc(fp_in)) != EOF)
+    putc(c, fp_out);
+
+  fclose(fp_in);
+  fclose(fp_out);
+}
+
+callsys(f, v)
+char *f, **v;
+{
+  int t, status;
+
+  t = fork();
+  switch (t) {
+  case 0:
+    execv(f, v);
+    perror(f);
+    exit(1);
+  case -1:
+    perror("fork()");
+    exit(1);
+  }
+  while (wait(&status) != t)
+    ;
+  t = status & 0xff;
+  if (t) {
+    printf("status %d\n", t);
+    exit(1);
+  }
+  return (status >> 8) & 0xff;
+}
+
+int main(argc, argv)
+char *argc, **argv;
+{
+  int i;
+  char *dest, *src;
+
+  dest = "a.out";
+  for (i = 1; i < argc && argv[i][0] == '-'; ++i)
+    switch (argv[i][1]) {
+    case 'u':
+      /* allow undefined variable (not supported; ignore) */
+      break;
+    case 'o':
+      if (++i >= argc) {
+        fprintf(stderr, "-o requires argument\n");
+        exit(1);
+      }
+      dest = argv[i];
+      break;
+    default:
+      fprintf(stderr, "unknown switch -%c\n", argv[i][1]);
+      exit(1);
+    }
+
+  if (i >= argc) {
+    fprintf(stderr, "usage: %s [-u] [-o outfile] infile.s\n");
+    exit(1);
+  }
+  src = argv[i];
+
+  mktemp_with_ext(temp_asm);
+  copy(src, temp_asm);
+
+  mktemp_with_ext(temp_rel);
+  if (callsys(args[0], args))
+    exit(1);
+
+  copy(temp_rel, dest);
+  return 0;
+} 
index 39ca267..d4bec15 100755 (executable)
@@ -1,6 +1,11 @@
 #!/bin/sh
-git checkout ../../../lib/c[012]
-mkdir --parents ../../../tmp
+git checkout ../../../bin/as ../../../lib/c[012]
+if ! test -d ../../../tmp
+then
+  ln -s /tmp ../../../tmp
+fi
 export APOUT_ROOT=`pwd`/../../..
 export PATH=`pwd`/../../../bin:`pwd`
+cc -n -s -O as.c -o as
 (echo ==== c =====; cd c; make cp)
+mv as ../../../bin
index b048e6e..3642fe3 100755 (executable)
@@ -1,5 +1,8 @@
 #!/bin/sh
-mkdir --parents ../../../tmp
+if ! test -d ../../../tmp
+then
+  ln -s /tmp ../../../tmp
+fi
 export APOUT_ROOT=`pwd`/../../..
 export PATH=`pwd`/../../../bin:`pwd`
 #sh cmake dump.c
index d229056..4551f67 100755 (executable)
@@ -3,3 +3,5 @@ mkdir --parents ../../../tmp
 export APOUT_ROOT=`pwd`/../../..
 export PATH=`pwd`/../../../bin:`pwd`
 cc -S -O /usr/src/libc/stdio/filbuf.c
+as -o filbuf.o filbuf.s
+#cc -c -O /usr/src/libc/stdio/filbuf.c
index 3f020e5..be8566a 100755 (executable)
@@ -1,5 +1,8 @@
 #!/bin/sh
-mkdir --parents ../../../tmp
+if ! test -d ../../../tmp
+then
+  ln -s /tmp ../../../tmp
+fi
 export APOUT_ROOT=`pwd`/../../..
 export PATH=`pwd`/../../../bin:`pwd`
 ./compall
index 0840483..a38f6d6 100755 (executable)
@@ -1,5 +1,8 @@
 #!/bin/sh
-mkdir --parents ../../../tmp
+if ! test -d ../../../tmp
+then
+  ln -s /tmp ../../../tmp
+fi
 export APOUT_ROOT=`pwd`/../../..
 export PATH=`pwd`/../../../bin:`pwd`
 ./mkconf <rktmconf