Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Aug 2018 10:10:46 +0000 (UTC)
From:      =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <royger@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r477953 - in head/sysutils/xen-tools411: . files
Message-ID:  <201808241010.w7OAAkcg062544@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: royger (src committer)
Date: Fri Aug 24 10:10:45 2018
New Revision: 477953
URL: https://svnweb.freebsd.org/changeset/ports/477953

Log:
  xen-tools411: build a working hvmloader
  
  ... when using LLVM LD. Add a patch that fixes hvmloader build with
  LLVM LD. Without this patch the generated hvmloader doesn't work
  properly.
  
  Sponsored by:	Citrix Systems R&D

Added:
  head/sysutils/xen-tools411/files/0001-hvmloader-fix-build-with-LLVM-Linker.patch   (contents, props changed)
Modified:
  head/sysutils/xen-tools411/Makefile

Modified: head/sysutils/xen-tools411/Makefile
==============================================================================
--- head/sysutils/xen-tools411/Makefile	Fri Aug 24 09:38:10 2018	(r477952)
+++ head/sysutils/xen-tools411/Makefile	Fri Aug 24 10:10:45 2018	(r477953)
@@ -3,7 +3,7 @@
 PORTNAME=	xen
 PKGNAMESUFFIX=	-tools411
 PORTVERSION=	4.11.0
-PORTREVISION=	3
+PORTREVISION=	4
 CATEGORIES=	sysutils emulators
 MASTER_SITES=	http://downloads.xenproject.org/release/xen/${PORTVERSION}/
 
@@ -48,6 +48,8 @@ EXTRA_PATCHES+=	${FILESDIR}/0001-docs-use-the-make-wil
 # XSA-273 and XSA-272
 EXTRA_PATCHES+=	${FILESDIR}/0031-tools-oxenstored-Make-evaluation-order-explicit.patch:-p1 \
 		${FILESDIR}/0041-xl.conf-Add-global-affinity-masks.patch:-p1
+# Fix hvmloader build with LLVM LD
+EXTRA_PATCHES+=	${FILESDIR}/0001-hvmloader-fix-build-with-LLVM-Linker.patch:-p1
 
 CONFIGURE_ARGS+= --with-system-seabios=${LOCALBASE}/share/seabios/bios.bin
 

Added: head/sysutils/xen-tools411/files/0001-hvmloader-fix-build-with-LLVM-Linker.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/xen-tools411/files/0001-hvmloader-fix-build-with-LLVM-Linker.patch	Fri Aug 24 10:10:45 2018	(r477953)
@@ -0,0 +1,101 @@
+From 9aa8c031ce844ada6832a56d3b25341bed2825db Mon Sep 17 00:00:00 2001
+From: Roger Pau Monne <roger.pau@citrix.com>
+Date: Fri, 24 Aug 2018 10:14:28 +0200
+Subject: [PATCH] hvmloader: fix build with LLVM Linker
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The hvmloader binary generated when using LLVM LD doesn't work
+properly and seems to get stuck while trying to generate and load the
+ACPI tables. This is caused by the layout of the binary when linked
+with LLVM LD.
+
+LLVM LD has a different default linker script that GNU LD, and the
+resulting hvmloader binary is slightly different:
+
+LLVM LD:
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  PHDR           0x000034 0x000ff034 0x000ff034 0x00060 0x00060 R   0x4
+  LOAD           0x000000 0x000ff000 0x000ff000 0x38000 0x38000 RWE 0x1000
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0
+
+GNU LD:
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x000080 0x00100000 0x00100000 0x36308 0x3fd74 RWE 0x10
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
+
+Note that in the LLVM LD case (as with GNU LD) the .text section does
+indeed have the address set to 0x100000 as requested on the command
+line:
+
+[ 1] .text             PROGBITS        00100000 001000 00dd10 00  AX  0   0 16
+
+There's however the PHDR which is not present when using GNU LD.
+
+Fix this by using a very simple linker script that generates the same
+binary regardless of whether LLVM or GNU LD is used. By using a linker
+script the usage of -Ttext can also be avoided by placing the desired
+.text load address directly in the linker script.
+
+Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
+---
+Jan Beulich <jbeulich@suse.com>
+Andrew Cooper <andrew.cooper3@citrix.com>
+Wei Liu <wei.liu2@citrix.com>
+Ian Jackson <ian.jackson@eu.citrix.com>
+---
+ tools/firmware/hvmloader/Makefile      |  7 ++-----
+ tools/firmware/hvmloader/hvmloader.lds | 13 +++++++++++++
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+ create mode 100644 tools/firmware/hvmloader/hvmloader.lds
+
+diff --git a/tools/firmware/hvmloader/Makefile b/tools/firmware/hvmloader/Makefile
+index 496ac72b77..e980ce7c5f 100644
+--- a/tools/firmware/hvmloader/Makefile
++++ b/tools/firmware/hvmloader/Makefile
+@@ -20,9 +20,6 @@
+ XEN_ROOT = $(CURDIR)/../../..
+ include $(XEN_ROOT)/tools/firmware/Rules.mk
+ 
+-
+-LOADADDR = 0x100000
+-
+ # SMBIOS spec requires format mm/dd/yyyy
+ SMBIOS_REL_DATE ?= $(shell date +%m/%d/%Y)
+ 
+@@ -82,8 +79,8 @@ vpath build.c $(ACPI_PATH)
+ vpath static_tables.c $(ACPI_PATH)
+ OBJS += $(ACPI_OBJS)
+ 
+-hvmloader: $(OBJS)
+-	$(LD) $(LDFLAGS_DIRECT) -N -Ttext $(LOADADDR) -o $@ $^
++hvmloader: $(OBJS) hvmloader.lds
++	$(LD) $(LDFLAGS_DIRECT) -N -T hvmloader.lds -o $@ $(OBJS)
+ 
+ roms.inc: $(ROMS)
+ 	echo "/* Autogenerated file. DO NOT EDIT */" > $@.new
+diff --git a/tools/firmware/hvmloader/hvmloader.lds b/tools/firmware/hvmloader/hvmloader.lds
+new file mode 100644
+index 0000000000..15d8f38fff
+--- /dev/null
++++ b/tools/firmware/hvmloader/hvmloader.lds
+@@ -0,0 +1,13 @@
++SECTIONS
++{
++  . = 0x100000;
++  /*
++   * NB: there's no need to use the AT keyword in order to set the LMA, by
++   * default the linker will use VMA = LMA unless specified otherwise.
++   */
++  .text : { *(.text) }
++  .rodata : { *(.rodata) }
++  .data : { *(.data) }
++  .bss : { *(.bss) }
++  _end = .;
++}
+-- 
+2.18.0
+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808241010.w7OAAkcg062544>