diff --git a/src/stub/src/powerpc-linux.elf-entry.S b/src/stub/src/powerpc-linux.elf-entry.S index 42cd7f99..9592ddf2 100644 --- a/src/stub/src/powerpc-linux.elf-entry.S +++ b/src/stub/src/powerpc-linux.elf-entry.S @@ -210,7 +210,7 @@ SYS_mmap= __NR_mmap mr a0,r_fd SYS_close= 6 - li a0,SYS_close; sc + li r0,SYS_close; sc // Use the unfolded code addi r0,r_ADRU,2*NBPW // skip page_mask, other word @@ -232,14 +232,6 @@ SYS_close= 6 // addi sp,sp,96 # de-allocate local frame // blr # goto return address -mmapRW0: - li a5,0 // offset -mmapRW: - li a2,PROT_READ|PROT_WRITE -mmap: - li r0,__NR_mmap; sc; bns+ 0f; teq r0,r0; 0: - ret - zfind: lwz r0,0(a0); addi a0,a0,NBPW cmpi cr7,r0,0; bne+ cr7,zfind diff --git a/src/stub/src/powerpc-linux.elf-fold.S b/src/stub/src/powerpc-linux.elf-fold.S index 6142d105..aaa9eb3e 100644 --- a/src/stub/src/powerpc-linux.elf-fold.S +++ b/src/stub/src/powerpc-linux.elf-fold.S @@ -61,7 +61,7 @@ SZ_FRAME= SZ_LINKA // In: r_exp= 31 // f_exp == &decompress -r_PMASK= 30 // PAGE_MASK + r_buf= 30 r_ADRU= 29 // &base to unmap r_LENU= 28 // length to unmap r_fd= 27 // open fd of /proc/self/exe @@ -71,11 +71,11 @@ r_ADRX= 24 // compressed input r_LENX= 23 // total size r_FLD= 22 // Local: -r_90b= 22 -av_hi= 21 -av_len= 20 -cblk= 19 -r_buf= 18 +cblk= 21 + r_90b= r_FLD +r_PMASK= 20 // (in) PAGE_MASK +av_hi= 19 +av_len= 18 page_mask: .int -0x1000 // default page mask (4KiB) @@ -102,7 +102,6 @@ mprotect: .globl mprotect b sysgo fold_begin: - teq r0,r0 // DEBUG mtctr r0 // # words before argc FIXME: fragile lwz r0,0(r_FLD) // O_BINFO | is_ptinterp | unmap_all_pages slwi r0,r0,3*4 @@ -200,7 +199,6 @@ no_pse_env: mr a2,r_elfa // elfaddr mr a3,r_auxv // &Elf32_auxv_t la a4,SZ_FRAME(sp) // &Elf32_Ehdr temporary space - teq r0,r0 //DEBUG call upx_main // Out: a0= entry // entry= upx_main(b_info *a0, total_size a1, Elf32_Ehdr *a2, ELf32_auxv_t *a3, // tmp_ehdr[]) @@ -275,6 +273,26 @@ SYS_ftruncate= 93 SYS_mprotect= 125 SYS_memfd_create= 360 +exit: .globl exit + li r0,SYS_exit; 5: b 5f +brk: .globl brk + li r0,SYS_brk; 5: b 5f +readlink: .globl readlink + li r0,SYS_readlink; 5: b 5f +memfd_create: .globl memfd_create + li r0,SYS_memfd_create; b 5f +ftruncate: .globl ftruncate + li r0,SYS_ftruncate;5: b 5f +close: .globl close + li r0,SYS_close; 5: b 5f +write: .globl write + li r0,SYS_write; 5: b 5f +read: .globl read + li r0,SYS_read; 5: b 5f +open: .globl open + li r0,SYS_open; 5: b 5f +munmap: .globl munmap + li r0,SYS_munmap; 5: b sysgo mmap: .globl mmap li r0,SYS_mmap sysgo: @@ -284,27 +302,6 @@ sysgo: no_fail: ret -memfd_create: .globl memfd_create - li r0,SYS_memfd_create; b 5f -ftruncate: .globl ftruncate - li r0,SYS_ftruncate;5: b 5f -exit: .globl exit - li r0,SYS_exit; b 5f -brk: .globl brk - li r0,SYS_brk; 5: b 5f -readlink: .globl readlink - li r0,SYS_readlink; 5: b 5f -write: .globl write - li r0,SYS_write; 5: b 5f -read: .globl read - li r0,SYS_read; 5: b 5f -open: .globl open - li r0,SYS_open; 5: b 5f -close: .globl close - li r0,SYS_close; 5: b 5f -munmap: .globl munmap - li r0,SYS_munmap; 5: b sysgo - memcpy: .globl memcpy // (dst, src, n) cmpwi a2,0; beq- 9f mtctr a2