提交 a2e002ff 编写于 作者: P Peter Maydell

Merge remote-tracking branch 'remotes/vivier2/tags/qemu-trivial-for-3.1-pull-request' into staging

QEMU trivial patches collected between June and October 2018
(Thank you to Thomas Huth)

v2: fix 32bit build with updated patch (v3) from Philippe Mathieu-Daudé
    built in a 32bit debian sid chroot

# gpg: Signature made Tue 30 Oct 2018 11:23:01 GMT
# gpg:                using RSA key F30C38BD3F2FBE3C
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>"
# gpg:                 aka "Laurent Vivier <laurent@vivier.eu>"
# gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>"
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C

* remotes/vivier2/tags/qemu-trivial-for-3.1-pull-request:
  milkymist-minimac2: Use qemu_log_mask(GUEST_ERROR) instead of error_report
  ppc: move at24c to its own CONFIG_ symbol
  hw/intc/gicv3: Remove useless parenthesis around DIV_ROUND_UP macro
  hw/pci-host: Remove useless parenthesis around DIV_ROUND_UP macro
  tests/bios-tables-test: Remove an useless cast
  xen: Use the PCI_DEVICE macro
  qobject: Catch another straggler for use of qdict_put_str()
  configure: Support pkg-config for zlib
  tests: Fix typos in comments and help message (found by codespell)
  cpu.h: fix a typo in comment
  linux-user: fix comment s/atomic_write/atomic_set/
  qemu-iotests: make 218 executable
  scripts/qemu.py: remove trailing quotes on docstring
  scripts/decodetree.py: remove unused imports
  docs/devel/testing.rst: add missing newlines after code block
  qemu-iotests: fix filename containing checks
  tests/tcg/README: fix location for lm32 tests
  memory.h: fix typos in comments
  vga_int: remove unused function protype
  configs/alpha: Remove unused CONFIG_PARALLEL_ISA switch
Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
...@@ -2151,23 +2151,6 @@ EOF ...@@ -2151,23 +2151,6 @@ EOF
fi fi
fi fi
#########################################
# zlib check
if test "$zlib" != "no" ; then
cat > $TMPC << EOF
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
if compile_prog "" "-lz" ; then
:
else
error_exit "zlib check failed" \
"Make sure to have the zlib libs and headers installed."
fi
fi
LIBS="$LIBS -lz"
########################################## ##########################################
# lzo check # lzo check
...@@ -3479,6 +3462,29 @@ if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then ...@@ -3479,6 +3462,29 @@ if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
fi fi
fi fi
#########################################
# zlib check
if test "$zlib" != "no" ; then
if $pkg_config --exists zlib; then
zlib_cflags=$($pkg_config --cflags zlib)
zlib_libs=$($pkg_config --libs zlib)
QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
LIBS="$zlib_libs $LIBS"
else
cat > $TMPC << EOF
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
if compile_prog "" "-lz" ; then
LIBS="$LIBS -lz"
else
error_exit "zlib check failed" \
"Make sure to have the zlib libs and headers installed."
fi
fi
fi
########################################## ##########################################
# SHA command probe for modules # SHA command probe for modules
if test "$modules" = yes; then if test "$modules" = yes; then
......
...@@ -8,7 +8,6 @@ CONFIG_I82374=y ...@@ -8,7 +8,6 @@ CONFIG_I82374=y
CONFIG_I8254=y CONFIG_I8254=y
CONFIG_I8257=y CONFIG_I8257=y
CONFIG_PARALLEL=y CONFIG_PARALLEL=y
CONFIG_PARALLEL_ISA=y
CONFIG_FDC=y CONFIG_FDC=y
CONFIG_PCKBD=y CONFIG_PCKBD=y
CONFIG_VGA_CIRRUS=y CONFIG_VGA_CIRRUS=y
......
...@@ -28,6 +28,7 @@ CONFIG_SM501=y ...@@ -28,6 +28,7 @@ CONFIG_SM501=y
CONFIG_DDC=y CONFIG_DDC=y
CONFIG_IDE_SII3112=y CONFIG_IDE_SII3112=y
CONFIG_I2C=y CONFIG_I2C=y
CONFIG_AT24C=y
CONFIG_BITBANG_I2C=y CONFIG_BITBANG_I2C=y
CONFIG_M41T80=y CONFIG_M41T80=y
CONFIG_VGA_CIRRUS=y CONFIG_VGA_CIRRUS=y
......
...@@ -59,6 +59,7 @@ variable (which affects memory reclamation and catches invalid pointers better) ...@@ -59,6 +59,7 @@ variable (which affects memory reclamation and catches invalid pointers better)
and gtester options. If necessary, you can run and gtester options. If necessary, you can run
.. code:: .. code::
make check-unit V=1 make check-unit V=1
and copy the actual command line which executes the unit test, then run and copy the actual command line which executes the unit test, then run
...@@ -116,6 +117,7 @@ and using gdb on the test is still simple to do: find out the actual command ...@@ -116,6 +117,7 @@ and using gdb on the test is still simple to do: find out the actual command
from the output of from the output of
.. code:: .. code::
make check-qtest V=1 make check-qtest V=1
which you can run manually. which you can run manually.
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "hw/sysbus.h" #include "hw/sysbus.h"
#include "trace.h" #include "trace.h"
#include "net/net.h" #include "net/net.h"
#include "qemu/log.h"
#include "qemu/error-report.h" #include "qemu/error-report.h"
#include <zlib.h> #include <zlib.h>
...@@ -214,7 +215,8 @@ static size_t assemble_frame(uint8_t *buf, size_t size, ...@@ -214,7 +215,8 @@ static size_t assemble_frame(uint8_t *buf, size_t size,
uint32_t crc; uint32_t crc;
if (size < payload_size + 12) { if (size < payload_size + 12) {
error_report("milkymist_minimac2: received too big ethernet frame"); qemu_log_mask(LOG_GUEST_ERROR, "milkymist_minimac2: frame too big "
"(%zd bytes)\n", payload_size);
return 0; return 0;
} }
...@@ -347,8 +349,9 @@ minimac2_read(void *opaque, hwaddr addr, unsigned size) ...@@ -347,8 +349,9 @@ minimac2_read(void *opaque, hwaddr addr, unsigned size)
break; break;
default: default:
error_report("milkymist_minimac2: read access to unknown register 0x" qemu_log_mask(LOG_GUEST_ERROR,
TARGET_FMT_plx, addr << 2); "milkymist_minimac2_rd%d: 0x%" HWADDR_PRIx "\n",
size, addr << 2);
break; break;
} }
...@@ -413,8 +416,10 @@ minimac2_write(void *opaque, hwaddr addr, uint64_t value, ...@@ -413,8 +416,10 @@ minimac2_write(void *opaque, hwaddr addr, uint64_t value,
break; break;
default: default:
error_report("milkymist_minimac2: write access to unknown register 0x" qemu_log_mask(LOG_GUEST_ERROR,
TARGET_FMT_plx, addr << 2); "milkymist_minimac2_wr%d: 0x%" HWADDR_PRIx
" = 0x%" PRIx64 "\n",
size, addr << 2, value);
break; break;
} }
} }
......
common-obj-$(CONFIG_DS1225Y) += ds1225y.o common-obj-$(CONFIG_DS1225Y) += ds1225y.o
common-obj-y += eeprom93xx.o common-obj-y += eeprom93xx.o
common-obj-$(CONFIG_I2C) += eeprom_at24c.o common-obj-$(CONFIG_AT24C) += eeprom_at24c.o
common-obj-y += fw_cfg.o common-obj-y += fw_cfg.o
common-obj-y += chrp_nvram.o common-obj-y += chrp_nvram.o
common-obj-$(CONFIG_MAC_NVRAM) += mac_nvram.o common-obj-$(CONFIG_MAC_NVRAM) += mac_nvram.o
......
...@@ -144,7 +144,7 @@ static void i440fx_update_memory_mappings(PCII440FXState *d) ...@@ -144,7 +144,7 @@ static void i440fx_update_memory_mappings(PCII440FXState *d)
memory_region_transaction_begin(); memory_region_transaction_begin();
for (i = 0; i < 13; i++) { for (i = 0; i < 13; i++) {
pam_update(&d->pam_regions[i], i, pam_update(&d->pam_regions[i], i,
pd->config[I440FX_PAM + (DIV_ROUND_UP(i, 2))]); pd->config[I440FX_PAM + DIV_ROUND_UP(i, 2)]);
} }
memory_region_set_enabled(&d->smram_region, memory_region_set_enabled(&d->smram_region,
!(pd->config[I440FX_SMRAM] & SMRAM_D_OPEN)); !(pd->config[I440FX_SMRAM] & SMRAM_D_OPEN));
......
...@@ -356,7 +356,7 @@ static void mch_update_pam(MCHPCIState *mch) ...@@ -356,7 +356,7 @@ static void mch_update_pam(MCHPCIState *mch)
memory_region_transaction_begin(); memory_region_transaction_begin();
for (i = 0; i < 13; i++) { for (i = 0; i < 13; i++) {
pam_update(&mch->pam_regions[i], i, pam_update(&mch->pam_regions[i], i,
pd->config[MCH_HOST_BRIDGE_PAM0 + (DIV_ROUND_UP(i, 2))]); pd->config[MCH_HOST_BRIDGE_PAM0 + DIV_ROUND_UP(i, 2)]);
} }
memory_region_transaction_commit(); memory_region_transaction_commit();
} }
......
...@@ -358,7 +358,7 @@ static uint64_t xen_pt_get_bar_size(PCIIORegion *r) ...@@ -358,7 +358,7 @@ static uint64_t xen_pt_get_bar_size(PCIIORegion *r)
static XenPTBarFlag xen_pt_bar_reg_parse(XenPCIPassthroughState *s, static XenPTBarFlag xen_pt_bar_reg_parse(XenPCIPassthroughState *s,
int index) int index)
{ {
PCIDevice *d = &s->dev; PCIDevice *d = PCI_DEVICE(s);
XenPTRegion *region = NULL; XenPTRegion *region = NULL;
PCIIORegion *r; PCIIORegion *r;
...@@ -469,7 +469,7 @@ static int xen_pt_bar_reg_write(XenPCIPassthroughState *s, XenPTReg *cfg_entry, ...@@ -469,7 +469,7 @@ static int xen_pt_bar_reg_write(XenPCIPassthroughState *s, XenPTReg *cfg_entry,
{ {
XenPTRegInfo *reg = cfg_entry->reg; XenPTRegInfo *reg = cfg_entry->reg;
XenPTRegion *base = NULL; XenPTRegion *base = NULL;
PCIDevice *d = &s->dev; PCIDevice *d = PCI_DEVICE(s);
const PCIIORegion *r; const PCIIORegion *r;
uint32_t writable_mask = 0; uint32_t writable_mask = 0;
uint32_t bar_emu_mask = 0; uint32_t bar_emu_mask = 0;
...@@ -543,7 +543,7 @@ static int xen_pt_exp_rom_bar_reg_write(XenPCIPassthroughState *s, ...@@ -543,7 +543,7 @@ static int xen_pt_exp_rom_bar_reg_write(XenPCIPassthroughState *s,
{ {
XenPTRegInfo *reg = cfg_entry->reg; XenPTRegInfo *reg = cfg_entry->reg;
XenPTRegion *base = NULL; XenPTRegion *base = NULL;
PCIDevice *d = (PCIDevice *)&s->dev; PCIDevice *d = PCI_DEVICE(s);
uint32_t writable_mask = 0; uint32_t writable_mask = 0;
uint32_t throughable_mask = get_throughable_mask(s, reg, valid_mask); uint32_t throughable_mask = get_throughable_mask(s, reg, valid_mask);
pcibus_t r_size = 0; pcibus_t r_size = 0;
...@@ -1587,7 +1587,7 @@ static int xen_pt_pcie_size_init(XenPCIPassthroughState *s, ...@@ -1587,7 +1587,7 @@ static int xen_pt_pcie_size_init(XenPCIPassthroughState *s,
const XenPTRegGroupInfo *grp_reg, const XenPTRegGroupInfo *grp_reg,
uint32_t base_offset, uint8_t *size) uint32_t base_offset, uint8_t *size)
{ {
PCIDevice *d = &s->dev; PCIDevice *d = PCI_DEVICE(s);
uint8_t version = get_capability_version(s, base_offset); uint8_t version = get_capability_version(s, base_offset);
uint8_t type = get_device_type(s, base_offset); uint8_t type = get_device_type(s, base_offset);
uint8_t pcie_size = 0; uint8_t pcie_size = 0;
......
...@@ -935,7 +935,7 @@ uint64_t memory_region_size(MemoryRegion *mr); ...@@ -935,7 +935,7 @@ uint64_t memory_region_size(MemoryRegion *mr);
/** /**
* memory_region_is_ram: check whether a memory region is random access * memory_region_is_ram: check whether a memory region is random access
* *
* Returns %true is a memory region is random access. * Returns %true if a memory region is random access.
* *
* @mr: the memory region being queried * @mr: the memory region being queried
*/ */
...@@ -947,7 +947,7 @@ static inline bool memory_region_is_ram(MemoryRegion *mr) ...@@ -947,7 +947,7 @@ static inline bool memory_region_is_ram(MemoryRegion *mr)
/** /**
* memory_region_is_ram_device: check whether a memory region is a ram device * memory_region_is_ram_device: check whether a memory region is a ram device
* *
* Returns %true is a memory region is a device backed ram region * Returns %true if a memory region is a device backed ram region
* *
* @mr: the memory region being queried * @mr: the memory region being queried
*/ */
...@@ -1161,7 +1161,7 @@ uint8_t memory_region_get_dirty_log_mask(MemoryRegion *mr); ...@@ -1161,7 +1161,7 @@ uint8_t memory_region_get_dirty_log_mask(MemoryRegion *mr);
/** /**
* memory_region_is_rom: check whether a memory region is ROM * memory_region_is_rom: check whether a memory region is ROM
* *
* Returns %true is a memory region is read-only memory. * Returns %true if a memory region is read-only memory.
* *
* @mr: the memory region being queried * @mr: the memory region being queried
*/ */
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
* avoids bugs where we forget to subtract GIC_INTERNAL from an * avoids bugs where we forget to subtract GIC_INTERNAL from an
* interrupt number. * interrupt number.
*/ */
#define GICV3_BMP_SIZE (DIV_ROUND_UP(GICV3_MAXIRQ, 32)) #define GICV3_BMP_SIZE DIV_ROUND_UP(GICV3_MAXIRQ, 32)
#define GIC_DECLARE_BITMAP(name) \ #define GIC_DECLARE_BITMAP(name) \
uint32_t name[GICV3_BMP_SIZE] uint32_t name[GICV3_BMP_SIZE]
......
...@@ -852,7 +852,7 @@ extern CPUInterruptHandler cpu_interrupt_handler; ...@@ -852,7 +852,7 @@ extern CPUInterruptHandler cpu_interrupt_handler;
/** /**
* cpu_interrupt: * cpu_interrupt:
* @cpu: The CPU to set an interrupt on. * @cpu: The CPU to set an interrupt on.
* @mask: The interupts to set. * @mask: The interrupts to set.
* *
* Invokes the interrupt handler. * Invokes the interrupt handler.
*/ */
......
...@@ -147,7 +147,7 @@ typedef struct TaskState { ...@@ -147,7 +147,7 @@ typedef struct TaskState {
/* Nonzero if process_pending_signals() needs to do something (either /* Nonzero if process_pending_signals() needs to do something (either
* handle a pending signal or unblock signals). * handle a pending signal or unblock signals).
* This flag is written from a signal handler so should be accessed via * This flag is written from a signal handler so should be accessed via
* the atomic_read() and atomic_write() functions. (It is not accessed * the atomic_read() and atomic_set() functions. (It is not accessed
* from multiple threads.) * from multiple threads.)
*/ */
int signal_pending; int signal_pending;
......
...@@ -577,7 +577,7 @@ static QObject *qdict_crumple_for_keyval_qiv(QDict *src, Error **errp) ...@@ -577,7 +577,7 @@ static QObject *qdict_crumple_for_keyval_qiv(QDict *src, Error **errp)
if (!tmp) { if (!tmp) {
tmp = qdict_clone_shallow(src); tmp = qdict_clone_shallow(src);
} }
qdict_put(tmp, ent->key, qstring_from_str(s)); qdict_put_str(tmp, ent->key, s);
g_free(buf); g_free(buf);
} }
......
...@@ -149,12 +149,10 @@ ...@@ -149,12 +149,10 @@
# trans_addl_i(ctx, &arg_opi, insn) # trans_addl_i(ctx, &arg_opi, insn)
# #
import io
import os import os
import re import re
import sys import sys
import getopt import getopt
import pdb
insnwidth = 32 insnwidth = 32
insnmask = 0xffffffff insnmask = 0xffffffff
......
...@@ -93,7 +93,7 @@ class QEMUMachine(object): ...@@ -93,7 +93,7 @@ class QEMUMachine(object):
@param name: prefix for socket and log file names (default: qemu-PID) @param name: prefix for socket and log file names (default: qemu-PID)
@param test_dir: where to create socket and log file @param test_dir: where to create socket and log file
@param monitor_address: address for QMP monitor @param monitor_address: address for QMP monitor
@param socket_scm_helper: helper program, required for send_fd_scm()" @param socket_scm_helper: helper program, required for send_fd_scm()
@note: Qemu process is not started until launch() is used. @note: Qemu process is not started until launch() is used.
''' '''
if args is None: if args is None:
......
...@@ -319,7 +319,7 @@ static bool load_asl(GArray *sdts, AcpiSdtTable *sdt) ...@@ -319,7 +319,7 @@ static bool load_asl(GArray *sdts, AcpiSdtTable *sdt)
ret = g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, &error); ret = g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, &error);
g_assert_no_error(error); g_assert_no_error(error);
if (ret) { if (ret) {
ret = g_file_get_contents(sdt->asl_file, (gchar **)&sdt->asl, ret = g_file_get_contents(sdt->asl_file, &sdt->asl,
&sdt->asl_len, &error); &sdt->asl_len, &error);
g_assert(ret); g_assert(ret);
g_assert_no_error(error); g_assert_no_error(error);
...@@ -390,7 +390,7 @@ try_again: ...@@ -390,7 +390,7 @@ try_again:
if (g_file_test(aml_file, G_FILE_TEST_EXISTS)) { if (g_file_test(aml_file, G_FILE_TEST_EXISTS)) {
exp_sdt.aml_file = aml_file; exp_sdt.aml_file = aml_file;
} else if (*ext != '\0') { } else if (*ext != '\0') {
/* try fallback to generic (extention less) expected file */ /* try fallback to generic (extension less) expected file */
ext = ""; ext = "";
g_free(aml_file); g_free(aml_file);
goto try_again; goto try_again;
......
...@@ -41,7 +41,7 @@ docker-qemu-src: $(DOCKER_SRC_COPY) ...@@ -41,7 +41,7 @@ docker-qemu-src: $(DOCKER_SRC_COPY)
docker-image: ${DOCKER_TARGETS} docker-image: ${DOCKER_TARGETS}
# General rule for building docker images. If we are a sub-make # General rule for building docker images. If we are a sub-make
# invoked with SKIP_DOCKER_BUILD we still check the image is upto date # invoked with SKIP_DOCKER_BUILD we still check the image is up to date
# though # though
ifdef SKIP_DOCKER_BUILD ifdef SKIP_DOCKER_BUILD
docker-image-%: $(DOCKER_FILES_DIR)/%.docker docker-image-%: $(DOCKER_FILES_DIR)/%.docker
......
...@@ -97,7 +97,7 @@ def _get_so_libs(executable): ...@@ -97,7 +97,7 @@ def _get_so_libs(executable):
return libs return libs
def _copy_binary_with_libs(src, dest_dir): def _copy_binary_with_libs(src, dest_dir):
"""Copy a binary executable and all its dependant libraries. """Copy a binary executable and all its dependent libraries.
This does rely on the host file-system being fairly multi-arch This does rely on the host file-system being fairly multi-arch
aware so the file don't clash with the guests layout.""" aware so the file don't clash with the guests layout."""
...@@ -284,7 +284,7 @@ class SubCommand(object): ...@@ -284,7 +284,7 @@ class SubCommand(object):
name = None # Subcommand name name = None # Subcommand name
def shared_args(self, parser): def shared_args(self, parser):
parser.add_argument("--quiet", action="store_true", parser.add_argument("--quiet", action="store_true",
help="Run quietly unless an error occured") help="Run quietly unless an error occurred")
def args(self, parser): def args(self, parser):
"""Setup argument parser""" """Setup argument parser"""
......
...@@ -122,7 +122,7 @@ class CatchBreakpoint(gdb.Breakpoint): ...@@ -122,7 +122,7 @@ class CatchBreakpoint(gdb.Breakpoint):
def run_test(): def run_test():
"Run throught the tests one by one" "Run through the tests one by one"
print ("Checking we can step the first few instructions") print ("Checking we can step the first few instructions")
step_ok = 0 step_ok = 0
......
文件模式从 100644 更改为 100755
...@@ -257,7 +257,7 @@ function _launch_qemu() ...@@ -257,7 +257,7 @@ function _launch_qemu()
} }
# Silenty kills the QEMU process # Silently kills the QEMU process
# #
# If $wait is set to anything other than the empty string, the process will not # If $wait is set to anything other than the empty string, the process will not
# be killed but only waited for, and any output will be forwarded to stdout. If # be killed but only waited for, and any output will be forwarded to stdout. If
......
...@@ -170,7 +170,7 @@ if [ ! -e "$TEST_DIR" ]; then ...@@ -170,7 +170,7 @@ if [ ! -e "$TEST_DIR" ]; then
fi fi
if [ ! -d "$TEST_DIR" ]; then if [ ! -d "$TEST_DIR" ]; then
echo "common.config: Error: \$TEST_DIR ($TEST_DIR) is not a directory" echo "common.rc: Error: \$TEST_DIR ($TEST_DIR) is not a directory"
exit 1 exit 1
fi fi
...@@ -179,7 +179,7 @@ if [ -z "$REMOTE_TEST_DIR" ]; then ...@@ -179,7 +179,7 @@ if [ -z "$REMOTE_TEST_DIR" ]; then
fi fi
if [ ! -d "$SAMPLE_IMG_DIR" ]; then if [ ! -d "$SAMPLE_IMG_DIR" ]; then
echo "common.config: Error: \$SAMPLE_IMG_DIR ($SAMPLE_IMG_DIR) is not a directory" echo "common.rc: Error: \$SAMPLE_IMG_DIR ($SAMPLE_IMG_DIR) is not a directory"
exit 1 exit 1
fi fi
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# #
# TCG tests (per-target rules) # TCG tests (per-target rules)
# #
# This Makefile fragement is included from the per-target # This Makefile fragment is included from the per-target
# Makefile.target so will be invoked for each linux-user program we # Makefile.target so will be invoked for each linux-user program we
# build. We have two options for compiling, either using a configured # build. We have two options for compiling, either using a configured
# guest compiler or calling one of our docker images to do it for us. # guest compiler or calling one of our docker images to do it for us.
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# #
# TCG Compiler Probe # TCG Compiler Probe
# #
# This Makefile fragement is included multiple times in the main make # This Makefile fragment is included multiple times in the main make
# script to probe for available compilers. This is used to build up a # script to probe for available compilers. This is used to build up a
# selection of required docker targets before we invoke a sub-make for # selection of required docker targets before we invoke a sub-make for
# each target. # each target.
......
...@@ -10,6 +10,6 @@ with "make test-cris". ...@@ -10,6 +10,6 @@ with "make test-cris".
LM32 LM32
==== ====
The testsuite for LM32 is in tests/tcg/cris. You can run it The testsuite for LM32 is in tests/tcg/lm32. You can run it
with "make test-lm32". with "make test-lm32".
...@@ -24,7 +24,7 @@ int main(void) ...@@ -24,7 +24,7 @@ int main(void)
rt = 0x123456789ABCDEF1; rt = 0x123456789ABCDEF1;
rs = 0x123456789ABCDEF2; rs = 0x123456789ABCDEF2;
result = 0x0000000000000001; result = 0x0000000000000001;
/* This time we do not set dspctrl, but it setted in pre-action. */ /* This time we do not set dspctrl, but set it in pre-action. */
dspresult = 0x1; dspresult = 0x1;
__asm __asm
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册