Release Notes for MGEN/PARIS 1.6.1
The MGEN/PARIS release 1.6.1 is in general a bugfix and improvement
release. It contains fixes for bugs 1583052 and 1532958. All patches
published since the 1.6 release are obsoleted by this release. The
library structure was changed to improve modularity and cycles in the
internal library referencing were removed. Some minor additional;
functionality was added. In summary the following changes and
improvements were made in MGEN/PARIS 1.6.1 compared to MGEN/PARIS
1.6:
General
- Some code did not compile with gcc 4.1. This was changed. Now
everything compiles with gcc 4.1. The FORTRAN compiler used is still
g77.
- All makefiles were reorganized so that a make can be done directly
from the source directory without a previous cd to the platform
directory. In addition the top level Makefile was changed in a way
that a build aborts in case of any build error. This only works with
gnu make version >= 3.80. Older gnu make version can no longer be used
to build mgen.
PARIS
- The static library libparis was splitted into 2 libraries
libparis and libparisrpc. Both libraries were made shared. This breaks
a cyclic dependency between libparis and libMgenTool. It is now
possible to link an external program without having to specify several
libraries 2 times in the link command.
- Fixed potential integer overflow in
prsio.c in
conjunction with memory allocation using the new safe malloc functions
from smalloc.c.
- Eliminated a potential memory leak in
prsio.c.
MGEN
- Added the class
MgenEdge, which represents an edge
defined by its 2 end points.
- Added missing INT generator parameter types in CDS driver. This
fixes bug 1532958.
- The
sign function was corrected.
- A memory leak in the CDS driver was fixed.
- The library
libMgenProcess that contains classes to
maintain technology information was made shared.
- Additional method
MgenGrid::SnaptoPtr with a
MgenPoint argument.
- New method
MgenPointBuffer::DeleteRedundantPoints.
- Replaced insecure
system/popen calls by calls of the secure
Process class or the new [io]pstream classes.
- Moved modules
tool.o, client.o, rpcclient.o and
transport.o from
library libMgenTool to libMgen2s.
MANIAC
- The data type of the coordinate clipping code was changed from
float to double. This eliminates numerical problem in date
diagrams.
- Use atomic reference counting for the reference counted objects
Number and ManiacDB.
Libraries
Base Library
DataTime::Cmp was made const.
- New functions the check file access permissions based on an open
file descriptor in
faccess.h. This improves the security
compared the the usage of the access function.
- Fixed buf in
TVarr::Adjust. This is the correction
for bug 1583052.
- New class
RefCnt, which uses atomic
increment/decrement fo reference counting on Linux and Solaris
systems. This is necessary for multi threaded applications.
- New
Redirect functions in the class
FileDescriptor.
libNl was made shared.
- Improved functionality of
TPoint. The functions
IsAcuteAngle, Length, NormalVector and
Normalize were added.
- New safe memory allocation functions in
smalloc.c.
- New input-/output streams for reading or writing pipes. This is a
safe replacement and a C++ solution for the C functions
popen/pclose.
- Provide various
gu_* functions with int
instead of a short argument for the point count to be
able to handle polygons with more than 32768 points.
- Use new thread safe reference counting in
String_t
and ByteString.
- New function
Pathname::Glob to match a glob style
pattern.
Tasks Library
- Fixed heavy load problem in
MTAssocWorkQueue. The
previous implementation was wrong, so the queue could run into an
inconsistent state, which prevented several tasks from being
executed.
- Fixed rounding errors in
IOMultiplexer::Timeval. This
problem was inserted by the replacement of select by
poll. Poll uses milliseconds for the timeout
value, not microseconds. By using struct timeval the
timeout handling was incorrect and the handling of timers could end in
a blocked system.
- The function
MMappedFile::Map maps the entire file
and not only the requested number of bytes,if the file is to be mapped
with write permissions. This avoids program crashes when used in the
derives class MMappedSortedArray.
Gds Library
libGds was made shared.
- Eliminated potential buffer overflow in
gds_read_file.
- Detect file access permissions in gds reader using the new
FileAccess functions instead of access.
Release Notes for MGEN/PARIS 1.6
The following bugs reported at sourceforge.net were fixed: 1161423,
1161416, 1161413, 1161393, 1153743, 1153480, 1150879, 1095617, .
The following feature requests were implemented: 1233641
1080840.
The following changes and improvements were made in MGEN/PARIS 1.6
compared to MGEN/PARIS 1.5:
General
- Added support for Solaris 10. The new platform names for Solaris
10 are
sparc-solaris2.10 and
sparc-sun-solaris2.10.
- The C and C++ code can now be compiled with gcc 4. Gcc 4 was
tested under Solaris 10. Nevertheless it is not the compiler used to
create the official binaries. The reason is that some Modules of the
MGEN projects and others not distributed in the open source part are
written in FORTAN. gcc 4 comes with a new FORTRAN compiler that is in
a very early state and our FORTRAN programs compiled with gcc 4 do not
work at all. So we went back to the gcc 3.4.3 for the platform
sparc-sun-solaris2.10.
- A lot of static read only data was made
const. This
helps to improve memory sharing.
PARIS
- Implementation of outline pattern according to feature request
1233641. This includes a new Widget named
XgmDLabel in
the Xgm library.
- Improved error message in case of syntax error in attribute format
file.
- A bug in the construction of a Port object was fixed. The bug lead
to failed substitutions of equivalent resistor/capacitor networks.
- Various security improvements consisting of
- All temporary files are now placed in a temporary directory
created with a random name in
/tmp.
- Temporary files in the command shell
ash are
created with mkstemp instead of tmpnam.
- Elimination of potential buffer overflows
- The call of
getenv("HOME") was replaced by the
safe function Pathname::Home().
- Fixed several potential problems detected by flexelint in
prsio.c.
MGEN
- The number type in expression evaluation in
expr.C
was changed from int to double.
- A memory leak in
Argv::operator= was removed.
- New
int type generator parameter. This extension can
cause compile errors, if the previous ArgTab_t
constructor was called with a mixture of int and
double arguments. The code>ArgTab_t
constructor now creates a generator parameter of type
double, if solely called with double
arguments and a generator parameter of type int, if
called solely with int arguments. The remaining behaviour
of the generator argument classes is unchanged. Especially retrieval
methods ArgTab_t::Value, ArgTab_t::Lower,
ArgTab_t::Upper return the same result for both an int type and a
double type generator parameter. Hence exisiting generators work as
before and only eventual compile problems caused by argument
ambiguities for the ArgTab_t constructor have to be
resolved.
- A number converter to recognize Cadence floating point syntax was
added. The default real converter for generator is the existing one
that understands SPICE syntax. A different real converter can be
registered globally by calling the new function
ArgTab_t::SetRealConverter.
- The generator dialog now activates scrollbars if needed. This
helps to write generators with many parameters.
- The GDSII input/output drivers were made more extensible
concerning the handling of MGEN hardcoded properties. This is
achieved by introducing the class
MgenGdsOutput that
defines an interface and implements the standard functionality of the
output of MGEN hardcoded properties. MgenGdsOutput is now
used in MgenGdsDB to output data in GDSII format. To
write a different GDSII file with an own propery semantics, a user can
derive his/her own gds output class from MgenGdsOutput
and overload the virtual functions PutGeoProp and PutInstProp.
- The generator cache was enhanced by a new import callback. With
the help of the import callback the generator cache can be integrated
in any software. The generator cache integration in PARIS was adapted
accordingly.
- Made the library
libMgenProcess shared.
MANIAC
- Connection caching in
ManiacClient was
introduced. The MANIAC server was changed accordingly to handle
permanent remote connections.
- Fixed crash in
NumberIterator constructor, if called with
undefined Number.
- Fixed potential crash in
Number::Avg methods.
- New method
ManiacDB::GetTable(tablename, title, date, time, analysis)
- Store signals in the MANIAC viewer and NamedVectors in the MANIAC
library in a TSet to improve performance.
- Implementaion of a measurement bar for interactive measurements in
a graph.
- Additional tabular view of signals. The tabular view corresponds
to the graphical view in a regions. The measurement bar is viewed in
both the graphical and the tabular view.
- Pool allocators of Number objects to improve performance and
optimize memory allocation.
- New functionality to merge signals into existing signals.
- New functions
Number::SimpleDrv, Number::Avg2,
Number::ConstSeq, Number::EqSeq.
- New functionality
ShiftBack and
shiftback commands to allow for continuous monitoring of
signals in a limited interval.
Libraries
Base Library
- incremented version of
libaswbase.so to 1.2.
- New class
ByteString
- New class
RandName
- New class
SigBlock
- New class
ArgumentVector
- New classes
TempDir and TempFile for
secure handling of temporary files.
- String stream for binary output into a
ByteString
- floating point converter for Cadence floating point syntax.
- Implementation of full functionality of UNIX sockets.
- The
DateTime constructor can now understand date/time
representations in the form yyyymmddhhmm[ss].
- New function
StrFmt that acts like
sprintf on an ostream.
- Const iterators for
TSet, TPSet, TMap, TPMap.
- Improvements in
StringPool to avoid unecessary memory
allocation that improves the performance of the string pool significantly.
- New function
GetHomeDir and
Pathname::Home based an passwd lookup to be
intended as a secure replacement for getenv("HOME").
- Extended
GetOpt functions.
- Iterator for
Netlist class
- Made the library
libfftpack shared.
- Made the library
libNl shared.
- Replaced
select() calls by poll().
- Member function
DateTime::Cmp was made const.
Tasks Library
- Block
SIGCHLD, SIGTERM, SIGINT before the
waitpid call in Process::Wait to avoid a
failed waitpid.
- Do not call
ftruncate in case of readonly memory
mapped files.
- New template class
MTAssocWorkQueue
- New class
SimpleSem.
- Derive
Thread from CondObj and
synchronize thread startup in ThreadPool.
- New class
FdSet with set operations to be intended as
a safe replacement for the system's fd_set.
- Replaced
select() calls by poll().
Release Notes for MGEN/PARIS 1.5
The following bugs reported at sourceforge.net were fixed: 1061988,
1059778, 1046578, 1042538, 1039044, 1038490, 1010627, 1001433, 988214,
964252.
The following feature requests were implemented: 647735, 652014,
1043017.
The following changes and improvements were made in MGEN/PARIS 1.5
compared to MGEN/PARIS 1.4:
General
- Added support for the Cygwin environment. MGEN/PARIS can be
compiled and run under Cygwin and thus also under Windows. The
platform name for cygwin is
i686-pc-cygwin.
- There is no further need to patch the library of the GCC 3.x
compiler to provide the file descriptor constructor for the
fstream class. Instead new classes named
fdstream were implemented that provide the required
functionality.
- Moved all Tcl/Tk applications to Tcl/Tk 8.4 and Itcl/Itk 3.2.
PARIS
- The display of pinname has been changed. Compared to the previous
version, where only view pinname on or off was possible, now there are
three levels of pinname view. In level 0 no pinnames are drawn. In
level 1 only pinnames of hierarchical cells are shown, but not the
pinnames of leaf cells. In level 2 all pinnames are shown including
the pinnames of leaf cells. The command parameters of the VIEW command
and the menus have been changed accordingly.
- The
EPSOUT command got a new OFFSET switch to achieve
a margin on a paper, if the eps file is printed.
- The GDSII files written by PARIS are padded with 0 bytes to
achieve a fixed record length in the GDSII file. The record length can
be specified by a command argument to the GDSOUT command. The GDS
export dialog was adapted accordingly.
- The display of net lines was decoupled from the presence of net
information in a cell. In version 1.4 net line display was tightly
coupled with the validity of net information. In version 1.5 the net
information may exist in a cell, but the net line display may be
switched off. For this purpose the boolean
snetFlag was
changed to an integer with 3 possible values. 0 means no net
information, this is identical to the previous false
case. 1 means net list information is valid, but net lines are not
displayed. 2 means net list information is valid and net lines are to
be displayed, this is identical with the previous true
case. This change implies a new revision of the PARIS data
format. Hence files written with version 1.5 can't be read with older
versions. The NETLIST command and the menus were extended
to provide the new functionality.
- Fixed null pointer access bug in the rpc server.
- Fixed potential buffer overflow problems in the RPC
interface.
- Fixed memory leak and potential buffer overflow problems in
createlist.C.
- Eliminated memory leaks of
XmStrings in
dialog.C.
- There should be no further endless loop of PARIS, if the terminal
is stopped, in which the PARIS process runs. Especially there should
be no zombie processes left after logout that use up lots of cpu
resources.
MGEN
- The new version of the libMgen2s shared library is now 1.5.
- Complete flexelint check performed and eliminated all problems
found by flexelint. This also includes 2 real bug fixes.
- The class to handle generator argument,
ArgTab_t was
completely rewritten, The new implementation uses a
handle/representation approach with a polymorphic class tree instead
of a union to implement the different argument types. The man page was
updated accordingly.
- New argument types
bool and
enum. Boolean argument are presented as a check box in
the generator dialog, enum arguments as an option menu. The generator
protocol was extended to provide the new types.
- According to the changes of net list information in PARIS the type
of
MgenDef_t::snetFlag was changed to
int.
- Similar to PARIS the GDSII write now pads the output file to
fixed size records.
- Bone variant of basic CMOS transistor generator.
MANIAC
- The new version of the libmaniac library is now 4.3
- Documentation completed.
- Replaced NAG library by fftpack library for Fast Fourier
Transformation subroutines. The usage of the NAG library is still
possible and can be activated by compiler options.
- Adjustable date format in date regions. Button in Options menu and
dialog box to change date format provided.
- Inserted magic string at the beginning of the binary file.
- New procedure
Number::symbols detects the symbols
references in compute expressions.
- Symbol detection in the
maniac::compute command
- Human readable date/time output in the MANIAC ASCII format in
tables with analysis type
DATE.
- Functions and commands for the extraction of partial curves.
- X-only or y-only zoom with mouse possible
- Some minor bug fixes.
Libraries
Base Libraries
- Incremented version of
libaswbase to 1.1.
- Inserted the usage of the macro
INCLUDETEMPLATECODE in all
template classes. If INCLUDETEMPLATECODE the template
implementation code locate in a .C file is included additionally in
the header file. This behaviour is required by some tools or
compilers, that cannot find the template implementation files
automatically.
- Fixed initialization bug in copy constructor of
slist_t.
- New class
StringSplitter. In constrast to
StringTok StringSplitter does not overread
multiple occurences of the specified delimiter character. This enables
the user to tokenize a string containing empty fields.
- New method
String_t::Replace with a character set
argument instead of a single character.
- New function
GetIpAddress, GetCanonicalHostname in
the class SockIO.
- New methods
ISockStream::Readln/OSockStream::Writeln
for line oriented reading and writing from/to sockets.
- Additional constructor of
ServerSocketIn that allows
for creating a server socket allocating a port in a specified port
range.
- New classes
fdstream, ifdstream, ofdstream that
provide the possibility to attach a C++ stream to a file
descriptor. These classes are currently only required for the library
coming with gcc 3, that does not have this functionality any more. All
other supported libraries have this functionality and there the
fdstream classes are implemented as a typedef.
- Fixed potential buffer overflow problem in
operator(ISockStream&, String_t&).
- Fixed potential buffer overflow problems in the ash. This implies
an interface change of some ash functions accessing shell variables.
Tasks Library
- New config file reader to read simple line oriented config file
implemented by template classes.
- Doxygen documentation completed.
- New function
Process::Exec(TVarr<String_t>&).
- New class
MTWorkQueueReq, that requeues a task at the
beginning of the queue, if a task is not runnable.
Release Notes for MGEN/PARIS 1.4
The following changes and improvements were made in MGEN/PARIS 1.4
compared to MGEN/PARIS 1.3:
General
- Eliminated
const char* warnings and anachronism
warnings related to C-C++ function pointers for SUN CC5.3.
- Quality improvement by eliminating all messages reporting by the
static analysis tool flexelint in several files.
- Support for additional platforms
i586-linux-libc6,
i686-linux-libc6, i686-pc-linux-gnu, sparc-solaris2.8,
sparc-sun-solaris2.8 and gcc 3.3.
PARIS
- New command
EPSOUT to export a layout in EPS Format
tp achieve exact scaling in the EPS output. Dialog Box for EPSOUT and
menu button to open the EPSOUT dialog.
- Some minor bugs fixed in GDSII import and rework of cell
name mapping in GDSII interface with improved performance.
-
- Support for additional platforms
i586-linux-libc6,
i686-linux-libc6, i686-pc-linux-gnu, sparc-solaris2.8,
sparc-sun-solaris2.8 in startup script parisrc.
MGEN
- Create Properties for abutment facility of Cadence tools to CMOS
generators
- Compound generators reworked according to changes resulting from
abutment properties
- Name mapping of GDSII/PARIS cell names reworked
- Number factorization improved by using an extended table of small
and prime numbers for array decomposition
- Extended functionality of
MgenPoint
MANIAC
- Random number generator for equal and gaussian distribution
- Implementation of basic functionality for an automated analog
circuit characterization system
- Regression test script
- Some minor bug fixes
Libraries
Base Libraries
- New template classes
TPset (set of pointers to
objects), TPMap (map of object pointers)
- Iterators for set- and map- templates
- Extended functionality of double linked list iterator
- Adapter classes for priority queue templates instead of hardcoded
compare functions
- New template functions for array handling, binary search, etc...
- Full set of integer to string encode functions
str_int2str
- Getline function for class
String_t
- Use
String_t::Getline in netlist library
- Introduction of base classes and macros for exception handling
- Merged libbase and libgeneric into one shared library
libaswbase. This also solves the cyclic reference problem with the
previously seperated libraries.
- Improved functionality of socket stream. The socket streams now
transport long integers always as 64 bit. Errors are optionally handled by
exceptions. New
Readln, Writln for line oriented in-/output.
- Improved functionality of socket classes, Connect/Accept with
timeout, binding of client sockets, improved safety against 0 strings.
Tasks Library
The tasks library was significantly extended and improved:
- Semapore and shared memory classes
Process class for convenient handling for fork/exec calls
- read/write lock,
RWLock
Barrier for synchronization of thread pools
- Memory mapped file,
MMappedFile and derived template
classes for memory mapped array and memory mapped sorted arrays.
- Input/Output multiplexer for both single threaded and multi
threaded operation
IOMultiplexer,
IOMultTask, IOMultThread