/[gxemul]/upstream/0.4.4/src/useremul.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /upstream/0.4.4/src/useremul.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/src/useremul.c revision 14 by dpavlin, Mon Oct 8 16:18:51 2007 UTC upstream/0.4.4/src/useremul.c revision 35 by dpavlin, Mon Oct 8 16:21:26 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2004-2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2004-2007  Anders Gavare.  All rights reserved.
3   *   *
4   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
5   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *   *
27   *   *
28   *  $Id: useremul.c,v 1.64 2005/08/27 17:29:06 debug Exp $   *  $Id: useremul.c,v 1.74 2007/02/10 14:04:51 debug Exp $
29   *   *
30   *  Userland (syscall) emulation.   *  Userland (syscall) emulation.
31   *   *
# Line 40  Line 40 
40   *      Dynamic ELFs?   *      Dynamic ELFs?
41   *   *
42   *      Try to prefix "/emul/mips/" or similar to all filenames,   *      Try to prefix "/emul/mips/" or similar to all filenames,
43   *              and only if that fails, try the given filename   *              and only if that fails, try the given filename.
44     *              Read this setting from an environment variable, and only
45     *              if there is none, fall back to hardcoded string.
46   *   *
47   *      Automagic errno translation?   *      Automagic errno translation!
48   *   *
49   *      Memory allocation? mmap etc.   *      Memory allocation? mmap, munmap, mprotect, etc.
50     *              mprotect = unmap in dyntrans...
51   *   *
52   *      File descriptor (0,1,2) assumptions?   *      File descriptor (0,1,2) assumptions? Find and fix these?
53   *   *
54   *   *
55   *  This module needs more cleanup.   *  This module needs more cleanup.
56   *  -------------------------------   *  -------------------------------
57   *   *
58   *   *
59   *  NOTE:  This module (useremul.c) is just a quick hack to see if   *  NOTE:  This module (useremul.c) is just a quick hack so far, to see if
60   *         userland emulation works at all.   *         userland emulation works at all. It only works for Hello World-
61     *         style programs compiled for FreeBSD/alpha or NetBSD/mips.
62   */   */
63    
64  #include <errno.h>  #include <errno.h>
# Line 248  void useremul__netbsd_setup(struct cpu * Line 252  void useremul__netbsd_setup(struct cpu *
252    
253                  break;                  break;
254    
255          case ARCH_X86:          case ARCH_SH:
256                  debug("useremul__netbsd_setup(): X86: TODO\n");                  debug("useremul__netbsd_setup(): SH: TODO\n");
   
257                  break;                  break;
258    
259          default:          default:
# Line 364  static unsigned char *get_userland_buf(s Line 367  static unsigned char *get_userland_buf(s
367          uint64_t baseaddr, uint64_t len)          uint64_t baseaddr, uint64_t len)
368  {  {
369          unsigned char *charbuf;          unsigned char *charbuf;
370          ssize_t i;          size_t i;
371    
372          charbuf = malloc(len);          charbuf = malloc(len);
373          if (charbuf == NULL) {          if (charbuf == NULL) {
# Line 699  static void useremul__freebsd(struct cpu Line 702  static void useremul__freebsd(struct cpu
702          case 58:res = useremul_readlink(cpu, &err, arg0, arg1, arg2);          case 58:res = useremul_readlink(cpu, &err, arg0, arg1, arg2);
703                  break;                  break;
704    
705            case 73:/* munmap. TODO */
706                    res = 1;
707                    break;
708    
709          case 117:res = useremul_getrusage(cpu, &err, arg0, arg1);          case 117:res = useremul_getrusage(cpu, &err, arg0, arg1);
710                  break;                  break;
711    
# Line 847  static void useremul__netbsd(struct cpu Line 854  static void useremul__netbsd(struct cpu
854          }          }
855    
856          /*          /*
857           *  NOTE: The following code should not be CPU arch dependant!           *  NOTE/TODO: The following code should not be CPU arch dependent!
          *  (TODO)  
858           */           */
859    
860          switch (sysnr) {          switch (sysnr) {
# Line 1213  static void useremul__netbsd(struct cpu Line 1219  static void useremul__netbsd(struct cpu
1219                  }                  }
1220                  if (result_high_set)                  if (result_high_set)
1221                          cpu->cd.arm.r[1] = result_high;                          cpu->cd.arm.r[1] = result_high;
1222                    cpu->cd.arm.flags = cpu->cd.arm.cpsr >> 28;
1223                  break;                  break;
1224          case ARCH_MIPS:          case ARCH_MIPS:
1225                  /*                  /*
# Line 1712  static void add_useremul(char *name, int Line 1719  static void add_useremul(char *name, int
1719  void useremul_list_emuls(void)  void useremul_list_emuls(void)
1720  {  {
1721          struct syscall_emul *sep;          struct syscall_emul *sep;
1722          int iadd = 8;          int iadd = DEBUG_INDENTATION * 2;
1723    
1724          sep = first_syscall_emul;          sep = first_syscall_emul;
1725    
# Line 1750  void useremul_init(void) Line 1757  void useremul_init(void)
1757          add_useremul("Ultrix", ARCH_MIPS, "R3000",          add_useremul("Ultrix", ARCH_MIPS, "R3000",
1758              useremul__ultrix, useremul__ultrix_setup);              useremul__ultrix, useremul__ultrix_setup);
1759    
1760            add_useremul("NetBSD/sh", ARCH_SH, "SH4",
1761                useremul__netbsd, useremul__netbsd_setup);
1762    
1763          add_useremul("NetBSD/powerpc", ARCH_PPC, "PPC750",          add_useremul("NetBSD/powerpc", ARCH_PPC, "PPC750",
1764              useremul__netbsd, useremul__netbsd_setup);              useremul__netbsd, useremul__netbsd_setup);
1765    
# Line 1759  void useremul_init(void) Line 1769  void useremul_init(void)
1769          add_useremul("NetBSD/arm", ARCH_ARM, "SA1110",          add_useremul("NetBSD/arm", ARCH_ARM, "SA1110",
1770              useremul__netbsd, useremul__netbsd_setup);              useremul__netbsd, useremul__netbsd_setup);
1771    
         add_useremul("NetBSD/amd64", ARCH_X86, "AMD64",  
             useremul__netbsd, useremul__netbsd_setup);  
   
1772          add_useremul("NetBSD/alpha", ARCH_ALPHA, "Alpha",          add_useremul("NetBSD/alpha", ARCH_ALPHA, "Alpha",
1773              useremul__netbsd, useremul__netbsd_setup);              useremul__netbsd, useremul__netbsd_setup);
1774    

Legend:
Removed from v.14  
changed lines
  Added in v.35

  ViewVC Help
Powered by ViewVC 1.1.26