diff options
author | Peter Maydell | 2019-10-01 14:13:38 +0200 |
---|---|---|
committer | Peter Maydell | 2019-10-01 14:13:38 +0200 |
commit | 7f21573c822805a8e6be379d9bcf3ad9effef3dc (patch) | |
tree | 3f41004aa57f38a33612594e615f9b98b1ade776 | |
parent | Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2019-09-28' into ... (diff) | |
parent | Disallow colons in the parameter of "-accel" (diff) | |
download | qemu-7f21573c822805a8e6be379d9bcf3ad9effef3dc.tar.gz qemu-7f21573c822805a8e6be379d9bcf3ad9effef3dc.tar.xz qemu-7f21573c822805a8e6be379d9bcf3ad9effef3dc.zip |
Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-10-01' into staging
- Fix and re-enable the usb-hcd-ehci-test
- Silence a Coverity warning in hw/m68k/next-cube.c
- Fix crash that can occur when using bad binaries with "-kernel"
- Disallow colons in the "-accel" parameter
# gpg: Signature made Tue 01 Oct 2019 11:03:13 BST
# gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg: issuer "thuth@redhat.com"
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full]
# gpg: aka "Thomas Huth <thuth@redhat.com>" [full]
# gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full]
# gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown]
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5
* remotes/huth-gitlab/tags/pull-request-2019-10-01:
Disallow colons in the parameter of "-accel"
hw/core/loader: Fix possible crash in rom_copy()
hw/m68k/next-cube: Avoid static RTC variables and introduce control register
tests: fix echi/ehci typo
tests: fix usb-hcd-ehci-test compilation
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | hw/core/loader.c | 2 | ||||
-rw-r--r-- | hw/m68k/next-cube.c | 73 | ||||
-rw-r--r-- | tests/Makefile.include | 4 | ||||
-rw-r--r-- | tests/cdrom-test.c | 2 | ||||
-rw-r--r-- | tests/usb-hcd-ehci-test.c | 4 | ||||
-rw-r--r-- | vl.c | 5 |
6 files changed, 50 insertions, 40 deletions
diff --git a/hw/core/loader.c b/hw/core/loader.c index 0d60219364..5099f27dc8 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -1281,7 +1281,7 @@ int rom_copy(uint8_t *dest, hwaddr addr, size_t size) if (rom->addr + rom->romsize < addr) { continue; } - if (rom->addr > end) { + if (rom->addr > end || rom->addr < addr) { break; } diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index 9a4a7328f9..e5343348d0 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -60,6 +60,15 @@ typedef struct next_dma { uint32_t size; } next_dma; +typedef struct NextRtc { + uint8_t ram[32]; + uint8_t command; + uint8_t value; + uint8_t status; + uint8_t control; + uint8_t retval; +} NextRtc; + typedef struct { MachineState parent; @@ -77,7 +86,7 @@ typedef struct { uint32_t scr1; uint32_t scr2; - uint8_t rtc_ram[32]; + NextRtc rtc; } NeXTState; /* Thanks to NeXT forums for this */ @@ -105,11 +114,8 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size) static int led; static int phase; static uint8_t old_scr2; - static uint8_t rtc_command; - static uint8_t rtc_value; - static uint8_t rtc_status = 0x90; - static uint8_t rtc_return; uint8_t scr2_2; + NextRtc *rtc = &s->rtc; if (size == 4) { scr2_2 = (val >> 8) & 0xFF; @@ -135,52 +141,52 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size) if (((old_scr2 & SCR2_RTCLK) != (scr2_2 & SCR2_RTCLK)) && ((scr2_2 & SCR2_RTCLK) == 0)) { if (phase < 8) { - rtc_command = (rtc_command << 1) | - ((scr2_2 & SCR2_RTDATA) ? 1 : 0); + rtc->command = (rtc->command << 1) | + ((scr2_2 & SCR2_RTDATA) ? 1 : 0); } if (phase >= 8 && phase < 16) { - rtc_value = (rtc_value << 1) | ((scr2_2 & SCR2_RTDATA) ? 1 : 0); + rtc->value = (rtc->value << 1) | + ((scr2_2 & SCR2_RTDATA) ? 1 : 0); /* if we read RAM register, output RT_DATA bit */ - if (rtc_command <= 0x1F) { + if (rtc->command <= 0x1F) { scr2_2 = scr2_2 & (~SCR2_RTDATA); - if (s->rtc_ram[rtc_command] & (0x80 >> (phase - 8))) { + if (rtc->ram[rtc->command] & (0x80 >> (phase - 8))) { scr2_2 |= SCR2_RTDATA; } - rtc_return = (rtc_return << 1) | - ((scr2_2 & SCR2_RTDATA) ? 1 : 0); + rtc->retval = (rtc->retval << 1) | + ((scr2_2 & SCR2_RTDATA) ? 1 : 0); } /* read the status 0x30 */ - if (rtc_command == 0x30) { + if (rtc->command == 0x30) { scr2_2 = scr2_2 & (~SCR2_RTDATA); /* for now status = 0x98 (new rtc + FTU) */ - if (rtc_status & (0x80 >> (phase - 8))) { + if (rtc->status & (0x80 >> (phase - 8))) { scr2_2 |= SCR2_RTDATA; } - rtc_return = (rtc_return << 1) | - ((scr2_2 & SCR2_RTDATA) ? 1 : 0); + rtc->retval = (rtc->retval << 1) | + ((scr2_2 & SCR2_RTDATA) ? 1 : 0); } /* read the status 0x31 */ - if (rtc_command == 0x31) { + if (rtc->command == 0x31) { scr2_2 = scr2_2 & (~SCR2_RTDATA); - /* for now 0x00 */ - if (0x00 & (0x80 >> (phase - 8))) { + if (rtc->control & (0x80 >> (phase - 8))) { scr2_2 |= SCR2_RTDATA; } - rtc_return = (rtc_return << 1) | - ((scr2_2 & SCR2_RTDATA) ? 1 : 0); + rtc->retval = (rtc->retval << 1) | + ((scr2_2 & SCR2_RTDATA) ? 1 : 0); } - if ((rtc_command >= 0x20) && (rtc_command <= 0x2F)) { + if ((rtc->command >= 0x20) && (rtc->command <= 0x2F)) { scr2_2 = scr2_2 & (~SCR2_RTDATA); /* for now 0x00 */ time_t time_h = time(NULL); struct tm *info = localtime(&time_h); int ret = 0; - switch (rtc_command) { + switch (rtc->command) { case 0x20: ret = SCR2_TOBCD(info->tm_sec); break; @@ -205,22 +211,22 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size) if (ret & (0x80 >> (phase - 8))) { scr2_2 |= SCR2_RTDATA; } - rtc_return = (rtc_return << 1) | - ((scr2_2 & SCR2_RTDATA) ? 1 : 0); + rtc->retval = (rtc->retval << 1) | + ((scr2_2 & SCR2_RTDATA) ? 1 : 0); } } phase++; if (phase == 16) { - if (rtc_command >= 0x80 && rtc_command <= 0x9F) { - s->rtc_ram[rtc_command - 0x80] = rtc_value; + if (rtc->command >= 0x80 && rtc->command <= 0x9F) { + rtc->ram[rtc->command - 0x80] = rtc->value; } /* write to x30 register */ - if (rtc_command == 0xB1) { + if (rtc->command == 0xB1) { /* clear FTU */ - if (rtc_value & 0x04) { - rtc_status = rtc_status & (~0x18); + if (rtc->value & 0x04) { + rtc->status = rtc->status & (~0x18); s->int_status = s->int_status & (~0x04); } } @@ -229,8 +235,8 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size) } else { /* else end or abort */ phase = -1; - rtc_command = 0; - rtc_value = 0; + rtc->command = 0; + rtc->value = 0; } s->scr2 = val & 0xFFFF00FF; s->scr2 |= scr2_2 << 8; @@ -881,9 +887,10 @@ static void next_cube_init(MachineState *machine) /* 0x0000XX00 << vital bits */ ns->scr1 = 0x00011102; ns->scr2 = 0x00ff0c80; + ns->rtc.status = 0x90; /* Load RTC RAM - TODO: provide possibility to load contents from file */ - memcpy(ns->rtc_ram, rtc_ram2, 32); + memcpy(ns->rtc.ram, rtc_ram2, 32); /* 64MB RAM starting at 0x04000000 */ memory_region_allocate_system_memory(ram, NULL, "next.ram", ram_size); diff --git a/tests/Makefile.include b/tests/Makefile.include index 0595914526..3543451ed3 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -182,9 +182,7 @@ check-qtest-i386-$(CONFIG_PVPANIC) += tests/pvpanic-test$(EXESUF) check-qtest-i386-$(CONFIG_I82801B11) += tests/i82801b11-test$(EXESUF) check-qtest-i386-$(CONFIG_IOH3420) += tests/ioh3420-test$(EXESUF) check-qtest-i386-$(CONFIG_USB_UHCI) += tests/usb-hcd-uhci-test$(EXESUF) -ifeq ($(CONFIG_USB_ECHI)$(CONFIG_USB_UHCI),yy) -check-qtest-i386-y += tests/usb-hcd-ehci-test$(EXESUF) -endif +check-qtest-i386-$(call land,$(CONFIG_USB_EHCI),$(CONFIG_USB_UHCI)) += tests/usb-hcd-ehci-test$(EXESUF) check-qtest-i386-$(CONFIG_USB_XHCI_NEC) += tests/usb-hcd-xhci-test$(EXESUF) check-qtest-i386-y += tests/cpu-plug-test$(EXESUF) check-qtest-i386-y += tests/q35-test$(EXESUF) diff --git a/tests/cdrom-test.c b/tests/cdrom-test.c index 05611da648..34e9974634 100644 --- a/tests/cdrom-test.c +++ b/tests/cdrom-test.c @@ -120,7 +120,7 @@ static void test_cdboot(gconstpointer data) { QTestState *qts; - qts = qtest_initf("-accel kvm:tcg -no-shutdown %s%s", (const char *)data, + qts = qtest_initf("-M accel=kvm:tcg -no-shutdown %s%s", (const char *)data, isoimage); boot_sector_test(qts); qtest_quit(qts); diff --git a/tests/usb-hcd-ehci-test.c b/tests/usb-hcd-ehci-test.c index 8bc3e44189..5251d539e9 100644 --- a/tests/usb-hcd-ehci-test.c +++ b/tests/usb-hcd-ehci-test.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "libqtest.h" +#include "libqtest-single.h" #include "libqos/pci-pc.h" #include "hw/usb/uhci-regs.h" #include "hw/usb/ehci-regs.h" @@ -139,7 +139,7 @@ static void pci_ehci_port_3_hotplug(void) static void pci_ehci_port_hotplug(void) { - usb_test_hotplug("ich9-ehci-1", "3", pci_ehci_port_3_hotplug); + usb_test_hotplug(global_qtest, "ich9-ehci-1", "3", pci_ehci_port_3_hotplug); } @@ -3554,6 +3554,11 @@ int main(int argc, char **argv, char **envp) g_slist_free(accel_list); exit(0); } + if (optarg && strchr(optarg, ':')) { + error_report("Don't use ':' with -accel, " + "use -M accel=... for now instead"); + exit(1); + } opts = qemu_opts_create(qemu_find_opts("machine"), NULL, false, &error_abort); qemu_opt_set(opts, "accel", optarg, &error_abort); |