I’m trying to figure out how to allocate memory for a struct in SPARC assembly.
Here’s the C version of my code that I’m using (which works and compiles fine):
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
struct tester test;
....other code inbetween
testfn(&test);
testfn2(&test);
}
Now in assembly I figure I have to call a function like this…
mov struct tester, %o0 ! Move struct tester into %o0
call sizeof ! Get size of struct tester
nop
set %o0, %l1 ! Store size
nop
mov 1, %o0 ! Prepare for calloc call
mov %l1, %o1 ! Prepare for calloc call
call calloc, 2
nop
mov %o0, %l2 ! The pointer returned to the allocated space
mov %l2, %o0
call testfn
nop
mov %l2, %o0
call testfn2
nop
The main part I’m stuck on right now is how to pass that initial struct tester test into assembly. Do I define it somewhere or how does it work?
And just in case, my struct tester looks something like this…
#define SIZE 100
struct tester2 {
char abcd[SIZE];
char efgh[SIZE];
};
struct tester {
struct tester2 *somePTR;
int an_Int;
};
It is not clear what you want to do. In the C code, it looks like you are allocating space for the structure on the stack.
In the assembly code, though it contains some odd statements, it looks like you are want to use the size of a structure in a call to calloc to allocate space.
So, decide what you want to do and either 1) allocate memory for a local variable on the stack by using the save instruction to decrement %sp or 2) just call calloc().