]> Zhao Yanbai Git Server - minix.git/commitdiff
drop aout support
authorBen Gras <ben@minix3.org>
Wed, 6 Jun 2012 22:35:10 +0000 (00:35 +0200)
committerBen Gras <ben@minix3.org>
Thu, 7 Jun 2012 10:43:16 +0000 (12:43 +0200)
justification: soon we won't be able to execute sep I&D aouts at
all (because of the vanishing segments), which was the default mode
to generate them so most binaries will be sep I&D.

this makes the vfs/rs exec() unification work simpler.

after unification, common I&D aout could be added back quite simply.

lib/libexec/libexec.h
servers/rs/exec.c
servers/vfs/exec.c

index 8829225594bca54ade73390782b4734f1e89a4c1..decd9447b79524bad8fce53649c3982b73d85557 100644 (file)
@@ -3,12 +3,6 @@
 
 #include <sys/exec_elf.h>
 
-/* a.out routines */
-int read_header_aout(const char *exec_hdr, size_t exec_len, int *sep_id,
-   vir_bytes *text_bytes, vir_bytes *data_bytes,
-   vir_bytes *bss_bytes, phys_bytes *tot_bytes, vir_bytes *pc,
-   int *hdrlenp);
-
 /* ELF routines */
 int read_header_elf(const char *exec_hdr, int hdr_len,
    vir_bytes *text_vaddr, phys_bytes *text_paddr,
index 0ff1f4a84842b36a9fb446ad8ae700d1c49d3fb2..e0faa0b3edeec921c73dde50a2fb910e039d60e1 100644 (file)
@@ -19,14 +19,12 @@ static void patch_ptr(char stack[ARG_MAX], vir_bytes base);
 static int exec_restart(int proc_e, int result, vir_bytes pc);
 static int read_seg(struct exec_info *execi, off_t off,
         int proc_e, int seg, vir_bytes seg_addr, phys_bytes seg_bytes);
-static int load_aout(struct exec_info *execi);
 static int load_elf(struct exec_info *execi);
 
 /* Array of loaders for different object formats */
 static struct exec_loaders {
        int (*load_object)(struct exec_info *);
 } const exec_loaders[] = {
-       { load_aout },
        { load_elf },
        { NULL }
 };
@@ -166,75 +164,6 @@ static int do_exec(int proc_e, char *exec, size_t exec_len, char *progname,
        return exec_restart(proc_e, OK, execi.pc);
 }
 
-static int load_aout(struct exec_info *execi)
-{
-       int r;
-       int hdrlen, sep_id, load_text, allow_setuid;
-       vir_bytes text_bytes, data_bytes, bss_bytes;
-       phys_bytes tot_bytes;
-       off_t off;
-       uid_t new_uid;
-       gid_t new_gid;
-       int proc_e;
-
-       assert(execi != NULL);
-       assert(execi->image != NULL);
-
-       proc_e = execi->proc_e;
-
-       /* Read the file header and extract the segment sizes. */
-       r = read_header_aout(execi->image, execi->image_len, &sep_id,
-               &text_bytes, &data_bytes, &bss_bytes,
-               &tot_bytes, &execi->pc, &hdrlen);
-       if (r != OK)
-       {
-               return r;
-       }
-
-       new_uid= getuid();
-       new_gid= getgid();
-       allow_setuid = 0;
-
-       /* XXX what should we use to identify the executable? */
-       r= exec_newmem(proc_e, 0 /*text_addr*/, text_bytes,
-               0 /*data_addr*/, data_bytes + bss_bytes, tot_bytes,
-               execi->frame_len, sep_id, 0 /*is_elf*/, 0 /*dev*/, proc_e /*inum*/, 0 /*ctime*/,
-               execi->progname, new_uid, new_gid, &execi->stack_top, &load_text,
-               &allow_setuid);
-       if (r != OK)
-       {
-               printf("RS: load_aout: exec_newmem failed: %d\n", r);
-               exec_restart(proc_e, r, execi->pc);
-               return r;
-       }
-
-       off = hdrlen;
-
-       /* Read in text and data segments. */
-       if (load_text) {
-               r= read_seg(execi, off, proc_e, T, 0, text_bytes);
-               if (r != OK)
-               {
-                       printf("RS: load_aout: read_seg failed: %d\n", r);
-                       exec_restart(proc_e, r, execi->pc);
-                       return r;
-               }
-       }
-       else
-               printf("RS: load_aout: not loading text segment\n");
-
-       off += text_bytes;
-       r= read_seg(execi, off, proc_e, D, 0, data_bytes);
-       if (r != OK)
-       {
-               printf("RS: load_aout: read_seg failed: %d\n", r);
-               exec_restart(proc_e, r, execi->pc);
-               return r;
-       }
-
-       return OK;
-}
-
 static int load_elf(struct exec_info *execi)
 {
   int r;
index 0e55eb7dfa9b69e5ccd3bc6d9aa8b1012f947f3d..6d2a01df63c830d8db086fa205d01d271d989660 100644 (file)
@@ -55,7 +55,6 @@ static void patch_ptr(char stack[ARG_MAX], vir_bytes base);
 static void clo_exec(struct fproc *rfp);
 static int read_seg(struct vnode *vp, off_t off, int proc_e, int seg,
        vir_bytes seg_addr, phys_bytes seg_bytes);
-static int load_aout(struct exec_info *execi);
 static int load_elf(struct exec_info *execi);
 static int stack_prepare_elf(struct exec_info *execi,
        char *curstack, size_t *frame_len, vir_bytes *vsp, int *extrabase);
@@ -73,7 +72,6 @@ struct exec_loaders {
 };
 
 static const struct exec_loaders exec_loaders[] = {
-       { load_aout, NULL },
        { load_elf,  stack_prepare_elf },
        { NULL, NULL }
 };
@@ -341,57 +339,6 @@ pm_execfinal:
   return(r);
 }
 
-/*===========================================================================*
- *                             load_aout                                    *
- *===========================================================================*/
-static int load_aout(struct exec_info *execi)
-{
-  int r;
-  struct vnode *vp;
-  int proc_e;
-  off_t off;
-  int hdrlen;
-  int sep_id;
-  vir_bytes text_bytes, data_bytes, bss_bytes;
-  phys_bytes tot_bytes;                /* total space for program, including gap */
-
-  assert(execi != NULL);
-  assert(execi->hdr != NULL);
-  assert(execi->vp != NULL);
-
-  proc_e = execi->proc_e;
-  vp = execi->vp;
-
-  /* Read the file header and extract the segment sizes. */
-  r = read_header_aout(execi->hdr, execi->vp->v_size, &sep_id,
-                      &text_bytes, &data_bytes, &bss_bytes,
-                      &tot_bytes, &execi->pc, &hdrlen);
-  if (r != OK) return(r);
-
-  r = exec_newmem(proc_e, 0 /* text_addr */, text_bytes,
-                 0 /* data_addr */, data_bytes + bss_bytes, tot_bytes,
-                 execi->frame_len, sep_id, 0 /* is_elf */, vp->v_dev,
-                 vp->v_inode_nr, execi->sb.st_ctime, execi->progname,
-                 execi->new_uid, execi->new_gid,
-                 &execi->stack_top, &execi->load_text, &execi->setugid);
-
-  if (r != OK) {
-        printf("VFS: load_aout: exec_newmem failed: %d\n", r);
-        return(r);
-  }
-
-  off = hdrlen;
-
-  /* Read in text and data segments. */
-  if (execi->load_text)
-       r = read_seg(vp, off, proc_e, T, 0, text_bytes);
-  off += text_bytes;
-  if (r == OK)
-       r = read_seg(vp, off, proc_e, D, 0, data_bytes);
-
-  return(r);
-}
-
 static int stack_prepare_elf(struct exec_info *execi, char *frame, size_t *framelen,
        vir_bytes *newsp, int *extrabase)
 {