|
|
|
@ -1,38 +1,24 @@ |
|
|
|
/* armos.h -- ARMulator OS definitions: ARM6 Instruction Emulator. |
|
|
|
Copyright (C) 1994 Advanced RISC Machines Ltd. |
|
|
|
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify |
|
|
|
it under the terms of the GNU General Public License as published by |
|
|
|
the Free Software Foundation; either version 2 of the License, or |
|
|
|
(at your option) any later version. |
|
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful, |
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
|
GNU General Public License for more details. |
|
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License |
|
|
|
along with this program; if not, write to the Free Software |
|
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
|
|
|
|
|
|
|
#include <stdint.h> |
|
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
|
|
*/ |
|
|
|
|
|
|
|
#if FAST_MEMORY |
|
|
|
/* in user mode, mmap_base will be on initial brk, |
|
|
|
set at the first mmap request */ |
|
|
|
#define mmap_base -1 |
|
|
|
#else |
|
|
|
#define mmap_base 0x50000000 |
|
|
|
#endif |
|
|
|
static long mmap_next_base = mmap_base; |
|
|
|
|
|
|
|
//static mmap_area_t* new_mmap_area(int sim_addr, int len); |
|
|
|
static char mmap_mem_write(short size, int addr, uint32_t value); |
|
|
|
static char mmap_mem_read(short size, int addr, uint32_t * value); |
|
|
|
|
|
|
|
/***************************************************************************\ |
|
|
|
* SWI numbers * |
|
|
|
\***************************************************************************/ |
|
|
|
// |
|
|
|
// SWI Numbers |
|
|
|
// |
|
|
|
|
|
|
|
#define SWI_Syscall 0x0 |
|
|
|
#define SWI_Exit 0x1 |
|
|
|
@ -44,8 +30,8 @@ static char mmap_mem_read(short size, int addr, uint32_t * value); |
|
|
|
#define SWI_Rename 0x26 |
|
|
|
#define SWI_Break 0x11 |
|
|
|
|
|
|
|
#define SWI_Times 0x2b |
|
|
|
#define SWI_Brk 0x2d |
|
|
|
#define SWI_Times 0x2b |
|
|
|
#define SWI_Brk 0x2d |
|
|
|
|
|
|
|
#define SWI_Mmap 0x5a |
|
|
|
#define SWI_Munmap 0x5b |
|
|
|
@ -56,76 +42,13 @@ static char mmap_mem_read(short size, int addr, uint32_t * value); |
|
|
|
#define SWI_GetEUID32 0xc9 |
|
|
|
#define SWI_GetEGID32 0xca |
|
|
|
|
|
|
|
#define SWI_ExitGroup 0xf8 |
|
|
|
|
|
|
|
#if 0 |
|
|
|
#define SWI_Time 0xd |
|
|
|
#define SWI_Clock 0x61 |
|
|
|
#define SWI_Time 0x63 |
|
|
|
#define SWI_Remove 0x64 |
|
|
|
#define SWI_Rename 0x65 |
|
|
|
#define SWI_Flen 0x6c |
|
|
|
#endif |
|
|
|
#define SWI_ExitGroup 0xf8 |
|
|
|
|
|
|
|
#define SWI_Uname 0x7a |
|
|
|
#define SWI_Fcntl 0xdd |
|
|
|
#define SWI_Fstat64 0xc5 |
|
|
|
#define SWI_Uname 0x7a |
|
|
|
#define SWI_Fcntl 0xdd |
|
|
|
#define SWI_Fstat64 0xc5 |
|
|
|
#define SWI_Gettimeofday 0x4e |
|
|
|
#define SWI_Set_tls 0xf0005 |
|
|
|
|
|
|
|
#define SWI_Breakpoint 0x180000 /* see gdb's tm-arm.h */ |
|
|
|
|
|
|
|
/***************************************************************************\ |
|
|
|
* SWI structures * |
|
|
|
\***************************************************************************/ |
|
|
|
|
|
|
|
/* Arm binaries (for now) only support 32 bit, and expect to receive |
|
|
|
32-bit compliant structure in return of a systen call. Because |
|
|
|
we use host system calls to emulate system calls, the returned |
|
|
|
structure can be 32-bit compliant or 64-bit compliant, depending |
|
|
|
on the OS running skyeye. Therefore, we need a fixed size structure |
|
|
|
adapted to arm.*/ |
|
|
|
|
|
|
|
/* Borrowed from qemu */ |
|
|
|
struct target_stat64 { |
|
|
|
unsigned short st_dev; |
|
|
|
unsigned char __pad0[10]; |
|
|
|
uint32_t __st_ino; |
|
|
|
unsigned int st_mode; |
|
|
|
unsigned int st_nlink; |
|
|
|
uint32_t st_uid; |
|
|
|
uint32_t st_gid; |
|
|
|
unsigned short st_rdev; |
|
|
|
unsigned char __pad3[10]; |
|
|
|
unsigned char __pad31[4]; |
|
|
|
long long st_size; |
|
|
|
uint32_t st_blksize; |
|
|
|
unsigned char __pad32[4]; |
|
|
|
uint32_t st_blocks; |
|
|
|
uint32_t __pad4; |
|
|
|
uint32_t st32_atime; |
|
|
|
uint32_t __pad5; |
|
|
|
uint32_t st32_mtime; |
|
|
|
uint32_t __pad6; |
|
|
|
uint32_t st32_ctime; |
|
|
|
uint32_t __pad7; |
|
|
|
unsigned long long st_ino; |
|
|
|
};// __attribute__((packed)); |
|
|
|
|
|
|
|
struct target_tms32 { |
|
|
|
uint32_t tms_utime; |
|
|
|
uint32_t tms_stime; |
|
|
|
uint32_t tms_cutime; |
|
|
|
uint32_t tms_cstime; |
|
|
|
}; |
|
|
|
|
|
|
|
struct target_timeval32 { |
|
|
|
uint32_t tv_sec; /* seconds */ |
|
|
|
uint32_t tv_usec; /* microseconds */ |
|
|
|
}; |
|
|
|
|
|
|
|
struct target_timezone32 { |
|
|
|
int32_t tz_minuteswest; /* minutes west of Greenwich */ |
|
|
|
int32_t tz_dsttime; /* type of DST correction */ |
|
|
|
}; |
|
|
|
|