mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
begin conversion to new linker
This commit is contained in:
parent
1c784eea3d
commit
9cb97af10f
|
@ -26,18 +26,58 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "arch/powerpc/32/regs.h"
|
#include "arch/powerpc/32/ppc_regs.h"
|
||||||
|
#define section .section
|
||||||
|
|
||||||
/*__MACOS000__*/
|
section MACOS000
|
||||||
_start: .globl _start
|
_start: .globl _start
|
||||||
call main # must be exactly 1 instruction; link_register= &decompress
|
call main # must be exactly 1 instruction; link_register= &decompress
|
||||||
|
|
||||||
|
section NRV_HEAD
|
||||||
|
SZ_DLINE=128 # size of data cache line in Apple G5
|
||||||
|
|
||||||
|
/* PowerPC has no 'cmplis': compare logical [unsigned] immediate shifted [by 16] */
|
||||||
|
#define hibit r0 /* holds 0x80000000 during decompress */
|
||||||
|
|
||||||
|
#define src a0
|
||||||
|
#define lsrc a1
|
||||||
|
#define dst a2
|
||||||
|
#define ldst a3 /* Out: actually a reference: &len_dst */
|
||||||
|
#define meth a4
|
||||||
|
|
||||||
|
#define off a4
|
||||||
|
#define len a5
|
||||||
|
#define bits a6
|
||||||
|
#define disp a7
|
||||||
|
|
||||||
|
section NRV2E
|
||||||
#include "arch/powerpc/32/nrv2e_d.S"
|
#include "arch/powerpc/32/nrv2e_d.S"
|
||||||
|
|
||||||
/* Temporary until we get the buildLoader stuff working ... */
|
section NRV2D
|
||||||
.ascii "\n$Id: UPX (C) 1996-2006 the UPX Team. "
|
#include "arch/powerpc/32/nrv2d_d.S"
|
||||||
.asciz "All Rights Reserved. http://upx.sf.net $\n"
|
|
||||||
.p2align 2 # (1<<2)
|
|
||||||
|
|
||||||
|
section NRV2B
|
||||||
|
#include "arch/powerpc/32/nrv2b_d.S"
|
||||||
|
|
||||||
|
#include "arch/powerpc/32/lzma_d.S"
|
||||||
|
|
||||||
|
section NRV_TAIL
|
||||||
|
eof_nrv:
|
||||||
|
#define tmp r0 /* hibit is dead */
|
||||||
|
lwz tmp,0(ldst) // original dst
|
||||||
|
mtlr t3 // return address
|
||||||
|
addi dst,dst,1 // uncorrect for 'stbu'
|
||||||
|
addi src,src,1 // uncorrect for 'lbzu'
|
||||||
|
subf dst,tmp,dst // dst -= tmp; // dst length
|
||||||
|
#undef tmp
|
||||||
|
subf a0,lsrc,src // src -= eof; // return 0: good; else: bad
|
||||||
|
stw dst,0(ldst)
|
||||||
|
ret
|
||||||
|
|
||||||
|
section ELFMAINY
|
||||||
|
// IDENTSTR goes here
|
||||||
|
|
||||||
|
section ELFMAINZ
|
||||||
sz_b_info= 12
|
sz_b_info= 12
|
||||||
sz_unc= 0
|
sz_unc= 0
|
||||||
sz_cpr= 4
|
sz_cpr= 4
|
||||||
|
@ -67,9 +107,6 @@ L100: GAP= 128 # > farthest_prefetch; must match ../p_mach.cpp
|
||||||
b GAP+L100 # 'isync' has trouble on Macintosh G4?
|
b GAP+L100 # 'isync' has trouble on Macintosh G4?
|
||||||
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
|
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
|
||||||
|
|
||||||
eof:
|
|
||||||
/*__XTHEENDX__*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
vi:ts=8:et:nowrap
|
vi:ts=8:et:nowrap
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user