Progress:
* VIRT-65 [QEMU upstream maintainership]
+ finally managed to complete review of Damien's reset handling rework
+ rolled v2 of patchset to support booting large kernel images
+ sent a cleanup patchset to rename arm.h to boot.h
* VIRT-268 [QEMU support for dual-core Cortex-M Musca board]
+ working on making the CPU model configurable without FPU or DSP,
so that we can correctly model the Musca-A and MPS2-AN521 boards as
not having FPU or DSP on CPU #0.
thanks
-- PMM
== Progress ==
* FDPIC
- GCC: sent updated patch series (v5). Received feedback about -static
support vs dynamic-linkker need. Discussing options.
* GCC upstream validation:
- reported a couple of regressions
- found a bug in qemu while testing v4.0.0, preparing a reproducer
* Infra
- [stalled] working on adding binutils regression testing to round-robin jobs
- cleanup
== Next ==
FDPIC:
- GCC: handle feedback
UBSAN/bare-metal: look at how to make it easier to use on CPUs that
lack sync primivites (eg cortex-m0)
== Progress ==
* [GlobalISel] Add support for integers > 32 bits wide [LLVM-310]
- While looking into this I found and fixed a bug in the generic
part of IRTranslator, which reduced the number of fallbacks on the ARM
test-suite by about 20%
- Currently working on lowering function calls etc for 64-bit types
* [GlobalISel] Refactor CallLowering [LLVM-568]
- The CallLowering interface really needs a cleanup before I
continue with LLVM-310
- This has been discussed upstream in the past and would benefit all
targets, so I'm going to give it a shot
* SVE2 code reviews
== Plan ==
* More of the same
* Out of office 29 May - 10 June
== Progress ==
* Out of office on Friday (sick)
* [GlobalISel] Better support for small types [LLVM-553]
- Committed upstream
* GlobalISel
- quickfix for a DBG_VALUE-related bug
- code reviews
* SVE code reviews
* Catching up on Connect / EuroLLVM
== Plan ==
* More of the same
* Out of office end of May - beginning of June
[VIRT-343 # ARMv8.5-RNG, Random Number Generator ]
Posted v4, v5, v6. I think this is now ready for merge.
[VIRT-327 # Richard's upstream QEMU work ]
Posted v3 of the CPUNegativeOffset patch set.
Posted v2, v3, and a pull request for the tlb_fill patch set.
Debugged one more fix for Sparc testthreads.
Reposted some long dormant linux-user fixes.
Started reviving the do_syscall split patch set,
since Laurent asked after it.
r~
o 4 days week.
o LLVM
* Machine outliner:
- Fixed LR save issue, when saved into a register.
- Dealing with LR save/restore when outlined region is a
pop{...,PC} tail-call.
- Investigating potential issue with condition flags.
o Misc
* Various meetings and discussions.
[LLVM-158] buildbot maintenance
- Increased timeouts on some libfuzzer tests, aarch64 full bots should
fail less frequently under load.
[LLVM-534] -n -N support in LLD (needed for Linux kernel allyesconfig
CI with LLD on AArch64)
Rewrote using a different approach after upstream comments
[LLVM-122] BTI and PAC support in LLD
Wrote an implementation, it compiles, but completely untested as of today.
(short week: 3 days)
Brief writeup of a pair of talks I attended on Tuesday at the
Cambridge University Computer Lab by some people from Amazon:
Diana Popa talked about Amazon's new "Firecracker" VMM (virtual
machine monitor -- the userspace component that uses the kernel's KVM
APIs to create and control virtual machines; kvmtool and QEMU are both
VMMs). Their use case is the AWS Lambda service, where VMs are
generally fairly short-lived (on the order of hours), startup time
matters a lot, and the VMs typically don't need very much CPU/RAM
resource. Firecracker is written in Rust, and provides a very simple
guest device model (virtio block and network devices), booting a
kernel that knows it is virtualized. It boots the kernel directly,
without running a BIOS. It has a memory footprint of less than 5MB and
a boot time of 125ms. They are currently working on Arm support (they
have it booting, but some bits still need work, eg the VM doesn't get
the right time because there is no RTC device exposed to the guest).
My feeling was that this shows an advantage of the KVM design: the
kernel/userspace split makes it easy to replace the userspace VMM
part with something customised for the task at hand if you don't
need a full-fat all-bells-and-whistles general-purpose solution.
Andreea Florescu talked next, about the "rust-vmm" libraries. This is
a set of open-source Rust crates which are intended to abstract out
some of the common building blocks for VMMs. Firecracker started as a
fork of Google's crosvm project, but since the use-case requirements
for the two projects are markedly different the code diverged fairly
rapidly. rust-vmm is intended to allow the projects to share code for
things like "nice Rust interfaces to the KVM ioctls" and
"implementations of virtio devices". The project is still in quite an
early stage of development -- they have a few crates that have made it
to the "stable, published on crates.io" phase, but most are either in
"being developed" or still just "planned/proposed/discussed". It's
currently Apache-2.0 licensed, but they are planning to dual-license
to Apache-2.0 | 3-BSD because Apache-2.0 isn't GPL-2.0 compatible, and
they have had some interest in being able to experiment with using
these crates with QEMU. (That sounds a bit outlandish but it's
actually something I'm planning to look into myself -- the nice thing
about Rust is that you can potentially incrementally add it to an
existing C codebase without requiring a ground-up rewrite, so allowing
security hardening of the more "risky" parts. This is very definitely
all still just "exploratory prototyping" though.)
Progress:
* just miscellaneous upstream stuff
thanks
-- PMM
* 1 day off (public holiday)
== Progress ==
* FDPIC
- rebased GCC FDPIC patches. Fixing conflict with fstack-protector.
* GCC upstream validation:
- Fixed ST internal validation broken since GCC bumped to version 10.
Still some spurious failures probably caused by NFS. Testing
workarounds.
- reported a couple of regressions
* GCC
- ubsan on bare-metal toolchain: no news.
* Infra
- [stalled] working on adding binutils regression testing to round-robin jobs
== Next ==
FDPIC:
- GCC: fix problems with fstack-protector
UBSAN/bare-metal: look at how to make it easier to use on CPUs that
lack sync primivites (eg cortex-m0)
o 4 days week.
o LLVM
* Machine outliner:
- Identified an issue related to LR saving inside an outlined
chunk, working on a proper fix.
o Misc
* Various meetings and discussions.
[VIRT-327 # Richard's upstream QEMU work ]
Review Mark's target/ppc getVSR patch set.
Two rounds of "tcg vector improvments"; hopefully that's
ready to go in on Monday.
More work on "bit select" and "compare select" primitives.
I can now vectorize Neon VSHL/VSHR variable shift (where
positive values are left shift and negative values are
right shift). Waiting on posting this while previous tcg
vector patch set is still in flight.
Review Alex's demacrofy v5. Wrote a boot.S for Alpha.
Review David's latest target/s390 vector patch set.
Review Sato-san's target/rx v8. Played around with a few
disassembler improvements, but I'll not confuse the review
process by posting them now.
r~
Progress:
* VIRT-65 [QEMU upstream maintainership]
+ pushed QEMU 4.0 out the door
+ code review:
- RTH's patchset that cleans up the softmmu TLB structs
- Nios2 nommu and semihosting patchset from codesourcery
- cleanup series removing a "bucket of random stuff" header file
- RTH's patchset adding BTI support for linux-user mode
- RTH's patchset cleaning up the tlb_fill API
- RTH's patchset implementing Cortex-A73, A75, A76
- "SBSA reference platform" new board model
- patchset adding Netduino Plus 2 board model
- linux-user patch to correctly handle loading ELF segments which
have no file data (ie only bss)
- patch adding the RTC device to the ASpeed board models
- patchset fixing various minor problems preventing QEMU building
cleanly for Windows-on-Arm
- started looking at Damian's patchset that overhauls how we do
device reset; this is good work that's long overdue, but reviewing
it requires me to wrap my head around the problem space...
+ sent out v2 versions of a few minor patches that needed respins
+ wrote email to qemu-devel asking for volunteers to help with
QEMU release work so it's not only me doing this every cycle
* VIRT-268 [QEMU support for dual-core Cortex-M Musca board]
+ FPU support now upstream
+ a few loose ends remain to be tidied up, but this epic is
now essentially complete
NB: out of office Tues 7th afternoon to attend a couple of lectures
at the CL by people from Amazon on their virtualization stack written
in Rust (http://talks.cam.ac.uk/talk/index/119491 and
http://talks.cam.ac.uk/talk/index/121069)
thanks
-- PMM
[LLVM-158] Buildbot monitoring duty
- Reported bug that libc++ when built as part as libfuzzer is not
built with PIC or PIE, yet some tests for non-x86 force PIE which then
fails at link-time.
- Reported bugs in libstdc++ and clang where exception specifications
didn't match due to extra parentheses. libstdc++ now fixed to not have
any discrepancy, clang bug for not ignoring the extra parentheses
still active.
- Investigated libfuzzer intermittent failures, 2 look like timeouts
not being long enough, submitted patch to get this increased.
[LLVM-122] BTI/PAC Started prototyping an implementation based on top
of the yet to land LLD patch for Intel CET.
Think about how to add crypto extensions without overriding
architecture in a complex build system.
Review comments for LLD and compiler-rt, and mailing list proposal for
something similar to __attribute__((at(address))).
* 1 day off (public holiday)
== Progress ==
* FDPIC
- Looked at gdbserver memory consumption increased since release 7.5.
Found similar results to Prathamesh. On arm-linux-gnueabihf with a
sample test program, gdbserver memory usage increased from ~500kB to
~1.5MB. But that should not prevent execution on board (which has
16MB); maybe memory fragmentation?
- rebased GCC FDPIC patches. There's a regression since Thomas
committed fixes to fstack-protector.
* GCC upstream validation:
- ST internal validation broken since GCC bumped to version 10. I was
using an old glibc. Upgrading glibc proved to be painful (requiring
new versions of make, bison, python....). Still using RH6 servers.
* GCC
- ubsan on bare-metal toolchain: Sent an email to llvm-dev list,
requesting help in how-to-cross-build runtime libs in clang/llvm. No
response so far....
* Infra
- [stalled] working on adding binutils regression testing to round-robin jobs
- fixed legacy binutils regression testing by switching to new slaves
- sent patches to support new slave (tcwg-lc-01)
- sent ABE patches to support new gcc9 config, and update to latest-rel config
== Next ==
FDPIC:
- GCC: fix problems with fstack-protector
UBSAN/bare-metal: look at how to make it easier to use on CPUs that
lack sync primivites (eg cortex-m0)
Infra:
- Fix ST internal validation
== Progress ==
* Out of office 1 day (public holiday)
* [GlobalISel] Better support for small types [LLVM-553]
- Fixed the bug that I'd been looking into
- Committed support for several instructions, only 3 left to commit next week
* IR SVE Reviews [LLVM-545]
- Looked into the patches for stack management
* GlobalISel code review
- Currently looking into an unpleasant patch adding a new opcode
* Catching up on Connect / EuroLLVM
== Plan ==
* More of the same
* Out of office end of May - beginning of June
[VIRT-327 # Richard's upstream QEMU work ]
Another round on launchpad 1824853, TB overflow.
This time handling relocation overflow. Which would
not be seen on an x86 host (2GB displacement), but
would affect some of the risc hosts.
Reviewed Peter's v7m fpu patches.
Another round on util/path.c, fixing the startup loop
that we get into for using a full chroot for -L.
Poked my nose into Alex's cputlb demacrofy patch set.
Hopefully the feedback was helpful...
First two pull requests for 4.1.
r~
[PR40542] Sent patch for -n and -N support in LLD for upstream review
[LTO]
Investigated problems when using -Os -Oz with LTO, raised 2 PRs
- error if clang linker invocation uses -Os and -Oz
- strange error message when .bc used as a file extension for a
separate compile and link step
Crash in GNU ld when linking LLVM lto via the gold plugin. Looks like
a memory access/corruption problem in the conversion from .bc to bfd.
Other miscellaneous reviews for some linker script support in LLD.
Investigation into why ld.bfd with NOLOAD on the .gnu.build-id section
corrupts debug information.
== This Week ==
* PR88837 (7/10)
- Discussed and finalized algorithm for vector construction with Richard.
* GNU-606 (1/10)
- Experimented gdbserver memory consumption with docker.
* Public Holiday (2/10)
== Next Week ==
- Continue ongoing tasks.