diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/Makefile | 10 | ||||
| -rw-r--r-- | examples/stubs.c | 16 | 
2 files changed, 21 insertions, 5 deletions
| diff --git a/examples/Makefile b/examples/Makefile index 945b74570..6bd10b528 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -41,6 +41,10 @@ ifeq ($(ARCH),nios)  LOAD_ADDR = 0x01000000 -L $(gcclibdir)/m32 -T nios.lds  endif +ifeq ($(ARCH),m68k) +LOAD_ADDR = 0x20000  -L $(clibdir) +endif +  include $(TOPDIR)/config.mk  SREC	= hello_world.srec @@ -56,11 +60,6 @@ SREC   += sched.srec  BIN    += sched.bin sched  endif -ifeq ($(ARCH),m68k) -SREC = -BIN = -endif -  # The following example is pretty 8xx specific...  ifeq ($(CPU),mpc8xx)  SREC   += timer.srec @@ -94,6 +93,7 @@ LIBCOBJS= stubs.o  LIBOBJS	= $(LIBAOBJS) $(LIBCOBJS)  gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`) +clibdir := $(shell dirname `$(CC) $(CFLAGS) -print-file-name=libc.a`)  CPPFLAGS += -I.. diff --git a/examples/stubs.c b/examples/stubs.c index 6ca6d7869..a26337a92 100644 --- a/examples/stubs.c +++ b/examples/stubs.c @@ -78,6 +78,22 @@ gd_t *global_data;  "	jmp	%%g0\n"			\  "	nop	\n"			\  	: : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x) : "r0"); +#elif defined(CONFIG_M68K) +/* + * d7 holds the pointer to the global_data, a0 is a call-clobbered + * register + */ +#define EXPORT_FUNC(x) \ +	asm volatile (			\ +"	.globl " #x "\n"		\ +#x ":\n"				\ +"	move.l	%%d7, %%a0\n"		\ +"	adda.l	%0, %%a0\n"		\ +"	move.l	(%%a0), %%a0\n"		\ +"	adda.l	%1, %%a0\n"		\ +"	move.l	(%%a0), %%a0\n"		\ +"	jmp	(%%a0)\n"			\ +	: : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "a0");  #else  #error stubs definition missing for this architecture  #endif |