提交 f7c61bf8 编写于 作者: B Blue Swirl

Merge branch 'for-upstream' of git://github.com/mwalle/qemu

* 'for-upstream' of git://github.com/mwalle/qemu:
  configure: rename OpenGL feature to GLX
  configure: proper OpenGL/GLX probe
  target-lm32: use HELPER() macro
  target-lm32: flush tlb after clearing env
  target-lm32: remove dead code
  target-lm32: fix cmpgui and cmpgeui opcodes
  tests: tcg: lm32: add more test cases
  target-lm32: don't log cpu state in translation
  lm32_uart: fix receive buffering
  milkymist-uart: fix receive buffering
  lm32-dis: fix NULL pointer dereference
  target-lm32: fix debug memory access
...@@ -217,7 +217,7 @@ spice="" ...@@ -217,7 +217,7 @@ spice=""
rbd="" rbd=""
smartcard_nss="" smartcard_nss=""
usb_redir="" usb_redir=""
opengl="" glx=""
zlib="yes" zlib="yes"
guest_agent="yes" guest_agent="yes"
want_tools="yes" want_tools="yes"
...@@ -858,9 +858,9 @@ for opt do ...@@ -858,9 +858,9 @@ for opt do
;; ;;
--enable-vhost-net) vhost_net="yes" --enable-vhost-net) vhost_net="yes"
;; ;;
--disable-opengl) opengl="no" --disable-glx) glx="no"
;; ;;
--enable-opengl) opengl="yes" --enable-glx) glx="yes"
;; ;;
--disable-rbd) rbd="no" --disable-rbd) rbd="no"
;; ;;
...@@ -2436,23 +2436,23 @@ EOF ...@@ -2436,23 +2436,23 @@ EOF
fi fi
########################################## ##########################################
# opengl probe, used by milkymist-tmu2 # GLX probe, used by milkymist-tmu2
if test "$opengl" != "no" ; then if test "$glx" != "no" ; then
opengl_libs="-lGL -lX11" glx_libs="-lGL -lX11"
cat > $TMPC << EOF cat > $TMPC << EOF
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <GL/gl.h> #include <GL/gl.h>
#include <GL/glx.h> #include <GL/glx.h>
int main(void) { return GL_VERSION != 0; } int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
EOF EOF
if compile_prog "" "-lGL" ; then if compile_prog "" "-lGL -lX11" ; then
opengl=yes glx=yes
else else
if test "$opengl" = "yes" ; then if test "$glx" = "yes" ; then
feature_not_found "opengl" feature_not_found "glx"
fi fi
opengl_libs= glx_libs=
opengl=no glx=no
fi fi
fi fi
...@@ -3430,7 +3430,7 @@ echo "rbd support $rbd" ...@@ -3430,7 +3430,7 @@ echo "rbd support $rbd"
echo "xfsctl support $xfs" echo "xfsctl support $xfs"
echo "nss used $smartcard_nss" echo "nss used $smartcard_nss"
echo "usb net redir $usb_redir" echo "usb net redir $usb_redir"
echo "OpenGL support $opengl" echo "GLX support $glx"
echo "libiscsi support $libiscsi" echo "libiscsi support $libiscsi"
echo "build guest agent $guest_agent" echo "build guest agent $guest_agent"
echo "seccomp support $seccomp" echo "seccomp support $seccomp"
...@@ -3741,8 +3741,8 @@ if test "$usb_redir" = "yes" ; then ...@@ -3741,8 +3741,8 @@ if test "$usb_redir" = "yes" ; then
echo "CONFIG_USB_REDIR=y" >> $config_host_mak echo "CONFIG_USB_REDIR=y" >> $config_host_mak
fi fi
if test "$opengl" = "yes" ; then if test "$glx" = "yes" ; then
echo "CONFIG_OPENGL=y" >> $config_host_mak echo "CONFIG_GLX=y" >> $config_host_mak
fi fi
if test "$libiscsi" = "yes" ; then if test "$libiscsi" = "yes" ; then
...@@ -4020,7 +4020,7 @@ case "$target_arch2" in ...@@ -4020,7 +4020,7 @@ case "$target_arch2" in
target_nptl="yes" target_nptl="yes"
;; ;;
lm32) lm32)
target_libs_softmmu="$opengl_libs" target_libs_softmmu="$glx_libs"
;; ;;
m68k) m68k)
bflt="yes" bflt="yes"
......
...@@ -303,11 +303,11 @@ int print_insn_lm32(bfd_vma memaddr, struct disassemble_info *info) ...@@ -303,11 +303,11 @@ int print_insn_lm32(bfd_vma memaddr, struct disassemble_info *info)
} }
case 'c': { case 'c': {
uint8_t csr; uint8_t csr;
const char *csr_name; const Lm32CsrInfo *info;
csr = (op >> 21) & 0x1f; csr = (op >> 21) & 0x1f;
csr_name = find_csr_info(csr)->name; info = find_csr_info(csr);
if (csr_name) { if (info) {
fprintf_fn(stream, "%s", csr_name); fprintf_fn(stream, "%s", info->name);
} else { } else {
fprintf_fn(stream, "0x%x", csr); fprintf_fn(stream, "0x%x", csr);
} }
......
...@@ -11,7 +11,7 @@ obj-y += milkymist-minimac2.o ...@@ -11,7 +11,7 @@ obj-y += milkymist-minimac2.o
obj-y += milkymist-pfpu.o obj-y += milkymist-pfpu.o
obj-y += milkymist-softusb.o obj-y += milkymist-softusb.o
obj-y += milkymist-sysctl.o obj-y += milkymist-sysctl.o
obj-$(CONFIG_OPENGL) += milkymist-tmu2.o obj-$(CONFIG_GLX) += milkymist-tmu2.o
obj-y += milkymist-uart.o obj-y += milkymist-uart.o
obj-y += milkymist-vgafb.o obj-y += milkymist-vgafb.o
obj-y += framebuffer.o obj-y += framebuffer.o
......
...@@ -137,6 +137,7 @@ static uint64_t uart_read(void *opaque, hwaddr addr, ...@@ -137,6 +137,7 @@ static uint64_t uart_read(void *opaque, hwaddr addr,
r = s->regs[R_RXTX]; r = s->regs[R_RXTX];
s->regs[R_LSR] &= ~LSR_DR; s->regs[R_LSR] &= ~LSR_DR;
uart_update_irq(s); uart_update_irq(s);
qemu_chr_accept_input(s->chr);
break; break;
case R_IIR: case R_IIR:
case R_LSR: case R_LSR:
......
...@@ -87,7 +87,7 @@ static inline DeviceState *milkymist_pfpu_create(hwaddr base, ...@@ -87,7 +87,7 @@ static inline DeviceState *milkymist_pfpu_create(hwaddr base,
return dev; return dev;
} }
#ifdef CONFIG_OPENGL #ifdef CONFIG_GLX
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <GL/glx.h> #include <GL/glx.h>
static const int glx_fbconfig_attr[] = { static const int glx_fbconfig_attr[] = {
...@@ -101,7 +101,7 @@ static const int glx_fbconfig_attr[] = { ...@@ -101,7 +101,7 @@ static const int glx_fbconfig_attr[] = {
static inline DeviceState *milkymist_tmu2_create(hwaddr base, static inline DeviceState *milkymist_tmu2_create(hwaddr base,
qemu_irq irq) qemu_irq irq)
{ {
#ifdef CONFIG_OPENGL #ifdef CONFIG_GLX
DeviceState *dev; DeviceState *dev;
Display *d; Display *d;
GLXFBConfig *configs; GLXFBConfig *configs;
......
...@@ -132,6 +132,7 @@ static void uart_write(void *opaque, hwaddr addr, uint64_t value, ...@@ -132,6 +132,7 @@ static void uart_write(void *opaque, hwaddr addr, uint64_t value,
case R_STAT: case R_STAT:
/* write one to clear bits */ /* write one to clear bits */
s->regs[addr] &= ~(value & (STAT_RX_EVT | STAT_TX_EVT)); s->regs[addr] &= ~(value & (STAT_RX_EVT | STAT_TX_EVT));
qemu_chr_accept_input(s->chr);
break; break;
default: default:
......
...@@ -36,10 +36,10 @@ static void lm32_cpu_reset(CPUState *s) ...@@ -36,10 +36,10 @@ static void lm32_cpu_reset(CPUState *s)
lcc->parent_reset(s); lcc->parent_reset(s);
tlb_flush(env, 1);
/* reset cpu state */ /* reset cpu state */
memset(env, 0, offsetof(CPULM32State, breakpoints)); memset(env, 0, offsetof(CPULM32State, breakpoints));
tlb_flush(env, 1);
} }
static void lm32_cpu_realizefn(DeviceState *dev, Error **errp) static void lm32_cpu_realizefn(DeviceState *dev, Error **errp)
......
...@@ -229,18 +229,8 @@ static inline void cpu_set_tls(CPULM32State *env, target_ulong newtls) ...@@ -229,18 +229,8 @@ static inline void cpu_set_tls(CPULM32State *env, target_ulong newtls)
{ {
} }
static inline int cpu_interrupts_enabled(CPULM32State *env)
{
return env->ie & IE_IE;
}
#include "exec/cpu-all.h" #include "exec/cpu-all.h"
static inline target_ulong cpu_get_pc(CPULM32State *env)
{
return env->pc;
}
static inline void cpu_get_tb_cpu_state(CPULM32State *env, target_ulong *pc, static inline void cpu_get_tb_cpu_state(CPULM32State *env, target_ulong *pc,
target_ulong *cs_base, int *flags) target_ulong *cs_base, int *flags)
{ {
......
...@@ -39,7 +39,12 @@ int cpu_lm32_handle_mmu_fault(CPULM32State *env, target_ulong address, int rw, ...@@ -39,7 +39,12 @@ int cpu_lm32_handle_mmu_fault(CPULM32State *env, target_ulong address, int rw,
hwaddr cpu_get_phys_page_debug(CPULM32State *env, target_ulong addr) hwaddr cpu_get_phys_page_debug(CPULM32State *env, target_ulong addr)
{ {
return addr & TARGET_PAGE_MASK; addr &= TARGET_PAGE_MASK;
if (env->flags & LM32_FLAG_IGNORE_MSB) {
return addr & 0x7fffffff;
} else {
return addr;
}
} }
void lm32_cpu_do_interrupt(CPUState *cs) void lm32_cpu_do_interrupt(CPUState *cs)
......
...@@ -17,13 +17,13 @@ ...@@ -17,13 +17,13 @@
#define SHIFT 3 #define SHIFT 3
#include "exec/softmmu_template.h" #include "exec/softmmu_template.h"
void helper_raise_exception(CPULM32State *env, uint32_t index) void HELPER(raise_exception)(CPULM32State *env, uint32_t index)
{ {
env->exception_index = index; env->exception_index = index;
cpu_loop_exit(env); cpu_loop_exit(env);
} }
void helper_hlt(CPULM32State *env) void HELPER(hlt)(CPULM32State *env)
{ {
CPUState *cs = CPU(lm32_env_get_cpu(env)); CPUState *cs = CPU(lm32_env_get_cpu(env));
...@@ -32,42 +32,42 @@ void helper_hlt(CPULM32State *env) ...@@ -32,42 +32,42 @@ void helper_hlt(CPULM32State *env)
cpu_loop_exit(env); cpu_loop_exit(env);
} }
void helper_wcsr_im(CPULM32State *env, uint32_t im) void HELPER(wcsr_im)(CPULM32State *env, uint32_t im)
{ {
lm32_pic_set_im(env->pic_state, im); lm32_pic_set_im(env->pic_state, im);
} }
void helper_wcsr_ip(CPULM32State *env, uint32_t im) void HELPER(wcsr_ip)(CPULM32State *env, uint32_t im)
{ {
lm32_pic_set_ip(env->pic_state, im); lm32_pic_set_ip(env->pic_state, im);
} }
void helper_wcsr_jtx(CPULM32State *env, uint32_t jtx) void HELPER(wcsr_jtx)(CPULM32State *env, uint32_t jtx)
{ {
lm32_juart_set_jtx(env->juart_state, jtx); lm32_juart_set_jtx(env->juart_state, jtx);
} }
void helper_wcsr_jrx(CPULM32State *env, uint32_t jrx) void HELPER(wcsr_jrx)(CPULM32State *env, uint32_t jrx)
{ {
lm32_juart_set_jrx(env->juart_state, jrx); lm32_juart_set_jrx(env->juart_state, jrx);
} }
uint32_t helper_rcsr_im(CPULM32State *env) uint32_t HELPER(rcsr_im)(CPULM32State *env)
{ {
return lm32_pic_get_im(env->pic_state); return lm32_pic_get_im(env->pic_state);
} }
uint32_t helper_rcsr_ip(CPULM32State *env) uint32_t HELPER(rcsr_ip)(CPULM32State *env)
{ {
return lm32_pic_get_ip(env->pic_state); return lm32_pic_get_ip(env->pic_state);
} }
uint32_t helper_rcsr_jtx(CPULM32State *env) uint32_t HELPER(rcsr_jtx)(CPULM32State *env)
{ {
return lm32_juart_get_jtx(env->juart_state); return lm32_juart_get_jtx(env->juart_state);
} }
uint32_t helper_rcsr_jrx(CPULM32State *env) uint32_t HELPER(rcsr_jrx)(CPULM32State *env)
{ {
return lm32_juart_get_jrx(env->juart_state); return lm32_juart_get_jrx(env->juart_state);
} }
......
...@@ -324,10 +324,20 @@ static inline void gen_compare(DisasContext *dc, int cond) ...@@ -324,10 +324,20 @@ static inline void gen_compare(DisasContext *dc, int cond)
int rX = (dc->format == OP_FMT_RR) ? dc->r2 : dc->r1; int rX = (dc->format == OP_FMT_RR) ? dc->r2 : dc->r1;
int rY = (dc->format == OP_FMT_RR) ? dc->r0 : dc->r0; int rY = (dc->format == OP_FMT_RR) ? dc->r0 : dc->r0;
int rZ = (dc->format == OP_FMT_RR) ? dc->r1 : -1; int rZ = (dc->format == OP_FMT_RR) ? dc->r1 : -1;
int i;
if (dc->format == OP_FMT_RI) { if (dc->format == OP_FMT_RI) {
tcg_gen_setcondi_tl(cond, cpu_R[rX], cpu_R[rY], switch (cond) {
sign_extend(dc->imm16, 16)); case TCG_COND_GEU:
case TCG_COND_GTU:
i = zero_extend(dc->imm16, 16);
break;
default:
i = sign_extend(dc->imm16, 16);
break;
}
tcg_gen_setcondi_tl(cond, cpu_R[rX], cpu_R[rY], i);
} else { } else {
tcg_gen_setcond_tl(cond, cpu_R[rX], cpu_R[rY], cpu_R[rZ]); tcg_gen_setcond_tl(cond, cpu_R[rX], cpu_R[rY], cpu_R[rZ]);
} }
...@@ -373,7 +383,7 @@ static void dec_cmpgeu(DisasContext *dc) ...@@ -373,7 +383,7 @@ static void dec_cmpgeu(DisasContext *dc)
{ {
if (dc->format == OP_FMT_RI) { if (dc->format == OP_FMT_RI) {
LOG_DIS("cmpgeui r%d, r%d, %d\n", dc->r0, dc->r1, LOG_DIS("cmpgeui r%d, r%d, %d\n", dc->r0, dc->r1,
sign_extend(dc->imm16, 16)); zero_extend(dc->imm16, 16));
} else { } else {
LOG_DIS("cmpgeu r%d, r%d, r%d\n", dc->r2, dc->r0, dc->r1); LOG_DIS("cmpgeu r%d, r%d, r%d\n", dc->r2, dc->r0, dc->r1);
} }
...@@ -385,7 +395,7 @@ static void dec_cmpgu(DisasContext *dc) ...@@ -385,7 +395,7 @@ static void dec_cmpgu(DisasContext *dc)
{ {
if (dc->format == OP_FMT_RI) { if (dc->format == OP_FMT_RI) {
LOG_DIS("cmpgui r%d, r%d, %d\n", dc->r0, dc->r1, LOG_DIS("cmpgui r%d, r%d, %d\n", dc->r0, dc->r1,
sign_extend(dc->imm16, 16)); zero_extend(dc->imm16, 16));
} else { } else {
LOG_DIS("cmpgu r%d, r%d, r%d\n", dc->r2, dc->r0, dc->r1); LOG_DIS("cmpgu r%d, r%d, r%d\n", dc->r2, dc->r0, dc->r1);
} }
...@@ -1027,11 +1037,6 @@ static void gen_intermediate_code_internal(CPULM32State *env, ...@@ -1027,11 +1037,6 @@ static void gen_intermediate_code_internal(CPULM32State *env,
cpu_abort(env, "LM32: unaligned PC=%x\n", pc_start); cpu_abort(env, "LM32: unaligned PC=%x\n", pc_start);
} }
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
qemu_log("-----------------------------------------\n");
log_cpu_state(env, 0);
}
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
lj = -1; lj = -1;
num_insns = 0; num_insns = 0;
......
...@@ -52,4 +52,19 @@ mvi r3, 0 ...@@ -52,4 +52,19 @@ mvi r3, 0
cmpgei r3, r3, 0 cmpgei r3, r3, 0
check_r3 1 check_r3 1
test_name CMPGEI_11
mvi r1, 0
cmpgei r3, r1, -32768
check_r3 1
test_name CMPGEI_12
mvi r1, -1
cmpgei r3, r1, -32768
check_r3 1
test_name CMPGEI_13
mvi r1, -32768
cmpgei r3, r1, -32768
check_r3 1
end end
...@@ -52,4 +52,19 @@ mvi r3, 0 ...@@ -52,4 +52,19 @@ mvi r3, 0
cmpgeui r3, r3, 0 cmpgeui r3, r3, 0
check_r3 1 check_r3 1
test_name CMPGEUI_11
mvi r1, 0
cmpgeui r3, r1, 0x8000
check_r3 0
test_name CMPGEUI_12
mvi r1, -1
cmpgeui r3, r1, 0x8000
check_r3 1
test_name CMPGEUI_13
ori r1, r0, 0x8000
cmpgeui r3, r1, 0x8000
check_r3 1
end end
...@@ -52,4 +52,19 @@ mvi r3, 0 ...@@ -52,4 +52,19 @@ mvi r3, 0
cmpgi r3, r3, 0 cmpgi r3, r3, 0
check_r3 0 check_r3 0
test_name CMPGI_11
mvi r1, 0
cmpgi r3, r1, -32768
check_r3 1
test_name CMPGI_12
mvi r1, -1
cmpgi r3, r1, -32768
check_r3 1
test_name CMPGI_13
mvi r1, -32768
cmpgi r3, r1, -32768
check_r3 0
end end
...@@ -35,7 +35,7 @@ check_r3 1 ...@@ -35,7 +35,7 @@ check_r3 1
test_name CMPGUI_7 test_name CMPGUI_7
mvi r1, -1 mvi r1, -1
cmpgui r3, r1, 0xffff cmpgui r3, r1, 0xffff
check_r3 0 check_r3 1
test_name CMPGUI_8 test_name CMPGUI_8
mvi r3, 0 mvi r3, 0
...@@ -52,4 +52,19 @@ mvi r3, 0 ...@@ -52,4 +52,19 @@ mvi r3, 0
cmpgui r3, r3, 0 cmpgui r3, r3, 0
check_r3 0 check_r3 0
test_name CMPGUI_11
mvi r1, 0
cmpgui r3, r1, 0x8000
check_r3 0
test_name CMPGUI_12
mvi r1, -1
cmpgui r3, r1, 0x8000
check_r3 1
test_name CMPGUI_13
ori r1, r0, 0x8000
cmpgui r3, r1, 0x8000
check_r3 0
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册