mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
DEBUG for MIPS i386-linux.elf-main.c
This commit is contained in:
parent
0806e61df4
commit
ee37b42a91
|
@ -29,6 +29,9 @@
|
||||||
<jreiser@users.sourceforge.net>
|
<jreiser@users.sourceforge.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef DEBUG /*{*/
|
||||||
|
#define DEBUG 0
|
||||||
|
#endif /*}*/
|
||||||
|
|
||||||
#include "include/linux.h"
|
#include "include/linux.h"
|
||||||
void *mmap(void *, size_t, int, int, int, off_t);
|
void *mmap(void *, size_t, int, int, int, off_t);
|
||||||
|
@ -43,11 +46,7 @@ ssize_t write(int, void const *, size_t);
|
||||||
// it at an address different from it load address: there must be no
|
// it at an address different from it load address: there must be no
|
||||||
// static data, and no string constants.
|
// static data, and no string constants.
|
||||||
|
|
||||||
#ifndef DEBUG /*{*/
|
#if !DEBUG /*{*/
|
||||||
#define DEBUG 0
|
|
||||||
#endif /*}*/
|
|
||||||
|
|
||||||
#if !DEBUG || defined(__mips__) /*{*/
|
|
||||||
#define DPRINTF(a) /* empty: no debug drivel */
|
#define DPRINTF(a) /* empty: no debug drivel */
|
||||||
#define DEBUG_STRCON(name, value) /* empty */
|
#define DEBUG_STRCON(name, value) /* empty */
|
||||||
#else /*}{ DEBUG */
|
#else /*}{ DEBUG */
|
||||||
|
@ -62,30 +61,35 @@ ssize_t write(int, void const *, size_t);
|
||||||
|
|
||||||
#if defined(__i386__) /*{*/
|
#if defined(__i386__) /*{*/
|
||||||
#define PIC_STRING(value, var) \
|
#define PIC_STRING(value, var) \
|
||||||
|
char const *var; \
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"call 0f; .asciz \"" value "\"; \
|
"call 0f; .asciz \"" value "\"; \
|
||||||
0: pop %0;" : "=a"(var) : \
|
0: pop %0;" : "=a"(var) : \
|
||||||
)
|
); \
|
||||||
|
return var;
|
||||||
#elif defined(__arm__) /*}{*/
|
#elif defined(__arm__) /*}{*/
|
||||||
|
#define PIC_STRING(value, var) \
|
||||||
|
char const *var; \
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"mov r0,pc; ret; \
|
"mov r0,pc; ret; \
|
||||||
.asciz \"" value "\"; .balign 4" : "=a"(var) : \
|
.asciz \"" value "\"; .balign 4" : "=a"(var) : \
|
||||||
)
|
); \
|
||||||
|
return var;
|
||||||
#elif defined(__mips__) /*}{*/
|
#elif defined(__mips__) /*}{*/
|
||||||
|
#define PIC_STRING(value, var) \
|
||||||
|
register char const *rv asm("v0"); \
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"mov at,ra; bal 0f; move v0,ra; \
|
".set noreorder; bal 0f; move %0,$31; .set reorder; \
|
||||||
.asciz \"" value "\"; .balign 4; \
|
.asciz \"" value "\"; .balign 4; \
|
||||||
0: jr at; nop" : "=a"(var) : \
|
0: " \
|
||||||
)
|
: "+r"(rv) \
|
||||||
|
); \
|
||||||
|
return var;
|
||||||
#endif /*}*/
|
#endif /*}*/
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_STRCON(name, value) \
|
#define DEBUG_STRCON(name, value) \
|
||||||
static char const *name(void) \
|
static char const *name(void) { PIC_STRING(value, rv); }
|
||||||
{ \
|
|
||||||
char *rv; PIC_STRING(value, rv); \
|
|
||||||
return rv; \
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __arm__ /*{*/
|
#ifdef __arm__ /*{*/
|
||||||
|
@ -702,6 +706,10 @@ void *upx_main(
|
||||||
xi.buf = CONST_CAST(char *, bi); xi.size = sz_compressed;
|
xi.buf = CONST_CAST(char *, bi); xi.size = sz_compressed;
|
||||||
xj.buf = CONST_CAST(char *, bi); xj.size = sz_compressed;
|
xj.buf = CONST_CAST(char *, bi); xj.size = sz_compressed;
|
||||||
|
|
||||||
|
DPRINTF((STR_upx_main(),
|
||||||
|
av, sz_compressed, f_decompress, f_unf, &xo, xo.size, xo.buf,
|
||||||
|
&xi, xi.size, xi.buf, dynbase));
|
||||||
|
|
||||||
// ehdr = Uncompress Ehdr and Phdrs
|
// ehdr = Uncompress Ehdr and Phdrs
|
||||||
unpackExtent(&xj, &xo, f_decompress, 0); // never filtered?
|
unpackExtent(&xj, &xo, f_decompress, 0); // never filtered?
|
||||||
#else /*}{ !__mips__ */
|
#else /*}{ !__mips__ */
|
||||||
|
|
|
@ -511,7 +511,7 @@ static ssize_t open(char const *path, int kind, int mode)
|
||||||
return v0;
|
return v0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 /*{ UNUSED */
|
#if DEBUG /*{*/
|
||||||
static ssize_t write(int fd, void const *buf, size_t len)
|
static ssize_t write(int fd, void const *buf, size_t len)
|
||||||
{
|
{
|
||||||
#define __NR_write (4+ 4000)
|
#define __NR_write (4+ 4000)
|
||||||
|
@ -520,7 +520,7 @@ static ssize_t write(int fd, void const *buf, size_t len)
|
||||||
register size_t const a2 asm("a2") = len;
|
register size_t const a2 asm("a2") = len;
|
||||||
register size_t v0 asm("v0") = __NR_write;
|
register size_t v0 asm("v0") = __NR_write;
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"bal sysgo"
|
"b sysgo"
|
||||||
: "+r"(v0)
|
: "+r"(v0)
|
||||||
: "r"(a0), "r"(a1), "r"(a2)
|
: "r"(a0), "r"(a1), "r"(a2)
|
||||||
: "a3"
|
: "a3"
|
||||||
|
|
|
@ -62,6 +62,7 @@ __NR_munmap = 91+ __NR_Linux
|
||||||
__NR_open = 5+ __NR_Linux
|
__NR_open = 5+ __NR_Linux
|
||||||
__NR_read = 3+ __NR_Linux
|
__NR_read = 3+ __NR_Linux
|
||||||
__NR_readlink = 85+ __NR_Linux
|
__NR_readlink = 85+ __NR_Linux
|
||||||
|
__NR_write = 4+ __NR_Linux
|
||||||
|
|
||||||
PATHSIZE=4096
|
PATHSIZE=4096
|
||||||
OVERHEAD=2048
|
OVERHEAD=2048
|
||||||
|
@ -183,6 +184,8 @@ sysret:
|
||||||
or v0,v0,tmp
|
or v0,v0,tmp
|
||||||
read: .globl read
|
read: .globl read
|
||||||
b sysgo; li v0,__NR_read
|
b sysgo; li v0,__NR_read
|
||||||
|
write: .globl write
|
||||||
|
b sysgo; li v0,__NR_write
|
||||||
open: .globl open
|
open: .globl open
|
||||||
b sysgo; li v0,__NR_open
|
b sysgo; li v0,__NR_open
|
||||||
close: .globl close
|
close: .globl close
|
||||||
|
|
Loading…
Reference in New Issue
Block a user