All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user
@ 2015-02-22 13:31 Chen Gang S
  2015-02-22 13:33 ` [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features Chen Gang S
                   ` (6 more replies)
  0 siblings, 7 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-22 13:31 UTC (permalink / raw)
  To: Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt; +Cc: qemu-devel

After load elf64 tilegx binary for linux-user, the working flow reaches
1st correct instruction "__start". Next, we shall load all instructions
for qemu using.

This patch is based on Linux kernel tile architecture tilegx 64-bit
implementation, and also based on tilegx architecture ABI reference.

The related test:

  [root@localhost qemu]# ./configure --target-list=tilegx-linux-user && make 
  [root@localhost qemu]# ./tilegx-linux-user/qemu-tilegx -d all ./test.tgx
  CPU Reset (CPU 0)
  CPU Reset (CPU 0)
  host mmap_min_addr=0x10000
  Reserved 0xe0000 bytes of guest address space
  Relocating guest address space from 0x0000000000010000 to 0x10000
  guest_base  0x0  
  start            end              size             prot 
  0000000000010000-00000000000e0000 00000000000d0000 r-x
  00000000000e0000-00000000000f0000 0000000000010000 rw-
  0000004000000000-0000004000010000 0000000000010000 ---
  0000004000010000-0000004000810000 0000000000800000 rw-
  start_brk   0x0000000000000000
  end_code    0x00000000000d86f7
  start_code  0x0000000000010000
  start_data  0x00000000000e86f8
  end_data    0x00000000000ea208
  start_stack 0x000000400080f250
  brk         0x00000000000ec2b0
  entry       0x0000000000010f60
  PROLOGUE: [size=40]
  0x7fcc44c716f0:  push   %rbp 
  0x7fcc44c716f1:  push   %rbx 
  0x7fcc44c716f2:  push   %r12 
  0x7fcc44c716f4:  push   %r13 
  0x7fcc44c716f6:  push   %r14 
  0x7fcc44c716f8:  push   %r15 
  0x7fcc44c716fa:  mov    %rdi,%r14
  0x7fcc44c716fd:  add    $0xfffffffffffffb78,%rsp
  0x7fcc44c71704:  jmpq   *%rsi
  0x7fcc44c71706:  add    $0x488,%rsp
  0x7fcc44c7170d:  pop    %r15 
  0x7fcc44c7170f:  pop    %r14 
  0x7fcc44c71711:  pop    %r13 
  0x7fcc44c71713:  pop    %r12 
  0x7fcc44c71715:  pop    %rbx 
  0x7fcc44c71716:  pop    %rbp 
  0x7fcc44c71717:  retq 

  Load elf64 tilegx successfully
  reach code start position: [0000000000010f60] _start

  [root@localhost qemu]# echo $?
  0
  [root@localhost qemu]#


Chen Gang (6):
  target-tilegx: Firstly add to qemu with minimized features
  linux-user: tilegx: Firstly add architecture related features
  linux-user: tilegx: Add target features support within qemu
  linux-user: Support tilegx architecture in syscall
  linux-user: Support tilegx architecture in linux-user
  linux-user/syscall.c: Switch all macros which are not defined in
    tilegx

 configure                             |   7 +
 default-configs/tilegx-linux-user.mak |   1 +
 include/elf.h                         |   2 +
 linux-user/elfload.c                  |  23 +++
 linux-user/main.c                     |  74 +++++++++
 linux-user/syscall.c                  |  50 +++++-
 linux-user/syscall_defs.h             |  38 ++++-
 linux-user/tilegx/syscall.h           |  80 ++++++++++
 linux-user/tilegx/syscall_nr.h        | 278 +++++++++++++++++++++++++++++++++
 linux-user/tilegx/target_cpu.h        |  35 +++++
 linux-user/tilegx/target_signal.h     |  28 ++++
 linux-user/tilegx/target_structs.h    |  48 ++++++
 linux-user/tilegx/termbits.h          | 285 ++++++++++++++++++++++++++++++++++
 target-tilegx/Makefile.objs           |   1 +
 target-tilegx/cpu-qom.h               |  72 +++++++++
 target-tilegx/cpu.c                   | 162 +++++++++++++++++++
 target-tilegx/cpu.h                   |  85 ++++++++++
 target-tilegx/helper.h                |   0
 target-tilegx/translate.c             |  54 +++++++
 19 files changed, 1318 insertions(+), 5 deletions(-)
 create mode 100644 default-configs/tilegx-linux-user.mak
 create mode 100644 linux-user/tilegx/syscall.h
 create mode 100644 linux-user/tilegx/syscall_nr.h
 create mode 100644 linux-user/tilegx/target_cpu.h
 create mode 100644 linux-user/tilegx/target_signal.h
 create mode 100644 linux-user/tilegx/target_structs.h
 create mode 100644 linux-user/tilegx/termbits.h
 create mode 100644 target-tilegx/Makefile.objs
 create mode 100644 target-tilegx/cpu-qom.h
 create mode 100644 target-tilegx/cpu.c
 create mode 100644 target-tilegx/cpu.h
 create mode 100644 target-tilegx/helper.h
 create mode 100644 target-tilegx/translate.c

-- 
1.9.3

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
@ 2015-02-22 13:33 ` Chen Gang S
  2015-02-27 17:36   ` Andreas Färber
  2015-02-22 13:35 ` [Qemu-devel] [PATCH 3/6 v4] linux-user: tilegx: Add target features support within qemu Chen Gang S
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Chen Gang S @ 2015-02-22 13:33 UTC (permalink / raw)
  To: Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt; +Cc: qemu-devel

It almost likes a template for adding an architecture target.

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
 configure                             |   7 ++
 default-configs/tilegx-linux-user.mak |   1 +
 target-tilegx/Makefile.objs           |   1 +
 target-tilegx/cpu-qom.h               |  72 +++++++++++++++
 target-tilegx/cpu.c                   | 162 ++++++++++++++++++++++++++++++++++
 target-tilegx/cpu.h                   |  85 ++++++++++++++++++
 target-tilegx/helper.h                |   0
 target-tilegx/translate.c             |  54 ++++++++++++
 8 files changed, 382 insertions(+)
 create mode 100644 default-configs/tilegx-linux-user.mak
 create mode 100644 target-tilegx/Makefile.objs
 create mode 100644 target-tilegx/cpu-qom.h
 create mode 100644 target-tilegx/cpu.c
 create mode 100644 target-tilegx/cpu.h
 create mode 100644 target-tilegx/helper.h
 create mode 100644 target-tilegx/translate.c

diff --git a/configure b/configure
index 7ba4bcb..23aa8f6 100755
--- a/configure
+++ b/configure
@@ -5191,6 +5191,9 @@ case "$target_name" in
   s390x)
     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
   ;;
+  tilegx)
+    TARGET_ARCH=tilegx
+  ;;
   unicore32)
   ;;
   xtensa|xtensaeb)
@@ -5363,6 +5366,10 @@ for i in $ARCH $TARGET_BASE_ARCH ; do
     echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
     echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
   ;;
+  tilegx*)
+    echo "CONFIG_TILEGX_DIS=y"  >> $config_target_mak
+    echo "CONFIG_TILEGX_DIS=y"  >> config-all-disas.mak
+  ;;
   xtensa*)
     echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
     echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
diff --git a/default-configs/tilegx-linux-user.mak b/default-configs/tilegx-linux-user.mak
new file mode 100644
index 0000000..3e47493
--- /dev/null
+++ b/default-configs/tilegx-linux-user.mak
@@ -0,0 +1 @@
+# Default configuration for tilegx-linux-user
diff --git a/target-tilegx/Makefile.objs b/target-tilegx/Makefile.objs
new file mode 100644
index 0000000..dcf2fe4
--- /dev/null
+++ b/target-tilegx/Makefile.objs
@@ -0,0 +1 @@
+obj-y += cpu.o translate.o
diff --git a/target-tilegx/cpu-qom.h b/target-tilegx/cpu-qom.h
new file mode 100644
index 0000000..e15a8b8
--- /dev/null
+++ b/target-tilegx/cpu-qom.h
@@ -0,0 +1,72 @@
+/*
+ * QEMU Tilegx CPU
+ *
+ * Copyright (c) 2015 Chen Gang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/lgpl-2.1.html>
+ */
+#ifndef QEMU_TILEGX_CPU_QOM_H
+#define QEMU_TILEGX_CPU_QOM_H
+
+#include "qom/cpu.h"
+
+#define TYPE_TILEGX_CPU "tilegx-cpu"
+
+#define TILEGX_CPU_CLASS(klass) \
+    OBJECT_CLASS_CHECK(TilegxCPUClass, (klass), TYPE_TILEGX_CPU)
+#define TILEGX_CPU(obj) \
+    OBJECT_CHECK(TilegxCPU, (obj), TYPE_TILEGX_CPU)
+#define TILEGX_CPU_GET_CLASS(obj) \
+    OBJECT_GET_CLASS(TilegxCPUClass, (obj), TYPE_TILEGX_CPU)
+
+/**
+ * TilegxCPUClass:
+ * @parent_realize: The parent class' realize handler.
+ * @parent_reset: The parent class' reset handler.
+ *
+ * A Tilegx CPU model.
+ */
+typedef struct TilegxCPUClass {
+    /*< private >*/
+    CPUClass parent_class;
+    /*< public >*/
+
+    DeviceRealize parent_realize;
+    void (*parent_reset)(CPUState *cpu);
+} TilegxCPUClass;
+
+/**
+ * TilegxCPU:
+ * @env: #CPUTLState
+ *
+ * A Tilegx CPU.
+ */
+typedef struct TilegxCPU {
+    /*< private >*/
+    CPUState parent_obj;
+    uint64_t base_vectors;
+    /*< public >*/
+
+    CPUTLState env;
+} TilegxCPU;
+
+static inline TilegxCPU *tilegx_env_get_cpu(CPUTLState *env)
+{
+    return container_of(env, TilegxCPU, env);
+}
+
+#define ENV_GET_CPU(e) CPU(tilegx_env_get_cpu(e))
+
+#endif
diff --git a/target-tilegx/cpu.c b/target-tilegx/cpu.c
new file mode 100644
index 0000000..3dd66b5
--- /dev/null
+++ b/target-tilegx/cpu.c
@@ -0,0 +1,162 @@
+/*
+ * QEMU Tilegx CPU
+ *
+ *  Copyright (c) 2015 Chen Gang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/lgpl-2.1.html>
+ */
+
+#include "cpu.h"
+#include "qemu-common.h"
+#include "hw/qdev-properties.h"
+#include "migration/vmstate.h"
+
+TilegxCPU *cpu_tilegx_init(const char *cpu_model)
+{
+    TilegxCPU *cpu;
+
+    cpu = TILEGX_CPU(object_new(TYPE_TILEGX_CPU));
+
+    object_property_set_bool(OBJECT(cpu), true, "realized", NULL);
+
+    return cpu;
+}
+
+static void tilegx_cpu_set_pc(CPUState *cs, vaddr value)
+{
+    TilegxCPU *cpu = TILEGX_CPU(cs);
+
+    cpu->env.pc = value;
+}
+
+static bool tilegx_cpu_has_work(CPUState *cs)
+{
+    return true;
+}
+
+static void tilegx_cpu_reset(CPUState *s)
+{
+    TilegxCPU *cpu = TILEGX_CPU(s);
+    TilegxCPUClass *mcc = TILEGX_CPU_GET_CLASS(cpu);
+    CPUTLState *env = &cpu->env;
+
+    mcc->parent_reset(s);
+
+    memset(env, 0, sizeof(CPUTLState));
+    tlb_flush(s, 1);
+}
+
+static void tilegx_cpu_realizefn(DeviceState *dev, Error **errp)
+{
+    CPUState *cs = CPU(dev);
+    TilegxCPUClass *mcc = TILEGX_CPU_GET_CLASS(dev);
+
+    cpu_reset(cs);
+    qemu_init_vcpu(cs);
+
+    mcc->parent_realize(dev, errp);
+}
+
+static void tilegx_tcg_init(void)
+{
+}
+
+static void tilegx_cpu_initfn(Object *obj)
+{
+    CPUState *cs = CPU(obj);
+    TilegxCPU *cpu = TILEGX_CPU(obj);
+    CPUTLState *env = &cpu->env;
+    static bool tcg_initialized;
+
+    cs->env_ptr = env;
+    cpu_exec_init(env);
+
+    if (tcg_enabled() && !tcg_initialized) {
+        tcg_initialized = true;
+        tilegx_tcg_init();
+    }
+}
+
+static const VMStateDescription vmstate_tilegx_cpu = {
+    .name = "cpu",
+    .unmigratable = 1,
+};
+
+static Property tilegx_properties[] = {
+    DEFINE_PROP_UINT64("tilegx.base-vectors", TilegxCPU, base_vectors, 0),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static void tilegx_cpu_do_interrupt(CPUState *cs)
+{
+    cs->exception_index = -1;
+}
+
+static int tilegx_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int rw,
+                            int mmu_idx)
+{
+    cpu_dump_state(cs, stderr, fprintf, 0);
+    return 1;
+}
+
+static bool tilegx_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
+{
+    if (interrupt_request & CPU_INTERRUPT_HARD) {
+        tilegx_cpu_do_interrupt(cs);
+        return true;
+    }
+    return false;
+}
+
+static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(oc);
+    CPUClass *cc = CPU_CLASS(oc);
+    TilegxCPUClass *mcc = TILEGX_CPU_CLASS(oc);
+
+    mcc->parent_realize = dc->realize;
+    dc->realize = tilegx_cpu_realizefn;
+
+    mcc->parent_reset = cc->reset;
+    cc->reset = tilegx_cpu_reset;
+
+    cc->has_work = tilegx_cpu_has_work;
+    cc->do_interrupt = tilegx_cpu_do_interrupt;
+    cc->cpu_exec_interrupt = tilegx_cpu_exec_interrupt;
+    cc->dump_state = NULL;
+    cc->set_pc = tilegx_cpu_set_pc;
+    cc->gdb_read_register = NULL;
+    cc->gdb_write_register = NULL;
+    cc->handle_mmu_fault = tilegx_cpu_handle_mmu_fault;
+    dc->vmsd = &vmstate_tilegx_cpu;
+    dc->props = tilegx_properties;
+    cc->gdb_num_core_regs = 0;
+}
+
+static const TypeInfo tilegx_cpu_type_info = {
+    .name = TYPE_TILEGX_CPU,
+    .parent = TYPE_CPU,
+    .instance_size = sizeof(TilegxCPU),
+    .instance_init = tilegx_cpu_initfn,
+    .class_size = sizeof(TilegxCPUClass),
+    .class_init = tilegx_cpu_class_init,
+};
+
+static void tilegx_cpu_register_types(void)
+{
+    type_register_static(&tilegx_cpu_type_info);
+}
+
+type_init(tilegx_cpu_register_types)
diff --git a/target-tilegx/cpu.h b/target-tilegx/cpu.h
new file mode 100644
index 0000000..09a2b26
--- /dev/null
+++ b/target-tilegx/cpu.h
@@ -0,0 +1,85 @@
+/*
+ *  Tilegx virtual CPU header
+ *
+ *  Copyright (c) 2015 Chen Gang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef CPU_TILEGX_H
+#define CPU_TILEGX_H
+
+#include "config.h"
+#include "qemu-common.h"
+
+#define TARGET_LONG_BITS 64
+
+#define CPUArchState struct CPUTLState
+
+#include "exec/cpu-defs.h"
+#include "fpu/softfloat.h"
+
+/* Tilegx register alias */
+#define TILEGX_R_RE  0   /*  0 register, for function/syscall return value */
+#define TILEGX_R_NR  10  /* 10 register, for syscall number */
+#define TILEGX_R_BP  52  /* 52 register, optional frame pointer */
+#define TILEGX_R_TP  53  /* TP register, thread local storage data */
+#define TILEGX_R_SP  54  /* SP register, stack pointer */
+#define TILEGX_R_LR  55  /* LR register, may save pc, but it is not pc */
+
+typedef struct CPUTLState {
+    uint64_t regs[56];
+    uint64_t pc;
+    CPU_COMMON
+} CPUTLState;
+
+#include "cpu-qom.h"
+
+/* Tilegx memory attributes */
+#define TARGET_PAGE_BITS 16  /* Tilegx uses 64KB page size */
+#define MMAP_SHIFT TARGET_PAGE_BITS
+#define TARGET_PHYS_ADDR_SPACE_BITS 42 /* Tilegx is 42 bit physical address */
+#define TARGET_VIRT_ADDR_SPACE_BITS 64 /* Tilegx has 64 bit virtual address */
+#define MMU_USER_IDX    0  /* independent from both qemu and architecture */
+
+#include "exec/cpu-all.h"
+
+int cpu_tilegx_exec(CPUTLState *s);
+int cpu_tilegx_signal_handler(int host_signum, void *pinfo, void *puc);
+
+#define cpu_exec cpu_tilegx_exec
+#define cpu_gen_code cpu_tilegx_gen_code
+#define cpu_signal_handler cpu_tilegx_signal_handler
+
+TilegxCPU *cpu_tilegx_init(const char *cpu_model);
+
+static inline CPUTLState *cpu_init(const char *cpu_model)
+{
+    TilegxCPU *cpu = cpu_tilegx_init(cpu_model);
+    if (cpu == NULL) {
+        return NULL;
+    }
+    return &cpu->env;
+}
+
+static inline void cpu_get_tb_cpu_state(CPUTLState *env, target_ulong *pc,
+                                        target_ulong *cs_base, int *flags)
+{
+    *pc = env->pc;
+    *cs_base = 0;
+    *flags = 0;
+}
+
+#include "exec/exec-all.h"
+
+#endif
diff --git a/target-tilegx/helper.h b/target-tilegx/helper.h
new file mode 100644
index 0000000..e69de29
diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c
new file mode 100644
index 0000000..5131fa7
--- /dev/null
+++ b/target-tilegx/translate.c
@@ -0,0 +1,54 @@
+/*
+ * QEMU Tilegx CPU
+ *
+ *  Copyright (c) 2015 Chen Gang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * <http://www.gnu.org/licenses/lgpl-2.1.html>
+ */
+
+#include "cpu.h"
+#include "disas/disas.h"
+#include "tcg-op.h"
+#include "exec/helper-proto.h"
+#include "exec/cpu_ldst.h"
+#include "exec/helper-gen.h"
+
+static inline void gen_intermediate_code_internal(TilegxCPU *cpu,
+                                                  TranslationBlock *tb,
+                                                  bool search_pc)
+{
+    /*
+     * FIXME: after load elf64 tilegx binary successfully, it will quit, at
+     * present, and will implement the related features next.
+     */
+    fprintf(stderr, "\nLoad elf64 tilegx successfully\n");
+    fprintf(stderr, "reach code start position: [" TARGET_FMT_lx "] %s\n\n",
+            tb->pc, lookup_symbol(tb->pc));
+    exit(0);
+}
+
+void gen_intermediate_code(CPUTLState *env, struct TranslationBlock *tb)
+{
+    gen_intermediate_code_internal(tilegx_env_get_cpu(env), tb, false);
+}
+
+void gen_intermediate_code_pc(CPUTLState *env, struct TranslationBlock *tb)
+{
+    gen_intermediate_code_internal(tilegx_env_get_cpu(env), tb, true);
+}
+
+void restore_state_to_opc(CPUTLState *env, TranslationBlock *tb, int pc_pos)
+{
+}
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 3/6 v4] linux-user: tilegx: Add target features support within qemu
  2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
  2015-02-22 13:33 ` [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features Chen Gang S
@ 2015-02-22 13:35 ` Chen Gang S
  2015-02-22 13:36 ` [Qemu-devel] [PATCH 4/6 v4] linux-user: Support tilegx architecture in syscall Chen Gang S
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-22 13:35 UTC (permalink / raw)
  To: Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt; +Cc: qemu-devel

They are for target features within qemu which independent from outside.

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
 linux-user/tilegx/target_cpu.h     | 35 +++++++++++++++++++++++++++
 linux-user/tilegx/target_signal.h  | 28 ++++++++++++++++++++++
 linux-user/tilegx/target_structs.h | 48 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 111 insertions(+)
 create mode 100644 linux-user/tilegx/target_cpu.h
 create mode 100644 linux-user/tilegx/target_signal.h
 create mode 100644 linux-user/tilegx/target_structs.h

diff --git a/linux-user/tilegx/target_cpu.h b/linux-user/tilegx/target_cpu.h
new file mode 100644
index 0000000..93329fc
--- /dev/null
+++ b/linux-user/tilegx/target_cpu.h
@@ -0,0 +1,35 @@
+/*
+ * Tilegx specific CPU ABI and functions for linux-user
+ *
+ * Copyright (c) 2015 Chen Gang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef TARGET_CPU_H
+#define TARGET_CPU_H
+
+static inline void cpu_clone_regs(CPUTLState *env, target_ulong newsp)
+{
+    if (newsp) {
+        env->regs[TILEGX_R_SP] = newsp;
+    }
+    env->regs[TILEGX_R_RE] = 0;
+}
+
+static inline void cpu_set_tls(CPUTLState *env, target_ulong newtls)
+{
+    env->regs[TILEGX_R_TP] = newtls;
+}
+
+#endif
diff --git a/linux-user/tilegx/target_signal.h b/linux-user/tilegx/target_signal.h
new file mode 100644
index 0000000..8c7b02a
--- /dev/null
+++ b/linux-user/tilegx/target_signal.h
@@ -0,0 +1,28 @@
+#ifndef TARGET_SIGNAL_H
+#define TARGET_SIGNAL_H
+
+#include "cpu.h"
+
+/* this struct defines a stack used during syscall handling */
+
+typedef struct target_sigaltstack {
+    abi_ulong ss_sp;
+    abi_ulong ss_size;
+    abi_long ss_flags;
+} target_stack_t;
+
+/*
+ * sigaltstack controls
+ */
+#define TARGET_SS_ONSTACK     1
+#define TARGET_SS_DISABLE     2
+
+#define TARGET_MINSIGSTKSZ    2048
+#define TARGET_SIGSTKSZ       8192
+
+static inline abi_ulong get_sp_from_cpustate(CPUTLState *state)
+{
+    return state->regs[TILEGX_R_SP];
+}
+
+#endif /* TARGET_SIGNAL_H */
diff --git a/linux-user/tilegx/target_structs.h b/linux-user/tilegx/target_structs.h
new file mode 100644
index 0000000..6ed6741
--- /dev/null
+++ b/linux-user/tilegx/target_structs.h
@@ -0,0 +1,48 @@
+/*
+ * Tilegx specific structures for linux-user
+ *
+ * Copyright (c) 2015 Chen Gang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef TARGET_STRUCTS_H
+#define TARGET_STRUCTS_H
+
+struct target_ipc_perm {
+    abi_int __key;                      /* Key.  */
+    abi_uint uid;                       /* Owner's user ID.  */
+    abi_uint gid;                       /* Owner's group ID.  */
+    abi_uint cuid;                      /* Creator's user ID.  */
+    abi_uint cgid;                      /* Creator's group ID.  */
+    abi_uint mode;                    /* Read/write permission.  */
+    abi_ushort __seq;                   /* Sequence number.  */
+    abi_ushort __pad2;
+    abi_ulong __unused1;
+    abi_ulong __unused2;
+};
+
+struct target_shmid_ds {
+    struct target_ipc_perm shm_perm;    /* operation permission struct */
+    abi_long shm_segsz;                 /* size of segment in bytes */
+    abi_ulong shm_atime;                /* time of last shmat() */
+    abi_ulong shm_dtime;                /* time of last shmdt() */
+    abi_ulong shm_ctime;                /* time of last change by shmctl() */
+    abi_int shm_cpid;                   /* pid of creator */
+    abi_int shm_lpid;                   /* pid of last shmop */
+    abi_ulong shm_nattch;               /* number of current attaches */
+    abi_ulong __unused4;
+    abi_ulong __unused5;
+};
+
+#endif
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 4/6 v4] linux-user: Support tilegx architecture in syscall
  2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
  2015-02-22 13:33 ` [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features Chen Gang S
  2015-02-22 13:35 ` [Qemu-devel] [PATCH 3/6 v4] linux-user: tilegx: Add target features support within qemu Chen Gang S
@ 2015-02-22 13:36 ` Chen Gang S
  2015-02-27 17:40   ` Andreas Färber
  2015-02-22 13:36 ` [Qemu-devel] [PATCH 5/6 v4] linux-user: Support tilegx architecture in linux-user Chen Gang S
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Chen Gang S @ 2015-02-22 13:36 UTC (permalink / raw)
  To: Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt; +Cc: qemu-devel

Add tilegx architecture in "syscall_defs.h", all related features (ioctrl,
and stat) are based on Linux kernel tilegx 64-bit implementation.

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
 linux-user/syscall_defs.h | 38 ++++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)

diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 9ed6de8..a0d9d77 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -64,8 +64,9 @@
 #endif
 
 #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SH4) \
-    || defined(TARGET_M68K) || defined(TARGET_CRIS) || defined(TARGET_UNICORE32) \
-    || defined(TARGET_S390X) || defined(TARGET_OPENRISC)
+    || defined(TARGET_M68K) || defined(TARGET_CRIS) \
+    || defined(TARGET_UNICORE32) || defined(TARGET_S390X) \
+    || defined(TARGET_OPENRISC) || defined(TARGET_TILEGX)
 
 #define TARGET_IOC_SIZEBITS	14
 #define TARGET_IOC_DIRBITS	2
@@ -365,7 +366,8 @@ int do_sigaction(int sig, const struct target_sigaction *act,
     || defined(TARGET_PPC) || defined(TARGET_MIPS) || defined(TARGET_SH4) \
     || defined(TARGET_M68K) || defined(TARGET_ALPHA) || defined(TARGET_CRIS) \
     || defined(TARGET_MICROBLAZE) || defined(TARGET_UNICORE32) \
-    || defined(TARGET_S390X) || defined(TARGET_OPENRISC)
+    || defined(TARGET_S390X) || defined(TARGET_OPENRISC) \
+    || defined(TARGET_TILEGX)
 
 #if defined(TARGET_SPARC)
 #define TARGET_SA_NOCLDSTOP    8u
@@ -1970,6 +1972,32 @@ struct target_stat64 {
     unsigned int __unused5;
 };
 
+#elif defined(TARGET_TILEGX)
+
+/* Copy from Linux kernel "uapi/asm-generic/stat.h" */
+struct target_stat {
+        abi_ulong st_dev;               /* Device.  */
+        abi_ulong st_ino;               /* File serial number.  */
+        unsigned int st_mode;           /* File mode.  */
+        unsigned int st_nlink;          /* Link count.  */
+        unsigned int st_uid;            /* User ID of the file's owner.  */
+        unsigned int st_gid;            /* Group ID of the file's group. */
+        abi_ulong st_rdev;              /* Device number, if device.  */
+        abi_ulong __pad1;
+        abi_long  st_size;              /* Size of file, in bytes.  */
+        int st_blksize;                 /* Optimal block size for I/O.  */
+        int __pad2;
+        abi_long st_blocks;             /* Number 512-byte blocks allocated. */
+        abi_long target_st_atime;       /* Time of last access.  */
+        abi_ulong target_st_atime_nsec;
+        abi_long target_st_mtime;       /* Time of last modification.  */
+        abi_ulong target_st_mtime_nsec;
+        abi_long target_st_ctime;       /* Time of last status change.  */
+        abi_ulong target_st_ctime_nsec;
+        unsigned int __unused4;
+        unsigned int __unused5;
+};
+
 #else
 #error unsupported CPU
 #endif
@@ -2312,7 +2340,9 @@ struct target_flock {
 struct target_flock64 {
 	short  l_type;
 	short  l_whence;
-#if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) || defined(TARGET_SPARC) || defined(TARGET_HPPA) || defined (TARGET_MICROBLAZE)
+#if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) || \
+    defined(TARGET_SPARC) || defined(TARGET_HPPA) \
+    || defined(TARGET_MICROBLAZE) || defined(TARGET_TILEGX)
         int __pad;
 #endif
 	unsigned long long l_start;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 5/6 v4] linux-user: Support tilegx architecture in linux-user
  2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
                   ` (2 preceding siblings ...)
  2015-02-22 13:36 ` [Qemu-devel] [PATCH 4/6 v4] linux-user: Support tilegx architecture in syscall Chen Gang S
@ 2015-02-22 13:36 ` Chen Gang S
  2015-02-22 13:37 ` [Qemu-devel] [PATCH 6/6 v4] linux-user/syscall.c: Switch all macros which are not defined in tilegx Chen Gang S
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-22 13:36 UTC (permalink / raw)
  To: Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt; +Cc: qemu-devel

Add main working flow feature and loading elf64 tilegx binary feature,
based on Linux kernel tilegx 64-bit implementation.

After this patch, qemu can successfully load elf64 tilegx binary for
linux-user, and the working flow reaches the first correct instruction
position "__start".

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
 include/elf.h        |  2 ++
 linux-user/elfload.c | 23 ++++++++++++++++
 linux-user/main.c    | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 99 insertions(+)

diff --git a/include/elf.h b/include/elf.h
index a516584..e70512c 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -133,6 +133,8 @@ typedef int64_t  Elf64_Sxword;
 
 #define EM_AARCH64  183
 
+#define EM_TILEGX   191 /* Tilegx */
+
 /* This is the info that is needed to parse the dynamic section of the file */
 #define DT_NULL		0
 #define DT_NEEDED	1
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 399c021..12e3ab8 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -1189,6 +1189,29 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i
 
 #endif /* TARGET_S390X */
 
+#ifdef TARGET_TILEGX
+
+/* 42 bits real used address, a half for user mode */
+#define ELF_START_MMAP (0x00000020000000000ULL)
+
+#define elf_check_arch(x) ((x) == EM_TILEGX)
+
+#define ELF_CLASS   ELFCLASS64
+#define ELF_DATA    ELFDATA2LSB
+#define ELF_ARCH    EM_TILEGX
+
+static inline void init_thread(struct target_pt_regs *regs,
+                               struct image_info *infop)
+{
+    regs->lr = infop->entry;
+    regs->sp = infop->start_stack;
+
+}
+
+#define ELF_EXEC_PAGESIZE        65536 /* Tilegx page size is 64KB */
+
+#endif /* TARGET_TILEGX */
+
 #ifndef ELF_PLATFORM
 #define ELF_PLATFORM (NULL)
 #endif
diff --git a/linux-user/main.c b/linux-user/main.c
index d92702a..76e5e80 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -3418,6 +3418,20 @@ void cpu_loop(CPUS390XState *env)
 
 #endif /* TARGET_S390X */
 
+#ifdef TARGET_TILEGX
+void cpu_loop(CPUTLState *env)
+{
+    CPUState *cs = CPU(tilegx_env_get_cpu(env));
+
+    while (1) {
+        cpu_exec_start(cs);
+        cpu_tilegx_exec(env);
+        cpu_exec_end(cs);
+        process_pending_signals(env);
+    }
+}
+#endif
+
 THREAD CPUState *thread_cpu;
 
 void task_settid(TaskState *ts)
@@ -4392,6 +4406,66 @@ int main(int argc, char **argv, char **envp)
             env->psw.mask = regs->psw.mask;
             env->psw.addr = regs->psw.addr;
     }
+#elif defined(TARGET_TILEGX)
+    {
+        env->regs[0] = regs->r0;
+        env->regs[1] = regs->r1;
+        env->regs[2] = regs->r2;
+        env->regs[3] = regs->r3;
+        env->regs[4] = regs->r4;
+        env->regs[5] = regs->r5;
+        env->regs[6] = regs->r6;
+        env->regs[7] = regs->r7;
+        env->regs[8] = regs->r8;
+        env->regs[9] = regs->r9;
+        env->regs[10] = regs->r10;
+        env->regs[11] = regs->r11;
+        env->regs[12] = regs->r12;
+        env->regs[13] = regs->r13;
+        env->regs[14] = regs->r14;
+        env->regs[15] = regs->r15;
+        env->regs[16] = regs->r16;
+        env->regs[17] = regs->r17;
+        env->regs[18] = regs->r18;
+        env->regs[19] = regs->r19;
+        env->regs[20] = regs->r20;
+        env->regs[21] = regs->r21;
+        env->regs[22] = regs->r22;
+        env->regs[23] = regs->r23;
+        env->regs[24] = regs->r24;
+        env->regs[25] = regs->r25;
+        env->regs[26] = regs->r26;
+        env->regs[27] = regs->r27;
+        env->regs[28] = regs->r28;
+        env->regs[29] = regs->r29;
+        env->regs[30] = regs->r30;
+        env->regs[31] = regs->r31;
+        env->regs[32] = regs->r32;
+        env->regs[33] = regs->r33;
+        env->regs[34] = regs->r34;
+        env->regs[35] = regs->r35;
+        env->regs[36] = regs->r36;
+        env->regs[37] = regs->r37;
+        env->regs[38] = regs->r38;
+        env->regs[39] = regs->r39;
+        env->regs[40] = regs->r40;
+        env->regs[41] = regs->r41;
+        env->regs[42] = regs->r42;
+        env->regs[43] = regs->r43;
+        env->regs[44] = regs->r44;
+        env->regs[45] = regs->r45;
+        env->regs[46] = regs->r46;
+        env->regs[47] = regs->r47;
+        env->regs[48] = regs->r48;
+        env->regs[49] = regs->r49;
+        env->regs[50] = regs->r50;
+        env->regs[51] = regs->r51;
+        env->regs[52] = regs->r52; /* TILEGX_R_BP */
+        env->regs[53] = regs->tp;  /* TILEGX_R_TP */
+        env->regs[54] = regs->sp;  /* TILEGX_R_SP */
+        env->regs[55] = regs->lr;  /* TILEGX_R_LR */
+        env->pc = regs->lr;
+    }
 #else
 #error unsupported target CPU
 #endif
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [Qemu-devel] [PATCH 6/6 v4] linux-user/syscall.c: Switch all macros which are not defined in tilegx
  2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
                   ` (3 preceding siblings ...)
  2015-02-22 13:36 ` [Qemu-devel] [PATCH 5/6 v4] linux-user: Support tilegx architecture in linux-user Chen Gang S
@ 2015-02-22 13:37 ` Chen Gang S
  2015-02-27 18:24   ` Andreas Färber
  2015-02-22 18:29 ` [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Richard Henderson
  2015-02-22 22:32 ` Bastian Koppelmann
  6 siblings, 1 reply; 24+ messages in thread
From: Chen Gang S @ 2015-02-22 13:37 UTC (permalink / raw)
  To: Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt; +Cc: qemu-devel

For tilegx, several syscall macros are not supported, so switch them to
avoid building break.

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
 linux-user/syscall.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5720195..a3c3792 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -213,7 +213,7 @@ static int gettid(void) {
     return -ENOSYS;
 }
 #endif
-#ifdef __NR_getdents
+#if defined(TARGET_NR_getdents) && defined(__NR_getdents)
 _syscall3(int, sys_getdents, uint, fd, struct linux_dirent *, dirp, uint, count);
 #endif
 #if !defined(__NR_getdents) || \
@@ -5580,6 +5580,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         ret = get_errno(write(arg1, p, arg3));
         unlock_user(p, arg2, 0);
         break;
+#ifdef TARGET_NR_open
     case TARGET_NR_open:
         if (!(p = lock_user_string(arg1)))
             goto efault;
@@ -5588,6 +5589,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
                                   arg3));
         unlock_user(p, arg1, 0);
         break;
+#endif
     case TARGET_NR_openat:
         if (!(p = lock_user_string(arg2)))
             goto efault;
@@ -5602,9 +5604,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     case TARGET_NR_brk:
         ret = do_brk(arg1);
         break;
+#ifdef TARGET_NR_fork
     case TARGET_NR_fork:
         ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, 0, 0, 0));
         break;
+#endif
 #ifdef TARGET_NR_waitpid
     case TARGET_NR_waitpid:
         {
@@ -5639,6 +5643,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         unlock_user(p, arg1, 0);
         break;
 #endif
+#ifdef TARGET_NR_link
     case TARGET_NR_link:
         {
             void * p2;
@@ -5652,6 +5657,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             unlock_user(p, arg1, 0);
         }
         break;
+#endif
 #if defined(TARGET_NR_linkat)
     case TARGET_NR_linkat:
         {
@@ -5669,12 +5675,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
         break;
 #endif
+#ifdef TARGET_NR_unlink
     case TARGET_NR_unlink:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(unlink(p));
         unlock_user(p, arg1, 0);
         break;
+#endif
 #if defined(TARGET_NR_unlinkat)
     case TARGET_NR_unlinkat:
         if (!(p = lock_user_string(arg2)))
@@ -5791,12 +5799,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
         break;
 #endif
+#ifdef TARGET_NR_mknod
     case TARGET_NR_mknod:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(mknod(p, arg2, arg3));
         unlock_user(p, arg1, 0);
         break;
+#endif
 #if defined(TARGET_NR_mknodat)
     case TARGET_NR_mknodat:
         if (!(p = lock_user_string(arg2)))
@@ -5805,12 +5815,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         unlock_user(p, arg2, 0);
         break;
 #endif
+#ifdef TARGET_NR_chmod
     case TARGET_NR_chmod:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(chmod(p, arg2));
         unlock_user(p, arg1, 0);
         break;
+#endif
 #ifdef TARGET_NR_break
     case TARGET_NR_break:
         goto unimplemented;
@@ -5945,6 +5957,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
         break;
 #endif
+#ifdef TARGET_NR_utimes
     case TARGET_NR_utimes:
         {
             struct timeval *tvp, tv[2];
@@ -5963,6 +5976,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             unlock_user(p, arg1, 0);
         }
         break;
+#endif
 #if defined(TARGET_NR_futimesat)
     case TARGET_NR_futimesat:
         {
@@ -5991,12 +6005,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     case TARGET_NR_gtty:
         goto unimplemented;
 #endif
+#ifdef TARGET_NR_access
     case TARGET_NR_access:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(access(path(p), arg2));
         unlock_user(p, arg1, 0);
         break;
+#endif
 #if defined(TARGET_NR_faccessat) && defined(__NR_faccessat)
     case TARGET_NR_faccessat:
         if (!(p = lock_user_string(arg2)))
@@ -6021,6 +6037,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     case TARGET_NR_kill:
         ret = get_errno(kill(arg1, target_to_host_signal(arg2)));
         break;
+#ifdef TARGET_NR_rename
     case TARGET_NR_rename:
         {
             void *p2;
@@ -6034,6 +6051,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             unlock_user(p, arg1, 0);
         }
         break;
+#endif
 #if defined(TARGET_NR_renameat)
     case TARGET_NR_renameat:
         {
@@ -6049,12 +6067,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
         break;
 #endif
+#ifdef TARGET_NR_mkdir
     case TARGET_NR_mkdir:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(mkdir(p, arg2));
         unlock_user(p, arg1, 0);
         break;
+#endif
 #if defined(TARGET_NR_mkdirat)
     case TARGET_NR_mkdirat:
         if (!(p = lock_user_string(arg2)))
@@ -6063,18 +6083,22 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         unlock_user(p, arg2, 0);
         break;
 #endif
+#ifdef TARGET_NR_rmdir
     case TARGET_NR_rmdir:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(rmdir(p));
         unlock_user(p, arg1, 0);
         break;
+#endif
     case TARGET_NR_dup:
         ret = get_errno(dup(arg1));
         break;
+#ifdef TARGET_NR_pipe
     case TARGET_NR_pipe:
         ret = do_pipe(cpu_env, arg1, 0, 0);
         break;
+#endif
 #ifdef TARGET_NR_pipe2
     case TARGET_NR_pipe2:
         ret = do_pipe(cpu_env, arg1,
@@ -6159,11 +6183,15 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         ret = get_errno(chroot(p));
         unlock_user(p, arg1, 0);
         break;
+#ifdef TARGET_NR_ustat
     case TARGET_NR_ustat:
         goto unimplemented;
+#endif
+#ifdef TARGET_NR_dup2
     case TARGET_NR_dup2:
         ret = get_errno(dup2(arg1, arg2));
         break;
+#endif
 #if defined(CONFIG_DUP3) && defined(TARGET_NR_dup3)
     case TARGET_NR_dup3:
         ret = get_errno(dup3(arg1, arg2, arg3));
@@ -6174,12 +6202,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         ret = get_errno(getppid());
         break;
 #endif
+#ifdef TARGET_NR_getpgrp
     case TARGET_NR_getpgrp:
         ret = get_errno(getpgrp());
         break;
     case TARGET_NR_setsid:
         ret = get_errno(setsid());
         break;
+#endif
 #ifdef TARGET_NR_sigaction
     case TARGET_NR_sigaction:
         {
@@ -6752,6 +6782,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
         break;
 #endif
+#ifdef TARGET_NR_symlink
     case TARGET_NR_symlink:
         {
             void *p2;
@@ -6765,6 +6796,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             unlock_user(p, arg1, 0);
         }
         break;
+#endif
 #if defined(TARGET_NR_symlinkat)
     case TARGET_NR_symlinkat:
         {
@@ -6784,6 +6816,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     case TARGET_NR_oldlstat:
         goto unimplemented;
 #endif
+#ifdef TARGET_NR_readlink
     case TARGET_NR_readlink:
         {
             void *p2;
@@ -6814,6 +6847,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             unlock_user(p, arg1, 0);
         }
         break;
+#endif
 #if defined(TARGET_NR_readlinkat)
     case TARGET_NR_readlinkat:
         {
@@ -7213,22 +7247,28 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             }
         }
         break;
+#ifdef TARGET_NR_stat
     case TARGET_NR_stat:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(stat(path(p), &st));
         unlock_user(p, arg1, 0);
         goto do_stat;
+#endif
+#ifdef TARGET_NR_lstat
     case TARGET_NR_lstat:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(lstat(path(p), &st));
         unlock_user(p, arg1, 0);
         goto do_stat;
+#endif
     case TARGET_NR_fstat:
         {
             ret = get_errno(fstat(arg1, &st));
+#if defined(TARGET_NR_stat) || defined(TARGET_NR_lstat)
         do_stat:
+#endif
             if (!is_error(ret)) {
                 struct target_stat *target_st;
 
@@ -7516,6 +7556,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
         break;
 #endif
+#ifdef TARGET_NR_getdents
     case TARGET_NR_getdents:
 #ifdef __NR_getdents
 #if TARGET_ABI_BITS == 32 && HOST_LONG_BITS == 64
@@ -7646,6 +7687,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
 #endif
         break;
+#endif /* TARGET_NR_getdents */
 #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64)
     case TARGET_NR_getdents64:
         {
@@ -7785,11 +7827,13 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         ret = get_errno(fdatasync(arg1));
         break;
 #endif
+#ifdef TARGET_NR__sysctl
     case TARGET_NR__sysctl:
         /* We don't implement this, but ENOTDIR is always a safe
            return value. */
         ret = -TARGET_ENOTDIR;
         break;
+#endif
     case TARGET_NR_sched_getaffinity:
         {
             unsigned int mask_size;
@@ -8236,12 +8280,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
             ret = host_to_target_stat64(cpu_env, arg3, &st);
         break;
 #endif
+#ifdef TARGET_NR_lchown
     case TARGET_NR_lchown:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(lchown(p, low2highuid(arg2), low2highgid(arg3)));
         unlock_user(p, arg1, 0);
         break;
+#endif
 #ifdef TARGET_NR_getuid
     case TARGET_NR_getuid:
         ret = get_errno(high2lowuid(getuid()));
@@ -8364,12 +8410,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         }
         break;
 #endif
+#ifdef TARGET_NR_chown
     case TARGET_NR_chown:
         if (!(p = lock_user_string(arg1)))
             goto efault;
         ret = get_errno(chown(p, low2highuid(arg2), low2highgid(arg3)));
         unlock_user(p, arg1, 0);
         break;
+#endif
     case TARGET_NR_setuid:
         ret = get_errno(setuid(low2highuid(arg1)));
         break;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user
  2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
                   ` (4 preceding siblings ...)
  2015-02-22 13:37 ` [Qemu-devel] [PATCH 6/6 v4] linux-user/syscall.c: Switch all macros which are not defined in tilegx Chen Gang S
@ 2015-02-22 18:29 ` Richard Henderson
  2015-02-23  1:40   ` Chen Gang S
  2015-02-22 22:32 ` Bastian Koppelmann
  6 siblings, 1 reply; 24+ messages in thread
From: Richard Henderson @ 2015-02-22 18:29 UTC (permalink / raw)
  To: Chen Gang S, Chris Metcalf, Peter Maydell, Riku Voipio, walt; +Cc: qemu-devel

On 02/22/2015 05:31 AM, Chen Gang S wrote:
> Chen Gang (6):
>   target-tilegx: Firstly add to qemu with minimized features
>   linux-user: tilegx: Firstly add architecture related features
>   linux-user: tilegx: Add target features support within qemu
>   linux-user: Support tilegx architecture in syscall
>   linux-user: Support tilegx architecture in linux-user
>   linux-user/syscall.c: Switch all macros which are not defined in
>     tilegx

Reviewed-by: Richard Henderson <rth@twiddle.net>


r~

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user
  2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
                   ` (5 preceding siblings ...)
  2015-02-22 18:29 ` [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Richard Henderson
@ 2015-02-22 22:32 ` Bastian Koppelmann
  2015-02-23  1:37   ` Chen Gang S
  2015-02-26 23:56   ` Chen Gang S
  6 siblings, 2 replies; 24+ messages in thread
From: Bastian Koppelmann @ 2015-02-22 22:32 UTC (permalink / raw)
  To: Chen Gang S, Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt
  Cc: qemu-devel


On 02/22/2015 01:31 PM, Chen Gang S wrote:
> Chen Gang (6):
>    target-tilegx: Firstly add to qemu with minimized features
>    linux-user: tilegx: Firstly add architecture related features
>    linux-user: tilegx: Add target features support within qemu
>    linux-user: Support tilegx architecture in syscall
>    linux-user: Support tilegx architecture in linux-user
>    linux-user/syscall.c: Switch all macros which are not defined in
>      tilegx
>
>   configure                             |   7 +
>   default-configs/tilegx-linux-user.mak |   1 +
>   include/elf.h                         |   2 +
>   linux-user/elfload.c                  |  23 +++
>   linux-user/main.c                     |  74 +++++++++
>   linux-user/syscall.c                  |  50 +++++-
>   linux-user/syscall_defs.h             |  38 ++++-
>   linux-user/tilegx/syscall.h           |  80 ++++++++++
>   linux-user/tilegx/syscall_nr.h        | 278 +++++++++++++++++++++++++++++++++
>   linux-user/tilegx/target_cpu.h        |  35 +++++
>   linux-user/tilegx/target_signal.h     |  28 ++++
>   linux-user/tilegx/target_structs.h    |  48 ++++++
>   linux-user/tilegx/termbits.h          | 285 ++++++++++++++++++++++++++++++++++
>   target-tilegx/Makefile.objs           |   1 +
>   target-tilegx/cpu-qom.h               |  72 +++++++++
>   target-tilegx/cpu.c                   | 162 +++++++++++++++++++
>   target-tilegx/cpu.h                   |  85 ++++++++++
>   target-tilegx/helper.h                |   0
>   target-tilegx/translate.c             |  54 +++++++
>   19 files changed, 1318 insertions(+), 5 deletions(-)
>   create mode 100644 default-configs/tilegx-linux-user.mak
>   create mode 100644 linux-user/tilegx/syscall.h
>   create mode 100644 linux-user/tilegx/syscall_nr.h
>   create mode 100644 linux-user/tilegx/target_cpu.h
>   create mode 100644 linux-user/tilegx/target_signal.h
>   create mode 100644 linux-user/tilegx/target_structs.h
>   create mode 100644 linux-user/tilegx/termbits.h
>   create mode 100644 target-tilegx/Makefile.objs
>   create mode 100644 target-tilegx/cpu-qom.h
>   create mode 100644 target-tilegx/cpu.c
>   create mode 100644 target-tilegx/cpu.h
>   create mode 100644 target-tilegx/helper.h
>   create mode 100644 target-tilegx/translate.c
>
Hi Chen,

while looking at the diffstat, I see no change to the maintainer file. 
Can you add someone (you?), who will take care of this code you're 
trying to add?

Btw, cool looking cpu architecture.

Cheers,
Bastian

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user
  2015-02-22 22:32 ` Bastian Koppelmann
@ 2015-02-23  1:37   ` Chen Gang S
  2015-02-26 23:56   ` Chen Gang S
  1 sibling, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-23  1:37 UTC (permalink / raw)
  To: Bastian Koppelmann, Chris Metcalf, rth, Peter Maydell, Riku Voipio, walt
  Cc: qemu-devel

On 2/23/15 06:32, Bastian Koppelmann wrote:
> 
> On 02/22/2015 01:31 PM, Chen Gang S wrote:
>> Chen Gang (6):
>>    target-tilegx: Firstly add to qemu with minimized features
>>    linux-user: tilegx: Firstly add architecture related features
>>    linux-user: tilegx: Add target features support within qemu
>>    linux-user: Support tilegx architecture in syscall
>>    linux-user: Support tilegx architecture in linux-user
>>    linux-user/syscall.c: Switch all macros which are not defined in
>>      tilegx
>>
>>   configure                             |   7 +
>>   default-configs/tilegx-linux-user.mak |   1 +
>>   include/elf.h                         |   2 +
>>   linux-user/elfload.c                  |  23 +++
>>   linux-user/main.c                     |  74 +++++++++
>>   linux-user/syscall.c                  |  50 +++++-
>>   linux-user/syscall_defs.h             |  38 ++++-
>>   linux-user/tilegx/syscall.h           |  80 ++++++++++
>>   linux-user/tilegx/syscall_nr.h        | 278 +++++++++++++++++++++++++++++++++
>>   linux-user/tilegx/target_cpu.h        |  35 +++++
>>   linux-user/tilegx/target_signal.h     |  28 ++++
>>   linux-user/tilegx/target_structs.h    |  48 ++++++
>>   linux-user/tilegx/termbits.h          | 285 ++++++++++++++++++++++++++++++++++
>>   target-tilegx/Makefile.objs           |   1 +
>>   target-tilegx/cpu-qom.h               |  72 +++++++++
>>   target-tilegx/cpu.c                   | 162 +++++++++++++++++++
>>   target-tilegx/cpu.h                   |  85 ++++++++++
>>   target-tilegx/helper.h                |   0
>>   target-tilegx/translate.c             |  54 +++++++
>>   19 files changed, 1318 insertions(+), 5 deletions(-)
>>   create mode 100644 default-configs/tilegx-linux-user.mak
>>   create mode 100644 linux-user/tilegx/syscall.h
>>   create mode 100644 linux-user/tilegx/syscall_nr.h
>>   create mode 100644 linux-user/tilegx/target_cpu.h
>>   create mode 100644 linux-user/tilegx/target_signal.h
>>   create mode 100644 linux-user/tilegx/target_structs.h
>>   create mode 100644 linux-user/tilegx/termbits.h
>>   create mode 100644 target-tilegx/Makefile.objs
>>   create mode 100644 target-tilegx/cpu-qom.h
>>   create mode 100644 target-tilegx/cpu.c
>>   create mode 100644 target-tilegx/cpu.h
>>   create mode 100644 target-tilegx/helper.h
>>   create mode 100644 target-tilegx/translate.c
>>
> Hi Chen,
> 
> while looking at the diffstat, I see no change to the maintainer file. Can you add someone (you?), who will take care of this code you're trying to add?
> 

Excuse me, I guess, I am not the suitable maintainer for it.

 - At present, in fact, I am not quite familiar with tile, not quite
   familiar with qemu.

 - I am not quite sure I can still have enough time resources on qemu:
   In holidays, I can (e.g. Chinese Spring Festival, but in work days,
   I guess, I can not.

 - I suggest to let other tile related members as maintainer (although
   I am not quite sure whether they have enough time resource or not).

If really nobody have enough time resource as the related maintainer, I
should be. Since I start it, I have duty to let it grow up (although I
really have no enough time resource on it).

Really welcome any tile related members to be as the related maintainer.


> Btw, cool looking cpu architecture.
> 

For me, tilegx is really cool!  :-)


Thanks.
-- 
Chen Gang

Open, share, and attitude like air, water, and life which God blessed

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user
  2015-02-22 18:29 ` [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Richard Henderson
@ 2015-02-23  1:40   ` Chen Gang S
  0 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-23  1:40 UTC (permalink / raw)
  To: Richard Henderson, Chris Metcalf, Peter Maydell, Riku Voipio, walt
  Cc: qemu-devel

On 2/23/15 02:29, Richard Henderson wrote:
> On 02/22/2015 05:31 AM, Chen Gang S wrote:
>> Chen Gang (6):
>>   target-tilegx: Firstly add to qemu with minimized features
>>   linux-user: tilegx: Firstly add architecture related features
>>   linux-user: tilegx: Add target features support within qemu
>>   linux-user: Support tilegx architecture in syscall
>>   linux-user: Support tilegx architecture in linux-user
>>   linux-user/syscall.c: Switch all macros which are not defined in
>>     tilegx
> 
> Reviewed-by: Richard Henderson <rth@twiddle.net>
> 

Thank all of you, next, I shall try to send patch for executing one TB
block within 3 days (2015-02-25)


Thanks.
-- 
Chen Gang

Open, share, and attitude like air, water, and life which God blessed

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user
  2015-02-22 22:32 ` Bastian Koppelmann
  2015-02-23  1:37   ` Chen Gang S
@ 2015-02-26 23:56   ` Chen Gang S
  2015-02-27  0:32     ` Chen Gang S
  1 sibling, 1 reply; 24+ messages in thread
From: Chen Gang S @ 2015-02-26 23:56 UTC (permalink / raw)
  To: Bastian Koppelmann
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

On 02/23/2015 06:32 AM, Bastian Koppelmann wrote:
> 
> On 02/22/2015 01:31 PM, Chen Gang S wrote:
>> Chen Gang (6):
>>    target-tilegx: Firstly add to qemu with minimized features
>>    linux-user: tilegx: Firstly add architecture related features
>>    linux-user: tilegx: Add target features support within qemu
>>    linux-user: Support tilegx architecture in syscall
>>    linux-user: Support tilegx architecture in linux-user
>>    linux-user/syscall.c: Switch all macros which are not defined in
>>      tilegx
>>
>>   configure                             |   7 +
>>   default-configs/tilegx-linux-user.mak |   1 +
>>   include/elf.h                         |   2 +
>>   linux-user/elfload.c                  |  23 +++
>>   linux-user/main.c                     |  74 +++++++++
>>   linux-user/syscall.c                  |  50 +++++-
>>   linux-user/syscall_defs.h             |  38 ++++-
>>   linux-user/tilegx/syscall.h           |  80 ++++++++++
>>   linux-user/tilegx/syscall_nr.h        | 278 +++++++++++++++++++++++++++++++++
>>   linux-user/tilegx/target_cpu.h        |  35 +++++
>>   linux-user/tilegx/target_signal.h     |  28 ++++
>>   linux-user/tilegx/target_structs.h    |  48 ++++++
>>   linux-user/tilegx/termbits.h          | 285 ++++++++++++++++++++++++++++++++++
>>   target-tilegx/Makefile.objs           |   1 +
>>   target-tilegx/cpu-qom.h               |  72 +++++++++
>>   target-tilegx/cpu.c                   | 162 +++++++++++++++++++
>>   target-tilegx/cpu.h                   |  85 ++++++++++
>>   target-tilegx/helper.h                |   0
>>   target-tilegx/translate.c             |  54 +++++++
>>   19 files changed, 1318 insertions(+), 5 deletions(-)
>>   create mode 100644 default-configs/tilegx-linux-user.mak
>>   create mode 100644 linux-user/tilegx/syscall.h
>>   create mode 100644 linux-user/tilegx/syscall_nr.h
>>   create mode 100644 linux-user/tilegx/target_cpu.h
>>   create mode 100644 linux-user/tilegx/target_signal.h
>>   create mode 100644 linux-user/tilegx/target_structs.h
>>   create mode 100644 linux-user/tilegx/termbits.h
>>   create mode 100644 target-tilegx/Makefile.objs
>>   create mode 100644 target-tilegx/cpu-qom.h
>>   create mode 100644 target-tilegx/cpu.c
>>   create mode 100644 target-tilegx/cpu.h
>>   create mode 100644 target-tilegx/helper.h
>>   create mode 100644 target-tilegx/translate.c
>>
> Hi Chen,
> 
> while looking at the diffstat, I see no change to the maintainer file. Can you add someone (you?), who will take care of this code you're trying to add?
> 

At present, please add me for it, firstly. At least, it is my duty.

Excuse me, I am not quite familiar with the related working flow (adding
maintainer), if it is necessary to let me do something, please let me
know, and I shall follow with.

Thanks.
-- 
Open, share, and attitude like air, water, and life which God blessed.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user
  2015-02-26 23:56   ` Chen Gang S
@ 2015-02-27  0:32     ` Chen Gang S
  0 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-27  0:32 UTC (permalink / raw)
  To: Bastian Koppelmann
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

On 02/27/2015 07:56 AM, Chen Gang S wrote:
> On 02/23/2015 06:32 AM, Bastian Koppelmann wrote:
>> Hi Chen,
>>
>> while looking at the diffstat, I see no change to the maintainer file. Can you add someone (you?), who will take care of this code you're trying to add?
>>
> 

Hello Chris, Richard, Peter:

If any one of you can accept to be as tilegx maintainer, please reply.
I welcome any of you to be the tilegx maintainer.


Thanks.

> At present, please add me for it, firstly. At least, it is my duty.
> 
> Excuse me, I am not quite familiar with the related working flow (adding
> maintainer), if it is necessary to let me do something, please let me
> know, and I shall follow with.
> 
> Thanks.
> 


-- 
Open, share, and attitude like air, water, and life which God blessed.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-22 13:33 ` [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features Chen Gang S
@ 2015-02-27 17:36   ` Andreas Färber
  2015-02-27 21:49     ` Chris Metcalf
                       ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Andreas Färber @ 2015-02-27 17:36 UTC (permalink / raw)
  To: Chen Gang S
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

Hi,

"target-tilegx: Initial stub" or "...support"? No need to mention QEMU
(spelling!) in a QEMU commit.

Am 22.02.2015 um 14:33 schrieb Chen Gang S:
> It almost likes a template for adding an architecture target.

That's a comment that's not really descriptive of what the patch does.
Instead, maybe mention that this is the configure and build system
support etc. and what name to use for enabling it from configure, that
it's linux-user only for now, ...?

> 
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> ---
>  configure                             |   7 ++
>  default-configs/tilegx-linux-user.mak |   1 +
>  target-tilegx/Makefile.objs           |   1 +
>  target-tilegx/cpu-qom.h               |  72 +++++++++++++++
>  target-tilegx/cpu.c                   | 162 ++++++++++++++++++++++++++++++++++
>  target-tilegx/cpu.h                   |  85 ++++++++++++++++++
>  target-tilegx/helper.h                |   0
>  target-tilegx/translate.c             |  54 ++++++++++++
>  8 files changed, 382 insertions(+)
>  create mode 100644 default-configs/tilegx-linux-user.mak
>  create mode 100644 target-tilegx/Makefile.objs
>  create mode 100644 target-tilegx/cpu-qom.h
>  create mode 100644 target-tilegx/cpu.c
>  create mode 100644 target-tilegx/cpu.h
>  create mode 100644 target-tilegx/helper.h
>  create mode 100644 target-tilegx/translate.c
> 
> diff --git a/configure b/configure
> index 7ba4bcb..23aa8f6 100755
> --- a/configure
> +++ b/configure
> @@ -5191,6 +5191,9 @@ case "$target_name" in
>    s390x)
>      gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
>    ;;
> +  tilegx)
> +    TARGET_ARCH=tilegx
> +  ;;
>    unicore32)
>    ;;
>    xtensa|xtensaeb)
> @@ -5363,6 +5366,10 @@ for i in $ARCH $TARGET_BASE_ARCH ; do
>      echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
>      echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
>    ;;
> +  tilegx*)
> +    echo "CONFIG_TILEGX_DIS=y"  >> $config_target_mak
> +    echo "CONFIG_TILEGX_DIS=y"  >> config-all-disas.mak
> +  ;;

Hadn't you been asked to drop these lines, as you are not yet adding any
disassembler code that uses it?

>    xtensa*)
>      echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
>      echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
[...]
> diff --git a/target-tilegx/cpu-qom.h b/target-tilegx/cpu-qom.h
> new file mode 100644
> index 0000000..e15a8b8
> --- /dev/null
> +++ b/target-tilegx/cpu-qom.h
> @@ -0,0 +1,72 @@
> +/*
> + * QEMU Tilegx CPU

"TILE-Gx" according to
http://www.tilera.com/products/?ezchip=585&spage=614 - please fix
wherever used in textual form.

> + *
> + * Copyright (c) 2015 Chen Gang
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see
> + * <http://www.gnu.org/licenses/lgpl-2.1.html>
> + */
> +#ifndef QEMU_TILEGX_CPU_QOM_H
> +#define QEMU_TILEGX_CPU_QOM_H
> +
> +#include "qom/cpu.h"
> +
> +#define TYPE_TILEGX_CPU "tilegx-cpu"
> +
> +#define TILEGX_CPU_CLASS(klass) \
> +    OBJECT_CLASS_CHECK(TilegxCPUClass, (klass), TYPE_TILEGX_CPU)
> +#define TILEGX_CPU(obj) \
> +    OBJECT_CHECK(TilegxCPU, (obj), TYPE_TILEGX_CPU)
> +#define TILEGX_CPU_GET_CLASS(obj) \
> +    OBJECT_GET_CLASS(TilegxCPUClass, (obj), TYPE_TILEGX_CPU)
> +
> +/**
> + * TilegxCPUClass:
> + * @parent_realize: The parent class' realize handler.
> + * @parent_reset: The parent class' reset handler.
> + *
> + * A Tilegx CPU model.
> + */
> +typedef struct TilegxCPUClass {

For the benefit of readers, please call this TileGXCPUClass ...

> +    /*< private >*/
> +    CPUClass parent_class;
> +    /*< public >*/
> +
> +    DeviceRealize parent_realize;
> +    void (*parent_reset)(CPUState *cpu);
> +} TilegxCPUClass;
> +
> +/**
> + * TilegxCPU:
> + * @env: #CPUTLState
> + *
> + * A Tilegx CPU.
> + */
> +typedef struct TilegxCPU {

... and TileGXCPU. (or TileGx...)

> +    /*< private >*/
> +    CPUState parent_obj;
> +    uint64_t base_vectors;

This should not be in here, the private section serves to hide the
parent field from documentation.

base_vectors should also probably be after env, for performance reasons.
rth?

> +    /*< public >*/
> +
> +    CPUTLState env;

Can this be more telling than TL please?

> +} TilegxCPU;
> +
> +static inline TilegxCPU *tilegx_env_get_cpu(CPUTLState *env)
> +{
> +    return container_of(env, TilegxCPU, env);
> +}
> +
> +#define ENV_GET_CPU(e) CPU(tilegx_env_get_cpu(e))
> +
> +#endif
> diff --git a/target-tilegx/cpu.c b/target-tilegx/cpu.c
> new file mode 100644
> index 0000000..3dd66b5
> --- /dev/null
> +++ b/target-tilegx/cpu.c
> @@ -0,0 +1,162 @@
> +/*
> + * QEMU Tilegx CPU
> + *
> + *  Copyright (c) 2015 Chen Gang
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see
> + * <http://www.gnu.org/licenses/lgpl-2.1.html>
> + */
> +
> +#include "cpu.h"
> +#include "qemu-common.h"
> +#include "hw/qdev-properties.h"
> +#include "migration/vmstate.h"
> +
> +TilegxCPU *cpu_tilegx_init(const char *cpu_model)
> +{
> +    TilegxCPU *cpu;
> +
> +    cpu = TILEGX_CPU(object_new(TYPE_TILEGX_CPU));
> +
> +    object_property_set_bool(OBJECT(cpu), true, "realized", NULL);
> +
> +    return cpu;
> +}
> +
> +static void tilegx_cpu_set_pc(CPUState *cs, vaddr value)
> +{
> +    TilegxCPU *cpu = TILEGX_CPU(cs);
> +
> +    cpu->env.pc = value;
> +}
> +
> +static bool tilegx_cpu_has_work(CPUState *cs)
> +{
> +    return true;
> +}
> +
> +static void tilegx_cpu_reset(CPUState *s)
> +{
> +    TilegxCPU *cpu = TILEGX_CPU(s);
> +    TilegxCPUClass *mcc = TILEGX_CPU_GET_CLASS(cpu);

Why mcc? Probably copied from a CPU with M.

> +    CPUTLState *env = &cpu->env;
> +
> +    mcc->parent_reset(s);
> +
> +    memset(env, 0, sizeof(CPUTLState));
> +    tlb_flush(s, 1);
> +}
> +
> +static void tilegx_cpu_realizefn(DeviceState *dev, Error **errp)
> +{
> +    CPUState *cs = CPU(dev);
> +    TilegxCPUClass *mcc = TILEGX_CPU_GET_CLASS(dev);

Ditto.

> +
> +    cpu_reset(cs);
> +    qemu_init_vcpu(cs);
> +
> +    mcc->parent_realize(dev, errp);
> +}
> +
> +static void tilegx_tcg_init(void)
> +{
> +}
> +
> +static void tilegx_cpu_initfn(Object *obj)
> +{
> +    CPUState *cs = CPU(obj);
> +    TilegxCPU *cpu = TILEGX_CPU(obj);
> +    CPUTLState *env = &cpu->env;
> +    static bool tcg_initialized;
> +
> +    cs->env_ptr = env;
> +    cpu_exec_init(env);
> +
> +    if (tcg_enabled() && !tcg_initialized) {
> +        tcg_initialized = true;
> +        tilegx_tcg_init();
> +    }
> +}
> +
> +static const VMStateDescription vmstate_tilegx_cpu = {
> +    .name = "cpu",
> +    .unmigratable = 1,
> +};
> +
> +static Property tilegx_properties[] = {

"tilegx_cpu_properties" for consistency?

> +    DEFINE_PROP_UINT64("tilegx.base-vectors", TilegxCPU, base_vectors, 0),

Why "tilegx." prefix? That would likely interfere with our QMP tools.

What is this actually used for? To someone not knowing the architecture
it may sound a bit strange to have a variable/property ...vectors that
is actually just one uint64 value. Someone recently added an API to add
a description for a property, and this seems to be calling for one.
Moving it to a patch that actually uses it would be another idea.

> +    DEFINE_PROP_END_OF_LIST(),
> +};
> +
> +static void tilegx_cpu_do_interrupt(CPUState *cs)
> +{
> +    cs->exception_index = -1;
> +}
> +
> +static int tilegx_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int rw,
> +                            int mmu_idx)

Indentation.

> +{
> +    cpu_dump_state(cs, stderr, fprintf, 0);
> +    return 1;
> +}
> +
> +static bool tilegx_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
> +{
> +    if (interrupt_request & CPU_INTERRUPT_HARD) {
> +        tilegx_cpu_do_interrupt(cs);
> +        return true;
> +    }
> +    return false;
> +}
> +
> +static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
> +{
> +    DeviceClass *dc = DEVICE_CLASS(oc);
> +    CPUClass *cc = CPU_CLASS(oc);
> +    TilegxCPUClass *mcc = TILEGX_CPU_CLASS(oc);
> +
> +    mcc->parent_realize = dc->realize;
> +    dc->realize = tilegx_cpu_realizefn;
> +
> +    mcc->parent_reset = cc->reset;
> +    cc->reset = tilegx_cpu_reset;
> +
> +    cc->has_work = tilegx_cpu_has_work;
> +    cc->do_interrupt = tilegx_cpu_do_interrupt;
> +    cc->cpu_exec_interrupt = tilegx_cpu_exec_interrupt;
> +    cc->dump_state = NULL;
> +    cc->set_pc = tilegx_cpu_set_pc;
> +    cc->gdb_read_register = NULL;
> +    cc->gdb_write_register = NULL;

Is this really safe to do? If so, all fields are zero-initialized at
this point already, so no need to assign NULL or 0.

> +    cc->handle_mmu_fault = tilegx_cpu_handle_mmu_fault;
> +    dc->vmsd = &vmstate_tilegx_cpu;
> +    dc->props = tilegx_properties;
> +    cc->gdb_num_core_regs = 0;
> +}
> +
> +static const TypeInfo tilegx_cpu_type_info = {
> +    .name = TYPE_TILEGX_CPU,
> +    .parent = TYPE_CPU,
> +    .instance_size = sizeof(TilegxCPU),
> +    .instance_init = tilegx_cpu_initfn,

What about CPU models? Do the Gx72, Gx36, etc. differ only in core count
or also in instruction set features?

> +    .class_size = sizeof(TilegxCPUClass),
> +    .class_init = tilegx_cpu_class_init,
> +};
> +
> +static void tilegx_cpu_register_types(void)
> +{
> +    type_register_static(&tilegx_cpu_type_info);
> +}
> +
> +type_init(tilegx_cpu_register_types)
> diff --git a/target-tilegx/cpu.h b/target-tilegx/cpu.h
> new file mode 100644
> index 0000000..09a2b26
> --- /dev/null
> +++ b/target-tilegx/cpu.h
> @@ -0,0 +1,85 @@
> +/*
> + *  Tilegx virtual CPU header
> + *
> + *  Copyright (c) 2015 Chen Gang
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +#ifndef CPU_TILEGX_H
> +#define CPU_TILEGX_H
> +
> +#include "config.h"
> +#include "qemu-common.h"
> +
> +#define TARGET_LONG_BITS 64
> +
> +#define CPUArchState struct CPUTLState

Drop the struct here? You have a typedef below.

> +
> +#include "exec/cpu-defs.h"
> +#include "fpu/softfloat.h"
> +
> +/* Tilegx register alias */
> +#define TILEGX_R_RE  0   /*  0 register, for function/syscall return value */
> +#define TILEGX_R_NR  10  /* 10 register, for syscall number */
> +#define TILEGX_R_BP  52  /* 52 register, optional frame pointer */
> +#define TILEGX_R_TP  53  /* TP register, thread local storage data */
> +#define TILEGX_R_SP  54  /* SP register, stack pointer */
> +#define TILEGX_R_LR  55  /* LR register, may save pc, but it is not pc */
> +
> +typedef struct CPUTLState {
> +    uint64_t regs[56];
> +    uint64_t pc;

You have marked the CPU unmigratable. Might it make sense to still
prepare the corresponding VMState fields so that it does not get forgotten?

> +    CPU_COMMON
> +} CPUTLState;
> +
> +#include "cpu-qom.h"
> +
> +/* Tilegx memory attributes */
> +#define TARGET_PAGE_BITS 16  /* Tilegx uses 64KB page size */
> +#define MMAP_SHIFT TARGET_PAGE_BITS
> +#define TARGET_PHYS_ADDR_SPACE_BITS 42 /* Tilegx is 42 bit physical address */
> +#define TARGET_VIRT_ADDR_SPACE_BITS 64 /* Tilegx has 64 bit virtual address */
> +#define MMU_USER_IDX    0  /* independent from both qemu and architecture */
> +
> +#include "exec/cpu-all.h"
> +
> +int cpu_tilegx_exec(CPUTLState *s);
> +int cpu_tilegx_signal_handler(int host_signum, void *pinfo, void *puc);
> +
> +#define cpu_exec cpu_tilegx_exec
> +#define cpu_gen_code cpu_tilegx_gen_code
> +#define cpu_signal_handler cpu_tilegx_signal_handler
> +
> +TilegxCPU *cpu_tilegx_init(const char *cpu_model);
> +
> +static inline CPUTLState *cpu_init(const char *cpu_model)
> +{
> +    TilegxCPU *cpu = cpu_tilegx_init(cpu_model);
> +    if (cpu == NULL) {
> +        return NULL;
> +    }
> +    return &cpu->env;
> +}
> +
> +static inline void cpu_get_tb_cpu_state(CPUTLState *env, target_ulong *pc,
> +                                        target_ulong *cs_base, int *flags)
> +{
> +    *pc = env->pc;
> +    *cs_base = 0;
> +    *flags = 0;
> +}
> +
> +#include "exec/exec-all.h"
> +
> +#endif
> diff --git a/target-tilegx/helper.h b/target-tilegx/helper.h
> new file mode 100644
> index 0000000..e69de29

Is this empty file actually included from somewhere in this patch?

> diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c
> new file mode 100644
> index 0000000..5131fa7
> --- /dev/null
> +++ b/target-tilegx/translate.c
> @@ -0,0 +1,54 @@
> +/*
> + * QEMU Tilegx CPU
> + *
> + *  Copyright (c) 2015 Chen Gang
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see
> + * <http://www.gnu.org/licenses/lgpl-2.1.html>
> + */
> +
> +#include "cpu.h"
> +#include "disas/disas.h"
> +#include "tcg-op.h"
> +#include "exec/helper-proto.h"
> +#include "exec/cpu_ldst.h"
> +#include "exec/helper-gen.h"
> +
> +static inline void gen_intermediate_code_internal(TilegxCPU *cpu,
> +                                                  TranslationBlock *tb,
> +                                                  bool search_pc)
> +{
> +    /*
> +     * FIXME: after load elf64 tilegx binary successfully, it will quit, at
> +     * present, and will implement the related features next.
> +     */
> +    fprintf(stderr, "\nLoad elf64 tilegx successfully\n");

"Loaded"

> +    fprintf(stderr, "reach code start position: [" TARGET_FMT_lx "] %s\n\n",

"reached"

> +            tb->pc, lookup_symbol(tb->pc));

This output is hopefully only temporary. But as a general reminder,
there is error_report() for error messages, and for debug messages
please define your own macros or use the qemu_log infrastructure instead
of fprintf(stderr, ...).

> +    exit(0);
> +}
> +
> +void gen_intermediate_code(CPUTLState *env, struct TranslationBlock *tb)
> +{
> +    gen_intermediate_code_internal(tilegx_env_get_cpu(env), tb, false);
> +}
> +
> +void gen_intermediate_code_pc(CPUTLState *env, struct TranslationBlock *tb)
> +{
> +    gen_intermediate_code_internal(tilegx_env_get_cpu(env), tb, true);
> +}
> +
> +void restore_state_to_opc(CPUTLState *env, TranslationBlock *tb, int pc_pos)
> +{
> +}

Regards,
Andreas

-- 
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu,
Graham Norton; HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 4/6 v4] linux-user: Support tilegx architecture in syscall
  2015-02-22 13:36 ` [Qemu-devel] [PATCH 4/6 v4] linux-user: Support tilegx architecture in syscall Chen Gang S
@ 2015-02-27 17:40   ` Andreas Färber
  2015-02-27 23:10     ` Chen Gang S
  0 siblings, 1 reply; 24+ messages in thread
From: Andreas Färber @ 2015-02-27 17:40 UTC (permalink / raw)
  To: Chen Gang S
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

Am 22.02.2015 um 14:36 schrieb Chen Gang S:
> Add tilegx architecture in "syscall_defs.h", all related features (ioctrl,
> and stat) are based on Linux kernel tilegx 64-bit implementation.
> 
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> ---
>  linux-user/syscall_defs.h | 38 ++++++++++++++++++++++++++++++++++----
>  1 file changed, 34 insertions(+), 4 deletions(-)
> 
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index 9ed6de8..a0d9d77 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
[...]
> @@ -2312,7 +2340,9 @@ struct target_flock {
>  struct target_flock64 {
>  	short  l_type;
>  	short  l_whence;
> -#if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) || defined(TARGET_SPARC) || defined(TARGET_HPPA) || defined (TARGET_MICROBLAZE)
> +#if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) || \
> +    defined(TARGET_SPARC) || defined(TARGET_HPPA) \
> +    || defined(TARGET_MICROBLAZE) || defined(TARGET_TILEGX)

Nit: You're inconsistent as to where you're placing ||.

Regards,
Andreas

>          int __pad;
>  #endif
>  	unsigned long long l_start;
> 


-- 
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu,
Graham Norton; HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 6/6 v4] linux-user/syscall.c: Switch all macros which are not defined in tilegx
  2015-02-22 13:37 ` [Qemu-devel] [PATCH 6/6 v4] linux-user/syscall.c: Switch all macros which are not defined in tilegx Chen Gang S
@ 2015-02-27 18:24   ` Andreas Färber
  2015-02-27 23:06     ` Chen Gang S
  0 siblings, 1 reply; 24+ messages in thread
From: Andreas Färber @ 2015-02-27 18:24 UTC (permalink / raw)
  To: Chen Gang S
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

Am 22.02.2015 um 14:37 schrieb Chen Gang S:
> For tilegx, several syscall macros are not supported, so switch them to
> avoid building break.
> 
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> ---
>  linux-user/syscall.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 49 insertions(+), 1 deletion(-)

LGTM,

Reviewed-by: Andreas Färber <afaerber@suse.de>

However I suggest "conditionalize syscalls" or "disable syscalls" over
"switch ... macros/them".

Regards,
Andreas

-- 
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu,
Graham Norton; HRB 21284 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-27 17:36   ` Andreas Färber
@ 2015-02-27 21:49     ` Chris Metcalf
  2015-02-28  2:10       ` Chen Gang S
  2015-02-28  5:20     ` Chen Gang S
  2015-02-28 19:19     ` Chen Gang S
  2 siblings, 1 reply; 24+ messages in thread
From: Chris Metcalf @ 2015-02-27 21:49 UTC (permalink / raw)
  To: Andreas Färber, Chen Gang S
  Cc: Peter Maydell, walt, Riku Voipio, qemu-devel, rth

On 2/27/2015 12:36 PM, Andreas Färber wrote:
> "TILE-Gx" according to
> http://www.tilera.com/products/?ezchip=585&spage=614  - please fix
> wherever used in textual form.

Yes, really only "tilegx" or "TILE-Gx" should be used.  In type names I agree that TileGX is probably clearer than any alternatives.

> What about CPU models? Do the Gx72, Gx36, etc. differ only in core count
> or also in instruction set features?

 From a userspace perspective, it's mostly the core count.  They also have a different set of on-chip hardware accelerators, etc., but that's out of scope for this project.

-- 
Chris Metcalf, EZChip Semiconductor
http://www.ezchip.com

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 6/6 v4] linux-user/syscall.c: Switch all macros which are not defined in tilegx
  2015-02-27 18:24   ` Andreas Färber
@ 2015-02-27 23:06     ` Chen Gang S
  0 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-27 23:06 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

On 02/28/2015 02:24 AM, Andreas Färber wrote:
> Am 22.02.2015 um 14:37 schrieb Chen Gang S:
>> For tilegx, several syscall macros are not supported, so switch them to
>> avoid building break.
>>
>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>> ---
>>  linux-user/syscall.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
>>  1 file changed, 49 insertions(+), 1 deletion(-)
> 
> LGTM,
> 
> Reviewed-by: Andreas Färber <afaerber@suse.de>
> 
> However I suggest "conditionalize syscalls" or "disable syscalls" over
> "switch ... macros/them".
> 

OK, thanks. What you said above sounds reasonable to me.

Thanks.
-- 
Open, share, and attitude like air, water, and life which God blessed.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 4/6 v4] linux-user: Support tilegx architecture in syscall
  2015-02-27 17:40   ` Andreas Färber
@ 2015-02-27 23:10     ` Chen Gang S
  0 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-27 23:10 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

On 02/28/2015 01:40 AM, Andreas Färber wrote:
> Am 22.02.2015 um 14:36 schrieb Chen Gang S:
>> Add tilegx architecture in "syscall_defs.h", all related features (ioctrl,
>> and stat) are based on Linux kernel tilegx 64-bit implementation.
>>
>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>> ---
>>  linux-user/syscall_defs.h | 38 ++++++++++++++++++++++++++++++++++----
>>  1 file changed, 34 insertions(+), 4 deletions(-)
>>
>> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
>> index 9ed6de8..a0d9d77 100644
>> --- a/linux-user/syscall_defs.h
>> +++ b/linux-user/syscall_defs.h
> [...]
>> @@ -2312,7 +2340,9 @@ struct target_flock {
>>  struct target_flock64 {
>>  	short  l_type;
>>  	short  l_whence;
>> -#if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) || defined(TARGET_SPARC) || defined(TARGET_HPPA) || defined (TARGET_MICROBLAZE)
>> +#if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) || \
>> +    defined(TARGET_SPARC) || defined(TARGET_HPPA) \
>> +    || defined(TARGET_MICROBLAZE) || defined(TARGET_TILEGX)
> 
> Nit: You're inconsistent as to where you're placing ||.
> 

OK.

-- 
Open, share, and attitude like air, water, and life which God blessed.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-28  2:10       ` Chen Gang S
@ 2015-02-28  2:09         ` Chris Metcalf
  2015-02-28  4:39           ` Chen Gang S
  0 siblings, 1 reply; 24+ messages in thread
From: Chris Metcalf @ 2015-02-28  2:09 UTC (permalink / raw)
  To: Chen Gang S, Andreas Färber
  Cc: Peter Maydell, walt, Riku Voipio, qemu-devel, rth

On 2/27/2015 9:10 PM, Chen Gang S wrote:
> By the way, does Gx8000 mean 8000 core count?

It's marketing, so it doesn't have to mean anything.  The TILE-Gx 8036 is the 36-core part, the 8072 is the 72-core part, 8009 is the 9-core part, etc.  There is no "8000" chip, it's just a way of describing the TILE-Gx chip series.

-- 
Chris Metcalf, EZChip Semiconductor
http://www.ezchip.com

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-27 21:49     ` Chris Metcalf
@ 2015-02-28  2:10       ` Chen Gang S
  2015-02-28  2:09         ` Chris Metcalf
  0 siblings, 1 reply; 24+ messages in thread
From: Chen Gang S @ 2015-02-28  2:10 UTC (permalink / raw)
  To: Chris Metcalf, Andreas Färber
  Cc: Peter Maydell, walt, Riku Voipio, qemu-devel, rth

On 2/28/15 05:49, Chris Metcalf wrote:
> On 2/27/2015 12:36 PM, Andreas Färber wrote:
>> "TILE-Gx" according to
>> http://www.tilera.com/products/?ezchip=585&spage=614  - please fix
>> wherever used in textual form.
> 
> Yes, really only "tilegx" or "TILE-Gx" should be used.  In type names I agree that TileGX is probably clearer than any alternatives.
> 

OK, thanks. I shall use TILE-Gx for it.

And next, for the type names, I shall use TileGX.

>> What about CPU models? Do the Gx72, Gx36, etc. differ only in core count
>> or also in instruction set features?
> 
> From a userspace perspective, it's mostly the core count.  They also have a different set of on-chip hardware accelerators, etc., but that's out of scope for this project.
> 

OK, thanks. I guess your meaning is "For qemu, we needn't consider about
Gx72, Gx36 ..., we can treat all of them as TILE-Gx".

By the way, does Gx8000 mean 8000 core count?

Thanks.
-- 
Chen Gang

Open, share, and attitude like air, water, and life which God blessed

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-28  2:09         ` Chris Metcalf
@ 2015-02-28  4:39           ` Chen Gang S
  0 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-28  4:39 UTC (permalink / raw)
  To: Chris Metcalf, Andreas Färber
  Cc: Peter Maydell, walt, Riku Voipio, qemu-devel, rth

On 2/28/15 10:09, Chris Metcalf wrote:
> On 2/27/2015 9:10 PM, Chen Gang S wrote:
>> By the way, does Gx8000 mean 8000 core count?
> 
> It's marketing, so it doesn't have to mean anything.  The TILE-Gx 8036 is the 36-core part, the 8072 is the 72-core part, 8009 is the 9-core part, etc.  There is no "8000" chip, it's just a way of describing the TILE-Gx chip series.
> 

OK, thanks.

-- 
Chen Gang

Open, share, and attitude like air, water, and life which God blessed

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-27 17:36   ` Andreas Färber
  2015-02-27 21:49     ` Chris Metcalf
@ 2015-02-28  5:20     ` Chen Gang S
  2015-02-28 20:04       ` Chen Gang S
  2015-02-28 19:19     ` Chen Gang S
  2 siblings, 1 reply; 24+ messages in thread
From: Chen Gang S @ 2015-02-28  5:20 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth


Firstly, thank you very much for your patient work!


On 2/28/15 01:36, Andreas Färber wrote:
> Hi,
> 
> "target-tilegx: Initial stub" or "...support"? No need to mention QEMU
> (spelling!) in a QEMU commit.
> 

OK, thanks.

> Am 22.02.2015 um 14:33 schrieb Chen Gang S:
>> It almost likes a template for adding an architecture target.
> 
> That's a comment that's not really descriptive of what the patch does.
> Instead, maybe mention that this is the configure and build system
> support etc. and what name to use for enabling it from configure, that
> it's linux-user only for now, ...?
> 

OK, thanks.

>>
>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>> ---
>>  configure                             |   7 ++
>>  default-configs/tilegx-linux-user.mak |   1 +
>>  target-tilegx/Makefile.objs           |   1 +
>>  target-tilegx/cpu-qom.h               |  72 +++++++++++++++
>>  target-tilegx/cpu.c                   | 162 ++++++++++++++++++++++++++++++++++
>>  target-tilegx/cpu.h                   |  85 ++++++++++++++++++
>>  target-tilegx/helper.h                |   0
>>  target-tilegx/translate.c             |  54 ++++++++++++
>>  8 files changed, 382 insertions(+)
>>  create mode 100644 default-configs/tilegx-linux-user.mak
>>  create mode 100644 target-tilegx/Makefile.objs
>>  create mode 100644 target-tilegx/cpu-qom.h
>>  create mode 100644 target-tilegx/cpu.c
>>  create mode 100644 target-tilegx/cpu.h
>>  create mode 100644 target-tilegx/helper.h
>>  create mode 100644 target-tilegx/translate.c
>>
>> diff --git a/configure b/configure
>> index 7ba4bcb..23aa8f6 100755
>> --- a/configure
>> +++ b/configure
>> @@ -5191,6 +5191,9 @@ case "$target_name" in
>>    s390x)
>>      gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
>>    ;;
>> +  tilegx)
>> +    TARGET_ARCH=tilegx
>> +  ;;
>>    unicore32)
>>    ;;
>>    xtensa|xtensaeb)
>> @@ -5363,6 +5366,10 @@ for i in $ARCH $TARGET_BASE_ARCH ; do
>>      echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
>>      echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
>>    ;;
>> +  tilegx*)
>> +    echo "CONFIG_TILEGX_DIS=y"  >> $config_target_mak
>> +    echo "CONFIG_TILEGX_DIS=y"  >> config-all-disas.mak
>> +  ;;
> 
> Hadn't you been asked to drop these lines, as you are not yet adding any
> disassembler code that uses it?
> 

NO. And next, I shall drop them.

>>    xtensa*)
>>      echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
>>      echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
> [...]
>> diff --git a/target-tilegx/cpu-qom.h b/target-tilegx/cpu-qom.h
>> new file mode 100644
>> index 0000000..e15a8b8
>> --- /dev/null
>> +++ b/target-tilegx/cpu-qom.h
>> @@ -0,0 +1,72 @@
>> +/*
>> + * QEMU Tilegx CPU
> 
> "TILE-Gx" according to
> http://www.tilera.com/products/?ezchip=585&spage=614 - please fix
> wherever used in textual form.
> 

OK, thanks.

>> + *
>> + * Copyright (c) 2015 Chen Gang
>> + *
>> + * This library is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU Lesser General Public
>> + * License as published by the Free Software Foundation; either
>> + * version 2.1 of the License, or (at your option) any later version.
>> + *
>> + * This library is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this library; if not, see
>> + * <http://www.gnu.org/licenses/lgpl-2.1.html>
>> + */
>> +#ifndef QEMU_TILEGX_CPU_QOM_H
>> +#define QEMU_TILEGX_CPU_QOM_H
>> +
>> +#include "qom/cpu.h"
>> +
>> +#define TYPE_TILEGX_CPU "tilegx-cpu"
>> +
>> +#define TILEGX_CPU_CLASS(klass) \
>> +    OBJECT_CLASS_CHECK(TilegxCPUClass, (klass), TYPE_TILEGX_CPU)
>> +#define TILEGX_CPU(obj) \
>> +    OBJECT_CHECK(TilegxCPU, (obj), TYPE_TILEGX_CPU)
>> +#define TILEGX_CPU_GET_CLASS(obj) \
>> +    OBJECT_GET_CLASS(TilegxCPUClass, (obj), TYPE_TILEGX_CPU)
>> +
>> +/**
>> + * TilegxCPUClass:
>> + * @parent_realize: The parent class' realize handler.
>> + * @parent_reset: The parent class' reset handler.
>> + *
>> + * A Tilegx CPU model.
>> + */
>> +typedef struct TilegxCPUClass {
> 
> For the benefit of readers, please call this TileGXCPUClass ...
> 

OK, thanks.

>> +    /*< private >*/
>> +    CPUClass parent_class;
>> +    /*< public >*/
>> +
>> +    DeviceRealize parent_realize;
>> +    void (*parent_reset)(CPUState *cpu);
>> +} TilegxCPUClass;
>> +
>> +/**
>> + * TilegxCPU:
>> + * @env: #CPUTLState
>> + *
>> + * A Tilegx CPU.
>> + */
>> +typedef struct TilegxCPU {
> 
> ... and TileGXCPU. (or TileGx...)
> 

OK, thanks. I shall call it TileGXCPU.

>> +    /*< private >*/
>> +    CPUState parent_obj;
>> +    uint64_t base_vectors;
> 
> This should not be in here, the private section serves to hide the
> parent field from documentation.
> 
> base_vectors should also probably be after env, for performance reasons.
> rth?
> 

OK, thanks. At present, we do not use base_vectors, so I guess, we can
just remove it, and the related implementation will be:

typedef struct TileGXCPU {
    /*< private >*/
    CPUState parent_obj;
    /*< public >*/

    CPUS390XState env;
} TileGXCPU;


>> +    /*< public >*/
>> +
>> +    CPUTLState env;
> 
> Can this be more telling than TL please?
>

How about CPUTLGState?
 
>> +} TilegxCPU;
>> +
>> +static inline TilegxCPU *tilegx_env_get_cpu(CPUTLState *env)
>> +{
>> +    return container_of(env, TilegxCPU, env);
>> +}
>> +
>> +#define ENV_GET_CPU(e) CPU(tilegx_env_get_cpu(e))
>> +
>> +#endif
>> diff --git a/target-tilegx/cpu.c b/target-tilegx/cpu.c
>> new file mode 100644
>> index 0000000..3dd66b5
>> --- /dev/null
>> +++ b/target-tilegx/cpu.c
>> @@ -0,0 +1,162 @@
>> +/*
>> + * QEMU Tilegx CPU
>> + *
>> + *  Copyright (c) 2015 Chen Gang
>> + *
>> + * This library is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU Lesser General Public
>> + * License as published by the Free Software Foundation; either
>> + * version 2.1 of the License, or (at your option) any later version.
>> + *
>> + * This library is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this library; if not, see
>> + * <http://www.gnu.org/licenses/lgpl-2.1.html>
>> + */
>> +
>> +#include "cpu.h"
>> +#include "qemu-common.h"
>> +#include "hw/qdev-properties.h"
>> +#include "migration/vmstate.h"
>> +
>> +TilegxCPU *cpu_tilegx_init(const char *cpu_model)
>> +{
>> +    TilegxCPU *cpu;
>> +
>> +    cpu = TILEGX_CPU(object_new(TYPE_TILEGX_CPU));
>> +
>> +    object_property_set_bool(OBJECT(cpu), true, "realized", NULL);
>> +
>> +    return cpu;
>> +}
>> +
>> +static void tilegx_cpu_set_pc(CPUState *cs, vaddr value)
>> +{
>> +    TilegxCPU *cpu = TILEGX_CPU(cs);
>> +
>> +    cpu->env.pc = value;
>> +}
>> +
>> +static bool tilegx_cpu_has_work(CPUState *cs)
>> +{
>> +    return true;
>> +}
>> +
>> +static void tilegx_cpu_reset(CPUState *s)
>> +{
>> +    TilegxCPU *cpu = TILEGX_CPU(s);
>> +    TilegxCPUClass *mcc = TILEGX_CPU_GET_CLASS(cpu);
> 
> Why mcc? Probably copied from a CPU with M.
> 

Yes, we need another name for it. How about tcc?

>> +    CPUTLState *env = &cpu->env;
>> +
>> +    mcc->parent_reset(s);
>> +
>> +    memset(env, 0, sizeof(CPUTLState));
>> +    tlb_flush(s, 1);
>> +}
>> +
>> +static void tilegx_cpu_realizefn(DeviceState *dev, Error **errp)
>> +{
>> +    CPUState *cs = CPU(dev);
>> +    TilegxCPUClass *mcc = TILEGX_CPU_GET_CLASS(dev);
> 
> Ditto.
> 

OK.

>> +
>> +    cpu_reset(cs);
>> +    qemu_init_vcpu(cs);
>> +
>> +    mcc->parent_realize(dev, errp);
>> +}
>> +
>> +static void tilegx_tcg_init(void)
>> +{
>> +}
>> +
>> +static void tilegx_cpu_initfn(Object *obj)
>> +{
>> +    CPUState *cs = CPU(obj);
>> +    TilegxCPU *cpu = TILEGX_CPU(obj);
>> +    CPUTLState *env = &cpu->env;
>> +    static bool tcg_initialized;
>> +
>> +    cs->env_ptr = env;
>> +    cpu_exec_init(env);
>> +
>> +    if (tcg_enabled() && !tcg_initialized) {
>> +        tcg_initialized = true;
>> +        tilegx_tcg_init();
>> +    }
>> +}
>> +
>> +static const VMStateDescription vmstate_tilegx_cpu = {
>> +    .name = "cpu",
>> +    .unmigratable = 1,
>> +};
>> +
>> +static Property tilegx_properties[] = {
> 
> "tilegx_cpu_properties" for consistency?
> 

Originally, I copied from Microblaze, but at present, I guess, we can
drop it (then also drop base_vectors).

>> +    DEFINE_PROP_UINT64("tilegx.base-vectors", TilegxCPU, base_vectors, 0),
> 
> Why "tilegx." prefix? That would likely interfere with our QMP tools.
> 

May it be "tilera.base-vectors"?

But after all, I guess, we can just drop it, at present.

> What is this actually used for? To someone not knowing the architecture
> it may sound a bit strange to have a variable/property ...vectors that
> is actually just one uint64 value. Someone recently added an API to add
> a description for a property, and this seems to be calling for one.
> Moving it to a patch that actually uses it would be another idea.
> 
>> +    DEFINE_PROP_END_OF_LIST(),
>> +};
>> +
>> +static void tilegx_cpu_do_interrupt(CPUState *cs)
>> +{
>> +    cs->exception_index = -1;
>> +}
>> +
>> +static int tilegx_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int rw,
>> +                            int mmu_idx)
> 
> Indentation.
> 

OK, thanks.

>> +{
>> +    cpu_dump_state(cs, stderr, fprintf, 0);
>> +    return 1;
>> +}
>> +
>> +static bool tilegx_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
>> +{
>> +    if (interrupt_request & CPU_INTERRUPT_HARD) {
>> +        tilegx_cpu_do_interrupt(cs);
>> +        return true;
>> +    }
>> +    return false;
>> +}
>> +
>> +static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
>> +{
>> +    DeviceClass *dc = DEVICE_CLASS(oc);
>> +    CPUClass *cc = CPU_CLASS(oc);
>> +    TilegxCPUClass *mcc = TILEGX_CPU_CLASS(oc);
>> +
>> +    mcc->parent_realize = dc->realize;
>> +    dc->realize = tilegx_cpu_realizefn;
>> +
>> +    mcc->parent_reset = cc->reset;
>> +    cc->reset = tilegx_cpu_reset;
>> +
>> +    cc->has_work = tilegx_cpu_has_work;
>> +    cc->do_interrupt = tilegx_cpu_do_interrupt;
>> +    cc->cpu_exec_interrupt = tilegx_cpu_exec_interrupt;
>> +    cc->dump_state = NULL;
>> +    cc->set_pc = tilegx_cpu_set_pc;
>> +    cc->gdb_read_register = NULL;
>> +    cc->gdb_write_register = NULL;
> 
> Is this really safe to do? If so, all fields are zero-initialized at
> this point already, so no need to assign NULL or 0.
> 
>> +    cc->handle_mmu_fault = tilegx_cpu_handle_mmu_fault;
>> +    dc->vmsd = &vmstate_tilegx_cpu;
>> +    dc->props = tilegx_properties;
>> +    cc->gdb_num_core_regs = 0;
>> +}
>> +
>> +static const TypeInfo tilegx_cpu_type_info = {
>> +    .name = TYPE_TILEGX_CPU,
>> +    .parent = TYPE_CPU,
>> +    .instance_size = sizeof(TilegxCPU),
>> +    .instance_init = tilegx_cpu_initfn,
> 
> What about CPU models? Do the Gx72, Gx36, etc. differ only in core count
> or also in instruction set features?
> 

OK, thanks. It is already replied in another mail thread.

For me, we need still let TYPE_TILEGX_CPU be "tilegx-cpu" (according to
microblaze implementation).

>> +    .class_size = sizeof(TilegxCPUClass),
>> +    .class_init = tilegx_cpu_class_init,
>> +};
>> +
>> +static void tilegx_cpu_register_types(void)
>> +{
>> +    type_register_static(&tilegx_cpu_type_info);
>> +}
>> +
>> +type_init(tilegx_cpu_register_types)
>> diff --git a/target-tilegx/cpu.h b/target-tilegx/cpu.h
>> new file mode 100644
>> index 0000000..09a2b26
>> --- /dev/null
>> +++ b/target-tilegx/cpu.h
>> @@ -0,0 +1,85 @@
>> +/*
>> + *  Tilegx virtual CPU header
>> + *
>> + *  Copyright (c) 2015 Chen Gang
>> + *
>> + * This library is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU Lesser General Public
>> + * License as published by the Free Software Foundation; either
>> + * version 2 of the License, or (at your option) any later version.
>> + *
>> + * This library is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> + * General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
>> + */
>> +#ifndef CPU_TILEGX_H
>> +#define CPU_TILEGX_H
>> +
>> +#include "config.h"
>> +#include "qemu-common.h"
>> +
>> +#define TARGET_LONG_BITS 64
>> +
>> +#define CPUArchState struct CPUTLState
> 
> Drop the struct here? You have a typedef below.
> 

Hmm... originally, I really noticed about it, but after check the other
target implementation (e.g microblaze, alpha, s390), I remained it.

>> +
>> +#include "exec/cpu-defs.h"
>> +#include "fpu/softfloat.h"
>> +
>> +/* Tilegx register alias */
>> +#define TILEGX_R_RE  0   /*  0 register, for function/syscall return value */
>> +#define TILEGX_R_NR  10  /* 10 register, for syscall number */
>> +#define TILEGX_R_BP  52  /* 52 register, optional frame pointer */
>> +#define TILEGX_R_TP  53  /* TP register, thread local storage data */
>> +#define TILEGX_R_SP  54  /* SP register, stack pointer */
>> +#define TILEGX_R_LR  55  /* LR register, may save pc, but it is not pc */
>> +
>> +typedef struct CPUTLState {
>> +    uint64_t regs[56];
>> +    uint64_t pc;
> 
> You have marked the CPU unmigratable. Might it make sense to still
> prepare the corresponding VMState fields so that it does not get forgotten?
> 

Excuse me, I am not quite familiar with it, could you provide more
details?

>> +    CPU_COMMON
>> +} CPUTLState;
>> +
>> +#include "cpu-qom.h"
>> +
>> +/* Tilegx memory attributes */
>> +#define TARGET_PAGE_BITS 16  /* Tilegx uses 64KB page size */
>> +#define MMAP_SHIFT TARGET_PAGE_BITS
>> +#define TARGET_PHYS_ADDR_SPACE_BITS 42 /* Tilegx is 42 bit physical address */
>> +#define TARGET_VIRT_ADDR_SPACE_BITS 64 /* Tilegx has 64 bit virtual address */
>> +#define MMU_USER_IDX    0  /* independent from both qemu and architecture */
>> +
>> +#include "exec/cpu-all.h"
>> +
>> +int cpu_tilegx_exec(CPUTLState *s);
>> +int cpu_tilegx_signal_handler(int host_signum, void *pinfo, void *puc);
>> +
>> +#define cpu_exec cpu_tilegx_exec
>> +#define cpu_gen_code cpu_tilegx_gen_code
>> +#define cpu_signal_handler cpu_tilegx_signal_handler
>> +
>> +TilegxCPU *cpu_tilegx_init(const char *cpu_model);
>> +
>> +static inline CPUTLState *cpu_init(const char *cpu_model)
>> +{
>> +    TilegxCPU *cpu = cpu_tilegx_init(cpu_model);
>> +    if (cpu == NULL) {
>> +        return NULL;
>> +    }
>> +    return &cpu->env;
>> +}
>> +
>> +static inline void cpu_get_tb_cpu_state(CPUTLState *env, target_ulong *pc,
>> +                                        target_ulong *cs_base, int *flags)
>> +{
>> +    *pc = env->pc;
>> +    *cs_base = 0;
>> +    *flags = 0;
>> +}
>> +
>> +#include "exec/exec-all.h"
>> +
>> +#endif
>> diff --git a/target-tilegx/helper.h b/target-tilegx/helper.h
>> new file mode 100644
>> index 0000000..e69de29
> 
> Is this empty file actually included from somewhere in this patch?
> 

Yes, it is for future use, I guess, at present, we can just drop it:

 - "translate.c" includes "exec/helper-gen.h".

 - "exec/helper-gen.h" includes "helper.h".


>> diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c
>> new file mode 100644
>> index 0000000..5131fa7
>> --- /dev/null
>> +++ b/target-tilegx/translate.c
>> @@ -0,0 +1,54 @@
>> +/*
>> + * QEMU Tilegx CPU
>> + *
>> + *  Copyright (c) 2015 Chen Gang
>> + *
>> + * This library is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU Lesser General Public
>> + * License as published by the Free Software Foundation; either
>> + * version 2.1 of the License, or (at your option) any later version.
>> + *
>> + * This library is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this library; if not, see
>> + * <http://www.gnu.org/licenses/lgpl-2.1.html>
>> + */
>> +
>> +#include "cpu.h"
>> +#include "disas/disas.h"
>> +#include "tcg-op.h"
>> +#include "exec/helper-proto.h"
>> +#include "exec/cpu_ldst.h"
>> +#include "exec/helper-gen.h"
>> +
>> +static inline void gen_intermediate_code_internal(TilegxCPU *cpu,
>> +                                                  TranslationBlock *tb,
>> +                                                  bool search_pc)
>> +{
>> +    /*
>> +     * FIXME: after load elf64 tilegx binary successfully, it will quit, at
>> +     * present, and will implement the related features next.
>> +     */
>> +    fprintf(stderr, "\nLoad elf64 tilegx successfully\n");
> 
> "Loaded"
> 

OK, thanks.

>> +    fprintf(stderr, "reach code start position: [" TARGET_FMT_lx "] %s\n\n",
> 
> "reached"
> 

OK, thanks.

>> +            tb->pc, lookup_symbol(tb->pc));
> 
> This output is hopefully only temporary. But as a general reminder,
> there is error_report() for error messages, and for debug messages
> please define your own macros or use the qemu_log infrastructure instead
> of fprintf(stderr, ...).
> 

OK, thanks, I shall use qemu_log for it.

Thanks
-- 
Chen Gang

Open, share, and attitude like air, water, and life which God blessed

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-27 17:36   ` Andreas Färber
  2015-02-27 21:49     ` Chris Metcalf
  2015-02-28  5:20     ` Chen Gang S
@ 2015-02-28 19:19     ` Chen Gang S
  2 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-28 19:19 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

On 2/28/15 01:36, Andreas Färber wrote:
>> +static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
>> > +{
>> > +    DeviceClass *dc = DEVICE_CLASS(oc);
>> > +    CPUClass *cc = CPU_CLASS(oc);
>> > +    TilegxCPUClass *mcc = TILEGX_CPU_CLASS(oc);
>> > +
>> > +    mcc->parent_realize = dc->realize;
>> > +    dc->realize = tilegx_cpu_realizefn;
>> > +
>> > +    mcc->parent_reset = cc->reset;
>> > +    cc->reset = tilegx_cpu_reset;
>> > +
>> > +    cc->has_work = tilegx_cpu_has_work;
>> > +    cc->do_interrupt = tilegx_cpu_do_interrupt;
>> > +    cc->cpu_exec_interrupt = tilegx_cpu_exec_interrupt;
>> > +    cc->dump_state = NULL;
>> > +    cc->set_pc = tilegx_cpu_set_pc;
>> > +    cc->gdb_read_register = NULL;
>> > +    cc->gdb_write_register = NULL;
> Is this really safe to do? If so, all fields are zero-initialized at
> this point already, so no need to assign NULL or 0.
> 
>> > +    cc->handle_mmu_fault = tilegx_cpu_handle_mmu_fault;
>> > +    dc->vmsd = &vmstate_tilegx_cpu;
>> > +    dc->props = tilegx_properties;
>> > +    cc->gdb_num_core_regs = 0;
>> > +}
>> > +

When we set gdb_num_core_regs be 0, gdb_read/write_register should not
be called, and they assume the callers always pass valid parameters.

 - For alpha, s390 have considered about the invalid parameter.

 - arm, i386 and microblaze do not consider about the invalid parameter.

For dump_state, the caller will check whether it is NULL, before use it.

Thanks.
-- 
Chen Gang

Open, share, and attitude like air, water, and life which God blessed

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features
  2015-02-28  5:20     ` Chen Gang S
@ 2015-02-28 20:04       ` Chen Gang S
  0 siblings, 0 replies; 24+ messages in thread
From: Chen Gang S @ 2015-02-28 20:04 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Peter Maydell, Riku Voipio, qemu-devel, Chris Metcalf, walt, rth

On 2/28/15 13:20, Chen Gang S wrote:
>>> diff --git a/target-tilegx/helper.h b/target-tilegx/helper.h
>>> >> new file mode 100644
>>> >> index 0000000..e69de29
>> > 
>> > Is this empty file actually included from somewhere in this patch?
>> > 
> Yes, it is for future use, I guess, at present, we can just drop it:
> 
>  - "translate.c" includes "exec/helper-gen.h".
> 
>  - "exec/helper-gen.h" includes "helper.h".
> 
> 

Oh, sorry, I forgot, "tcg/tcg-op.h" -> "helper-proto.h" -> "helper.h"

    CC    tilegx-linux-user/tcg/tcg.o
  In file included from /upstream/qemu/tcg/tcg-op.h:26:0,
                   from /upstream/qemu/tcg/tcg.c:49:
  /upstream/qemu/include/exec/helper-proto.h:29:20: fatal error: helper.h: No such file or directory
   #include "helper.h"
                      ^

So for me, we have to still use an empty "helper.h" file for it.


Thanks.
-- 
Chen Gang

Open, share, and attitude like air, water, and life which God blessed

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2015-02-28 19:56 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-22 13:31 [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Chen Gang S
2015-02-22 13:33 ` [Qemu-devel] [PATCH 1/6 v4] target-tilegx: Firstly add to qemu with minimized features Chen Gang S
2015-02-27 17:36   ` Andreas Färber
2015-02-27 21:49     ` Chris Metcalf
2015-02-28  2:10       ` Chen Gang S
2015-02-28  2:09         ` Chris Metcalf
2015-02-28  4:39           ` Chen Gang S
2015-02-28  5:20     ` Chen Gang S
2015-02-28 20:04       ` Chen Gang S
2015-02-28 19:19     ` Chen Gang S
2015-02-22 13:35 ` [Qemu-devel] [PATCH 3/6 v4] linux-user: tilegx: Add target features support within qemu Chen Gang S
2015-02-22 13:36 ` [Qemu-devel] [PATCH 4/6 v4] linux-user: Support tilegx architecture in syscall Chen Gang S
2015-02-27 17:40   ` Andreas Färber
2015-02-27 23:10     ` Chen Gang S
2015-02-22 13:36 ` [Qemu-devel] [PATCH 5/6 v4] linux-user: Support tilegx architecture in linux-user Chen Gang S
2015-02-22 13:37 ` [Qemu-devel] [PATCH 6/6 v4] linux-user/syscall.c: Switch all macros which are not defined in tilegx Chen Gang S
2015-02-27 18:24   ` Andreas Färber
2015-02-27 23:06     ` Chen Gang S
2015-02-22 18:29 ` [Qemu-devel] [PATCH 0/6 v4] tilegx: Can load elf64 tilegx binary successfully for linux-user Richard Henderson
2015-02-23  1:40   ` Chen Gang S
2015-02-22 22:32 ` Bastian Koppelmann
2015-02-23  1:37   ` Chen Gang S
2015-02-26 23:56   ` Chen Gang S
2015-02-27  0:32     ` Chen Gang S

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.