diff --git a/src/stub/powerpc-linux.elf-entry.h b/src/stub/powerpc-linux.elf-entry.h index e463a109..6e441f44 100644 --- a/src/stub/powerpc-linux.elf-entry.h +++ b/src/stub/powerpc-linux.elf-entry.h @@ -32,8 +32,8 @@ #define STUB_POWERPC_LINUX_ELF_ENTRY_SIZE 9144 -#define STUB_POWERPC_LINUX_ELF_ENTRY_ADLER32 0xbffd5d8f -#define STUB_POWERPC_LINUX_ELF_ENTRY_CRC32 0x77078a44 +#define STUB_POWERPC_LINUX_ELF_ENTRY_ADLER32 0x3faf5db0 +#define STUB_POWERPC_LINUX_ELF_ENTRY_CRC32 0x825ccfba unsigned char stub_powerpc_linux_elf_entry[9144] = { /* 0x0000 */ 127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -427,9 +427,9 @@ unsigned char stub_powerpc_linux_elf_entry[9144] = { /* 0x1840 */ 56, 96, 0, 0,124, 25,176, 80,124,149, 2, 20,124,156, 35,120, /* 0x1850 */ 72, 0, 0,153,124,125, 27,120,128, 22, 0, 8,124,149,224, 80, /* 0x1860 */ 127,103,219,120, 56,192, 0, 18,124,132, 2, 20, 72, 0, 0,125, -/* 0x1870 */ 126,153, 24, 80,130,118, 0, 0, 56,118, 0, 16,126,214,162, 20, -/* 0x1880 */ 126,246,170, 20,126,216,240, 56,126,248,184, 80,127,233, 3,166, -/* 0x1890 */ 127,255,162, 20,136,246, 0, 12,146,161, 0,140, 56,193, 0,140, +/* 0x1870 */ 126,153, 24, 80,127,233, 3,166,127,255,162, 20,130,118, 0, 0, +/* 0x1880 */ 56,118, 0, 16,126,214,162, 20,126,246,170, 20,127,248,240, 56, +/* 0x1890 */ 126,248,184, 80,136,246, 0, 12,146,161, 0,140, 56,193, 0,140, /* 0x18a0 */ 126,197,179,120,128,150, 0, 8, 78,128, 4, 33,128, 22, 0, 0, /* 0x18b0 */ 87,195,186,126, 80, 96, 4, 62,144, 22, 0, 0, 56,160, 0, 5, /* 0x18c0 */ 126,228,187,120,127, 3,195,120, 56, 0, 0,125, 68, 0, 0, 2, diff --git a/src/stub/src/arch/powerpc/32/ppc_regs.h b/src/stub/src/arch/powerpc/32/ppc_regs.h index d287dec0..a1fec0e3 100644 --- a/src/stub/src/arch/powerpc/32/ppc_regs.h +++ b/src/stub/src/arch/powerpc/32/ppc_regs.h @@ -34,6 +34,8 @@ #define r30 30 #define r31 31 +// http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf +// /* Stack pointer */ #define sp 1 SZ_FRAME= 6*4 // (sp,cr,lr, xx,yy,zz) save area per calling convention diff --git a/src/stub/src/powerpc-linux.elf-entry.S b/src/stub/src/powerpc-linux.elf-entry.S index 878c47f5..022dadca 100644 --- a/src/stub/src/powerpc-linux.elf-entry.S +++ b/src/stub/src/powerpc-linux.elf-entry.S @@ -212,17 +212,17 @@ unfold: // IN: r_exp, r_auxv, r_PMASK add a1,a1,r0 // + sz_cpr of fold; a1 <= .st_size call mmapRW0 sub r_relo,a0,r_elf // relocation amount + mtctr r_exp; add r_exp,r_exp,r_relo // use old f_exp; r_exp= new &f_exp // Decompress from old folded code, overwriting new copy of folded code. lwz r_obinf, LOBINFO - LrFLD(r_FLD) // O_BINFO la src,sz_b_info + LBINFO - LrFLD(r_FLD) // old folded code add r_FLD,r_FLD,r_relo // dst for unfolding; use copied data add r_LENM,r_FLD,r_szuf // + sz_unc = last of unfolded - and r_ADRM,r_FLD,r_PMASK // base for PROT_EXEC + and r_ADRM,r_exp,r_PMASK // base for PROT_EXEC sub r_LENM,r_LENM,r_ADRM // length for PROT_EXEC // The new f_exp has PROT_WRITE, so use the old f_exp to decompress. - mtctr r_exp; add r_exp,r_exp,r_relo // use old f_exp; r_exp= new &f_exp lbz meth,b_method + LBINFO - LrFLD(r_FLD) stw r_szuf,SZ_FRAME+31*NBPW(sp) // lzma uses for EOF la ldst,SZ_FRAME+31*NBPW(sp) // &slot on stack