xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Tim Deegan <tim@xen.org>
To: Jan Beulich <JBeulich@suse.com>
Cc: Jeffrey Karrels <karrelsj@gmail.com>, xen-devel@lists.xen.org
Subject: Re: Clang/LLVM version requirements
Date: Thu, 13 Sep 2012 11:11:20 +0100	[thread overview]
Message-ID: <20120913101120.GA12881@ocelot.phlegethon.org> (raw)
In-Reply-To: <5049E2C70200007800099B21@nat28.tlf.novell.com>

At 11:04 +0100 on 07 Sep (1347015863), Jan Beulich wrote:
> >>> On 07.09.12 at 10:50, Tim Deegan <tim@xen.org> wrote:
> > Jan, would you object to some other way of checking for .bss in reloc.c?
> 
> No, if you have a better idea.
> 
> > Could we just objcopy it out so any BSS symbols make it fail at link
> > time?
> 
> Would that reliably fail with all linker versions?
> 
> > In any case we probably ought to check for stray .data symbols too.
> 
> Not really, no. Those would still be present in reloc.bin, and
> hence make it into reloc.S.

But they would break the test, because the magic alignment happens in
.text, right?  Anyway, compile-time failure seems more useful.  How
about this, based on the similar checks for init-only files?


# HG changeset patch
# Parent 5691e4cc17da7fe8664a67f1d07c3755c0ca34ed
x86: check for BSS in reloc code at compile time.

This is a more helpful failure mode than hanging at boot time, and
incidentally fixes the clang/LLVM build by removing a .subsection rune.

Signed-off-by: Tim Deegan <tim@xen.org>

diff -r 5691e4cc17da xen/arch/x86/boot/build32.mk
--- a/xen/arch/x86/boot/build32.mk	Thu Sep 13 10:23:17 2012 +0200
+++ b/xen/arch/x86/boot/build32.mk	Thu Sep 13 11:04:29 2012 +0100
@@ -20,6 +20,15 @@ CFLAGS := $(filter-out -flto,$(CFLAGS))
 
 %.o: %.c
 	$(CC) $(CFLAGS) -c -fpic $< -o $@
+	$(OBJDUMP) -h $@ | sed -n '/[0-9]/{s,00*,0,g;p}' |\
+		while read idx name sz rest; do \
+			case "$$name" in \
+			.bss|.bss.*) \
+				test $$sz != 0 || continue; \
+				echo "Error: non-empty BSS: 0x$$sz" >&2; \
+				exit $$(expr $$idx + 1);; \
+			esac; \
+		done
 
 reloc.o: $(BASEDIR)/include/asm-x86/config.h
 .PRECIOUS: %.bin %.lnk
diff -r 5691e4cc17da xen/arch/x86/boot/reloc.c
--- a/xen/arch/x86/boot/reloc.c	Thu Sep 13 10:23:17 2012 +0200
+++ b/xen/arch/x86/boot/reloc.c	Thu Sep 13 11:04:29 2012 +0100
@@ -18,10 +18,7 @@ asm (
     "    call 1f                       \n"
     "1:  pop  %ebx                     \n"
     "    mov  %eax,alloc-1b(%ebx)      \n"
-    "    mov  $_end,%ecx               \n"  /* check that BSS is empty! */
-    "    sub  $__bss_start,%ecx        \n"
-    "    jz reloc                      \n"
-    "1:  jmp 1b                        \n"
+    "    jmp  reloc                    \n"
     );
 
 /* This is our data.  Because the code must be relocatable, no BSS is
@@ -30,9 +27,6 @@ asm (
 asm (
     "alloc:                            \n"
     "    .long 0                       \n"
-    "    .subsection 1                 \n"
-    "    .p2align 4, 0xcc              \n"
-    "    .subsection 0                 \n"
     );
 
 typedef unsigned int u32;

  reply	other threads:[~2012-09-13 10:11 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-06 22:32 Clang/LLVM version requirements Jeffrey Karrels
2012-09-07  8:50 ` Tim Deegan
2012-09-07 10:04   ` Jan Beulich
2012-09-13 10:11     ` Tim Deegan [this message]
2012-09-13 11:52       ` Jan Beulich
2012-09-13 12:21         ` Tim Deegan
2012-09-13 14:01           ` Jan Beulich
2012-09-13 14:55             ` Tim Deegan
2012-09-13 15:05               ` Keir Fraser
2012-09-13 15:09                 ` Keir Fraser
2012-09-13 15:27                   ` Ian Campbell
2012-09-13 15:51                     ` Keir Fraser
2012-09-13 15:22                 ` Jan Beulich
2012-09-13 15:34                   ` Keir Fraser
2012-09-13 15:06               ` Jan Beulich
2012-09-13 12:40         ` Paolo Bonzini
2012-09-13 14:04           ` Jan Beulich
2012-09-13 14:13             ` Paolo Bonzini
2012-09-13 14:18               ` Jan Beulich
2012-09-07 15:58   ` Jeffrey Karrels
2012-09-11 18:43     ` Jeffrey Karrels
2012-09-12 10:24       ` Stefano Stabellini
2012-09-13 16:15         ` Ian Jackson
2012-09-13 16:41           ` Tim Deegan
2012-09-13 17:04             ` Ian Jackson
2012-09-12 10:31       ` Tim Deegan
2012-09-12 10:38         ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120913101120.GA12881@ocelot.phlegethon.org \
    --to=tim@xen.org \
    --cc=JBeulich@suse.com \
    --cc=karrelsj@gmail.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).