Question about function call stack

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

In a project I'm working on, I've to fix an issue which is dependant on the target platform.

You'll find below a code snippet that shows the issue. When compiled for a 32 bit platform, with gcc 3.2.2, I get the expected behaviour, which is the following output:

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

But, if compiled for a 64 bit platform, with gcc 3.4.3, output is:

1 548682058152 4194884 0 -72340172838076673 0 0 1 2 3
0 1 2 3 4 5 6 7 8 9

Here's my question:

Is the assumption made in code snippet that pushing an ulong array on the stack, then retrieving values via function arguments correct ?

Regards,

      Emmanuel.

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

void
f (ulong v1, ulong v2, ulong v3, ulong v4, ulong v5, ulong v6, ulong v7, ulong v8, ulong v9, ulong v10)
{
	printf ("%li %li %li %li %li %li %li %li %li %li \n",
		v1, v2, v3, v4, v5, v6, v7, v8, v9, v10);
}

typedef struct {
	ulong array[SIZE];
} Stack;

void
g (Stack stack)
{
	int i;

	for (i = 0; i < SIZE; i++)
		printf ("%li ", stack.array[i]);
	printf ("\n");
}

int 
main (int argc, char *argv[]) 
{
	void (*function_ptr) ();
	Stack stack;
	int i;

	for (i = 0; i < SIZE; i++)
		stack.array[i] = i;
	
	function_ptr = f;
	(*function_ptr) (stack);
	function_ptr = g;
	(*function_ptr) (stack);

  	exit(0);
}

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux