From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44935) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YUugL-0002LI-92 for qemu-devel@nongnu.org; Mon, 09 Mar 2015 06:13:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YUugH-0003zz-TG for qemu-devel@nongnu.org; Mon, 09 Mar 2015 06:13:05 -0400 Received: from e06smtp12.uk.ibm.com ([195.75.94.108]:56023) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YUugH-0003zP-JA for qemu-devel@nongnu.org; Mon, 09 Mar 2015 06:13:01 -0400 Received: from /spool/local by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 9 Mar 2015 10:12:59 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id 0104D17D8066 for ; Mon, 9 Mar 2015 10:13:17 +0000 (GMT) Received: from d06av08.portsmouth.uk.ibm.com (d06av08.portsmouth.uk.ibm.com [9.149.37.249]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t29ACtLw50331832 for ; Mon, 9 Mar 2015 10:12:55 GMT Received: from d06av08.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t29ACtAg032395 for ; Mon, 9 Mar 2015 04:12:55 -0600 From: Thomas Huth Date: Mon, 9 Mar 2015 11:12:51 +0100 Message-Id: <1425895973-15239-1-git-send-email-thuth@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH v2 0/2] s390x: Make the s390-ccw BIOS relocatable List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: cornelia.huck@de.ibm.com, borntraeger@de.ibm.com, agraf@suse.de, Thomas Huth Currently, our s390-ccw.img sits at the fix address 126 MiB in memory. This has two big disadvantages: 1) We can not start guests with less than 128 MiB RAM and 2) if the guest uses a really huge ramdisk > 126 MiB, the s390-ccw BIOS gets overwritten and the boot silently crashes. These two patches now fix these problems by relocating the s390-ccw BIOS to the end of the RAM. The basic idea here is to compile the BIOS with the "-fpie" compiler option to create position independent code. Sounds easy at a first glance - however, with -fpie, we only get position independent _code_ - and a so called GOT (global offset table) which contains absolute references to global variables again (this is normally needed for supporting dynamic libraries - in our s390-ccw BIOS, it's just bad luck that we get a GOT). So to be able to really move around our s390-ccw.img in RAM, we've got to relocate the entries in the GOT, too. This is what the first patch is good for. I've changed the ELF loader there to parse the reloc section of the ELF file. I only included the bare minimum of relocation types (R_390_RELATIVE) in the patch so far, but this can easily be extended in case we need more (with different compiler version etc.). The second patch then adds the required changes to the s390-ccw BIOS Makefile and our s390 ipl code in QEMU. v2: - Fixed endianess issues in the ELF relocation function Thomas Huth (2): elf-loader: Provide the possibility to relocate s390 ELF files s390/bios: Make the s390-ccw.img relocatable hw/core/loader.c | 2 + hw/s390x/ipl.c | 23 ++++++++++++- include/elf.h | 2 + include/hw/elf_ops.h | 78 +++++++++++++++++++++++++++++++++++++++++++++ pc-bios/s390-ccw/Makefile | 11 +++--- 5 files changed, 109 insertions(+), 7 deletions(-)