How to declare en function import

Discuss the development of new homebrew software, tools and libraries.

Moderators: cheriff, TyRaNiD

Post Reply
sauron_le_noir
Posts: 203
Joined: Sat Jul 05, 2008 8:03 am

How to declare en function import

Post by sauron_le_noir »

I try to program a hello world in mips assembler. But i'm in trouble how to declare a import function in my program. When psp-fixup-imports is executed i've received a
Error, invalid stub address.

The Makefile

Code: Select all

PSPSDK = $(shell psp-config --pspsdk-path)
PSPLIBSDIR = $(PSPSDK)/..
TARGET = hellomips
OBJS = hellomips.o
CFLAGS = -O2 -G0 -Wall -mno-crt0 -nostartfiles -nostdlib -nodefaultlibs
ASFLAGS = $(CFLAGS)
BUILD_PRX=1
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Hello World

include $(PSPSDK)/lib/build.mak
the macs.s file

Code: Select all

	.macro IMPORT_START module, flags_ver
	.set push
	.section .rodata.sceResident, "a"
	.word   0
__stub_modulestr_\module:
	.asciz  "\module"
	.align  2

	.section .lib.stub, "a", @progbits
	.global __stub_module_\module
__stub_module_\module:
	.word   __stub_modulestr_\module
	.word   \flags_ver
	.word   0x5
	.word   __executable_start
	.word   __executable_start

	.set pop
        .endm

        .macro IMPORT_FUNC module, funcid, funcname

	.set push
	.set noreorder

	.extern __stub_module_\module
	.section .sceStub.text, "ax", @progbits
	.globl  \funcname
	.type   \funcname, @function
	.ent    \funcname, 0
\funcname:
	.word   __stub_module_\module
	.word   \funcid
	.end    \funcname
	.size   \funcname, .-\funcname

	.section .rodata.sceNid, "a"
	.word   \funcid

	.set pop
        .endm

        .macro IMPORT_FUNC_WITH_ALIAS module, funcid, funcname, alias

	.set push
	.set noreorder

	.extern __stub_module_\module
	.section .sceStub.text, "ax", @progbits
	.globl  \alias
	.type   \alias, @function
\alias:
	.globl  \funcname
	.type   \funcname, @function
	.ent    \funcname, 0
\funcname:
	.word   __stub_module_\module
	.word   \funcid
	.end    \funcname
	.size   \funcname, .-\funcname

	.section .rodata.sceNid, "a"
	.word   \funcid

	.set pop
        .endm
the moduleinfo.s

Code: Select all

	.globl	module_info
	.section .rodata.sceModuleInfo,"a",@progbits
	.align	4
module_info:
	.half	0
	.byte	1
	.byte	1
	.ascii	"Hello world\000"
	.space	15
	.byte	0
	.word	_gp
	.set push
        .section .lib.ent.top, "a", @progbits
        .align 2
        .word 0
__lib_ent_top:
        .section .lib.ent.btm, "a", @progbits
        .align 2
__lib_ent_bottom:
        .word 0
        .section .lib.stub.top, "a", @progbits
        .align 2
        .word 0
__lib_stub_top:
        .section .lib.stub.btm, "a", @progbits
        .align 2
__lib_stub_bottom:
        .word 0
IMPORT_START "LoadExecForKernel",0x00010000
IMPORT_FUNC  "LoadExecForKernel",0x05572A5F,sceKernelExitGame  
        .set pop
        .text
and finaly the main program hellomips.s

Code: Select all

	.include "mac.s"
	.include "moduleinfo.s"
	.global _start
	.global module_start
	.text
_start:
module_start:
	.set	noreorder
	j	$31
	nop
Post Reply