~ubuntu-branches/debian/sid/upx-ucl/sid

« back to all changes in this revision

Viewing changes to src/stub/src/arch/arm/v5a/macros.S

  • Committer: Bazaar Package Importer
  • Author(s): Robert Luberda
  • Date: 2009-10-16 12:56:47 UTC
  • mfrom: (1.2.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20091016125647-vity1npel2qsmr9c
Tags: 3.04-1
* New upstream release:
  + FTBFS with gcc 4.4 fixed by upstream (closes: #548566).
* p_mach.cpp: Fix from upstream vcs: mach/fat needs seek() 
  after set_extent().

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
;
4
4
;  This file is part of the UPX executable compressor.
5
5
;
6
 
;  Copyright (C) 1996-2008 Markus Franz Xaver Johannes Oberhumer
7
 
;  Copyright (C) 1996-2008 Laszlo Molnar
 
6
;  Copyright (C) 1996-2009 Markus Franz Xaver Johannes Oberhumer
 
7
;  Copyright (C) 1996-2009 Laszlo Molnar
8
8
;  All Rights Reserved.
9
9
;
10
10
;  UPX and the UCL library are free software; you can redistribute them
34
34
                .section \name
35
35
.endm
36
36
 
 
37
#if defined(ARMEL_DARWIN)  /*{*/
 
38
__NR_SYSCALL_BASE = 0
 
39
.macro          do_sys N
 
40
                mov ip,#\N
 
41
                swi 0x80  // sets Carry iff error
 
42
                orrcs r0,r0,#(1<<31)  // force negative on error; FIXME: needed?
 
43
                ret
 
44
.endm
 
45
 
 
46
.macro          do_dcache_flush  // In: r0=addr; r1=len
 
47
                mov r3,#1  // _sys_dcache_flush
 
48
                mov ip,#(1<<31)  // syscall number?
 
49
                swi 0x80
 
50
.endm
 
51
 
 
52
.macro          do_icache_invalidate  // In: r0=addr; r1=len
 
53
                mov r3,#0  // _sys_icache_invalidate
 
54
                mov ip,#(1<<31)  // syscall number?
 
55
                swi 0x80
 
56
.endm
 
57
#elif defined(ARMEL_EABI4)  /*}{*/
 
58
 
 
59
__NR_SYSCALL_BASE = 0
 
60
.macro          do_sys N
 
61
                mov r12,r7  // save r7 in ip
 
62
                mov r7,#\N  // syscall number
 
63
                swi 0
 
64
                mov r7,r12  // restore r7 from ip
 
65
.endm
 
66
.macro          do_sys2 N
 
67
                mov r12,r7  // save r7 in ip
 
68
                mov r7,   #(\N) & 0xff  // syscall number
 
69
                orr r7,r7,#(\N) &~0xff  // high bits
 
70
                swi 0
 
71
                mov r7,r12  // restore r7 from ip
 
72
.endm
 
73
 
 
74
#elif defined(ARM_OLDABI)  /*}{*/
 
75
 
 
76
__NR_SYSCALL_BASE = 0x900000
 
77
.macro          do_sys N
 
78
                swi \N
 
79
.endm
 
80
.macro          do_sys2 N
 
81
                swi \N
 
82
.endm
 
83
 
 
84
#else  /*}{*/
 
85
.macro          do_sys N
 
86
                error \N  // ARM_OLDABI, ARMEL_EABI4, ARMEL_DARWIN ?
 
87
.endm
 
88
.macro          do_sys2 N
 
89
                error \N  // ARM_OLDABI, ARMEL_EABI4, ARMEL_DARWIN ?
 
90
.endm
 
91
#endif  /*}*/
 
92
 
 
93
.macro          ret
 
94
                bx lr  /* armv5 for thumb interworking */
 
95
.endm
 
96
 
37
97
.macro          loadcon8 reg,val8
38
98
        .long (0xe3<<24)|(0xa0<<16)|((\reg<<4)<<8)+(\val8)  /* mov \reg,#\val8 */
39
99
.endm