Hi Andrew,
It doesn't seem to. The file is clearly compiled and included in the support library:
/home/peter/quick-start/rtems/5/bin/arm-rtems5-ar rc libmyexampleSupport.a xxxRecord.o devXxxSoft.o dbSubExample.o devmyexampleVersion.o myexampleHello.o initTrace.o tarball.o
arm-rtems5-nm libmyexampleSupport.a |grep epicsRtems
00000000 R epicsRtemsFSImage
00000000 R epicsRtemsFSImage_size
but not in the myexample executable:
peter@peter-OptiPlex-7070:~/test_ioc/bin/RTEMS-beagleboneblack$ arm-rtems5-nm myexample |grep epicsRtems
8060306c V epicsRtemsFSImage
which is the weak symbol.
Pete.
From: Johnson, Andrew N. <anj at anl.gov>
Sent: Friday, July 16, 2021 3:21 PM
To: Siddons, David <siddons at bnl.gov>
Cc: EPICS tech-talk <tech-talk at aps.anl.gov>
Subject: Re: linking in IOC makefile for RTEMS
Hi Pete,
Just an idea, does it make any difference if you remove the tarball.h file from your _SRCS variable (you shouldn’t include .h files in _SRCS anyway, if you want to install them they go into INC instead)?
- Andrew
I have an RTEMS test IOC (generated using makeBaseApp) to which I've added a source file which declares a large array (actually, a compiled-in file system). The Makefile has:
......
# rather than directly into the IOC application, that
# causes problems on Windows DLL builds
myexampleSupport_SRCS += dbSubExample.c
myexampleSupport_SRCS += devmyexampleVersion.c
myexampleSupport_SRCS += myexampleHello.c
myexampleSupport_SRCS += initTrace.c
myexampleSupport_SRCS += tarball.h
myexampleSupport_SRCS += tarball.c
where the tarball files are my additions. The C file contains:
/*
* Declarations for C structure representing binary file epicsRtemsFSImage
*
* WARNING: Automatically generated -- do not edit!
*/
#include <sys/types.h>
const unsigned char epicsRtemsFSImage[] = {
0x74, 0x61, 0x72, 0x62, 0x61, 0x6c, 0x6c, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
.....etc, then:
const size_t epicsRtemsFSImage_size = sizeof(epicsRtemsFSImage);
The EPICS base libraries contain a weak reference to this same symbol (from libcom/RTEMS/init.c) , and I expected this definition to overwrite the weak one, but inspection of the executable only shows the weak one, and the size variable is not referenced at
all. What am I missing? It seems that the tarball file is compiled, but not linked.
Pete.
--
Complexity comes for free, simplicity you have to work for.
|