From f9fefedce7c03d299218a181fd5201b1e40ec2d388c06b3044a82e1dc0310b73 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Mon, 16 Jul 2007 16:06:43 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/kexec-tools?expand=0&rev=28 --- kexec-tools-1.101-align-dtstruct.patch | 18 -- kexec-tools-1.101-bootargs-align.patch | 17 -- kexec-tools-1.101-ps3-rmo_top-max.patch | 51 ----- kexec-tools-testing-20070319-rc.patch | 165 -------------- kexec-tools-testing-20070319-rc.tar.bz2 | 3 - kexec-tools-testing.tar.bz2 | 3 + kexec-tools.changes | 6 + kexec-tools.check_reuse_initrd-close.patch | 16 ++ kexec-tools.ppc32-64bit-purgatory.patch | 31 +++ kexec-tools.ppc64-32bit-build.patch | 246 +++++++++++++++++++++ kexec-tools.spec | 37 ++-- 11 files changed, 326 insertions(+), 267 deletions(-) delete mode 100644 kexec-tools-1.101-align-dtstruct.patch delete mode 100644 kexec-tools-1.101-bootargs-align.patch delete mode 100644 kexec-tools-1.101-ps3-rmo_top-max.patch delete mode 100644 kexec-tools-testing-20070319-rc.patch delete mode 100644 kexec-tools-testing-20070319-rc.tar.bz2 create mode 100644 kexec-tools-testing.tar.bz2 create mode 100644 kexec-tools.check_reuse_initrd-close.patch create mode 100644 kexec-tools.ppc32-64bit-purgatory.patch create mode 100644 kexec-tools.ppc64-32bit-build.patch diff --git a/kexec-tools-1.101-align-dtstruct.patch b/kexec-tools-1.101-align-dtstruct.patch deleted file mode 100644 index 13fd0a8..0000000 --- a/kexec-tools-1.101-align-dtstruct.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- - kexec/arch/ppc64/fs2dt.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -Index: kexec/arch/ppc64/fs2dt.c -=================================================================== ---- kexec/arch/ppc64/fs2dt.c.orig -+++ kexec/arch/ppc64/fs2dt.c -@@ -40,7 +40,8 @@ - - static char pathname[MAXPATH], *pathstart; - static char propnames[NAMESPACE] = { 0 }; --static unsigned dtstruct[TREEWORDS], *dt; -+static unsigned dtstruct[TREEWORDS] __attribute((aligned(8))); -+static unsigned *dt; - static unsigned long long mem_rsrv[2*MEMRESERVE] = { 0, 0 }; - - static int crash_param = 0; diff --git a/kexec-tools-1.101-bootargs-align.patch b/kexec-tools-1.101-bootargs-align.patch deleted file mode 100644 index b5d17e5..0000000 --- a/kexec-tools-1.101-bootargs-align.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- - kexec/arch/ppc64/fs2dt.c | 2 ++ - 1 file changed, 2 insertions(+) - -Index: kexec/arch/ppc64/fs2dt.c -=================================================================== ---- kexec/arch/ppc64/fs2dt.c.orig -+++ kexec/arch/ppc64/fs2dt.c -@@ -270,6 +270,8 @@ static void putprops(char *fn, struct di - strcat(local_cmdline, " "); - cmd_len = strlen(local_cmdline); - cmd_len = cmd_len + 1; -+ if ((cmd_len >= 8) && ((unsigned long)dt & 0x4)) -+ dt++; - memcpy(dt, local_cmdline,cmd_len); - len = cmd_len; - *dt_len = cmd_len; diff --git a/kexec-tools-1.101-ps3-rmo_top-max.patch b/kexec-tools-1.101-ps3-rmo_top-max.patch deleted file mode 100644 index a967f15..0000000 --- a/kexec-tools-1.101-ps3-rmo_top-max.patch +++ /dev/null @@ -1,51 +0,0 @@ ---- - kexec/arch/ppc64/kexec-ppc64.c | 20 +++++++++++++++++++- - 1 file changed, 19 insertions(+), 1 deletion(-) - -Index: kexec/arch/ppc64/kexec-ppc64.c -=================================================================== ---- kexec/arch/ppc64/kexec-ppc64.c.orig -+++ kexec/arch/ppc64/kexec-ppc64.c -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - #include - #include "../../kexec.h" - #include "../../kexec-syscall.h" -@@ -260,6 +261,20 @@ static int get_devtree_details(unsigned - FILE *file; - struct dirent *dentry; - int n, i = 0; -+ int PS3 = 0; -+ -+ snprintf(fname, sizeof(fname), "%s/model", device_tree); -+ i = open(fname, O_RDONLY); -+ if (i >= 0) { -+ n = read(i, fname, sizeof(fname) - 1); -+ if (n > 0) { -+ fname[n] = '\0'; -+ fprintf(stderr, "model '%s'\n", fname); -+ PS3 = strcmp("PLAYSTATION 3", fname) == 0; -+ } -+ close(i); -+ } -+ i = 0; - - if ((dir = opendir(device_tree)) == NULL) { - perror(device_tree); -@@ -454,9 +469,12 @@ static int get_devtree_details(unsigned - } - rmo_base = ((unsigned long long *)buf)[0]; - rmo_top = rmo_base + ((unsigned long long *)buf)[1]; -+ fprintf(stderr, "rmo_top 0x%08x\n", rmo_top); -+ if (rmo_top > 0x07C00000UL && PS3) -+ rmo_top = 0x07C00000UL; - if (rmo_top > 0x30000000UL) - rmo_top = 0x30000000UL; -- -+ fprintf(stderr, "rmo_top 0x%08x\n", rmo_top); - fclose(file); - closedir(cdir); - } /* memory */ diff --git a/kexec-tools-testing-20070319-rc.patch b/kexec-tools-testing-20070319-rc.patch deleted file mode 100644 index a1c9a24..0000000 --- a/kexec-tools-testing-20070319-rc.patch +++ /dev/null @@ -1,165 +0,0 @@ ---- - kexec/arch/ppc64/fs2dt.c | 7 +-- - kexec/arch/ppc64/kexec-elf-ppc64.c | 10 +++++ - kexec/arch/ppc64/kexec-elf-rel-ppc64.c | 2 - - purgatory/arch/ppc64/v2wrap.S | 61 +++++++++------------------------ - 4 files changed, 30 insertions(+), 50 deletions(-) - -Index: kexec/arch/ppc64/fs2dt.c -=================================================================== ---- kexec/arch/ppc64/fs2dt.c.orig -+++ kexec/arch/ppc64/fs2dt.c -@@ -43,7 +43,6 @@ static char propnames[NAMESPACE] = { 0 } - static unsigned dtstruct[TREEWORDS], *dt; - static unsigned long long mem_rsrv[2*MEMRESERVE] = { 0, 0 }; - --static int initrd_found = 0; - static int crash_param = 0; - static char local_cmdline[COMMAND_LINE_SIZE] = { "" }; - static unsigned *dt_len; /* changed len of modified cmdline -@@ -343,10 +342,8 @@ static void putnode(void) - - putprops(dn, namelist, numlist); - -- /* Add initrd entries to the second kernel if first kernel does not -- * have and second kernel needs. -- */ -- if (initrd_base && !initrd_found && !strcmp(basename,"/chosen/")) { -+ /* Add initrd entries to the second kernel */ -+ if (initrd_base && !strcmp(basename,"/chosen/")) { - int len = 8; - unsigned long long initrd_end; - *dt++ = 3; -Index: kexec/arch/ppc64/kexec-elf-ppc64.c -=================================================================== ---- kexec/arch/ppc64/kexec-elf-ppc64.c.orig -+++ kexec/arch/ppc64/kexec-elf-ppc64.c -@@ -89,6 +89,7 @@ int elf_ppc64_load(int argc, char **argv - unsigned int my_panic_kernel; - unsigned long my_stack, my_backup_start; - unsigned long toc_addr; -+ unsigned int slave_code[256/sizeof (unsigned int)], master_entry; - - #define OPT_APPEND (OPT_ARCH_MAX+0) - #define OPT_RAMDISK (OPT_ARCH_MAX+1) -@@ -281,6 +282,15 @@ int elf_ppc64_load(int argc, char **argv - elf_rel_set_symbol(&info->rhdr, "dt_offset", &my_dt_offset, - sizeof(my_dt_offset)); - -+ /* get slave code from new kernel, put in purgatory */ -+ elf_rel_get_symbol(&info->rhdr, "purgatory_start", slave_code, -+ sizeof(slave_code)); -+ master_entry = slave_code[0]; -+ memcpy(slave_code, info->segment[0].buf, sizeof(slave_code)); -+ slave_code[0] = master_entry; -+ elf_rel_set_symbol(&info->rhdr, "purgatory_start", slave_code, -+ sizeof(slave_code)); -+ - if (info->kexec_flags & KEXEC_ON_CRASH) { - my_panic_kernel = 1; - /* Set panic flag */ -Index: kexec/arch/ppc64/kexec-elf-rel-ppc64.c -=================================================================== ---- kexec/arch/ppc64/kexec-elf-rel-ppc64.c.orig -+++ kexec/arch/ppc64/kexec-elf-rel-ppc64.c -@@ -97,7 +97,7 @@ void machine_apply_elf_rel(struct mem_eh - break; - - case R_PPC64_ADDR16_HA: -- *(uint16_t *)location = ((value>>16) & 0xffff); -+ *(uint16_t *)location = (((value+0x8000)>>16) & 0xffff); - break; - - case R_PPC64_ADDR16_HIGHEST: -Index: purgatory/arch/ppc64/v2wrap.S -=================================================================== ---- purgatory/arch/ppc64/v2wrap.S.orig -+++ purgatory/arch/ppc64/v2wrap.S -@@ -45,13 +45,22 @@ - oris rn,rn,name##@h; \ - ori rn,rn,name##@l - --# look a bit like a Linux kernel here ... -+ - .machine ppc64 - .globl purgatory_start - purgatory_start: b master -- tweq 0,0 -+ .org purgatory_start + 0x60 # ABI: slaves start at 60 with r3=phys -+slave: b $ -+ .org purgatory_start + 0x100 # ABI: end of copied region -+ .size purgatory_start, . - purgatory_start -+ -+# -+# The above 0x100 bytes at purgatory_start are replaced with the -+# code from the kernel (or next stage) by kexec/arch/ppc64/kexec-ppc64.c -+# -+ - master: -- or 1,1,1 # low priority to let other thread catchup -+ or 1,1,1 # low priority to let other threads catchup - isync - mr 17,3 # save cpu id to r17 - mr 15,4 # save physical address in reg15 -@@ -66,25 +75,7 @@ master: - bl .purgatory - nop - -- b 81f -- .org purgatory_start + 0x60 # ABI: slaves start at 60 with r3=phys --slave: -- # load slave spin code address and branch into that -- LOADADDR(6,slave_spin) -- ld 4,0(6) -- mtctr 4 -- bctr -- --spin: .long 1 --slave_spin_code: -- lis 5,spin@ha -- lwz 5,spin@l(5) -- cmpwi 0,5,0 -- bne slave_spin_code -- ba 0x60 -- --81: # master continues here -- or 3,3,3 # ok back to high, lets boot -+ or 3,3,3 # ok now to high priority, lets boot - lis 6,0x1 - mtctr 6 # delay a bit for slaves to catch up - 83: bdnz 83b # before we overwrite 0-100 again -@@ -99,30 +90,12 @@ slave_spin_code: - 80: - LOADADDR(6,kernel) - ld 4,0(6) # load the kernel address -- -- addi 5,4,-8 # prepare copy with update form instructions -- li 6,0x100/8 -- mtctr 6 -- li 6,-8 --85: ldu 7,8(5) -- stdu 7,8(6) -- bdnz 85b -- - li 5,0 # r5 will be 0 for kernel -- dcbst 0,5 # store dcache, flush icache -- dcbst 0,6 # 0 and 0xf8 covers us with 128 byte lines - mtctr 4 # prepare branch too -- sync -- icbi 0,5 -- icbi 0,6 -- sync -- isync -- lis 6,spin@ha -- li 0,0 -- stw 0,spin@l(6) - mr 3,16 # restore dt address - -- bctr # start kernel -- --slave_spin: .llong slave_spin_code -+ lwz 7,0(4) # get the first instruction that we stole -+ stw 7,0(0) # and put it in the slave loop at 0 -+ # skip cache flush, do we care? - -+ bctr # start kernel diff --git a/kexec-tools-testing-20070319-rc.tar.bz2 b/kexec-tools-testing-20070319-rc.tar.bz2 deleted file mode 100644 index 69d3080..0000000 --- a/kexec-tools-testing-20070319-rc.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ba1eeeda36d06864aa83b24083e82fa6c8fc350d2789af91dd7455b8c164ee0 -size 210304 diff --git a/kexec-tools-testing.tar.bz2 b/kexec-tools-testing.tar.bz2 new file mode 100644 index 0000000..e673894 --- /dev/null +++ b/kexec-tools-testing.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a794f416e2b732c1075bf5ae1c44eccdd338a2598aae658f3a41334027e64e7 +size 1004081 diff --git a/kexec-tools.changes b/kexec-tools.changes index ad87542..252dbd4 100644 --- a/kexec-tools.changes +++ b/kexec-tools.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Jul 16 15:33:22 CEST 2007 - olh@suse.de + +- update to kexec-tools-testing b84b87747a16f0afbef6f6802bb794a94f4961d9 + build 32bit powerpc kexec binary for 64bit kernels + ------------------------------------------------------------------- Fri Jul 6 18:24:12 CEST 2007 - tiwai@suse.de diff --git a/kexec-tools.check_reuse_initrd-close.patch b/kexec-tools.check_reuse_initrd-close.patch new file mode 100644 index 0000000..2ca82cc --- /dev/null +++ b/kexec-tools.check_reuse_initrd-close.patch @@ -0,0 +1,16 @@ +kexec/kexec.c:793: warning: passing argument 1 of 'close' makes integer from pointer without a cast +--- + kexec/kexec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kexec/kexec.c ++++ b/kexec/kexec.c +@@ -790,7 +790,7 @@ void check_reuse_initrd(void) + "retain the initrd for reuse.\n"); + if (line) + free(line); +- close(fp); ++ fclose(fp); + } + + /* Arch hook for reuse_initrd */ diff --git a/kexec-tools.ppc32-64bit-purgatory.patch b/kexec-tools.ppc32-64bit-purgatory.patch new file mode 100644 index 0000000..2456694 --- /dev/null +++ b/kexec-tools.ppc32-64bit-purgatory.patch @@ -0,0 +1,31 @@ +--- + kexec/arch/ppc64/crashdump-ppc64.h | 4 ++-- + purgatory/Makefile | 3 +++ + 2 files changed, 5 insertions(+), 2 deletions(-) + +--- a/kexec/arch/ppc64/crashdump-ppc64.h ++++ b/kexec/arch/ppc64/crashdump-ppc64.h +@@ -6,9 +6,9 @@ int load_crashdump_segments(struct kexec + unsigned long max_addr, unsigned long min_base); + void add_usable_mem_rgns(unsigned long long base, unsigned long long size); + +-#define PAGE_OFFSET 0xC000000000000000 ++#define PAGE_OFFSET 0xC000000000000000ULL + #define KERNELBASE PAGE_OFFSET +-#define VMALLOCBASE 0xD000000000000000 ++#define VMALLOCBASE 0xD000000000000000ULL + + #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) + #define MAXMEM (-KERNELBASE-VMALLOCBASE) +--- a/purgatory/Makefile ++++ b/purgatory/Makefile +@@ -7,6 +7,9 @@ + # should keep us from accidentially include unsafe library functions + # or headers. + ++ifeq ($(ARCH),ppc) ++EXTRA_LDFLAGS = -melf64ppc ++endif + ifeq ($(ARCH),ppc64) + EXTRA_LDFLAGS = -melf64ppc + endif diff --git a/kexec-tools.ppc64-32bit-build.patch b/kexec-tools.ppc64-32bit-build.patch new file mode 100644 index 0000000..1c2cc3e --- /dev/null +++ b/kexec-tools.ppc64-32bit-build.patch @@ -0,0 +1,246 @@ +--- + kexec/arch/ppc64/crashdump-ppc64.h | 4 ++-- + kexec/arch/ppc64/kexec-elf-ppc64.c | 26 +++++++++++++------------- + kexec/arch/ppc64/kexec-elf-rel-ppc64.c | 4 ++-- + kexec/arch/ppc64/kexec-ppc64.c | 20 ++++++++++---------- + kexec/arch/ppc64/kexec-ppc64.h | 2 +- + kexec/kexec-sha256.h | 4 ++-- + purgatory/arch/ppc64/Makefile | 2 ++ + purgatory/purgatory.c | 2 ++ + 8 files changed, 34 insertions(+), 30 deletions(-) + +--- a/kexec/arch/ppc64/crashdump-ppc64.h ++++ b/kexec/arch/ppc64/crashdump-ppc64.h +@@ -23,8 +23,8 @@ void add_usable_mem_rgns(unsigned long l + #define _ALIGN_UP(addr,size) (((addr)+((size)-1))&(~((size)-1))) + #define _ALIGN_DOWN(addr,size) ((addr)&(~((size)-1))) + +-extern unsigned long long crash_base; +-extern unsigned long long crash_size; ++extern uint64_t crash_base; ++extern uint64_t crash_size; + extern unsigned int rtas_base; + extern unsigned int rtas_size; + +--- a/kexec/arch/ppc64/kexec-elf-ppc64.c ++++ b/kexec/arch/ppc64/kexec-elf-ppc64.c +@@ -42,7 +42,7 @@ + #define BOOTLOADER "kexec" + #define BOOTLOADER_VERSION VERSION + +-unsigned long initrd_base, initrd_size; ++uint64_t initrd_base, initrd_size; + unsigned char reuse_initrd = 0; + const char *ramdisk; + +@@ -83,19 +83,19 @@ int elf_ppc64_load(int argc, char **argv + char *cmdline, *modified_cmdline; + const char *devicetreeblob; + int cmdline_len, modified_cmdline_len; +- unsigned long long max_addr, hole_addr; ++ uint64_t max_addr, hole_addr; + unsigned char *seg_buf = NULL; + off_t seg_size = 0; + struct mem_phdr *phdr; + size_t size; +- unsigned long long *rsvmap_ptr; ++ uint64_t *rsvmap_ptr; + struct bootblock *bb_ptr; + unsigned int nr_segments, i; + int result, opt; +- unsigned long my_kernel, my_dt_offset; ++ uint64_t my_kernel, my_dt_offset; + unsigned int my_panic_kernel; +- unsigned long my_stack, my_backup_start; +- unsigned long toc_addr; ++ uint64_t my_stack, my_backup_start; ++ uint64_t toc_addr; + unsigned int slave_code[256/sizeof (unsigned int)], master_entry; + + #define OPT_APPEND (OPT_ARCH_MAX+0) +@@ -237,10 +237,10 @@ int elf_ppc64_load(int argc, char **argv + } + seg_buf = (unsigned char *)slurp_file(ramdisk, &seg_size); + add_buffer(info, seg_buf, seg_size, seg_size, 0, 0, max_addr, 1); +- hole_addr = (unsigned long long) ++ hole_addr = (uint64_t) + info->segment[info->nr_segments-1].mem; + initrd_base = hole_addr; +- initrd_size = (unsigned long long) ++ initrd_size = (uint64_t) + info->segment[info->nr_segments-1].memsz; + } /* ramdisk */ + +@@ -270,25 +270,25 @@ int elf_ppc64_load(int argc, char **argv + */ + bb_ptr = (struct bootblock *)( + (unsigned char *)info->segment[(info->nr_segments)-1].buf); +- rsvmap_ptr = (unsigned long long *)( ++ rsvmap_ptr = (uint64_t *)( + (unsigned char *)info->segment[(info->nr_segments)-1].buf + + bb_ptr->off_mem_rsvmap); + while (*rsvmap_ptr || *(rsvmap_ptr+1)) + rsvmap_ptr += 2; + rsvmap_ptr -= 2; +- *rsvmap_ptr = (unsigned long long)( ++ *rsvmap_ptr = (uint64_t)( + info->segment[(info->nr_segments)-1].mem); + rsvmap_ptr++; +- *rsvmap_ptr = (unsigned long long)bb_ptr->totalsize; ++ *rsvmap_ptr = (uint64_t)bb_ptr->totalsize; + + nr_segments = info->nr_segments; + + /* Set kernel */ +- my_kernel = (unsigned long )info->segment[0].mem; ++ my_kernel = (uint64_t)info->segment[0].mem; + elf_rel_set_symbol(&info->rhdr, "kernel", &my_kernel, sizeof(my_kernel)); + + /* Set dt_offset */ +- my_dt_offset = (unsigned long )info->segment[nr_segments-1].mem; ++ my_dt_offset = (uint64_t)info->segment[nr_segments-1].mem; + elf_rel_set_symbol(&info->rhdr, "dt_offset", &my_dt_offset, + sizeof(my_dt_offset)); + +--- a/kexec/arch/ppc64/kexec-elf-rel-ppc64.c ++++ b/kexec/arch/ppc64/kexec-elf-rel-ppc64.c +@@ -101,10 +101,10 @@ void machine_apply_elf_rel(struct mem_eh + break; + + case R_PPC64_ADDR16_HIGHEST: +- *(uint16_t *)location = ((value>>48) & 0xffff); ++ *(uint16_t *)location = (((uint64_t)value>>48) & 0xffff); + break; + case R_PPC64_ADDR16_HIGHER: +- *(uint16_t *)location = ((value>>32) & 0xffff); ++ *(uint16_t *)location = (((uint64_t)value>>32) & 0xffff); + break; + + default: +--- a/kexec/arch/ppc64/kexec-ppc64.c ++++ b/kexec/arch/ppc64/kexec-ppc64.c +@@ -41,7 +41,7 @@ static struct memory_range *base_memory_ + static unsigned long long rmo_top; + unsigned long long memory_max = 0; + static int nr_memory_ranges, nr_exclude_ranges; +-unsigned long long crash_base, crash_size; ++uint64_t crash_base, crash_size; + unsigned int rtas_base, rtas_size; + int max_memory_ranges; + +@@ -203,10 +203,10 @@ static int get_base_ranges(void) + break; + } + base_memory_range[local_memory_ranges].start = +- ((unsigned long long *)buf)[0]; ++ ((uint64_t *)buf)[0]; + base_memory_range[local_memory_ranges].end = + base_memory_range[local_memory_ranges].start + +- ((unsigned long long *)buf)[1]; ++ ((uint64_t *)buf)[1]; + base_memory_range[local_memory_ranges].type = RANGE_RAM; + local_memory_ranges++; + dbgprintf("%016llx-%016llx : %x\n", +@@ -231,7 +231,7 @@ static int get_base_ranges(void) + static int sort_ranges(void) + { + int i, j; +- unsigned long long tstart, tend; ++ uint64_t tstart, tend; + for (i = 0; i < nr_exclude_ranges - 1; i++) { + for (j = 0; j < nr_exclude_ranges - i - 1; j++) { + if (exclude_range[j].start > exclude_range[j+1].start) { +@@ -292,7 +292,7 @@ static int get_devtree_details(unsigned + perror(fname); + goto error_opencdir; + } +- if (fread(&kernel_end, sizeof(unsigned long), 1, file) != 1) { ++ if (fread(&kernel_end, sizeof(uint64_t), 1, file) != 1) { + perror(fname); + goto error_openfile; + } +@@ -312,7 +312,7 @@ static int get_devtree_details(unsigned + perror(fname); + goto error_opencdir; + } +- if (fread(&crash_base, sizeof(unsigned long), 1, ++ if (fread(&crash_base, sizeof(uint64_t), 1, + file) != 1) { + perror(fname); + goto error_openfile; +@@ -327,7 +327,7 @@ static int get_devtree_details(unsigned + perror(fname); + goto error_opencdir; + } +- if (fread(&crash_size, sizeof(unsigned long), 1, ++ if (fread(&crash_size, sizeof(uint64_t), 1, + file) != 1) { + perror(fname); + goto error_openfile; +@@ -356,7 +356,7 @@ static int get_devtree_details(unsigned + perror(fname); + goto error_opendir; + } +- if (fread(&htab_base, sizeof(unsigned long), 1, file) != 1) { ++ if (fread(&htab_base, sizeof(uint64_t), 1, file) != 1) { + perror(fname); + goto error_openfile; + } +@@ -368,7 +368,7 @@ static int get_devtree_details(unsigned + perror(fname); + goto error_opencdir; + } +- if (fread(&htab_size, sizeof(unsigned long), 1, file) != 1) { ++ if (fread(&htab_size, sizeof(uint64_t), 1, file) != 1) { + perror(fname); + goto error_openfile; + } +@@ -487,7 +487,7 @@ static int get_devtree_details(unsigned + perror(fname); + goto error_opendir; + } +- if (fread(&tce_base, sizeof(unsigned long), 1, file) != 1) { ++ if (fread(&tce_base, sizeof(uint64_t), 1, file) != 1) { + perror(fname); + goto error_openfile; + return -1; +--- a/kexec/arch/ppc64/kexec-ppc64.h ++++ b/kexec/arch/ppc64/kexec-ppc64.h +@@ -14,7 +14,7 @@ int elf_ppc64_load(int argc, char **argv + void elf_ppc64_usage(void); + void reserve(unsigned long long where, unsigned long long length); + +-extern unsigned long initrd_base, initrd_size; ++extern uint64_t initrd_base, initrd_size; + extern int max_memory_ranges; + extern unsigned char reuse_initrd; + +--- a/kexec/kexec-sha256.h ++++ b/kexec/kexec-sha256.h +@@ -2,8 +2,8 @@ + #define KEXEC_SHA256_H + + struct sha256_region { +- const void *start; +- unsigned long len; ++ uint64_t start; ++ uint64_t len; + }; + + #define SHA256_REGIONS 16 +--- a/purgatory/arch/ppc64/Makefile ++++ b/purgatory/arch/ppc64/Makefile +@@ -6,3 +6,5 @@ PURGATORY_S_SRCS+= purgatory/arch/ppc64/ + PURGATORY_C_SRCS += purgatory/arch/ppc64/purgatory-ppc64.c + PURGATORY_C_SRCS += purgatory/arch/ppc64/console-ppc64.c + PURGATORY_C_SRCS += purgatory/arch/ppc64/crashdump_backup.c ++ ++PCFLAGS += -m64 -mcall-aixdesc +--- a/purgatory/purgatory.c ++++ b/purgatory/purgatory.c +@@ -46,3 +46,5 @@ void purgatory(void) + verify_sha256_digest(); + post_verification_setup_arch(); + } ++ ++#include "../util_lib/sha256.c" diff --git a/kexec-tools.spec b/kexec-tools.spec index 6c200c5..50778f0 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -11,14 +11,18 @@ # norootforbuild Name: kexec-tools -%define package_version testing-20070319-rc +# kdump does not work yet, kexec-tools.ppc64.rpm still required for kdump +%ifarch ppc +BuildRequires: gcc42-64bit glibc-devel-64bit +%endif +%define package_version testing License: GPL v2 or later Group: System/Kernel Requires: %insserv_prereq %fillup_prereq Autoreqprov: on Summary: Tools for fast kernel loading Version: 1.101 -Release: 115 +Release: 118 Source: %{name}-%{package_version}.tar.bz2 Source1: kdump Source2: sysconfig.kdump @@ -29,11 +33,10 @@ URL: http://www.vergenet.net/linux/kexec/kexec-tools/ BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: zlib-devel Requires: kdump-helpers -Patch: kexec-tools-testing-20070319-rc.patch Patch1: kexec-longer-cmdline.diff -Patch20: kexec-tools-1.101-align-dtstruct.patch -Patch21: kexec-tools-1.101-bootargs-align.patch -Patch22: kexec-tools-1.101-ps3-rmo_top-max.patch +Patch2: kexec-tools.check_reuse_initrd-close.patch +Patch20: kexec-tools.ppc64-32bit-build.patch +Patch21: kexec-tools.ppc32-64bit-purgatory.patch %description Kexec is a user space utility for loading another kernel and asking the @@ -54,18 +57,23 @@ Authors: %prep %setup -q -n kexec-tools-%{package_version} -%patch %patch1 -p1 +%patch2 -p1 # -%patch20 -%patch21 -%patch22 -%{?suse_update_config -f} -cp %{SOURCE5} . +%patch20 -p1 +%patch21 -p1 %build +%{?suse_update_config -f} +cp %{SOURCE5} . autoreconf -fi -./configure --prefix=/ --sbindir=/sbin --libdir=/%_lib +./configure \ + --prefix=/ \ +%ifarch ppc + ARCH=ppc64 \ +%endif + --sbindir=/sbin \ + --libdir=/%_lib %ifarch ia64 RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-fstack-protector//') %endif @@ -132,6 +140,9 @@ true # ignore errors /var/adm/fillup-templates/sysconfig.kdump %changelog +* Mon Jul 16 2007 - olh@suse.de +- update to kexec-tools-testing b84b87747a16f0afbef6f6802bb794a94f4961d9 + build 32bit powerpc kexec binary for 64bit kernels * Fri Jul 06 2007 - tiwai@suse.de - implement a simple status command for kdump init script * Tue Jul 03 2007 - bwalle@suse.de