Newer
Older
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>EPICS Base R3.14.12.2-DEV Release Notes</title>
<h1 align="center">EPICS Base Release 3.14.12.2-DEV</h1>
<h2 align="center">Changes between 3.14.12.2 and 3.14.12.3</h2>
<!-- Insert new items immediately below here ... -->
<h4>Build problem with db dependencies</h4>
<p>The dependency output for .db and .acf files created by makeDbDepends.pl did
not show the directories of the depended files. The makeDbDepends.pl script has
been replaced by mkmf.pl for this purpose after modifying it to accept multiple
-I include directory options and more than on source file on the command line.
The makeDbDepends.pl script has been removed from Base.</p>
<h4>Native linux-arm builds added</h4>
<p>The configuration files needed for a linux-arm system to build Base for
itself have now been added. Both the Shell and Perl versions of the startup
EpicsHostArch scripts now recognize both arm6l and arm7l CPUs and return the
generic linux-arm host architecture name for them.</p>
<h4>Launchpad Bugs Resolved</h4>
<p>The following are links to bugs in the Launchpad bug tracker that have been
fixed in this release:</p>
<ul>
<li>907761
<a href="https://launchpad.net/bugs/907761">
reading only 1st char of link in "long string" ($) syntax fails in read
error</a></li>
<li>903448
<a href="https://launchpad.net/bugs/903448">
RHEL5 nss ldap update cause stack size related failure</a></li>
<h4>Calcout and Seq record timestamps</h4>
<p>Both the calcout and seq record types were not updating the record's
timestamp before calling db_post_events() for some field updates. The calcout
record type will now update the record's timestamp before it posts a channel
access monitor on the DLYA field; this happens twice during record processing if
the ODLY field is larger than 0.</p>
<p>Timestamps from all seq record monitor events have been wrong since 1995 or
earlier, the time being provided was from the last time the record processed.
Now the record timestamp will be updated between reading each DOL1..DOLA link
and posting the monitor on the associated DO1..DOA field. The VAL field is
never given a value by the record processing code, but is used for posting
monitors when the alarm status or severity gets updated at the end of record
processing. Alarm monitors are now timestamped properly at that time.</p>
<h4>Comments in iocsh scripts</h4>
<p>The IOC shell was very particular about comments in previous versions of
Base. If the <tt>#</tt> character was indented using white-space characters it
had to be followed immediately by a white-space, comma or parenthesis character,
and macLib would report errors if the rest of the comment contained any
undefined macros. These restrictions have now been removed. The comment
character can come from expanding a macro without it having to be followed by
white-space, although in this case macLib will still report errors due to
undefined or circular macro definitions.</p>
<h4>MacOS-X: Don't use Ports/Fink unless configured</h4>
<p>Previous releases would automatically use headers and link to libraries found
in the DarwinPorts and Fink installation directories. This is now controlled by
entries in the <tt>CONFIG_SITE.darwinCommon.darwinCommon</tt> file in the
<tt>configure/os</tt> directory, which are commented out by default. Recent
versions of MacOS-X come with an implementation of readline, so those additional
code repositories are no longer required.</p>
<h2 align="center">Changes between 3.14.12.1 and 3.14.12.2</h2>
<h4>Path for Cap5 loadable library changed</h4>
<p>The perl CA module makes use of a loadable library, which used to be loaded
from the base/lib/<host-arch> directory. However different versions of
Perl require different loadable library binaries as the Perl ABI can change.
Now the library will be installed into and loaded from the directory
base/lib/perl/<version>/<archname> where both <version> and
<archname> are taken from the Perl configuration. This makes it possible
for the same Perl script to be run on both RHEL5 and RHEL6 workstations say, even
though they use different versions of Perl.</p>
<p>To achieve that, first build EPICS Base using the older OS version. Then
on a machine running the newer version, go into the base/src/cap5 directory and
run a <tt>make rebuild</tt> command. This will rebuild the libCap5.so file and
install it into the location appropriate for its Perl version and architecture.</p>
<h4>Build configurations updated for Apple iOS targets</h4>
<p>The build process can now construct universal binaries containing both ARMv6
and ARMv7 code, and several defaults have been changed when building for iOS
targets:</p>
<ul>
<li>The default value for IOS_VERSION is now 5.0, edit the setting in
<tt>configure/os/CONFIG_SITE.Common.iosCommon</tt> to use an older version.</li>
<li>With the introduction of iOS 5.0 we have switched the C++ compiler for
ios-arm from GNU g++ to using the LLVM-based clang++ (the GNU compilers are
apparetnly no longer included with the SDK). This can be switched back by
editing the new <tt>CONFIG_SITE.Common.ios-arm</tt> file.</li>
<li>Like the Darwin builds, universal binaries can now be compiled for the
ios-arm target, containing either or both ARMv6 and ARMv7 instructions. This is
configured by setting ARCH_CLASS in the new <tt>CONFIG_SITE.Common.ios-arm</tt>
file. The default is now to build for ARMv7 only, which is not compatible with
the original iPhone 1 or 3G, or with the iPod Touch Generations 1 or 2.</li>
</ul>
<h4>Added <tt>-b</tt> option to dbExpand</h4>
<p>This turns off monotonic checking of breakpoint tables.</p>
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<h4>Launchpad Bugs Resolved</h4>
<p>The following are links to bugs in the Launchpad bug tracker that have been
fixed in this release:</p>
<ul>
<li>697509
<a href="https://launchpad.net/bugs/697509">
Thread synchronization issue in libCom/osi/os/WIN32/osdTime.cpp</a></li>
<li>697516
<a href="https://launchpad.net/bugs/697516">
Crash occurs in Com.dll if filetime is before the EPICS epoch </a></li>
<li>697517
<a href="https://launchpad.net/bugs/697517">
WIN32 osdtime should handle the system time change properly</a></li>
<li>697519
<a href="https://launchpad.net/bugs/697519">
The incorrect way to compute the roll-over in WIN32 osdTime.cpp</a></li>
<li>736273
<a href="https://launchpad.net/bugs/736273">
nonstandard c++ mutable ref in cac</a></li>
<li>786979
<a href="https://launchpad.net/bugs/786979">
incorrect ref counting for timer queues</a></li>
<li>794749
<a href="https://launchpad.net/bugs/794749">
3.14.12 caget without -c always requests maximum element count</a></li>
<li>816678
<a href="https://launchpad.net/bugs/816678">
g++ generic thunk generation fails virtual varargs</a></li>
<li>831648
<a href="https://launchpad.net/bugs/831648">
RTEMS dynamically loaded app fails to execute osdTimeRegister</a></li>
<li>835138
<a href="https://launchpad.net/bugs/835138">
Incorrect calculation oss priorities for posix threads</a></li>
<li>861214
<a href="https://launchpad.net/bugs/861214">
epicsThreadOnce crashes in static object destructor on win32</a></li>
<li>861627
<a href="https://launchpad.net/bugs/861627">
RULES.db has incorrect dbExpand flags</a></li>
<li>878372
<a href="https://launchpad.net/bugs/878372">
in-memory channel, ca client subscribe isnt thread safe</a></li>
<li>878387
<a href="https://launchpad.net/bugs/878387">
In memory channel clear fails from put callback function</a></li>
</ul>
<h4>Added database sanity checks to iocInit</h4>
<p>Two menus may legitimately be modified by users; some checks have been added
that run at iocInit and make sure the choices haven't been changed too much for
the IOC to function properly:</p>
<ul>
<li><tt>menuConvert</tt> is checked to flag problems with IOCs converted from
3.13.x, where the SLOPE choice didn't exist.</p>
<li><tt>menuScan</tt> is checked to ensure the three initial choices are still
present and that there is at least one periodic scan rate.</li>
</ul>
<h4>Fix various catools issues</h4>
<p>Array handling in the caget and camonitor programs has been debugged, fixing
<a href="https://bugs.launchpad.net/bugs/794749">launchpad bug 794749</a> along
with a few other related issues dating back to the addition of variable length
array support.</p>
<h4>Another race condition in errlog cleaned up</h4>
<p>If it was still busy when the IOC was closed down, the errlog thread could
have preempted the exit handler and freed the various internal pvtData mutex and
event objects too soon.</p>
<p>Several make targets have been changed. Note that these can only be used from
an application's <top> directory.</p>
<dl>
<dt><code>make uninstall.<arch></code></dt>
<dd>Deletes the bin/<arch> and lib/<arch> directories for
<arch> only. Note that <arch> does not have to be an
architecture that this host is configured to build, it works for any
arch.</dd>
<dt><code>make archuninstall</code></dt>
<dd>Deletes the bin/<arch> and lib/<arch> directories for all
architectures that this host is configured to build. Should not affect files
used for multiple architectures, or for host or target architectures that
this host is not configured to build.</dd>
<dd>Does archuninstall and also deletes the other install directories include,
db, dbd, doc, html, templates and java. This will affect subsequent builds
for other architectures, but it doesn't delete their bin/<arch> or
lib/<arch> contents.</dd>
<dt><code>make realuninstall</code></dt>
<dd>Deletes all install directories for all architectures.</dd>
<dt><code>make distclean</code></dt>
<dd>Does realclean realuninstall as before, and also now does a cvsclean,
which removes file remnants from CVS operations named <code>.#*</code> and
editor backups named <code>*~</code> throughout the source tree.</dd>
</dl>
<h4>Compress record type</h4>
<p>This record now posts monitors on its NUSE field whenever its value changes.
A new field OUSE was added to support this.</p>
<h4>Remove C++ build rule for <code>.C</code> files</h4>
<p>An early convention on Unix systems was to name C++ files with an upper-case
extention, <code>.C</code>. This does not work on Windows or MacOS where the
filesystems are case-insensitive, and the C++ build rule was causing problems so
has been eliminated. Any remaining C++ source files that are still using this
convention will have to be renamed, preferably to <code>.cpp</code></p>
<h4>Support <code>make -s</code> on Windows</h4>
<p>The flag to silence build output did not work on some Windows architecture
combinations. This has now been fixed.</p>
<h4>iocLogServer now supports logrotate</h4>
<p>The feature in the iocLogServer that closed and reopened the logfile used to
ignore the SIGHUP signal when the log filename did not change. This has now been
changed so these logfiles can be used with the standard Linux logrotate
package.</p>
<h2 align="center">Changes between 3.14.12 and 3.14.12.1</h2>
<p>This release only contains changes that fix bugs or add build configuration
files for new or updated target architectures. No functionality has been
changed, and as this is a patch release the software has not gone through as
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
rigorous a testing regime as it does for a normal minor release.</p>
<h4>Launchpad Bugs Resolved</h4>
<p>The following are links to bugs in the Launchpad bug tracker that have been
fixed in this release:</p>
<ul>
<li>693534
<a href="https://launchpad.net/bugs/693534">
errlog causes crash on IOC exit</a></li>
<li>701673
<a href="https://launchpad.net/bugs/701673">
Large array problem in 3.14.12</a></li>
<li>717252
<a href="https://launchpad.net/bugs/771252">
local caput causes ioc crash on win32</a></li>
<li>750549
<a href="https://launchpad.net/bugs/750549 ">
epicsTime has non-portable c++ static initialization</a></li>
<li>753137
<a href="https://launchpad.net/bugs/753137">
Makefile dependency checking of database files is broken</a></li>
</ul>
<h4>New/Updated target architectures</h4>
<p>The following target architectures have been added or updated:</p>
<dl>
<dt>vxWorks-mpc8548</dt>
<dt>vxWorks-mpc8548-debug</dt>
<dd style="margin-bottom: 1ex">This PowerPC CPU is used on the Emerson MVME4100
VME CPU board (from Ernest Williams, SLAC).</dd>
<dt>vxWorks-ppc32</dt>
<dt>vxWorks-ppc32sf</dt>
<dt>vxWorks-ppc32-debug</dt>
<dt>vxWorks-ppc32sf-debug</dt>
<dd style="margin-bottom: 1ex">New generic 32-bit PowerPC targets for vxWorks
6.x, using hardware or software floating-point. These targets can be used
instead of the CPU-specific ppc603, ppc604, mpc8540 and mpc8548 targets (and
their _long alternatives, these targets are all compiled with the -mlongcall
flag) to reduce the number of distinct build targets needed when supporting
multiple PowerPC board types.</dd>
<dt>ios-386</dt>
<dt>ios-arm</dt>
<dd style="margin-bottom: 1ex">Updated for iOS 4.3, which is now the default OS
version (from Tom Palaia, ORNL).</dd>
</dl>
<h4>IOCSH_STARTUP_SCRIPT environment variable</h4>
<p>The function <tt>iocsh(const char *pathname)</tt> now sets the environment
variable <tt>IOCSH_STARTUP_SCRIPT</tt> to the value of its pathname
argument before it starts executing the script commands.</p>
<h4>RTEMS-mvme5500</h4>
<p>This target now automatically links binary files with the bspExt library, and
adds the extension <tt>.elf</tt> to their filenames, matching the other mvme
targets.</p>
<h4>RTEMS Network Buffer Configuration</h4>
<p>Add the macros <tt>RTEMS_NETWORK_CONFIG_MBUF_SPACE</tt> and
<tt>RTEMS_NETWORK_CONFIG_MBUF_SPACE</tt> to rtems_netconfig.c to allow
customization of the network buffer space allocated. The configuration files
for the RTEMS-mvme3100, RTEMS-mvme5500 and RTEMS-beatnik targets now default to
allocating 2MB for mbufs and 5MB for clusters; other RTEMS targets will continue
to use 180KB and 350KB rspectively.</p>
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
<h4>RTEMS TFTP filesystem</h4>
<p>Use the new mount API to initialize TFTP on newer RTEMS versions.</p>
<h4>C++ build issues on older Solaris compiler</h4>
<p>Dirk Zimoch reported some problems building with an older SUNWspro C++
compiler which have been resolved where possible.</p>
<h4>FreeBSD broadcast problem</h4>
<p>The <tt>ifreq_size</tt> macro in freebsd/osdsock.h must be different in BSD
4.4.</p>
<h4>Thread exit synchronization</h4>
<p>When finished waiting for a thread to exit, signal the event in case other
threads are waiting also.</p>
<h4>Win32 osdTime provider fix</h4>
<p>Jeff Hill fixed the last time compare in PLL drift factor update loop.</p>
<h4>Errlog can lose messages</h4>
<p>Systems that generate large numbers of errlog messages or have a slow message
listener could overwrite older messages in the message buffer after the buffer
wraps. This also corrects and annotates the test code to describe what's being
checked.</p>
<p>When the IOC is shutting down, the errlog thread should process all queued
messages before it quits.</p>
<h4>Back-slash escapes for Win32</h4>
<p>Stephen Norum pointed out the need for various Perl scripts to escape
back-slash characters in Windows file paths.</p>
<h4>catools on Windows</h4>
<p>Windows 7 does not properly support line-mode buffering of stdio streams; the
catools programs used this mode to ensure that they could be used in pipelines,
but in Windows 7 they became fully buffered and are not flushed when the program
exits, so buffering of stdout has now been completely disabled on Windows.</p>
<h2 align="center">Changes between 3.14.11 and 3.14.12</h2>
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
<h4>Launchpad Bugs Resolved</h4>
<p>The following are links to bugs in the Launchpad bug tracker that have been
fixed in this release:</p>
<ul>
<li>541258
<a href="https://bugs.launchpad.net/epics-base/+bug/541258">
compiler warnings in base</a></li>
<li>541264
<a href="https://bugs.launchpad.net/epics-base/+bug/541264">
CA subscription element count is fixed - eliminates compressed video
option</a></li>
<li>541331
<a href="https://bugs.launchpad.net/epics-base/+bug/541331">
Several devLib routines don't use vector table</a></li>
<li>541391
<a href="https://bugs.launchpad.net/epics-base/+bug/541391">
when subscribing for zero elements, array element count should be
dynamic</a></li>
<li>545385
<a href="https://bugs.launchpad.net/epics-base/+bug/545385">
SIGFPE calculating epicsNAN, epicsINF</a></li>
<li>546991
<a href="https://bugs.launchpad.net/epics-base/+bug/546991">
prev. value fields not initialized in init_record</a></li>
<li>551909
<a href="https://bugs.launchpad.net/epics-base/+bug/551909">
macExpandString writes out of boundary</a></li>
<li>552803
<a href="https://bugs.launchpad.net/epics-base/+bug/552803">
Compress record segfaults on ALG (algorithm) change</a></li>
<li>571121
<a href="https://bugs.launchpad.net/epics-base/+bug/571121">
Perl issue compiling with INSTALL_LOCATION set</a></li>
<li>572589
<a href="https://bugs.launchpad.net/epics-base/+bug/572589">
Make dbl emit empty strings for non-existent fields</a></li>
<li>595154
<a href="https://bugs.launchpad.net/epics-base/+bug/595154">
C++ errors building base using cygwin1.7</a></li>
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
<li>595240
<a href="https://bugs.launchpad.net/epics-base/+bug/595240">
C code uses C++ keywords as variable names</a></li>
<li>595242
<a href="https://bugs.launchpad.net/epics-base/+bug/595242">
C code uses C++ "//" style comments</a></li>
<li>615916
<a href="https://bugs.launchpad.net/epics-base/+bug/615916">
Bug in RULES.Db breaks parallel make when using MSI</a></li>
<li>625034
<a href="https://bugs.launchpad.net/epics-base/+bug/625034">
Remove compiler checks for VMS in src/toolsComm/flex</a></li>
<li>626848
<a href="https://bugs.launchpad.net/epics-base/+bug/626848">
Build with GNU make 3.82 fails when installing libraries</a></li>
<li>626859
<a href="https://bugs.launchpad.net/epics-base/+bug/626859">
RTEMS build does not create .d dependancy files</a></li>
<li>627511
<a href="https://bugs.launchpad.net/epics-base/+bug/627511">
MSVC linker fails if input lib dirs start with forward slash</a></li>
<li>644263
<a href="https://bugs.launchpad.net/epics-base/+bug/644263">
EPICS softIOC always dies in response to SIGHUP</a></li>
<li>650000
<a href="https://bugs.launchpad.net/epics-base/+bug/650000">
caput tool won't write to mbbo w/o state strings</a></li>
<li>663875
<a href="https://bugs.launchpad.net/epics-base/+bug/663875">
NTP broadcasts break NTP synchronization (RTEMS)</a></li>
<li>667384
<a href="https://bugs.launchpad.net/epics-base/+bug/667384">
are the request and response bytes pending reversed in casr?</a></li>
<li>680702
<a href="https://bugs.launchpad.net/epics-base/+bug/680702">
calc and calcout record get_precision bug</a></li>
</ul>
<h4>Support for Cygwin 1.7</h4>
<p>Base can now built with shared libraries on Cygwin 1.7.x, although only with
the gcc-3 compiler. Cygwin 1.5.x only works when compiled without shared
libraries (set <tt>STATIC_BUILD=YES</tt> and <tt>SHARED_LIBRARIES=NO</tt> in
<tt>configure/CONFIG_SITE</tt>). There is code in Base now that depends on the
Cygwin version, so make sure that you rebuild Base if you upgrade your Cygwin
installation.</p>
<h4>epicsEvent</h4>
<p>epicsEvent is now explicitly required to act as a simple binary semaphore.
A single epicsEventSignal call must awaken just one thread when multiple
threads are waiting for the event. A test that checks for this has been
added to epicsEventTest and the Application Developer's Guide has been updated
to describe this requirement.</p>
<h4>Enable array puts to subArray records</h4>
<p>It is now possible to put an array into the VAL field of a soft channel
subArray record whose INP field is empty. Processing the record then causes the
sub-array extraction process to be done on the current VAL array. This can be
used to feed a sequence of values into some other record (set INDX=1 and
NELM=MALM and read one element out of the VAL field each time).</p>
<h4>Added windows-x64 target</h4>
<p>64-bit binaries for Microsoft Windows platforms can now be built using the
target architecture windows-x64, which is also a valid cross-build target for a
win32-x86 host. We do not currently support or recommend trying to use 64-bit
builds on MinGW or Cygwin.</p>
Andrew Johnson
committed
<h4>Deleted osf-alpha targets</h4>
<p>Kazuro Furukawa has been unable to compile EPICS Base on this target for the
last few releases and it's not really needed any more, so the targets have been
deleted from this release.</p>
<h4>Expanded CALC expressions</h4>
<p>The calc and calcout records can now accept infix expressions up to 79
characters long, although you have to use long string support to read or write
any that are more than 39 characters. The postfix interpreter now sports an
integer literal token as well as the double literal one, which reduces the
maximum size of a postfix buffer needed for any specific size of infix buffer by
a factor of 2/3.</p>
<h4>Added Apple iOS target architectures</h4>
<p>Tom Pelaia II and Mark Engbretson contributed build configuration files to
cross-compile Base for Apple's iOS operating system as used in the iPhone and
iPad. The target architecture for these is ios-arm, and there is also an ios-x86
target which compiles for the iPhone Simulator running on darwin-x86.</p>
<p>To build these for iOS, uncomment the <tt>CROSS_COMPILER_TARGET_ARCHS</tt>
definition in <tt>configure/os/CONFIG_SITE.darwin-x86.Common</tt> and check the
settings in <tt>configure/os/CONFIG_SITE.Common.iosCommon</tt>.</p>
<h4>Dynamic arrays over CA</h4>
<p>Dynamic array sizing was developed by Michael Abbott at the 2010 EPICS
Codeathon. It permits a CA client to fetch only the currently valid elements of
an array by specifying a COUNT of zero to either of the ca_array_get_callback()
or ca_create_subscription() routines. It has never before been legal to pass a
COUNT of zero to the ca_array_get_callback() routine, but this development does
introduce a subtle change to the published API of the ca_create_subscription()
routine.</p>
<p>In previous releases a COUNT of zero for a subscription meant use the
ca_element_count() for the channel, but from this release it can return fewer
elements (never more), at the behest of the server. The number of elements can
vary with subsequent array update events, so a client that uses this technique
must use the count field of the event_handler_args in its callback function each
time it is called to obtain the correct element count from the server. Note that
the ca_element_count() value for a channel is only updated at connection time,
and supplies the maximum number of elements that the server array variable can
hold.</p>
<p>Dynamic arrays are currently only supported by the CA client library and IOC
server RSRV, the Perl CA library and the catools programs. The portable CAS does
not understand them, and database links that connect over CA do not attempt to
use them either. CA clients that try to use this functionality with a server
that does not support it will receive the same full-sized zero-filled arrays
that previous releases supported.</p>
<h4>CA over TCP connections</h4>
<p>Merged the CA-over-TCP changes developed by Ralph and Jeff at the 2008 EPICS
Codeathon for the CA client library and both servers (CAS and RSRV). This adds
a new CA configuration variable <tt>CA_NAME_SERVERS</tt> which is used by the
client library as a list of host names or addresses of CA servers to be
connected to and queried over TCP sockets. This can be used to tunnel CA
connections over ssh. See the CA reference manual for more details.</p>
<li>Fixed bug in memory allocation that caused crashes when linking other
records to aai or aao.</li>
<li>Fixed bug where NELM was modified instead of NORD.</li>
<li>Added Soft Channel device support.</li>
<li>Added SIOL link and proper simulation mode for Soft Channel support.</li>
<li>Added MPST, APST and HASH fields for monitor on change support like in
waveform record.</li>
</ul>
<h4>New capr.pl script</h4>
<p>This Perl program attempts to replicate the behaviour of the IOC command
'dbpr' over Channel Access, printing the fields and values of the named record.
Run <tt>capr.pl -h</tt> for usage information.</p>
<h4>devLib cleanup</h4>
<ul>
<li>Add VME connect/disconnect IRQ calls to the "virtual os" table</li>
<li>It is now possible to compile all devLib code on targets without runtime
support</li>
<li>All internal functions are made static. Some were not before.</li>
<li>Move VME calls to <tt>devLibVME.h</tt>. <tt>devLib.h</tt> contains general
defintions and error codes.</li>
<li>For compatibility <tt>devLib.h</tt> includes <tt>devLibVME.h</tt> unless the
macro <tt>NO_DEVLIB_COMPAT</tt> is defined.</li>
<li>The "virtual os" table was renamed from <tt>pdevLibVirtualOS</tt> to
<tt>pdevLibVME</tt> reflecting the fact that other bus types will need seperate
tables.</li>
<li>The "virtual os" table API has been moved to a different header file,
<h4>DTYP and INP/OUT order</h4>
<p>The fields DTYP and INP/OUT can now be specified in any order in a database
instance (.db) file.</p>
<h4>Rewrite epicsThreadOnce()</h4>
<p>Michael Davidsaver suggested a better implementation of epicsThreadOnce()
which makes it possible for all architectures to detect recursive initialization
functions. This change also renames the routines to remove the original macro,
and fixes some questionable usage in places.</p>
<h4>Many Record Types</h4>
<p>Record types were not setting many 'last value' fields at initialization,
assuming that the VAL field would always hold the default value and thus not
giving correct initial monitor behavior in some circumstances.</p>
<h4>Compress Record Type</h4>
<p>Fixed a crash when ALG (algorithm) was changed to Average at runtime.</p>
<h4>configure/RELEASE Enhancements</h4>
<p>Variable definitions in a <tt>configure/RELEASE</tt> file may now use the
<tt>:=</tt> or <tt>?=</tt> assignment syntax. Release file processing now
prints a warning if an include file can't be not found (use <tt>-include</tt> if
this is expected) or if an undefined macro is used, and aborts if a circular
definition is expanded. The variable <tt>EPICS_HOST_ARCH</tt> can now be used,
but target-architecture-specific values must be set in a target-specific
<tt>configure/RELEASE</tt> file such as <tt>RELEASE.Common.linux-x86</tt>.</p>
<h4>VxWorks 6.7 and 6.8 support</h4>
<p>Added build support for the latest Wind River releases. This does not
include the ability to run on SMP vxWorks systems though, those will need some
more extensive modifications.</p>
<h4>RTEMS 4.10 support</h4>
<p>Added support for the latest release of RTEMS. There is no longer a
distinction between executive and malloc memory pools. The new mount() API
is used.</p>
<h4>Dependency file generation</h4>
<p>Changes to the way in which we generate header dependency files, which are
now named with a <tt>.d</tt> suffix instead of <tt>.depends</tt>. We now use
the compiler to generate these where possible, and create them in the
<tt>O.$(T_A)</tt> directory.</p>
<h4>Installed file permissions</h4>
<p>We now install libraries and other non-executable files with mode 444 rather
than 644.</p>
<h4>CA Perl5: strings and array subscriptions</h4>
<p>In some circumstances a string received from CA might not have been properly
zero-terminated; this has now been fixed. <tt>CA::create_subscription()</tt>
would not accept a zero for the subscription array length; this is now
permitted, in the underlying CA API this means use the native length from the
server.</p>
<h4>Linking Readline on Linux</h4>
<p>Different Linux distributions have different requirements when linking
readline; some need <tt>-lcurses</tt>, others <tt>-lncurses</tt> and others
don't require either. The <tt>configure/os/CONFIG_SITE.Common.linux-*</tt>
files now make this configuration easy to choose between different settings for
the <tt>COMMANDLINE_LIBRARY</tt> variable. If your build fails as it's trying
to create the <tt>antelope</tt> binary in the Base directory
<tt>src/toolsComm/antelope/O.<i>arch</i></tt> this is almost certainly the
problem. You will need to do a <tt>make rebuild</tt> from the top of Base after
fixing the setting of <tt>COMMANDLINE_LIBRARY</tt>.</p>
<h4>CA Command Line Tools Changes</h4>
<p>Three new options were added to the <tt>caget</tt> and <tt>camonitor</tt>
utilities, to allow printing float values (rounded) as hex, octal or binary.</p>
<h2 align="center">Changes between 3.14.10 and 3.14.11</h2>
<h4>Time provider on Win32</h4>
<p>A race condition meant that sometimes EPICS programs (including the internal
programs such as flex and antelope) built for Win32 architectures would not
start properly on Windows systems that have multiple CPUs. This race has been
fixed.</p>
<h4>Build system dependency change</h4>
<p>In order to get GNU make parallel execution (-j option) to work proprely for
multiple target architectures, a new dependency had to be added. Now all
cross-compiled builds depend on their host build. This means that when a
<tt>make <i>crosstargetarch</i></tt> command is issued, the EPICS_HOST_ARCH
target build will be executed first, followed by the <i>crosstargetarch</i>
build. Builds done in an O.<i>arch</i> directory will still only build the
<i>arch</i> targets however.</p>
<p>Mantis 361 fix - ca_add_fd_registration users might not receive select
wakeup</p>
<p>Mantis 359 fix - ca client library flow control mode related issues</p>
<p>Mantis 357 fix - high throughput multithreaded ca client appl thread could
be trapped in lib.</p>
<ul>
<li>Discovered during code review. Not seen in practice, but possible</li>
</ul>
<p>Mantis 285 fix - CA Documentation doesn't distinguish sync groups from
ca_put_callback()</p>
<p>Mantis 346 fix - deleting the chid passed in from within put cb handler
<p>Mantis 284 fix - channel clear protocol warning messages from PCAS</p>
<p>Mantis 237 fix - SEGV from simple CA client during context destroy</p>
<p>Mantis 242 fix - invalid DBR type not screened in client library when
<h4>Portable Channel Access Server changes</h4>
<p> These changes impact the Gateway (Proxy server) and other servers but not
the IOC.</h4>
<p>Mantis 360 fix - server is unresponsive for one of its clients, when
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
<p>Mantis 358 fix - PCAS service snap-in has no way to determine if its a put,
or a put calback.</p>
<p>Mantis 356 fix - medm display sometimes hangs until the motor stops when
controling motor through gw.</p>
<p>Mantis 350 fix - Incoming data corruption under heavy CAS load.</p>
<p>Mantis 340 fix - leak when performing a read and conversion fails.</p>
<p>Mantis 348 fix - A call to 'assert (item.pList == this)'
failed in ../../../../src/cas/generic/st/ioBlocked.cc line 112</p>
<p>Mantis 345 fix - Compilation warning: complaint about missing
gddDestructor</p>
<p>Mantis 343 fix - gddScalar::new() operator is not fully thread safe</p>
<p>Mantis 333 fix - resTable::removeAll() does not reset the item count</p>
<p>Mantis 335 fix - excas fails in clearOutstandingReads - maybe requires an
R3.13 client</p>
<p>Mantis 329 fix - GW hang, pthread_mutex_lock failed: error Invalid
argument message</p>
<p>Mantis 352 fix - gateway hangs temporarily under heavy load on 8-core
<ul>
<li>High throughput performance appears to be much better now for both scalars
and large arrays, but more testing needed in operational gateways</li>
</ul>
<h4>Timer Queue Library</h4>
<p>Mantis 336 fix - timer queue should have try / catch block around call to
user's expiration callback</p>
<p>Mantis 332 fix - epicsTimerTest failure, windows vista 64, dual core
<p>Mantis 328 fixed - orderly shutdown for soft IOC fails</p>
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
<h4>Application configure files</h4>
<p>The configuration directory files installed by makeBaseApp.pl have been
changing in recent releases to make them work more like the files in the Base
configuration directory. The CONFIG_APP file has gone, and its functionality is
now performed by the CONFIG file which should only be modified in exceptional
circumstances. The variables that used to be set in the CONFIG file now appear
in the new CONFIG_SITE file, and can be overridden for specific combinations of
host and target architectures by creating a file with name matching one of these
patterns:</p>
<ul>
<li>CONFIG_SITE.<host-arch>.Common</li>
<li>CONFIG_SITE.Common.<target-arch></li>
<li>CONFIG_SITE.<host-arch>.<target-arch></li>
</ul>
<p>Note that the setting for <tt>CHECK_RELEASE</tt> in the CONFIG_SITE files is
not compatible with previous releases of Base; if you are creating an
application that has to work with earlier releases, move the
<tt>CHECK_RELEASE</tt> setting back to the configure/Makefile where it used to
live.</p>
<p>The RELEASE file(s) can now define the variable <tt>RULES</tt> if you wish
the application to use build rules from some module other than EPICS_BASE. The
rules must appear in a configure subdirectory just like they do in Base.</p>
<h4>Compile-time assertions</h4>
<p>A new macro has been added to epicsAssert.h which performs assertion checks
at compile-time. <tt>STATIC_ASSERT(<i>expr</i>)</tt> can only be used when
<tt><i>expr</i></tt> can be evaluated by the compiler, and will cause the
compilation to fail if it evaluates to false. The resulting compiler error
message might appear a little obscure, but it does provide some explanation and
contains the line where the failure was discovered. Future versions of the C++
standard will probably contain a similar facility <tt>static_assert(<i>expr</i>,
<i>message</i>)</tt> but will require compiler support to be implemented.</p>
<p>The definitions for the macros <tt>YES</tt>, <tt>NO</tt>, <tt>NONE</tt>,
<tt>min()</tt> and <tt>max()</tt> have been deleted. <tt>YES</tt> and
<tt>NO</tt> have been replaced by <tt>menuYesNoYES</tt> and <tt>menuYesNoNO</tt>
from the menuYesNo.h file where they were used in several record types. The
other macros were not being used anywhere in Base, sncseq or Asyn.</p>
<p>The macro <tt>LOCAL</tt> that was a synonym for <tt>static</tt> is now
deprecated and will be deleted in R3.15, please adjust your code to use the
latter keyword. All uses of the <tt>READONLY</tt> macro from shareLib.h must
now be replaced by the keyword <tt>const</tt> as the macro has been deleted.</p>
<p>The dbDefs.h file was unnecessarily including various other libCom header
files which may have to be manually added to out-of-tree source files that
relied on this. The general rule for header files is that a header should only
include other headers that are needed for its own inclusion in any source file.
The <tt>#include</tt> statements that might need to be added are:</p>
<ul>
<li>#include <stdarg.h></li>
<li>#include "errlog.h"</li>
<li>#include "errMdef.h"</li>
<li>#include "ellLib.h"</li>
<li>#include "epicsTypes.h"</li>
</ul>
<p>A new macro <tt>CONTAINER(pointer, type, member)</tt> has been added which
calculates and returns a pointer to the parent structure when given a pointer to
a member, the structure type and the name of the member in that structure. On
GNU compilers the type of the pointer is checked to ensure that it matches the
member, so code using this macro should be built using gcc for additional
confidence.</p>
<h4>Long-deprecated errSymFind() function deleted</h4>
<p>This functionality was replaced by errSymLookup() many releases ago.</p>
<h4>Perl CA library shutdown</h4>
<p>The Perl CA library has been modified to properly flush the Channel Access
I/O queues when a program using the library exits.</p>
<h4>bi, bo, mbbi, mbbo ENUM string fields</h4>
<p>The existing Channel Access protocol transports 26 bytes for each ENUM
string, but the fields used to hold ENUM strings in the discrete record types
were configured to be 16 (mbbi/mbbo) or 20 (bi/bo) bytes long. These have all
been increased to match the CA limit.</p>
<h4>Use of SIGALRM disabled</h4>
<p>Previous releases that supported HPUX required that EPICS trap and be able to
generate the SIGALRM signal in order to break out of a blocking socket system
call on those systems (Posix only). There were two API routines that had to be
called by any code using sockets to properly support this. Since we no longer
support HPUX this code is no longer required, and as it breaks the Posix timer
interface on Linux it has been disabled in this release. The API routines now do
nothing on all platforms, and will be removed before the 3.15 Release of
Base.</p>
<h4>Universal Binaries on Darwin</h4>
<p>It is now possible to configure Base on Darwin to build universal binaries
containing an installation-specific choice of 32- and 64-bit CPU architectures.
This is controlled through the definition of the ARCH_CLASS variable in the
configure/os/CONFIG_SITE.Common.<arch> file for the particular target
architecture you are using (darwin-ppc, darwin-x86 or darwin-ppcx86). There are
comments and example settings in those files. Note that to my knowledge EPICS
Base has not been thoroughly tested on the 64-bit darwin architectures.</p>
<p>We have not supported or tested EPICS Base on HPUX for several releases; the
support files for this and other unsupported operating systems have been
removed.</p>
<h4>PINI Processing and PHAS values</h4>
<p>The PINI field now has its own menu type with four more choices,
<tt>RUN</tt>, <tt>RUNNING</tt>, <tt>PAUSE</tt> and <tt>PAUSED</tt>. The earlier
<tt>NO</tt> and <tt>YES</tt> values for this field remain as before and cause
the same processing as before. The new values cause records to be processed
during the announcement of the new <tt>initHookAtIocRun</tt>,
<tt>initHookAfterIocRunning</tt>, <tt>initHookAtIocPause</tt> and
<tt>initHookAfterIocPaused</tt> states respectively.</p>
<p>Records with <tt>PINI=YES</tt> will be processed during the <tt>iocBuild</tt>
stage of <tt>iocInit</tt>, follwed by records with <tt>PINI=RUN</tt> during the
<tt>iocRun</tt> stage and records with <tt>PINI=RUNNING</tt> during the
<tt>initHookAfterIocRunning</tt> stage. If an <tt>iocPause</tt> command is
given, any records with <tt>PINI=PAUSE</tt> will be processed at the
<tt>initHookAtIocPause</tt> stage followed by records with <tt>PINI=PAUSED</tt>
will be processed at the <tt>initHookAfterIocPaused</tt> stage. A subsequent
<tt>iocRun</tt> command causes the <tt>PINI=RUN</tt> and <tt>PINI=RUNNING</tt>
records to be processed again.</p>
<p>The PHAS field now controls the order in which records are processed as a
result of the PINI mechanism; within each stage, lower values of PHAS are
scanned before higher ones.</p>
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
<h4>Additional initHook states</h4>
<p>Several new initHook states have been added which are announced while the IOC
is being paused or restarted. The original states remain unchanged, although a
couple of the later ones are deprecated where using the new states makes more
sense. The enum that defines all the states is now:</p>
<blockquote>
<pre>typedef enum {
initHookAtIocBuild = 0, /* Start of iocBuild/iocInit commands */
initHookAtBeginning,
initHookAfterCallbackInit,
initHookAfterCaLinkInit,
initHookAfterInitDrvSup,
initHookAfterInitRecSup,
initHookAfterInitDevSup,
initHookAfterInitDatabase,
initHookAfterFinishDevSup,
initHookAfterScanInit,
initHookAfterInitialProcess,
initHookAfterCaServerInit,
initHookAfterIocBuilt, /* End of iocBuild command */
initHookAtIocRun, /* Start of iocRun command */
initHookAfterDatabaseRunning,
initHookAfterCaServerRunning,
initHookAfterIocRunning, /* End of iocRun/iocInit commands */
initHookAtIocPause, /* Start of iocPause command */
initHookAfterCaServerPaused,
initHookAfterDatabasePaused,
initHookAfterIocPaused, /* End of iocPause command */
/* Deprecated states, provided for backwards compatibility.
* These states are announced at the same point they were before,
* but will not be repeated if the IOC gets paused and restarted.
*/
initHookAfterInterruptAccept, /* After initHookAfterDatabaseRunning */
initHookAtEnd, /* Before initHookAfterIocRunning */
} initHookState;</pre>
</blockquote>
<p>The two deprecated states will only ever be announced once, whereas the newer
ones will repeat as often as the <tt>iocPause</tt> and <tt>iocRun</tt> commands
are executed.</p>
<h4>Soft Channel ai device support and SMOO</h4>
<p>The (probably unwritten) rules for ai device support have always required
that any device support which sets the VAL field and returns "2" should also
perform any other operations normally performed by the ai's convert() routine.
In practice very few devices did this, but there are some which makes it
impossible to move that smoothing function into the body of the record. This
change adds the support for SMOO filtering to the soft channel device support
for the ai record. The filter is short-circuited when a link recovers from a
failure.</p>
<h4>New link flags for alarm severity/status inheritance</h4>
<p>Two new options have been introduced as alternatives to the existing NMS and
MS flags: MSI (Maximize Severity INVALID) and MSS (Maximize Severity and
Status).</p>
<p>When a link is flagged MSI the receiving record inherits the target's alarm
severity just as it does with the MS flag, but only if that severity is
INVALID.</p>
<p>When a link is flagged MSS the receiving record inherits the target's alarm
status as well as its severity, thereby preserving the alarm status through MSS
chains instead of setting that status to LINK.</p>
<h4>Analog records get_alarm_double() semantics changed</h4>
Ralph Lange
committed
<p>The get_alarm_double() routine in several record types has been changed to
make it easier for CA client applications to display the correct warning and
alarm limits for a record.</p>
Ralph Lange
committed
<p>Originally these routines would always return the current values from the
associated alarm limit fields, but now they will return epicsNAN (not-a-number)
instead if the severity field of the corresponding limit is NO_ALARM. This