WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 3/3] move more kernel decompression bits to .init.* s

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 3/3] move more kernel decompression bits to .init.* sections
From: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Date: Wed, 09 Mar 2011 11:13:44 +0000
Delivery-date: Wed, 09 Mar 2011 03:20:19 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Based on how c/s 22986:076b63b74cf6 changed xen/libelf/Makefile I
suppose this is compatibile with those clang/llvm changes, but I
didn't actually test it.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -152,6 +152,18 @@ _clean_%/: FORCE
 %.o: %.S Makefile
        $(CC) $(AFLAGS) -c $< -o $@
 
+SPECIAL_DATA_SECTIONS := rodata $(foreach n,1 2 4 8,rodata.str1.$(n)) \
+                        $(foreach r,rel rel.ro,data.$(r) data.$(r).local)
+
+%.init.o: %.o Makefile
+       $(OBJDUMP) -h $< | sed -n '/[0-9]/{s,00*,0,g;p}' | while read idx name 
sz rest; do \
+               case "$$name" in \
+               .text|.data|.bss) test $$sz = 0 || \
+                       { echo "Error: size of $<:$$name is 0x$$sz" >&2; exit 
$$idx; };; \
+               esac; \
+       done
+       $(OBJCOPY) $(foreach s,$(SPECIAL_DATA_SECTIONS),--rename-section 
.$(s)=.init.$(s)) $< $@
+
 %.i: %.c Makefile
        $(CPP) $(CFLAGS) $< -o $@
 
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -10,6 +10,7 @@ subdir-$(x86_64) += x86_64
 
 obj-y += apic.o
 obj-y += bitops.o
+obj-bin-y += bzimage.init.o
 obj-bin-y += clear_page.o
 obj-bin-y += copy_page.o
 obj-y += compat.o
@@ -55,7 +56,6 @@ obj-y += machine_kexec.o
 obj-y += crash.o
 obj-y += tboot.o
 obj-y += hpet.o
-obj-y += bzimage.o
 
 obj-$(crash_debug) += gdbstub.o
 
--- a/xen/arch/x86/bzimage.c
+++ b/xen/arch/x86/bzimage.c
@@ -9,21 +9,21 @@
 
 #define HEAPORDER 3
 
-static unsigned char *window;
+static unsigned char *__initdata window;
 #define memptr long
-static memptr free_mem_ptr;
-static memptr free_mem_end_ptr;
+static memptr __initdata free_mem_ptr;
+static memptr __initdata free_mem_end_ptr;
 
 #define WSIZE           0x80000000
 
-static unsigned char    *inbuf;
-static unsigned         insize;
+static unsigned char *__initdata inbuf;
+static unsigned __initdata insize;
 
 /* Index of next byte to be processed in inbuf: */
-static unsigned         inptr;
+static unsigned __initdata inptr;
 
 /* Bytes in output buffer: */
-static unsigned         outcnt;
+static unsigned __initdata outcnt;
 
 #define OF(args)        args
 #define STATIC          static
@@ -34,7 +34,8 @@ typedef unsigned char   uch;
 typedef unsigned short  ush;
 typedef unsigned long   ulg;
 
-#define INIT __init
+#define INIT            __init
+#define INITDATA        __initdata
 
 #define get_byte()      (inptr < insize ? inbuf[inptr++] : fill_inbuf())
 
@@ -55,7 +56,7 @@ typedef unsigned long   ulg;
 #  define Tracecv(c, x)
 #endif
 
-static long bytes_out;
+static long __initdata bytes_out;
 static void flush_window(void);
 
 static __init void error(char *x)
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -43,7 +43,7 @@ obj-y += radix-tree.o
 obj-y += rbtree.o
 obj-y += lzo.o
 
-obj-$(CONFIG_X86) += decompress.o bunzip2.o unxz.o unlzma.o unlzo.o
+obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma 
unlzo,$(n).init.o)
 
 obj-$(perfc)       += perfc.o
 obj-$(crash_debug) += gdbstub.o
--- a/xen/common/inflate.c
+++ b/xen/common/inflate.c
@@ -120,6 +120,7 @@ static char rcsid[] = "#Id: inflate.c,v 
 
 #ifndef INIT
 #define INIT
+#define INITDATA
 #endif
  
 #define slide window
@@ -216,8 +217,8 @@ static const ush cpdext[] = {         /*
    the stream.
  */
 
-STATIC ulg bb;                         /* bit buffer */
-STATIC unsigned bk;                    /* bits in bit buffer */
+STATIC ulg INITDATA bb;                /* bit buffer */
+STATIC unsigned INITDATA bk;           /* bits in bit buffer */
 
 STATIC const ush mask_bits[] = {
     0x0000,
@@ -234,10 +235,10 @@ STATIC const ush mask_bits[] = {
  *  malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
  */
 
-static unsigned long malloc_ptr;
-static int malloc_count;
+static unsigned long INITDATA malloc_ptr;
+static int INITDATA malloc_count;
 
-static void *malloc(int size)
+static void *INIT malloc(int size)
 {
     void *p;
 
@@ -258,7 +259,7 @@ static void *malloc(int size)
     return p;
 }
 
-static void free(void *where)
+static void INIT free(void *where)
 {
     malloc_count--;
     if (!malloc_count)
@@ -311,7 +312,7 @@ STATIC const int dbits = 6;          /* 
 #define N_MAX 288       /* maximum number of codes in any set */
 
 
-STATIC unsigned hufts;         /* track memory usage */
+STATIC unsigned INITDATA hufts;      /* track memory usage */
 
 
 STATIC int INIT huft_build(
@@ -1129,8 +1130,8 @@ STATIC int INIT inflate(void)
  *
  **********************************************************************/
 
-static ulg crc_32_tab[256];
-static ulg crc;  /* initialized in makecrc() so it'll reside in bss */
+static ulg INITDATA crc_32_tab[256];
+static ulg INITDATA crc;  /* initialized in makecrc() so it'll reside in bss */
 #define CRC_VALUE (crc ^ 0xffffffffUL)
 
 /*
--- a/xen/common/libelf/Makefile
+++ b/xen/common/libelf/Makefile
@@ -1,6 +1,6 @@
 obj-bin-y := libelf.o
 
-SECTIONS := text data rodata $(foreach n,1 2 4 8,rodata.str1.$(n)) $(foreach 
r,rel rel.ro,data.$(r) data.$(r).local)
+SECTIONS := text data $(SPECIAL_DATA_SECTIONS)
 
 libelf.o: libelf-temp.o Makefile
        $(OBJCOPY) $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s)) 
$< $@
--- a/xen/common/unlzma.c
+++ b/xen/common/unlzma.c
@@ -75,7 +75,7 @@ struct rc {
 #define RC_MODEL_TOTAL_BITS 11
 
 
-static int nofill(void *buffer, unsigned int len)
+static int INIT nofill(void *buffer, unsigned int len)
 {
        return -1;
 }
--- a/xen/common/xz/dec_bcj.c
+++ b/xen/common/xz/dec_bcj.c
@@ -87,11 +87,10 @@ static inline int INIT bcj_x86_test_msby
 
 static size_t INIT bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
 {
-       static /*const*/ bool_t INITDATA mask_to_allowed_status[8]
+       static const bool_t mask_to_allowed_status[8]
                = { true, true, true, false, true, false, false, false };
 
-       static /*const*/ uint8_t INITDATA mask_to_bit_num[8]
-               = { 0, 1, 2, 2, 3, 3, 3, 3 };
+       static const uint8_t mask_to_bit_num[8] = { 0, 1, 2, 2, 3, 3, 3, 3 };
 
        size_t i;
        size_t prev_pos = (size_t)-1;


Attachment: decompress-sections.patch
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 3/3] move more kernel decompression bits to .init.* sections, Jan Beulich <=