kexec: Build 32 bit kexec for ppc64
Subsystems (2)
RFC 1/1 kexec: Build 32 bit kexec for ppc64
Enable building a 32 bit binary for ppc64 platforms.
64 bit: OK
32 bit: purgatory build fails
From: David Woodhouse <[email protected]>
--- 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 | 18 +++++++++--------- kexec/arch/ppc64/kexec-ppc64.h | 2 +- kexec/kexec-sha256.h | 4 ++-- purgatory/arch/ppc64/Makefile | 2 ++ purgatory/purgatory.c | 2 ++ 8 files changed, 33 insertions(+), 29 deletions(-)
kexec/arch/ppc64/crashdump-ppc64.h +2 -2
@@ -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;
kexec/arch/ppc64/kexec-elf-ppc64.c +13 -13
@@ -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 **argvchar *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));
kexec/arch/ppc64/kexec-elf-rel-ppc64.c +2 -2
@@ -101,10 +101,10 @@ void machine_apply_elf_rel(struct mem_ehbreak ;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 :
kexec/arch/ppc64/kexec-ppc64.c +9 -9
@@ -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(unsignedperror (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(unsignedperror (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(unsignedperror (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(unsignedperror (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(unsignedperror (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(unsignedperror (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 ;
kexec/arch/ppc64/kexec-ppc64.h +1 -1
@@ -14,7 +14,7 @@ int elf_ppc64_load(int argc, char **argvvoid 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;
kexec/kexec-sha256.h +2 -2
@@ -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
purgatory/arch/ppc64/Makefile +2 -0
@@ -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
purgatory/purgatory.c +2 -0
@@ -46,3 +46,5 @@ void purgatory(void)verify_sha256_digest ();post_verification_setup_arch (); } + +#include "../util_lib/sha256.c"
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 2 lines · Geoff Levand
64 bit: OK
32 bit: purgatory build fails
Hm, what'd you do to it? Fedora is shipping this (ugly as it is) and it's working. Well, it would if the PS3 kernel would :)
Signature · 7 lines
dwmw2 _______________________________________________ kexec mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kexec
Quoted 6 lines · David Woodhouse
Quoted 2 lines · Geoff Levand
64 bit: OK
32 bit: purgatory build failsHm, what'd you do to it? Fedora is shipping this (ugly as it is) and it's working. Well, it would if the PS3 kernel would :)
You original is against an old version of kexec-tools, and I guess you don't build it cross with the Cell-SDK toolchain. Those are the things that need fixing.
-Geoff
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec