xtensa: ISS: add argc/argv simcall definitions
authorMax Filippov <jcmvbkbc@gmail.com>
Mon, 13 Mar 2017 17:23:02 +0000 (10:23 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 13 Mar 2017 20:47:12 +0000 (13:47 -0700)
There are three simcalls implemented by ISS and QEMU related to
argc/argv processing: SYS_iss_argc (get number of command line
arguments), SYS_iss_argv_size (get size of command line argument block)
and SYS_iss_set_argv (copy command line arguments to virtual guest
address).
Add definitions for these calls to iss/include/platform/simcall.h

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/platforms/iss/include/platform/simcall.h

index 27d7a528b41ae53d35c9ac24f0d75b4046a7de53..2ba45858e50a3db125b1e30b730739ffb667cb55 100644 (file)
@@ -6,6 +6,7 @@
  * for more details.
  *
  * Copyright (C) 2001 Tensilica Inc.
+ * Copyright (C) 2017 Cadence Design Systems Inc.
  */
 
 #ifndef _XTENSA_PLATFORM_ISS_SIMCALL_H
 #define SYS_bind        30
 #define SYS_ioctl      31
 
+#define SYS_iss_argc   1000    /* returns value of argc */
+#define SYS_iss_argv_size 1001 /* bytes needed for argv & arg strings */
+#define SYS_iss_set_argv 1002  /* saves argv & arg strings at given addr */
+
 /*
  * SYS_select_one specifiers
  */
@@ -118,5 +123,20 @@ static inline int simc_lseek(int fd, uint32_t off, int whence)
        return __simc(SYS_lseek, fd, off, whence);
 }
 
+static inline int simc_argc(void)
+{
+       return __simc(SYS_iss_argc, 0, 0, 0);
+}
+
+static inline int simc_argv_size(void)
+{
+       return __simc(SYS_iss_argv_size, 0, 0, 0);
+}
+
+static inline void simc_argv(void *buf)
+{
+       __simc(SYS_iss_set_argv, (int)buf, 0, 0);
+}
+
 #endif /* _XTENSA_PLATFORM_ISS_SIMCALL_H */