diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-06-19 17:55:09 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-06-19 17:55:09 +0000 |
commit | 3019d4d5ab7e3e99dcbc39463f6887c0d5ea1bba (patch) | |
tree | 818eeab6636fa670d410783a642d3da24b289337 /misc/buildroot/toolchain/nxflat/thumb2/dyncall_skeleton.def | |
parent | fba48036d54d157add306013d8aac832e6cc52ad (diff) | |
download | nuttx-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.def | 40 |
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 *******************************************************************/ |