Files
pspsdk/tools/prxtypes.h
2010-10-18 12:54:49 -03:00

151 lines
3.5 KiB
C

/*
* PSP Software Development Kit - http://www.pspdev.org
* -----------------------------------------------------------------------
* Licensed under the BSD license, see LICENSE in PSPSDK root for details.
*
* prxtypes.h - Definition of PRX specific types.
*
* Copyright (c) 2005 James Forshaw <tyranid@gmail.com>
*
* $Id: prxtypes.h 1095 2005-09-27 21:02:16Z jim $
*/
#ifndef __PRXTYPES_H__
#define __PRXTYPES_H__
#include "types.h"
#define PSP_MODULE_MAX_NAME 28
#define PSP_LIB_MAX_NAME 128
#define PSP_ENTRY_MAX_NAME 128
/* Define the maximum number of permitted entries per lib */
#define PSP_MAX_V_ENTRIES 255
#define PSP_MAX_F_ENTRIES 65535
#define PSP_MODULE_INFO_NAME ".rodata.sceModuleInfo"
/* Remove the .rel.sceStub.text section as it shouldn't have been there */
#define PSP_MODULE_REMOVE_REL ".rel.sceStub.text"
/* Define a name for the unnamed first export */
#define PSP_SYSTEM_EXPORT "syslib"
enum PspEntryType
{
PSP_ENTRY_FUNC = 0,
PSP_ENTRY_VAR = 1
};
/* Define the in-prx structure types */
/* Structure to hold the module export information */
struct PspModuleExport
{
u32 name;
u32 flags;
u32 counts;
u32 exports;
} __attribute__((packed));
/* Structure to hold the module import information */
struct PspModuleImport
{
u32 name;
u32 flags;
u8 entry_size;
u8 var_count;
u16 func_count;
u32 nids;
u32 funcs;
};
/* Structure to hold the module info */
struct PspModuleInfo
{
u32 flags;
char name[PSP_MODULE_MAX_NAME];
u32 gp;
u32 exports;
u32 exp_end;
u32 imports;
u32 imp_end;
};
/* Define the loaded prx types */
struct PspEntry
{
/* Name of the entry */
char name[PSP_ENTRY_MAX_NAME];
/* Nid of the entry */
u32 nid;
/* Type of the entry */
enum PspEntryType type;
/* Virtual address of the entry in the loaded elf */
u32 addr;
/* Virtual address of the nid dword */
u32 nid_addr;
};
/* Holds a linking entry for an import library */
struct PspLibImport
{
/** Previous import */
struct PspLibImport *prev;
/** Next import */
struct PspLibImport *next;
/** Name of the library */
char name[PSP_LIB_MAX_NAME];
/* Virtual address of the lib import stub */
u32 addr;
/* Copy of the import stub (in native byte order) */
struct PspModuleImport stub;
/* List of function entries */
struct PspEntry funcs[PSP_MAX_F_ENTRIES];
/* Number of function entries */
int f_count;
/* List of variable entried */
struct PspEntry vars[PSP_MAX_V_ENTRIES];
/* Number of variable entires */
int v_count;
};
/* Holds a linking entry for an export library */
struct PspLibExport
{
/** Previous export in the chain */
struct PspLibExport *prev;
/** Next export in the chain */
struct PspLibExport *next;
/** Name of the library */
char name[PSP_LIB_MAX_NAME];
/** Virtual address of the lib import stub */
u32 addr;
/** Copy of the import stub (in native byte order) */
struct PspModuleExport stub;
/** List of function entries */
struct PspEntry funcs[PSP_MAX_F_ENTRIES];
/** Number of function entries */
int f_count;
/** List of variable entried */
struct PspEntry vars[PSP_MAX_V_ENTRIES];
/** Number of variable entires */
int v_count;
};
/** Structure to hold the loaded module information */
struct PspModule
{
/** Name of the module */
char name[PSP_MODULE_MAX_NAME+1];
/** Info structure, in native byte order */
struct PspModuleInfo info;
/** Virtual address of the module info section */
u32 addr;
/** Head of the export list */
struct PspLibExport *exp_head;
/** Head of the import list */
struct PspLibImport *imp_head;
};
#endif