Skip to content
Snippets Groups Projects
Commit ef2d7fbf authored by patacongo's avatar patacongo
Browse files

function pointers in modules must have global scope

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1960 42af7a65-404d-4744-a932-0658087f49c3
parent 3c58d786
No related branches found
No related tags found
No related merge requests found
......@@ -235,6 +235,7 @@ static inline int nxflat_gotrelocs(FAR struct nxflat_loadinfo_s *loadinfo)
offset = ntohl(hdr->h_relocstart);
nrelocs = ntohs(hdr->h_reloccount);
bvdbg("offset: %08lx nrelocs: %d\n", (long)offset, nrelocs);
/* The value of the relocation list that we get from the header is a
* file offset. We will have to convert this to an offset into the
......@@ -243,9 +244,13 @@ static inline int nxflat_gotrelocs(FAR struct nxflat_loadinfo_s *loadinfo)
*/
DEBUGASSERT(offset >= loadinfo->isize);
DEBUGASSERT(offset + nrelocs * sizeof(struct nxflat_reloc_s) <= (loadinfo->isize + loadinfo->dsize));
DEBUGASSERT(offset + nrelocs * sizeof(struct nxflat_reloc_s)
<= (loadinfo->isize + loadinfo->dsize));
relocs = (FAR struct nxflat_reloc_s*)(offset - loadinfo->isize + loadinfo->dspace->region);
relocs = (FAR struct nxflat_reloc_s*)
(offset - loadinfo->isize + loadinfo->dspace->region);
bvdbg("isize: %08lx dpsace: %p relocs: %p\n",
(long)loadinfo->isize, loadinfo->dspace->region, relocs);
/* Now, traverse the relocation list of and bind each GOT relocation. */
......
......@@ -54,7 +54,12 @@ static unsigned long nerrors[2] = {0, 0};
* Private Functions
****************************************************************************/
static void thread_func(void *parameter)
/* NOTE: it is necessary for functions that are referred to by function pointers
* pointer to be declared with global scope (at least for ARM). Otherwise,
* a relocation type that is not supported by NXFLAT is generated by GCC.
*/
void thread_func(void *parameter)
{
int my_id = (int)parameter;
int my_ndx = my_id - 1;
......
......@@ -75,7 +75,12 @@ enum exit_values_e
* Private Functions
****************************************************************************/
static void *child_start_routine(void *arg)
/* NOTE: it is necessary for functions that are referred to by function pointers
* pointer to be declared with global scope (at least for ARM). Otherwise,
* a relocation type that is not supported by NXFLAT is generated by GCC.
*/
void *child_start_routine(void *arg)
{
printf("CHILD: started with arg=%d\n", (int)arg);
......
......@@ -69,7 +69,12 @@ static int sigusr2_rcvd = 0;
* Name: sigusr1_sighandler
****************************************************************************/
static void sigusr1_sighandler(int signo)
/* NOTE: it is necessary for functions that are referred to by function pointers
* pointer to be declared with global scope (at least for ARM). Otherwise,
* a relocation type that is not supported by NXFLAT is generated by GCC.
*/
void sigusr1_sighandler(int signo)
{
printf("sigusr1_sighandler: Received SIGUSR1, signo=%d\n", signo);
sigusr1_rcvd = 1;
......@@ -79,8 +84,13 @@ static void sigusr1_sighandler(int signo)
* Name: sigusr2_sigaction
***************************************************************************/
/* NOTE: it is necessary for functions that are referred to by function pointers
* pointer to be declared with global scope (at least for ARM). Otherwise,
* a relocation type that is not supported by NXFLAT is generated by GCC.
*/
#ifdef __USE_POSIX199309
static void sigusr2_sigaction(int signo, siginfo_t *siginfo, void *arg)
void sigusr2_sigaction(int signo, siginfo_t *siginfo, void *arg)
{
printf("sigusr2_sigaction: Received SIGUSR2, signo=%d siginfo=%p arg=%p\n",
signo, siginfo, arg);
......@@ -107,7 +117,7 @@ static void sigusr2_sigaction(int signo, siginfo_t *siginfo, void *arg)
sigusr2_rcvd = 1;
}
#else
static void sigusr2_sigaction(int signo)
void sigusr2_sigaction(int signo)
{
printf("sigusr2_sigaction: Received SIGUSR2, signo=%d\n", signo);
sigusr2_rcvd = 1;
......
......@@ -58,7 +58,12 @@ static sem_t g_sem;
* Privite Functions
****************************************************************************/
int child_task(int argc, char **argv)
/* NOTE: it is necessary for functions that are referred to by function pointers
* pointer to be declared with global scope (at least for ARM). Otherwise,
* a relocation type that is not supported by NXFLAT is generated by GCC.
*/
int child_task(int argc, char **argv)
{
printf("Child: execv was successful!\n");
printf("Child: argc=%d\n", argc);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment