diff options
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/lib/SOURCES | 4 | ||||
-rw-r--r-- | apps/plugins/lib/gcc-support.c | 30 | ||||
-rw-r--r-- | apps/plugins/plugins.make | 6 | ||||
-rw-r--r-- | apps/plugins/test_codec.c | 3 |
4 files changed, 42 insertions, 1 deletions
diff --git a/apps/plugins/lib/SOURCES b/apps/plugins/lib/SOURCES index bb7da12e8b..c90613623c 100644 --- a/apps/plugins/lib/SOURCES +++ b/apps/plugins/lib/SOURCES | |||
@@ -1,3 +1,7 @@ | |||
1 | #ifdef CPU_ARM | ||
2 | /* For now, only ARM uses this for __div0 */ | ||
3 | gcc-support.c | ||
4 | #endif | ||
1 | oldmenuapi.c | 5 | oldmenuapi.c |
2 | configfile.c | 6 | configfile.c |
3 | fixedpoint.c | 7 | fixedpoint.c |
diff --git a/apps/plugins/lib/gcc-support.c b/apps/plugins/lib/gcc-support.c new file mode 100644 index 0000000000..91744d7fbc --- /dev/null +++ b/apps/plugins/lib/gcc-support.c | |||
@@ -0,0 +1,30 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2009 by Michael Sevakis | ||
11 | * | ||
12 | * Miscellaneous compiler support routines. | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or | ||
15 | * modify it under the terms of the GNU General Public License | ||
16 | * as published by the Free Software Foundation; either version 2 | ||
17 | * of the License, or (at your option) any later version. | ||
18 | * | ||
19 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
20 | * KIND, either express or implied | ||
21 | * | ||
22 | ****************************************************************************/ | ||
23 | #include "plugin.h" | ||
24 | |||
25 | #ifdef CPU_ARM | ||
26 | void __attribute__((naked)) __div0(void) | ||
27 | { | ||
28 | asm volatile("bx %0" : : "r"(rb->__div0)); | ||
29 | } | ||
30 | #endif | ||
diff --git a/apps/plugins/plugins.make b/apps/plugins/plugins.make index c6c399db48..0f6804d591 100644 --- a/apps/plugins/plugins.make +++ b/apps/plugins/plugins.make | |||
@@ -17,6 +17,10 @@ ROCKS := $(subst $(ROOTDIR),$(BUILDDIR),$(ROCKS)) | |||
17 | PLUGINLIB := $(BUILDDIR)/apps/plugins/libplugin.a | 17 | PLUGINLIB := $(BUILDDIR)/apps/plugins/libplugin.a |
18 | PLUGINLIB_SRC = $(call preprocess, $(APPSDIR)/plugins/lib/SOURCES) | 18 | PLUGINLIB_SRC = $(call preprocess, $(APPSDIR)/plugins/lib/SOURCES) |
19 | OTHER_SRC += $(PLUGINLIB_SRC) | 19 | OTHER_SRC += $(PLUGINLIB_SRC) |
20 | # include gcc-support routines for linking first if in SOURCES | ||
21 | ifneq "$(findstring gcc-support.c,$(PLUGINLIB_SRC))" "" | ||
22 | GCCSUPPORT_OBJ := $(BUILDDIR)/apps/plugins/lib/gcc-support.o | ||
23 | endif | ||
20 | 24 | ||
21 | PLUGINLIB_OBJ := $(PLUGINLIB_SRC:.c=.o) | 25 | PLUGINLIB_OBJ := $(PLUGINLIB_SRC:.c=.o) |
22 | PLUGINLIB_OBJ := $(PLUGINLIB_OBJ:.S=.o) | 26 | PLUGINLIB_OBJ := $(PLUGINLIB_OBJ:.S=.o) |
@@ -70,7 +74,7 @@ else | |||
70 | PLUGINLDFLAGS = -T$(PLUGINLINK_LDS) -Wl,--gc-sections -Wl,-Map,$*.map | 74 | PLUGINLDFLAGS = -T$(PLUGINLINK_LDS) -Wl,--gc-sections -Wl,-Map,$*.map |
71 | endif | 75 | endif |
72 | 76 | ||
73 | $(BUILDDIR)/%.rock: $(BUILDDIR)/%.o $(PLUGINLINK_LDS) | 77 | $(BUILDDIR)/%.rock: $(GCCSUPPORT_OBJ) $(BUILDDIR)/%.o $(PLUGINLINK_LDS) |
74 | $(call PRINTS,LD $(@F))$(CC) $(PLUGINFLAGS) -o $(BUILDDIR)/$*.elf \ | 78 | $(call PRINTS,LD $(@F))$(CC) $(PLUGINFLAGS) -o $(BUILDDIR)/$*.elf \ |
75 | $(filter %.o, $^) \ | 79 | $(filter %.o, $^) \ |
76 | $(filter %.a, $^) \ | 80 | $(filter %.a, $^) \ |
diff --git a/apps/plugins/test_codec.c b/apps/plugins/test_codec.c index 48fceb9cf2..ec5c8e9800 100644 --- a/apps/plugins/test_codec.c +++ b/apps/plugins/test_codec.c | |||
@@ -494,6 +494,9 @@ static void init_ci(void) | |||
494 | ci.semaphore_release = rb->semaphore_release; | 494 | ci.semaphore_release = rb->semaphore_release; |
495 | #endif | 495 | #endif |
496 | 496 | ||
497 | #ifdef CPU_ARM | ||
498 | ci.__div0 = rb->__div0; | ||
499 | #endif | ||
497 | } | 500 | } |
498 | 501 | ||
499 | static void codec_thread(void) | 502 | static void codec_thread(void) |