cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

a-b-bootblock.S (2166B)


      1# x86 bootblock used in migration test
      2#  repeatedly increments the first byte of each page in a 100MB
      3#  range.
      4#  Outputs an initial 'A' on serial followed by repeated 'B's
      5#
      6# Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
      7# This work is licensed under the terms of the GNU GPL, version 2 or later.
      8# See the COPYING file in the top-level directory.
      9#
     10# Author: dgilbert@redhat.com
     11
     12
     13.code16
     14.org 0x7c00
     15        .file   "fill.s"
     16        .text
     17        .globl  start
     18        .type   start, @function
     19start:             # at 0x7c00 ?
     20        cli
     21        lgdt gdtdesc
     22        mov $1,%eax
     23        mov %eax,%cr0  # Protected mode enable
     24        data32 ljmp $8,$0x7c20
     25
     26.org 0x7c20
     27.code32
     28        # A20 enable - not sure I actually need this
     29        inb $0x92,%al
     30        or  $2,%al
     31        outb %al, $0x92
     32
     33        # set up DS for the whole of RAM (needed on KVM)
     34        mov $16,%eax
     35        mov %eax,%ds
     36
     37        mov $65,%ax
     38        mov $0x3f8,%dx
     39        outb %al,%dx
     40
     41        # bl keeps a counter so we limit the output speed
     42        mov $0, %bl
     43mainloop:
     44        # Start from 1MB
     45        mov $(1024*1024),%eax
     46innerloop:
     47        incb (%eax)
     48        add $4096,%eax
     49        cmp $(100*1024*1024),%eax
     50        jl innerloop
     51
     52        inc %bl
     53        jnz mainloop
     54
     55        mov $66,%ax
     56        mov $0x3f8,%dx
     57        outb %al,%dx
     58
     59        jmp mainloop
     60
     61        # GDT magic from old (GPLv2)  Grub startup.S
     62        .p2align        2       /* force 4-byte alignment */
     63gdt:
     64        .word   0, 0
     65        .byte   0, 0, 0, 0
     66
     67        /* -- code segment --
     68         * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present
     69         * type = 32bit code execute/read, DPL = 0
     70         */
     71        .word   0xFFFF, 0
     72        .byte   0, 0x9A, 0xCF, 0
     73
     74        /* -- data segment --
     75         * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present
     76         * type = 32 bit data read/write, DPL = 0
     77         */
     78        .word   0xFFFF, 0
     79        .byte   0, 0x92, 0xCF, 0
     80
     81gdtdesc:
     82        .word   0x27                    /* limit */
     83        .long   gdt                     /* addr */
     84
     85/* I'm a bootable disk */
     86.org 0x7dfe
     87        .byte 0x55
     88        .byte 0xAA