EPICS Home

Experimental Physics and Industrial Control System


 
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  <20232024  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  <20232024 
<== Date ==> <== Thread ==>

Subject: Re: quadEM-R7-0 ParamValNotDefined
From: Rong Huang via Tech-talk <tech-talk at aps.anl.gov>
To: Mark Rivers <rivers at cars.uchicago.edu>
Cc: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Date: Tue, 19 Dec 2023 21:46:42 -0600
Hi Mark,

Thank you very much for looking into this quickly.

I will find a linux-x86_64 computer and try it again!

Thanks,
Rong

On Tue, Dec 19, 2023 at 6:23 PM Mark Rivers <rivers at cars.uchicago.edu> wrote:
>
> Hi Rong,
>
>
>
> I still don't understand the error.  Your trace shows that the error is happening here:
>
>
>
> #8  0x0000000000796160 in paramList::getInteger (this=<optimized out>, index=index@entry=51, value=0xffffffffe050)
>
>     at ../../asyn/asynPortDriver/asynPortDriver.cpp:259
>
>
>
> This is line 259 in asynPortDriver.cpp in asyn-R4-30
>
> https://github.com/epics-modules/asyn/blob/7f10aeaa8ce798bb00442dc9e44bdb619a409d46/asyn/asynPortDriver/asynPortDriver.cpp#L259
>
>
>
> Note that it is calling paramVal::getInteger in a try/catch block that explicitly catches the exception you are getting, ParamValNotDefined.  So I don't understand why this is causing your program to terminate, rather than simply catching the error and return and error status.
>
>
>
> It seems like perhaps there is something different about the way C++ exception handling works with the linux-arm architecture?  No one has ever reported this error before, but most people are using linux-x86_64.
>
>
>
> Some additional information about quadEM-R7-0 compiling: I initially had compiling error like:
>
> ../drvTetrAMM.cpp:258:22: error: narrowing conversion of ‘18443366386873925631’ from ‘long long unsigned int’ to ‘long long int’ [-Wnarrowing] 258 | case 0xfff40002ffffffffll:
>
> So I changed line 258 (and three following case ***** sentences) to:
>
> case static_cast<long long int>(0xfff40002ffffffff):
>
> .....
>
> case static_cast<long long int>(0xfff40000ffffffff):
>
> .....
>
> case static_cast<long long int>(0xfff40001ffffffff):
>
> .....
>
> case static_cast<long long int>(0xfff40003ffffffff):
>
>
>
> I hope these changes are irrelevant.
>
>
>
> Those errors are fixed in quadEM R9-5.  They are not related to the exception errors you are getting.
>
>
>
> Mark
>
>
>
> -----Original Message-----
> From: Rong Huang <ronghuang at ls-cat.org>
> Sent: Tuesday, December 19, 2023 5:20 PM
> To: Mark Rivers <rivers at cars.uchicago.edu>
> Cc: tech-talk at aps.anl.gov
> Subject: Re: quadEM-R7-0 ParamValNotDefined
>
>
>
> Hello Mark,
>
>
>
> Thank you for checking this!
>
>
>
> I realized I used the wrong version of asyn after I sent the previous email. I installed asyn-R4-30, re-installed areaDetector, ipUnidig and quadEM-R7-0, but I still get the same error when I start the IOC.
>
>
>
> The backtrace printout is as follows:
>
>
>
> terminate called after throwing an instance of 'ParamValNotDefined'
>
>   what():  paramVal::getInteger value not defined
>
>
>
> Thread 1 "quadEMTestApp" received signal SIGABRT, Aborted.
>
> 0x0000fffff78d6650 in __pthread_kill_implementation () from /usr/lib64/libc.so.6 Missing separate debuginfos, use: dnf debuginfo-install
>
> glibc-2.34-83.el9_3.7.aarch64 keyutils-libs-1.6.3-1.el9.aarch64
>
> krb5-libs-1.21.1-1.el9.aarch64 libaec-1.0.6-1.el9.aarch64
>
> libcom_err-1.46.5-3.el9.aarch64 libgcc-11.4.1-2.1.el9.aarch64
>
> libjpeg-turbo-2.0.90-6.el9_1.aarch64 libselinux-3.5-1.el9.aarch64
>
> libstdc++-11.4.1-2.1.el9.aarch64 libtirpc-1.3.3-2.el9.aarch64
>
> libxml2-2.9.13-5.el9_3.aarch64 openssl-libs-3.0.7-24.el9.aarch64
>
> pcre2-10.40-2.el9.aarch64 xz-libs-5.2.5-8.el9_0.aarch64
>
> zlib-1.2.11-40.el9.aarch64
>
> (gdb) backtrace
>
> #0  0x0000fffff78d6650 in __pthread_kill_implementation () from
>
> /usr/lib64/libc.so.6
>
> #1  0x0000fffff789186c in raise () from /usr/lib64/libc.so.6
>
> #2  0x0000fffff7879030 in abort () from /usr/lib64/libc.so.6
>
> #3  0x0000fffff7aa491c in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib64/libstdc++.so.6
>
> #4  0x0000fffff7aa22bc in __cxxabiv1::__terminate(void (*)()) () from
>
> /usr/lib64/libstdc++.so.6
>
> #5  0x0000fffff7aa2320 in std::terminate() () from /usr/lib64/libstdc++.so.6
>
> #6  0x0000fffff7aa2604 in __cxa_throw () from /usr/lib64/libstdc++.so.6
>
> #7  0x00000000007b3fc0 in paramVal::getInteger (this=this@entry=0xc0d7c0)
>
>     at /usr/include/c++/11/ext/new_allocator.h:89
>
> #8  0x0000000000796160 in paramList::getInteger (this=<optimized out>, index=index@entry=51, value=0xffffffffe050)
>
>     at ../../asyn/asynPortDriver/asynPortDriver.cpp:259
>
> #9  0x000000000079627c in asynPortDriver::getIntegerParam (value=<optimized out>, index=51, list=0, this=0xc09ee0)
>
>     at ../../asyn/asynPortDriver/asynPortDriver.cpp:1302
>
> #10 asynPortDriver::getIntegerParam (this=0xc09ee0, index=51, value=<optimized out>)
>
>     at ../../asyn/asynPortDriver/asynPortDriver.cpp:1289
>
> #11 0x000000000048b364 in NDPluginDriver::connectToArrayPort
>
> (this=this@entry=0xc09ee0) at ../NDPluginDriver.cpp:253
>
> #12 0x000000000044fdc8 in NDPluginStats::NDPluginStats (this=0xc09ee0, portName=<optimized out>,
>
>     queueSize=<optimized out>, blockingCallbacks=<optimized out>, NDArrayPort=<optimized out>,
>
>     NDArrayAddr=<optimized out>, maxBuffers=<optimized out>, maxMemory=<optimized out>, priority=0, stackSize=0)
>
>     at ../NDPluginStats.cpp:838
>
> #13 0x000000000044fe6c in NDStatsConfigure (portName=0xc0fae1 "STATS1", queueSize=20, blockingCallbacks=0,
>
>     NDArrayPort=0xc0faed "TetrAMM", NDArrayAddr=0, maxBuffers=0, maxMemory=0, priority=0, stackSize=0)
>
>     at ../NDPluginStats.cpp:848
>
> #14 0x000000000044feec in initCallFunc (args=<optimized out>) at
>
> ../NDPluginStats.cpp:874
>
> #15 0x0000000000899c00 in iocshBody (
>
>     pathname=pathname@entry=0xbdcad0
>
> "/epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0/iocBoot/commonPlugins.cmd",
>
> commandLine=commandLine@entry=0x0) at
>
> ../../../src/libCom/iocsh/iocsh.cpp:771
>
> #16 0x0000000000899a24 in iocshBody (
>
>     pathname=pathname@entry=0xbbe4c0
>
> "/epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0/iocBoot/iocTetrAMM/TetrAMM.cmd",
>
> commandLine=commandLine@entry=0x0) at
>
> ../../../src/libCom/iocsh/iocsh.cpp:744
>
> #17 0x0000000000899a24 in iocshBody (pathname=<optimized out>, commandLine=<optimized out>)
>
>     at ../../../src/libCom/iocsh/iocsh.cpp:744
>
> --Type <RET> for more, q to quit, c to continue without paging--
>
> #18 0x00000000004095f8 in main (argc=<optimized out>, argv=<optimized
>
> out>) at ../quadEMTestAppMain.cpp:16
>
>
>
>
>
> Some additional information about quadEM-R7-0 compiling: I initially had compiling error like:
>
> ../drvTetrAMM.cpp:258:22: error: narrowing conversion of ‘18443366386873925631’ from ‘long long unsigned int’ to ‘long long int’ [-Wnarrowing] 258 | case 0xfff40002ffffffffll:
>
> So I changed line 258 (and three following case ***** sentences) to:
>
> case static_cast<long long int>(0xfff40002ffffffff):
>
> .....
>
> case static_cast<long long int>(0xfff40000ffffffff):
>
> .....
>
> case static_cast<long long int>(0xfff40001ffffffff):
>
> .....
>
> case static_cast<long long int>(0xfff40003ffffffff):
>
>
>
> I hope these changes are irrelevant.
>
>
>
> Thank you very much!
>
> Rong
>
>
>
> On Tue, Dec 19, 2023 at 4:10 PM Mark Rivers <rivers at cars.uchicago.edu> wrote:
>
> >
>
> > Hi Rong,
>
> >
>
> >
>
> >
>
> > You appear to be running asyn R4-36.
>
> >
>
> >
>
> >
>
> > You are getting this error:
>
> >
>
> >
>
> >
>
> > NDStatsConfigure("STATS1", 20, 0, "TetrAMM", 0, 0, 0) terminate called after throwing an instance of 'ParamValNotDefined'
>
> >
>
> >   what():  paramVal::getInteger value not defined Aborted (core
>
> > dumped)
>
> >
>
> >
>
> >
>
> > I do not understand that.  The only place where paramVal::getInteger should be called is in this line in asynPortDriver R4-36:
>
> >
>
> > https://github.com/epics-modules/asyn/blob/89c2b93d14cdb7fe48d490785cd
>
> > 7780c1b997277/asyn/asynPortDriver/asynPortDriver.cpp#L288
>
> >
>
> >
>
> >
>
> > Note that paramVal::getInteger is called in a try/catch block, and exception ParamValNotDefined is explicitly caught.  So it should simply return asynParamUndefined to the function that called paramList::GetInteger, which is normally asynPortDriver::getIntegerParam().
>
> >
>
> >
>
> >
>
> > Your error message says that the crash generated a core dump.  I think you need to run gdb on that core file and send the output of the gdb “backtrace” command.
>
> >
>
> >
>
> >
>
> > Alternatively you can run the IOC again under gdb as follows:
>
> >
>
> >
>
> >
>
> > gdb ../../bin/linux-arm/quadEMTestApp
>
> >
>
> > run st.cmd
>
> >
>
> >
>
> >
>
> > (when it crashes type this command)
>
> >
>
> > backtrace
>
> >
>
> >
>
> >
>
> > That will show the call stack when it crashed, and we may be able to figure out why it is happening.
>
> >
>
> >
>
> >
>
> > Mark
>
> >
>
> >
>
> >
>
> > -----Original Message-----
>
> > From: Tech-talk <tech-talk-bounces at aps.anl.gov> On Behalf Of Rong
>
> > Huang via Tech-talk
>
> > Sent: Tuesday, December 19, 2023 2:35 PM
>
> > To: tech-talk at aps.anl.gov
>
> > Subject: quadEM-R7-0 ParamValNotDefined
>
> >
>
> >
>
> >
>
> > Hello,
>
> >
>
> >
>
> >
>
> > Sorry I am living in the past. I am trying to install the old version
>
> >
>
> > quadEM-R7-0 to match the  EPICS_base version (3.14.12.8) and Asyn version in use.
>
> >
>
> >
>
> >
>
> > I installed everything without vxWorks, with the intention to run the IOC on a PC. Currently working on RHEL linux-arm inside VMware Fusion.
>
> >
>
> >
>
> >
>
> > The TetrAMM instrument is new, but I guess the error message is not
>
> > about hardware but EPICS software. The printout of starting IOC is as
>
> >
>
> > follows:
>
> >
>
> >
>
> >
>
> > [rh@localhost iocTetrAMM]$ ../../bin/linux-arm/quadEMTestApp st.cmd
>
> >
>
> > errlogInit(5000)
>
> >
>
> > < envPaths
>
> >
>
> > epicsEnvSet("ARCH","linux-x86_64")
>
> >
>
> > epicsEnvSet("IOC","iocTetrAMM")
>
> >
>
> > epicsEnvSet("TOP","/epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0
>
> > ")
>
> >
>
> > epicsEnvSet("SUPPORT","/epicsioc/used/epics/synApps_5_8_3_14_8")
>
> >
>
> > epicsEnvSet("AREA_DETECTOR","/epicsioc/used/epics/synApps_5_8_3_14_8/a
>
> > reaDetector-R2-5")
>
> >
>
> > epicsEnvSet("EPICS_BASE","/epicsioc/used/epics/base-3.14.12.8")
>
> >
>
> > epicsEnvSet("ASYN","/epicsioc/used/epics/synApps_5_8_3_14_8/asyn-4-36"
>
> > )
>
> >
>
> > epicsEnvSet("ADSUPPORT","/epicsioc/used/epics/synApps_5_8_3_14_8/areaD
>
> > etector-R2-5/ADSupport")
>
> >
>
> > epicsEnvSet("ADCORE","/epicsioc/used/epics/synApps_5_8_3_14_8/areaDete
>
> > ctor-R2-5/ADCore")
>
> >
>
> > epicsEnvSet("AUTOSAVE","/epicsioc/used/epics/synApps_5_8_3_14_8/autosa
>
> > ve-5-10")
>
> >
>
> > epicsEnvSet("BUSY","/epicsioc/used/epics/synApps_5_8_3_14_8/busy-1-7-2
>
> > ")
>
> >
>
> > epicsEnvSet("CALC","/epicsioc/used/epics/synApps_5_8_3_14_8/calc-3-7-3
>
> > ")
>
> >
>
> > epicsEnvSet("SNCSEQ","/epicsioc/used/epics/synApps_5_8_3_14_8/seq-2-2-
>
> > 7")
>
> >
>
> > epicsEnvSet("SSCAN","/epicsioc/used/epics/synApps_5_8_3_14_8/sscan-2-1
>
> > 1-3")
>
> >
>
> > epicsEnvSet("DEVIOCSTATS","/epicsioc/used/epics/synApps_5_8_3_14_8/ioc
>
> > Stats-3-1-16")
>
> >
>
> > epicsEnvSet("IPAC","/epicsioc/used/epics/synApps_5_8_3_14_8/ipac-2-15"
>
> > )
>
> >
>
> > epicsEnvSet("IPUNIDIG","/epicsioc/used/epics/synApps_5_8_3_14_8/ipUnid
>
> > ig-2-10")
>
> >
>
> > # Tell EPICS all about the record types, device-support modules,
>
> > drivers, # etc. in this build
>
> >
>
> > epicsEnvSet("QUADEM","/epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R
>
> > 7-0")
>
> >
>
> > dbLoadDatabase("/epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0/db
>
> > d/quadEMTestApp.dbd")
>
> >
>
> > quadEMTestApp_registerRecordDeviceDriver(pdbbase)
>
> >
>
> > # The search path for database files
>
> >
>
> > # Note: the separator between the path entries needs to be changed to
>
> > a semicolon (;) on Windows epicsEnvSet("EPICS_DB_INCLUDE_PATH",
>
> >
>
> > "/epicsioc/used/epics/synApps_5_8_3_14_8/areaDetector-R2-5/ADCore/db:/
>
> > epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0/db")
>
> >
>
> > <
>
> > /epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0/iocBoot/iocTetrAMM
>
> > /TetrAMM.cmd
>
> >
>
> > epicsEnvSet("PREFIX",    "quadEMTest:")
>
> >
>
> > epicsEnvSet("RECORD",    "TetrAMM:")
>
> >
>
> > epicsEnvSet("PORT",      "TetrAMM")
>
> >
>
> > epicsEnvSet("TEMPLATE",  "TetrAMM")
>
> >
>
> > epicsEnvSet("QSIZE",     "20")
>
> >
>
> > epicsEnvSet("RING_SIZE", "10000")
>
> >
>
> > epicsEnvSet("TSPOINTS",  "2048")
>
> >
>
> > #epicsEnvSet("IP",        "164.54.160.165:10001")
>
> >
>
> > epicsEnvSet("IP",        "10.1.17.35:10001")
>
> >
>
> > #drvAsynIPPortConfigure("portName","hostInfo",priority,noAutoConnect,
>
> >
>
> > #                        noProcessEos)
>
> >
>
> > drvAsynIPPortConfigure("IP_TetrAMM", "10.1.17.35:10001", 0, 0, 0)
>
> > asynOctetSetInputEos("IP_TetrAMM",  0, "\r\n")
>
> > asynOctetSetOutputEos("IP_TetrAMM", 0, "\r") # Set both
>
> > TRACE_IO_ESCAPE (for ASCII command/response) and TRACE_IO_HEX (for
>
> > binary data) asynSetTraceIOMask("IP_TetrAMM", 0, 6)
>
> >
>
> > #asynSetTraceFile("IP_$(PORT)",   0, "AHxxx.out")
>
> >
>
> > #asynSetTraceMask("IP_$(PORT)",   0,  9)
>
> >
>
> > asynSetTraceIOTruncateSize("IP_TetrAMM", 0, 4000) # Load asynRecord
>
> > record
>
> > dbLoadRecords("/epicsioc/used/epics/synApps_5_8_3_14_8/asyn-4-36/db/as
>
> > ynRecord.db",
>
> >
>
> > "P=quadEMTest:, R=asyn1,PORT=IP_TetrAMM,ADDR=0,OMAX=256,IMAX=256")
>
> >
>
> > drvTetrAMMConfigure("TetrAMM", "IP_TetrAMM", 10000)
>
> > dbLoadRecords("/epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0/db/
>
> > TetrAMM.template",
>
> >
>
> > "P=quadEMTest:, R=TetrAMM:, PORT=TetrAMM") <
>
> > /epicsioc/used/epics/synApps_5_8_3_14_8/quadEM-R7-0/iocBoot/commonPlug
>
> > ins.cmd
>
> >
>
> > epicsEnvSet("T1",  "Current1")
>
> >
>
> > epicsEnvSet("T2",  "Current2")
>
> >
>
> > epicsEnvSet("T3",  "Current3")
>
> >
>
> > epicsEnvSet("T4",  "Current4")
>
> >
>
> > epicsEnvSet("T5",  "SumX")
>
> >
>
> > epicsEnvSet("T6",  "SumY")
>
> >
>
> > epicsEnvSet("T7",  "SumAll")
>
> >
>
> > epicsEnvSet("T8",  "DiffX")
>
> >
>
> > epicsEnvSet("T9",  "DiffY")
>
> >
>
> > epicsEnvSet("T10", "PosX")
>
> >
>
> > epicsEnvSet("T11", "PosY")
>
> >
>
> > # Create 11 statistics plugins
>
> >
>
> > NDStatsConfigure("STATS1", 20, 0, "TetrAMM", 0, 0, 0) terminate called after throwing an instance of 'ParamValNotDefined'
>
> >
>
> >   what():  paramVal::getInteger value not defined Aborted (core
>
> > dumped)
>
> >
>
> >
>
> >
>
> >
>
> >
>
> > Thank you for your attention,
>
> >
>
> > Rong

References:
quadEM-R7-0 ParamValNotDefined Rong Huang via Tech-talk
RE: quadEM-R7-0 ParamValNotDefined Mark Rivers via Tech-talk
Re: quadEM-R7-0 ParamValNotDefined Rong Huang via Tech-talk
RE: quadEM-R7-0 ParamValNotDefined Mark Rivers via Tech-talk

Navigate by Date:
Prev: RE: quadEM-R7-0 ParamValNotDefined Mark Rivers via Tech-talk
Next: Re: Steps for installing any EPICS Device Support module Eusebio Naif Al-Soliman Fuentes via Tech-talk
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  <20232024 
Navigate by Thread:
Prev: RE: quadEM-R7-0 ParamValNotDefined Mark Rivers via Tech-talk
Next: Re: quadEM-R7-0 ParamValNotDefined Ralph Lange via Tech-talk
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  <20232024