summaryrefslogtreecommitdiff
path: root/misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-06-19 17:55:09 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-06-19 17:55:09 +0000
commit3019d4d5ab7e3e99dcbc39463f6887c0d5ea1bba (patch)
tree818eeab6636fa670d410783a642d3da24b289337 /misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def
parentfba48036d54d157add306013d8aac832e6cc52ad (diff)
downloadnuttx-3019d4d5ab7e3e99dcbc39463f6887c0d5ea1bba.tar.gz
nuttx-3019d4d5ab7e3e99dcbc39463f6887c0d5ea1bba.tar.bz2
nuttx-3019d4d5ab7e3e99dcbc39463f6887c0d5ea1bba.zip
thunks should not use GOT address
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1910 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def')
-rw-r--r--misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def40
1 files changed, 38 insertions, 2 deletions
diff --git a/misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def b/misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def
index bc7c7f076..935e2f59d 100644
--- a/misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def
+++ b/misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def
@@ -148,6 +148,8 @@ static const char dyncall_decl_prologue[] =
#define MKCALLARGS(fn, i) (fn), (fn), (fn), (fn), (i), (i), (i), (fn), (fn)
+#ifdef __USE_GOT__
+
static const char dyncall_format[] =
"\n/* Dynamic call logic for imported symbol %s */\n\n"
"\t.global\t%s\n"
@@ -157,7 +159,7 @@ static const char dyncall_format[] =
"\tstmdb\tsp!,{r4, lr}\n"
"\tldr\tr4,.Ldyn%04d\n"
"\tldr\tr4,[sl,r4]\n"
- "\tldr\tr4,[r4,#0]\n"
+ "\tldr\tr4,[r4,#4]\n"
"\tblx\tr4\n"
"\tldmia\tsp!,{r4, pc}\n"
".Ldyn%04d:\n"
@@ -172,12 +174,46 @@ static const char nonreturning_dyncall_format[] =
"%s:\n"
"\tldr\tr4,.Ldyn%04d\n"
"\tldr\tr4,[sl,r4]\n"
- "\tldr\tr4,[r4,#0]\n"
+ "\tldr\tr4,[r4,#4]\n"
"\tbx\tr4\n"
".Ldyn%04d:\n"
"\t.word\t__dyninfo%04d(GOT)\n"
"\t.size\t%s, .-%s\n";
+#else
+
+static const char dyncall_format[] =
+ "\n/* Dynamic call logic for imported symbol %s */\n\n"
+ "\t.global\t%s\n"
+ "\t.type\t%s, function\n"
+ "\t.thumb_func\n\n"
+ "%s:\n"
+ "\tstmdb\tsp!,{r4, lr}\n"
+ "\tldr\tr4,.Ldyn%04d\n"
+ "\tadd\tr4,r4,sl\n"
+ "\tldr\tr4,[r4,#4]\n"
+ "\tblx\tr4\n"
+ "\tldmia\tsp!,{r4, pc}\n"
+ ".Ldyn%04d:\n"
+ "\t.word\t__dyninfo%04d\n"
+ "\t.size\t%s, .-%s\n";
+
+static const char nonreturning_dyncall_format[] =
+ "\n/* Dynamic call logic for imported, non-returning symbol %s */\n\n"
+ "\t.global\t%s\n"
+ "\t.type\t%s, function\n"
+ "\t.thumb_func\n\n"
+ "%s:\n"
+ "\tldr\tr4,.Ldyn%04d\n"
+ "\tadd\tr4,r4,sl\n"
+ "\tldr\tr4,[r4,#4]\n"
+ "\tbx\tr4\n"
+ ".Ldyn%04d:\n"
+ "\t.word\t__dyninfo%04d\n"
+ "\t.size\t%s, .-%s\n";
+
+#endif
+
/*******************************************************************
* File Epilogue
*******************************************************************/