summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile10
-rw-r--r--examples/stubs.c16
2 files changed, 21 insertions, 5 deletions
diff --git a/examples/Makefile b/examples/Makefile
index 945b745..6bd10b5 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 6ca6d78..a26337a 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