On Thu, Sep 9, 2021 at 10:29 AM Philippe Mathieu-Daudé <f4...@amsat.org> wrote:
> On 9/7/21 11:52 PM, i...@bsdimp.com wrote: > > From: Warner Losh <i...@bsdimp.com> > > > > The following changes since commit > f214d8e0150766c31172e16ef4b17674f549d852: > > > > Merge remote-tracking branch > 'remotes/pmaydell/tags/pull-target-arm-20210826' into staging (2021-08-26 > 18:03:57 +0100) > > > > are available in the Git repository at: > > > > https://gitlab.com/bsdimp/qemu.git tags/bsd-user-pull-20210907-tag > > > > for you to fetch changes up to dc96376e46a52ac63a27ea185c3f0a6fd54e3c82: > > > > bsd-user: Update mapping to handle reserved and starting conditions > (2021-09-07 08:26:53 -0600) > > > > ---------------------------------------------------------------- > > > > This series of patches gets me to the point that I can run "Hello World" > on i386 > > and x86_64. This is for static binaries only, that are relatively small, > but > > it's better than the 100% instant mmap failre that is the current state > of all > > things bsd-user in upstream qemu. Future patch sets will refine this, add > > the missing system calls, fix bugs preventing more sophisticated > programms > > from running and add a bunch of new architecture support. > > > > There's three large themes in these patches, though the changes that > > represent them are interrelated making it hard to separate out further. > > 1. Reorganization to support multiple OS and architectures (though I've > only > > tested FreeBSD, other BSDs might not even compile yet). > > 2. Diff reduction with the bsd-user fork for several files. These diffs > include > > changes that borrowed from linux-user as well as changes to make > things work > > on FreeBSD. The records keeping when this was done, however, was poor > at > > best, so many of the specific borrowings are going unacknowledged > here, apart > > from this general ack. These diffs also include some minor code > shuffling. > > Some of the changes are done specifically to make it easier to rebase > > the bsd-user fork's changes when these land in the tree (a number of > changes > > have been pushed there to make this more possible). > > 3. Filling in the missing pieces to make things work. There's many > changes to > > elfload to make it load things in the right places, to find the > interpreter > > better, etc. There's changes to mmap.c to make the mappings work > better and > > there's changes to main.c that were inspired, at least, by > now-ancient changes > > to linux-user's main.c. > > > > I ran checkpatch.pl on this, and there's 350-odd errors it identifies > (the vast > > majoirty come from BSD's fetish for tabs), so there will need to be a V2 > to fix > > this at the very least. In addition, the change set is big (about > +~4.5k/-~2.5k > > lines), so I anticipate some iteration as well just based on its sheer > > size. I've tried to keep each set small to make it easy to review in > isolation, > > but I've also allowed some interrelated ones to get a little bigger than > I'd > > normally like. I've not done the customary documentation of the expected > > checkpatch.pl output because it is large, and because I wanted to get > review > > of the other parts rolling to get this project unstuck. Future versions > of the > > patch will document the expected output. > > > > In addition, I noticed a number of places where I could modernize to > make the > > code match things like linux-user better. I've resisted the urge to do > these at > > this time, since it would complicate merging the other ~30k lines of > diff that > > remains after this batch. Future batches should generally be smaller > once this > > one has landed since they are, by and large, either a bunch of new files > to > > support armv7, aarch64, riscv64, mips, mipsel, mips64, ppc, ppc64 and > ppc64le, > > or are adding system calls, which can be done individually or small > groups. I've > > removed sparc and sparc64 support as they've been removed from FreeBSD > and > > have been near totally busted for years. > > > > Stacey Son did the bulk of this work originally, but since I had to move > things > > around so much and/or retool that work in non-trivial ways, I've kept > myself as > > author, and added his signed-off-by line. I'm unsure of the qemu standard > > practice for this, but am happy to learn if this is too far outside its > current > > mainstream. For a while Sean Bruno did the merges from upstream, and he's > > credited using his signed-off-by in appropriate places, though for this > patch > > set there's only a few. I've tried to ensure that others who have work in > > individual patches that I've aggregated together also are reflected in > their > > signed-off-by. Given the chaotic stat of the upstream repo for its early > > history, this may be the best that can be reconstructed at this late > date. Most > > of these files are 'foundational' so have existed from the earliest days > when > > record keeping wasn't quite what I'd wish for in hindsight. There was > only > > really one change that I could easily cherry-pick (Colin's), so I did > that. > > --- > > Something got wrong with the signed tag, it should probably end here, > but all the cover letter is included. > Just a slight case of PEBEK I think :) > FYI git-publish eases the process: > https://github.com/stefanha/git-publish I'll have to give this a try next time... The first couple of rounds were easy enough to do by hand, but this last round has been quite a bit more difficult. Warner > > > v2: rejected patches dropped > > Use suggested glibc routines > > Updated to be closer to qemu style > > Disable bsd-user on netbsd and openbsd since they don't compile > > fold together a couple of related changes > > [[ tagged the review-by and acked-by from last series, but by hand... > > I think I got them all... ]] > > > > v3: Fix a bug in refactoring load_elf_sections and is_target_elf_binary > > Fix spelling errors in commit messages > > drop copy_cpu() patch until we use that function > > reword a few commit messages to make them clearer > > fix return value of setup_sigtramp to be 0 after #ifdef elimination > > Add patch to initialize random state and implement --seed > > Fix a boatload of style issues. > > Rebase to tip of master > > > > NOTE: checkpatch.pl will have several warning about line length > 80 and > > admonishment to not use architecture specific defines. The slightly long > lines > > look a lot better than wrapping and the arch specific defines are > basically > > required (one could wrap them, and I plan to in the future once I've > pruned the > > obsolete ones in a future patch set: there's so many that errors would > crop up > > if I were to do it now). > > > > Warner > > > > Colin Percival (1): > > bsd-user: Add '-0 argv0' option to bsd-user/main.c > > > > Warner Losh (41): > > bsd-user: remove sparc and sparc64 > > bsd-user: add copyright header to elfload.c > > bsd-user: Add Stacey's copyright to main.c > > bsd-user: add license to bsdload.c > > bsd-user: style nits: bsdload.c whitespace to qemu standard > > bsd-user: Remove all non-x86 code from elfload.c > > bsd-user: move arch specific defines out of elfload.c > > bsd-user: pass the bsd_param into loader_exec > > bsd-user: Fix calculation of size to allocate > > bsd-user: implement path searching > > bsd-user: Eliminate elf personality > > bsd-user: remove a.out support > > bsd-user: TARGET_NGROUPS unused in this file, remove > > bsd-user: elfload: simplify bswap a bit. > > bsd-user: assume pthreads and support of __thread > > bsd-user: add host-os.h > > bsd-user: Include host-os.h from main > > bsd-user: save the path to the qemu emulator > > bsd-user: start to move target CPU functions to target_arch* > > bsd-user: Move per-cpu code into target_arch_cpu.h > > bsd-user: pull in target_arch_thread.h update target_arch_elf.h > > bsd-user: Include more things in qemu.h > > bsd-user: define max args in terms of pages > > bsd-user: Create target specific vmparam.h > > bsd-user: Add system independent stack, data and text limiting > > bsd-user: *BSD specific siginfo defintions > > bsd-user: Implement --seed and initialize random state > > bsd-user: Move stack initializtion into a per-os file. > > bsd-user: Add architecture specific signal tramp code > > bsd-user: elf cleanup > > bsd-user: Remove dead #ifdefs from elfload.c > > bsd-user: Rewrite target system call definintion glue > > bsd-user: update debugging in mmap.c > > bsd-user: Add target_arch_reg to describe a target's register set > > bsd-user: Add target_os_user.h to capture the user/kernel structures > > bsd-user: add stubbed out core dump support > > bsd-user: elfload.c style catch up patch > > bsd-user: Refactor load_elf_sections and is_target_elf_binary > > bsd-user: move gemu_log to later in the file > > bsd-user: Implement interlock for atomic operations > > bsd-user: Update mapping to handle reserved and starting conditions > > > > bsd-user/bsd-mman.h | 121 -- > > bsd-user/bsdload.c | 104 +- > > bsd-user/elfcore.c | 10 + > > bsd-user/elfload.c | 1469 +++++------------ > > bsd-user/freebsd/host-os.h | 25 + > > bsd-user/freebsd/target_os_elf.h | 137 ++ > > bsd-user/freebsd/target_os_siginfo.h | 145 ++ > > bsd-user/freebsd/target_os_signal.h | 78 + > > bsd-user/freebsd/target_os_stack.h | 181 ++ > > bsd-user/freebsd/target_os_thread.h | 25 + > > bsd-user/freebsd/target_os_user.h | 427 +++++ > > bsd-user/freebsd/target_os_vmparam.h | 38 + > > .../target_syscall.h => i386/target_arch.h} | 27 +- > > bsd-user/i386/target_arch_cpu.c | 76 + > > bsd-user/i386/target_arch_cpu.h | 209 +++ > > bsd-user/i386/target_arch_elf.h | 35 + > > bsd-user/i386/target_arch_reg.h | 82 + > > bsd-user/i386/target_arch_signal.h | 94 ++ > > bsd-user/i386/target_arch_sigtramp.h | 29 + > > bsd-user/i386/target_arch_thread.h | 47 + > > bsd-user/i386/target_arch_vmparam.h | 46 + > > bsd-user/main.c | 832 ++-------- > > bsd-user/mmap.c | 472 +++++- > > bsd-user/netbsd/host-os.h | 25 + > > bsd-user/netbsd/target_os_elf.h | 146 ++ > > bsd-user/netbsd/target_os_siginfo.h | 82 + > > bsd-user/netbsd/target_os_signal.h | 69 + > > bsd-user/netbsd/target_os_stack.h | 56 + > > bsd-user/netbsd/target_os_thread.h | 25 + > > bsd-user/openbsd/host-os.h | 25 + > > bsd-user/openbsd/target_os_elf.h | 146 ++ > > bsd-user/openbsd/target_os_siginfo.h | 82 + > > bsd-user/openbsd/target_os_signal.h | 69 + > > bsd-user/openbsd/target_os_stack.h | 56 + > > bsd-user/openbsd/target_os_thread.h | 25 + > > bsd-user/qemu.h | 63 +- > > bsd-user/sparc/target_arch_sysarch.h | 52 - > > bsd-user/sparc64/target_arch_sysarch.h | 52 - > > bsd-user/syscall.c | 11 - > > bsd-user/syscall_defs.h | 255 +-- > > .../target_syscall.h => x86_64/target_arch.h} | 28 +- > > bsd-user/x86_64/target_arch_cpu.c | 76 + > > bsd-user/x86_64/target_arch_cpu.h | 247 +++ > > bsd-user/x86_64/target_arch_elf.h | 35 + > > bsd-user/x86_64/target_arch_reg.h | 92 ++ > > bsd-user/x86_64/target_arch_signal.h | 94 ++ > > bsd-user/x86_64/target_arch_sigtramp.h | 29 + > > bsd-user/x86_64/target_arch_thread.h | 40 + > > bsd-user/x86_64/target_arch_vmparam.h | 46 + > > configure | 7 +- > > meson.build | 7 +- > > slirp | 2 +- > > 52 files changed, 4387 insertions(+), 2264 deletions(-) > > delete mode 100644 bsd-user/bsd-mman.h > > create mode 100644 bsd-user/elfcore.c > > create mode 100644 bsd-user/freebsd/host-os.h > > create mode 100644 bsd-user/freebsd/target_os_elf.h > > create mode 100644 bsd-user/freebsd/target_os_siginfo.h > > create mode 100644 bsd-user/freebsd/target_os_signal.h > > create mode 100644 bsd-user/freebsd/target_os_stack.h > > create mode 100644 bsd-user/freebsd/target_os_thread.h > > create mode 100644 bsd-user/freebsd/target_os_user.h > > create mode 100644 bsd-user/freebsd/target_os_vmparam.h > > rename bsd-user/{sparc/target_syscall.h => i386/target_arch.h} (60%) > > create mode 100644 bsd-user/i386/target_arch_cpu.c > > create mode 100644 bsd-user/i386/target_arch_cpu.h > > create mode 100644 bsd-user/i386/target_arch_elf.h > > create mode 100644 bsd-user/i386/target_arch_reg.h > > create mode 100644 bsd-user/i386/target_arch_signal.h > > create mode 100644 bsd-user/i386/target_arch_sigtramp.h > > create mode 100644 bsd-user/i386/target_arch_thread.h > > create mode 100644 bsd-user/i386/target_arch_vmparam.h > > create mode 100644 bsd-user/netbsd/host-os.h > > create mode 100644 bsd-user/netbsd/target_os_elf.h > > create mode 100644 bsd-user/netbsd/target_os_siginfo.h > > create mode 100644 bsd-user/netbsd/target_os_signal.h > > create mode 100644 bsd-user/netbsd/target_os_stack.h > > create mode 100644 bsd-user/netbsd/target_os_thread.h > > create mode 100644 bsd-user/openbsd/host-os.h > > create mode 100644 bsd-user/openbsd/target_os_elf.h > > create mode 100644 bsd-user/openbsd/target_os_siginfo.h > > create mode 100644 bsd-user/openbsd/target_os_signal.h > > create mode 100644 bsd-user/openbsd/target_os_stack.h > > create mode 100644 bsd-user/openbsd/target_os_thread.h > > delete mode 100644 bsd-user/sparc/target_arch_sysarch.h > > delete mode 100644 bsd-user/sparc64/target_arch_sysarch.h > > rename bsd-user/{sparc64/target_syscall.h => x86_64/target_arch.h} (59%) > > create mode 100644 bsd-user/x86_64/target_arch_cpu.c > > create mode 100644 bsd-user/x86_64/target_arch_cpu.h > > create mode 100644 bsd-user/x86_64/target_arch_elf.h > > create mode 100644 bsd-user/x86_64/target_arch_reg.h > > create mode 100644 bsd-user/x86_64/target_arch_signal.h > > create mode 100644 bsd-user/x86_64/target_arch_sigtramp.h > > create mode 100644 bsd-user/x86_64/target_arch_thread.h > > create mode 100644 bsd-user/x86_64/target_arch_vmparam.h > > > >