summaryrefslogtreecommitdiff
path: root/src/vita/sce.h
blob: 855774859389baabb038ebf24bb6a3fe26d98b06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#pragma once

#include "elf.h"

#define ET_SCE_EXEC     	  0xfe00
#define ET_SCE_RELEXEC  	  0xfe04		/* PRX */

#define ET_SCE_ARMRELEXEC   0xffa5

#define SHT_SCE_ARMRELA   0x700000a4

#define PT_SCE_RELA		  0x60000000

#define PT_SCE_COMMENT  0x6fffff00
#define PT_SCE_VERSION	0x6fffff01

#define PT_SCE_ARMRELA  0x700000A4
#define PT_SCE_SEGSYM   0x700000A8

#define SYS_MODULE_NAME_LEN	    27
#define SYS_MODULE_MAX_SEGMENTS	4

#define SYS_LIB_AUTO_EXPORT	  (0x0001)
#define SYS_LIB_WEAK_EXPORT	  (0x0002)
#define SYS_LIB_NOLINK_EXPORT	(0x0004)
#define SYS_LIB_WEAK_IMPORT	  (0x0008)

/* MODULE INFO */

typedef struct _scemoduleinfo_common {
  unsigned short modattribute;
  unsigned char modversion[2];
  char modname[SYS_MODULE_NAME_LEN];
  char terminal;
} sceModuleInfo_common;

typedef struct _scemoduleinfo_prx2arm {
  sceModuleInfo_common c; 
  Elf32_Addr resreve; 
  Elf32_Addr ent_top; 
  Elf32_Addr ent_end; 
  Elf32_Addr stub_top;
  Elf32_Addr stub_end;
  Elf32_Word dbg_fingerprint;
  Elf32_Addr tls_top;
  Elf32_Addr tls_filesz;
  Elf32_Addr tls_memsz; 
  Elf32_Addr start_entry;
  Elf32_Addr stop_entry; 
  Elf32_Addr arm_exidx_top;
  Elf32_Addr arm_exidx_end;
  Elf32_Addr arm_extab_top;
  Elf32_Addr arm_extab_end;
} sceModuleInfo_prx2arm;

/* IMPORTS */

typedef struct _scelibstub_common {
  unsigned char structsize;
  unsigned char reserved1[1];
  unsigned short version;
  unsigned short attribute;
  unsigned short nfunc;
  unsigned short nvar;
  unsigned short ntlsvar;
  unsigned char reserved2[4];
} sceKernelLibraryStubTable_common;

typedef sceKernelLibraryStubTable_common
        sceKernelLibraryStubTable_prx2_common;

typedef struct _scelibstub_prx2arm {
  sceKernelLibraryStubTable_prx2_common c;
  Elf32_Word libname_nid;
  Elf32_Addr libname;
  Elf32_Word sce_sdk_version;
  Elf32_Addr func_nidtable;
  Elf32_Addr func_table;
  Elf32_Addr var_nidtable; 
  Elf32_Addr var_table; 
  Elf32_Addr tls_nidtable; 
  Elf32_Addr tls_table;
} sceKernelLibraryStubTable_prx2arm;

/* EXPORTS */

typedef struct _scelibent_common {
  unsigned char structsize;
  unsigned char auxattribute;
  short unsigned int version;
  short unsigned int attribute;
  short unsigned int nfunc;
  short unsigned int nvar;
  short unsigned int ntlsvar;
  unsigned char hashinfo;
  unsigned char hashinfotls;
  unsigned char reserved2[1];
  unsigned char nidaltsets;
} sceKernelLibraryEntryTable_common;

typedef sceKernelLibraryEntryTable_common
        sceKernelLibraryEntryTable_prx2_common;

typedef struct _scelibent_prx2arm {
  sceKernelLibraryEntryTable_prx2_common c;
  Elf32_Word libname_nid;
  Elf32_Addr libname; 
  Elf32_Addr nidtable;
  Elf32_Addr addtable;
} sceKernelLibraryEntryTable_prx2arm;