mirror of
https://github.com/apache/nuttx.git
synced 2026-08-25 15:37:23 +00:00
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
This commit is contained in:
parent
3c58d78672
commit
ef2d7fbf5c
5 changed files with 38 additions and 8 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue