On 16.07.2014 20:40, Mark Rivers wrote:
The problem is
T * volatile * buffer;
in epicsRingPointer.h.
I am not sure if "volatile" really makes any sense here.I strongly suggest NOT removing the volatile keyword.
In October 2008 we struggled with a very nasty bug in epicsRingPointer.h. The symptoms were:
- Only failed on multi-processor systems
- Only failed with recent versions of gcc with optimization enabled
- Only failed 1 in 100,000 times
Eric Norum fixed the problem. The changes included the following (comparison of epicsRingPointer.h from base 3.14.8.2 and 3.14.12.4)
-private: // Data
- int nextPush;
- int nextPop;
+private: /* Data */
+ volatile int nextPush;
+ volatile int nextPop;
int size;
- T **buffer;
+ T * volatile * buffer;
};
So he added that volatile keyword, and it would need a lot of testing to prove it is not needed.
Mark
In that case the volatile needs to be removed for the delete, because it
seems that the compiler thinks that there is no delete operator for
arrays of volatiles and implicitly converting volatile away is
considered impossible.
I just see that this is not a problem with vxWorks 6.9 but with the
Windows host build.
Eric, have you tested your change with Windows?
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Dirk Zimoch
Sent: Wednesday, July 16, 2014 7:00 AM
To: [email protected]
Subject: Re: EPICS on VxWorks6.9
Newer C++ compilers consider more and more things in EPICS errors. And
maybe they are right.
The problem is
T * volatile * buffer;
in epicsRingPointer.h.
I am not sure if "volatile" really makes any sense here.
The other possibility is to cast away the "void" in the destructor.
delete [ ] (T*) buffer;
Or whatever the nicer C++ syntax is (probably using const_cast<T*>()?)
Dirk
On 16.07.2014 08:14, Amit Chauhan wrote:
Hi,
We are trying to put EPICS on VxWorks.
Various information related to our setup are:
EPICS base version : 3.14.12.4
VxWorks Version : 6.9
Workbench version : 3.3
Host Architecture : win32 on x86
Target Architecture: ppc-32
Target Board : MVME-5500 with PowerPC 7447 processor
On running the 'make' command, the EPICS build stops after a while with
an error.
*_Following is the output of the make command:_*
make -C ./configure install
make[1]: Entering directory `C:/EPICS/base-3-14-12-4/configure'
perl ../src/tools/makeMakefile.pl O.win32-x86 ../..
perl ../src/tools/makeMakefile.pl O.vxWorks-ppc32 ../..
perl -MExtUtils::Command -e mkpath O.Common
make -C O.win32-x86 -f ../Makefile TOP=../.. T_A=win32-x86 install
make[2]: Entering directory `C:/EPICS/base-3-14-12-4/configure/O.win32-x86'
make[2]: Nothing to be done for `install'.
make[2]: Leaving directory `C:/EPICS/base-3-14-12-4/configure/O.win32-x86'
make -C O.vxWorks-ppc32 -f ../Makefile TOP=../.. T_A=vxWorks-ppc32 install
make[2]: Entering directory
`C:/EPICS/base-3-14-12-4/configure/O.vxWorks-ppc32'
make[2]: Nothing to be done for `install'.
make[2]: Leaving directory
`C:/EPICS/base-3-14-12-4/configure/O.vxWorks-ppc32'
make[1]: Leaving directory `C:/EPICS/base-3-14-12-4/configure'
make -C ./src install
make[1]: Entering directory `C:/EPICS/base-3-14-12-4/src'
make -C ./tools install
make[2]: Entering directory `C:/EPICS/base-3-14-12-4/src/tools'
perl ../../src/tools/makeMakefile.pl O.win32-x86 ../../..
perl ../../src/tools/makeMakefile.pl O.vxWorks-ppc32 ../../..
perl -MExtUtils::Command -e mkpath O.Common
make -C O.win32-x86 -f ../Makefile TOP=../../.. T_A=win32-x86 install
make[3]: Entering directory `C:/EPICS/base-3-14-12-4/src/tools/O.win32-x86'
make[3]: Nothing to be done for `install'.
make[3]: Leaving directory `C:/EPICS/base-3-14-12-4/src/tools/O.win32-x86'
make -C O.vxWorks-ppc32 -f ../Makefile TOP=../../.. T_A=vxWorks-ppc32
install
make[3]: Entering directory
`C:/EPICS/base-3-14-12-4/src/tools/O.vxWorks-ppc32'
make[3]: Nothing to be done for `install'.
make[3]: Leaving directory
`C:/EPICS/base-3-14-12-4/src/tools/O.vxWorks-ppc32'
make[2]: Leaving directory `C:/EPICS/base-3-14-12-4/src/tools'
make -C ./makeBaseApp install
make[2]: Entering directory `C:/EPICS/base-3-14-12-4/src/makeBaseApp'
perl C:\EPICS\base-3-14-12-4/bin/win32-x86/makeMakefile.pl O.win32-x86
../../..
perl C:\EPICS\base-3-14-12-4/bin/win32-x86/makeMakefile.pl
O.vxWorks-ppc32 ../../..
perl -MExtUtils::Command -e mkpath O.Common
make -C O.win32-x86 -f ../Makefile TOP=../../.. T_A=win32-x86 install
make[3]: Entering directory
`C:/EPICS/base-3-14-12-4/src/makeBaseApp/O.win32-x86'
make[3]: Nothing to be done for `install'.
make[3]: Leaving directory
`C:/EPICS/base-3-14-12-4/src/makeBaseApp/O.win32-x86'
make -C O.vxWorks-ppc32 -f ../Makefile TOP=../../.. T_A=vxWorks-ppc32
install
make[3]: Entering directory
`C:/EPICS/base-3-14-12-4/src/makeBaseApp/O.vxWorks-ppc32'
make[3]: Nothing to be done for `install'.
make[3]: Leaving directory
`C:/EPICS/base-3-14-12-4/src/makeBaseApp/O.vxWorks-ppc32'
make[2]: Leaving directory `C:/EPICS/base-3-14-12-4/src/makeBaseApp'
make -C ./makeBaseExt install
make[2]: Entering directory `C:/EPICS/base-3-14-12-4/src/makeBaseExt'
perl C:\EPICS\base-3-14-12-4/bin/win32-x86/makeMakefile.pl O.win32-x86
../../..
perl C:\EPICS\base-3-14-12-4/bin/win32-x86/makeMakefile.pl
O.vxWorks-ppc32 ../../..
perl -MExtUtils::Command -e mkpath O.Common
make -C O.win32-x86 -f ../Makefile TOP=../../.. T_A=win32-x86 install
make[3]: Entering directory
`C:/EPICS/base-3-14-12-4/src/makeBaseExt/O.win32-x86'
make[3]: Nothing to be done for `install'.
make[3]: Leaving directory
`C:/EPICS/base-3-14-12-4/src/makeBaseExt/O.win32-x86'
make -C O.vxWorks-ppc32 -f ../Makefile TOP=../../.. T_A=vxWorks-ppc32
install
make[3]: Entering directory
`C:/EPICS/base-3-14-12-4/src/makeBaseExt/O.vxWorks-ppc32'
make[3]: Nothing to be done for `install'.
make[3]: Leaving directory
`C:/EPICS/base-3-14-12-4/src/makeBaseExt/O.vxWorks-ppc32'
make[2]: Leaving directory `C:/EPICS/base-3-14-12-4/src/makeBaseExt'
make -C ./libCom install
make[2]: Entering directory `C:/EPICS/base-3-14-12-4/src/libCom'
perl C:\EPICS\base-3-14-12-4/bin/win32-x86/makeMakefile.pl O.win32-x86
../../..
perl C:\EPICS\base-3-14-12-4/bin/win32-x86/makeMakefile.pl
O.vxWorks-ppc32 ../../..
perl -MExtUtils::Command -e mkpath O.Common
make -C O.win32-x86 -f ../Makefile TOP=../../.. T_A=win32-x86 install
make[3]: Entering directory `C:/EPICS/base-3-14-12-4/src/libCom/O.win32-x86'
perl ../../../src/libCom/misc/makeEpicsVersion.pl
../../../configure/CONFIG_BASE_VERSION ../O.Common
Building epicsVersion.h from ../../../configure/CONFIG_BASE_VERSION
Found EPICS Version 3.14.12.4
"Installing generated generic include file
C:\EPICS\base-3-14-12-4/include/epicsVersion.h"
rc -l 0x409 -I. -I../O.Common -I. -I../../../src/libCom/osi/os/WIN32
-I../../../src/libCom/osi/os/default -I..
-I../../../src/libCom/bucketLib -I../../../src/libCom/ring
-I../../../src/libCom/calc -I../../../src/libCom/cvtFast
-I../../../src/libCom/cppStd -I../../../src/libCom/cxxTemplates
-I../../../src/libCom/dbmf -I../../../src/libCom/ellLib
-I../../../src/libCom/env -I../../../src/libCom/error
-I../../../src/libCom/fdmgr -I../../../src/libCom/freeList
-I../../../src/libCom/gpHash -I../../../src/libCom/iocsh
-I../../../src/libCom/logClient -I../../../src/libCom/macLib
-I../../../src/libCom/misc -I../../../src/libCom/osi
-I../../../src/libCom/taskwd -I../../../src/libCom/timer
-I../../../src/libCom/tsDefs -IC:\EPICS\base-3-14-12-4/include/os/WIN32
-IC:\EPICS\base-3-14-12-4/include -fo Com.res ../Com.rc
cl -c /nologo /D__STDC__=0 /D_CRT_SECURE_NO_DEPRECATE
/D_CRT_NONSTDC_NO_DEPRECATE /Ox /GL /W3 /w44355 /MT
-DEPICS_DLL_NO -I. -I..\\O.Common -I.
-I..\\..\\..\\src\\libCom\\osi\\os\\WIN32
-I..\\..\\..\\src\\libCom\\osi\\os\\default -I..
-I..\\..\\..\\src\\libCom\\bucketLib -I..\\..\\..\\src\\libCom\\ring
-I..\\..\\..\\src\\libCom\\calc -I..\\..\\..\\src\\libCom\\cvtFast
-I..\\..\\..\\src\\libCom\\cppStd
-I..\\..\\..\\src\\libCom\\cxxTemplates -I..\\..\\..\\src\\libCom\\dbmf
-I..\\..\\..\\src\\libCom\\ellLib -I..\\..\\..\\src\\libCom\\env
-I..\\..\\..\\src\\libCom\\error -I..\\..\\..\\src\\libCom\\fdmgr
-I..\\..\\..\\src\\libCom\\freeList -I..\\..\\..\\src\\libCom\\gpHash
-I..\\..\\..\\src\\libCom\\iocsh -I..\\..\\..\\src\\libCom\\logClient
-I..\\..\\..\\src\\libCom\\macLib -I..\\..\\..\\src\\libCom\\misc
-I..\\..\\..\\src\\libCom\\osi -I..\\..\\..\\src\\libCom\\taskwd
-I..\\..\\..\\src\\libCom\\timer -I..\\..\\..\\src\\libCom\\tsDefs
-IC:\EPICS\base-3-14-12-4\\include\\os\\WIN32
-IC:\EPICS\base-3-14-12-4\\include
..\\..\\..\\src\\libCom\\bucketLib\\bucketLib.c
bucketLib.c
cl /nologo /EHsc /GR -c /nologo /D__STDC__=0 /D_CRT_SECURE_NO_DEPRECATE
/D_CRT_NONSTDC_NO_DEPRECATE /Ox /GL /W3 /w44355 /MT
-DEPICS_DLL_NO /TP -I. -I..\\O.Common -I.
-I..\\..\\..\\src\\libCom\\osi\\os\\WIN32
-I..\\..\\..\\src\\libCom\\osi\\os\\default -I..
-I..\\..\\..\\src\\libCom\\bucketLib -I..\\..\\..\\src\\libCom\\ring
-I..\\..\\..\\src\\libCom\\calc -I..\\..\\..\\src\\libCom\\cvtFast
-I..\\..\\..\\src\\libCom\\cppStd
-I..\\..\\..\\src\\libCom\\cxxTemplates -I..\\..\\..\\src\\libCom\\dbmf
-I..\\..\\..\\src\\libCom\\ellLib -I..\\..\\..\\src\\libCom\\env
-I..\\..\\..\\src\\libCom\\error -I..\\..\\..\\src\\libCom\\fdmgr
-I..\\..\\..\\src\\libCom\\freeList -I..\\..\\..\\src\\libCom\\gpHash
-I..\\..\\..\\src\\libCom\\iocsh -I..\\..\\..\\src\\libCom\\logClient
-I..\\..\\..\\src\\libCom\\macLib -I..\\..\\..\\src\\libCom\\misc
-I..\\..\\..\\src\\libCom\\osi -I..\\..\\..\\src\\libCom\\taskwd
-I..\\..\\..\\src\\libCom\\timer -I..\\..\\..\\src\\libCom\\tsDefs
-IC:\EPICS\base-3-14-12-4\\include\\os\\WIN32
-IC:\EPICS\base-3-14-12-4\\include
..\\..\\..\\src\\libCom\\ring\\epicsRingPointer.cpp
epicsRingPointer.cpp
..\..\..\src\libCom\ring\epicsRingPointer.h(93) : *error C2664: 'delete'
: cannot convert parameter 1 from 'void *volatile * ' to 'void *'*
* Conversion loses qualifiers*
..\..\..\src\libCom\ring\epicsRingPointer.cpp(82) : while compiling
class-template member function '__thiscall
epicsRingPointer<void>::~epicsRingPointer<void>(void)'
make[3]: Leaving directory `C:/EPICS/base-3-14-12-4/src/libCom/O.win32-x86'
make[2]: Leaving directory `C:/EPICS/base-3-14-12-4/src/libCom'
make[1]: Leaving directory `C:/EPICS/base-3-14-12-4/src'
*/The following code is written in epicsRingPointer.h (line 93):/*
inline epicsRingPointer<T>:: ~epicsRingPointer( )
{ delete [ ] buffer; }
If anyone can suggest us the solution to overcome this error it will be
of help to us.
Regards,
Amit Chauhan,
RRCAT, Indore
- Replies:
- RE: EPICS on VxWorks6.9 Mark Rivers
- References:
- EPICS on VxWorks6.9 Amit Chauhan
- Re: EPICS on VxWorks6.9 Dirk Zimoch
- RE: EPICS on VxWorks6.9 Mark Rivers
- Navigate by Date:
- Prev:
Re: EPICS alarming on VAL != X Jameson Graef Rollins
- Next:
Re: EPICS alarming on VAL != X Benjamin Franksen
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
<2014>
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
RE: EPICS on VxWorks6.9 Mark Rivers
- Next:
RE: EPICS on VxWorks6.9 Mark Rivers
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
<2014>
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|