"Fossies" - the Fresh Open Source Software Archive

Member "ncc-2.8/doc/CHANGES" (13 Oct 2008, 16353 Bytes) of package /linux/privat/old/ncc-2.8.tar.gz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 New in 2.8
    2 ==========
    3 
    4 - ncc now will automatically strip nccout files (this will work if
    5   Python is installed).  Except from less space, in the previous
    6   versions under certain circumstances the nccout files could grow
    7   exponentially.
    8 
    9 - fixed a segfault in link mode without any .c or .o files provided
   10   (just an .s file for example)
   11 
   12 - The temporary filename that is used to view functions with "vi"
   13   (or your favorite highlighting editor), is now different depending
   14   on the current function.  So, 'vi' can store the current position
   15   of the cursor for every function and that is more functional.
   16 
   17 - Robustified parsing of aggregate array initializers that caused
   18   many problems with linux 2.6.27. Some assignments to pointers to
   19   functions may be missed though.  (help from Luiz Fernando Capitulino)
   20 
   21 - work around __builtin_types_compatible_p() that has a syntax with
   22   type arguments confusing the parser.  Same for __builtin_offsetof()
   23 
   24 - ncc now understands __inline__, __inline and __FUNCTION__ so no need
   25   to fix them in nognu.
   26 
   27 New in 2.7
   28 ==========
   29 
   30 - In the case where in a Makefile we had a target like:
   31 	gcc foo.c bar.c zoo.c -o program
   32   using ncc instead of gcc would fail. Now this case is
   33   handled correctly.  If -ncgcc is specified gcc will be
   34   executed as above.  ncc instead will analyse each file
   35   and then link the generated .nccout files to program.nccout.
   36   (qemu)
   37 
   38 - Fixed leaving ncurses mode -> xterm -> re-enter ncurses in
   39   nccnav.  Patch by Sylvain Beucler.
   40 
   41 - New command line option -nccpp=<preprocessor>, useful for
   42   using ncc in cross compilation, from Jose Vasconcellos
   43   
   44 New in 2.6
   45 ==========
   46 
   47 - '-m*' flags are passed to the preprocessor.  For example if
   48   '-mmmx' is not used in preprocessing, the macro __MMX__ is not
   49   declared and importing <mmintrin.h> will fail.  (X11R71)
   50 
   51 - If nccnav is executed from the root of the source tree, it will
   52   show relative file paths (good).
   53 
   54 - Updated instructions for kernel hacking.  Some object files were
   55   missed.
   56 
   57 - Fixed segfault with __gu_val.
   58 
   59 - Speed up linking nccout object files.
   60 
   61 - nccnav crashed if it couldn't open the temporary file.
   62 
   63 New in 2.5
   64 ==========
   65 
   66 - The nccnav viewer can show functions and files with "vi", thus
   67   with syntax coloring.  This will happen if you press 'v' on a
   68   function.
   69 
   70 - The nccnav viewer can start from the list of global variables
   71   (by pressing 'g' in the initial screen).
   72 
   73 - nccar will understand the "r" option and replace members in
   74   the archive instead of just appending the data.  That's the
   75   right thing because with the old version, linking archives
   76   into bigger archives would result in geometric explosion of
   77   the size of the files.
   78 
   79 - Better type propagation in conditional expressions.
   80 	(x ? (void*)0 : (struct A*)a)->x;
   81   now works (gcc/LIM_DATA)
   82 
   83 - support for anonymous structures and unions (GNUC):
   84 	struct X {
   85 		union {
   86 			int a, b, c;
   87 		}
   88 	};
   89 	void f (struct X *x)
   90 	{
   91 		x->a = 1;
   92 	}
   93   (linux 2.17)
   94 
   95 - Fixes to hack linux 2.17:
   96   - The "__typeof__ (function)" can be used to declare another function 
   97   - forward enum declarations
   98   - char X[] = ("hello");	// was error
   99 
  100 - The expression in a Variable Length Array is not constant (and in fact
  101   it can call functions).
  102 	int X [y = foo()];	// was error
  103 
  104 - Debian package and Doc fixes by Anuradha Weeraman.
  105 
  106 New in 2.4
  107 ==========
  108 
  109 - Bugfix (segfault with gcc 4.x) from Florian Larysch.
  110 
  111 - More configury for 'alloca()' in dbstree.
  112 
  113 - new command line option '-ncnoerr'. When there are errors in
  114   expressions, ncc will not terminate the compilations. Instead
  115   it will link all functions that had errors with the special
  116   pseudo-function "NCC:syntax_error()".
  117 
  118 New in 2.3
  119 ==========
  120 
  121 - Bugfix (segfault with gcc 4.0) from Deepak Ravi.
  122 
  123 - a typedef name used as a label would cause a syntax error (JamVM)
  124 
  125 - Applying '*' on a function has no effect.  (pygame)
  126 	void (*F)();
  127 	(**F)();	// used to be error
  128 
  129 - Support for '_Complex' as a declaration specifier.
  130   
  131 New in 2.2
  132 ==========
  133 
  134 - Included a LICENSE text in doc so ncc can be part of Debian.
  135 
  136 - Bugfix/crash in nccnav.  Pressing the up-arrow in functions
  137   mode caused a segmentation violation because isalpha(KEY_UP)
  138   is true.
  139 
  140 - if the last statement of a compound statement in expression
  141   was an __asm__ and that was the first expression of the program
  142   we had a segfault. Thanks to Thomas Petazzoni.
  143 
  144 - Header file fixes for MacOS. (Adam Shostack)
  145 
  146 - __inline__ is accepted as 'inline'.  gcc-3.4.4 broke things
  147   again.
  148 
  149 - more pointer-to-function cases caught:
  150 	fptr = flag ? p->tp_call : 0;
  151   now detects that calling fptr() may call p->tp_call()
  152   (python)
  153 
  154 New in 2.1
  155 ==========
  156 
  157 - ncc reports access of arrays. For example, in the code
  158 	int *X;
  159 	int foo ()
  160 	{	X [12] = 1;	}
  161   it will be reported that foo modifies 'X[]' and uses 'X'.
  162 
  163 - fix for cygwin. In cygwin read() converts \r\n to \n and for that
  164   the bytes read are fewer than the size of the file as reported by
  165   stat() and ncc thought there was an error. Thanks to Hakon Lovdal.
  166 
  167 - comlicated segfault in cygwin due to a small bug. (eu).
  168 
  169 - even better support for reporting use of members of structures.
  170   For example, in:
  171 	struct X { int i, j };
  172 	int foo () {
  173 		struct X x = { 1, };
  174 	}
  175 	int bar () {
  176 		struct X x = { .y = 1 };
  177 	}
  178 	int zoo () {
  179 		(struct X) { .x = 1, .y = 2 };
  180 	}
  181   it will be reported that foo modifies member 'x' and that bar
  182   modifies member 'y' and that zoo modifies both.
  183 
  184 
  185 New in 2.0
  186 ==========
  187 
  188 - linker emulation mode with the command line switch "-ncld".
  189   In this mode ncc generates "nccout object files" as gcc generates
  190   object files and then attempts to link them into bigger nccout
  191   files just as gcc links object files.
  192 
  193 - binutils wrapper mode.  ncc can be called as 'nccar', 'nccld',
  194   'nccg++' and 'nccc++'.  It will normally call the corresponding
  195    program and then attempt to collect and link "nccout object files".
  196 
  197 - gengraph.py: a script that can produce dot data from ncc output.
  198   Sent by Jose Vasconcellos
  199 
  200 - Many small fixes for linux-kernel 2.6.9.  ncc is now more relaxed
  201   about some cases in which it reported errors.  We can assume that
  202   ncc is used to analyse correct programs and worry not about semantic
  203   checks.
  204   The file hacking.LINUX-KERNEL has been updated with instructions
  205   to make ncc working again.
  206 
  207 - Assigning non functions to pointers to functions would cause an error:
  208 	int (*F)();
  209 	int x;
  210 	F = x;			// error
  211 	F = (int(*)())x;	// error too
  212   (readline)
  213 
  214 - Casts would prevent reporting pointer to function variables passed
  215   as arguments to other functions. For example:
  216 	int (*FN)();
  217 	foo (FN);		// reported ok
  218 	foo ((int(*)())FN);	// missed
  219   (elinks)
  220 
  221 - Local pointer to function variables are named after their function.
  222   For example, in:
  223 	int foo() { int (*fn)()=f1; fn(); }
  224 	int bar() { int (*fn)()=f2; fn(); }
  225   the 'fn' variables are reported as 'foo/fn()' and 'bar/fn()'. In the
  226   previous version they were both reported as '*fn()' and one couldn't
  227   tell that in reallity foo() calls f1() and bar() calls f2().
  228 
  229 New in 1.9
  230 ==========
  231 
  232 - the statement following switch() need not be compound (lwc).
  233 
  234 - nccnav will also display any comments preceeding functions when asked to
  235   display the text of a function (struct too). They are supposed to be
  236   essential in understanding what happens...
  237 
  238 - /usr/include/nognu macros handle the C99 keyword '_Bool'.
  239   /use/include/nognu macros handle '__asm' to be treated syntactically like
  240    '__asm__'. Same for __volatile as found in <mathinlines.h>. The crapness never ends.
  241   ---Don't forget to Copy the new doc/nognu over the old one---
  242 
  243 - Bugfix:
  244 	typedef int x;
  245 	int f ()
  246 	{
  247 		int x;
  248 		x = 1;
  249 	}
  250   didn't work as the line starting with 'x' was considered a declaration.
  251   In other words, the Bugfix from version 1.7 broke more things than it
  252   fixed! (discovered in python source).
  253 
  254 - Bugfix:
  255 	typedef int (*func)();
  256 	int f () {}
  257 	int main ()
  258 	{
  259 		func x, y;
  260 		x = f;		// reported ok!
  261 		y = (func) f;	// not reported. BUG
  262 	}
  263   A cast would prevent ncc from reporting pointer to function assignments
  264   as pseudo calls. (python source)
  265 
  266 New in 1.8
  267 ==========
  268 
  269 - It is very useful to report whether a function *just reads*
  270   or *modifies* a variable. ncc now reports such information
  271   when it is certain that a variable *is* modified by a function.
  272   Read 'README.1.8.rw' for info.
  273 
  274 - ncc can now handle the case:
  275 	(x ? F1 : F2) (args)
  276   it used to report that just a "virtual call" is there.
  277   Now such constructs are converted to:
  278         x ? F1 (args) : F2 (args)
  279   reported data is much better for hacking and less confusing
  280 
  281 
  282 New in 1.7
  283 ==========
  284 
  285 - From Ben Lau <benlau@linux.org.hk> :
  286 
  287    - A fix for gcc syntax where __asm__() can be specified in
  288      a declaration before initialization. Fix for M68K kernel from uClinux
  289 
  290    - Made ncc work with 2.6 kernel! There was a problem with declaration
  291      initializers and was triggered in fs/afs/super.c  (thanks!)
  292 
  293    - More stuff with gcc-3.2 and preprocessing. Now we pass -O* options
  294      to the preprocessor because it enables the definition of the
  295      __OPTIMIZE__ macro, without which kernel can't be compiled.
  296 
  297 - nccnav can regenerate its input file without including dupes
  298   (functions of header files reported multiple times).
  299 
  300 - More features with pointer to functions passed as arguments to
  301   other functions.
  302 
  303 - Bugfix:
  304 	typedef int x;
  305 	struct foo {
  306 		x x;
  307 		x y;	// error!
  308 	};
  309   Now fixed (linux kernel, fs/ntfs/inode.h)
  310 
  311 - In the case ncc is compiled with gcc, we define 'alloca' to be
  312   '__builtin_alloca' and avoid lots of portability issues on non GNU
  313   systems.
  314 
  315 New in 1.6
  316 ==========
  317 
  318 - While "structure->member ()" was detected, "(*structure->member) ()"
  319   was not. Now it is. (tkDvi)
  320 
  321 - A SIGPIPE would terminate nccnav if requested to view a very big
  322   file which didn't fit in the buffer of "less" and the user pressed 'q'.
  323 
  324 - New way to view the call graph with pop-ups in nccnav. History mode
  325   revised with '<' and '>'.
  326 
  327 - Analysis of function addresses passed as arguments to other functions.
  328   For example, ncc can now report that qsort() calls whichever comp() function
  329   is passed to it. See the file doc/farg.c for more.
  330 
  331 New in 1.5
  332 ==========
  333 
  334 - The locations of structure declarations are emitted in the
  335   output of ncc and nccnav can extract and display them
  336   (extremely useful).
  337 
  338 - ncc now works on systems that don't have mmap.
  339 
  340 - Adapted to work with the kernel sources without having to
  341   edit the weirdness found in ide-cd.h (__u8 short) and
  342   parport_pc.c (multiple defininitions of function)
  343 
  344 - nccnav will indent the source if called with a name
  345   other than "nccnav", like "nccnavi".
  346 
  347 - Created man page so ncc can be included in distributions.
  348 
  349 New in 1.4
  350 ==========
  351 
  352 - nccnav now provides "The Recursion Detector".
  353 
  354 - ncc does no longer complain if something is declared as
  355   just void. It seems this is perfectly valid (valgrind source)
  356 
  357 New in 1.3
  358 ==========
  359 
  360 - This release includes some changes in the viewer nccnav:
  361   It's possible to view the text of functions and entire files
  362   with an external viewer.
  363   This by default is "indent -kr -st | less".
  364 
  365 - Internal changes where the dbstrees were changed to templates
  366   instead of polymorphic classes.
  367 
  368 New in 1.2
  369 ==========
  370 
  371 - Bugfix. Negative floating point values in initializers would
  372   cause a segmentation violation.
  373 
  374 - The preprocessed source may also include #pragma directives.
  375   This should've caused some problems, sometimes.
  376 
  377 - In GNUC extensions, goto may be followed by an expression (tcctest).
  378 
  379 - `__alignof__' is now simply replaced by `sizeof'. 
  380 
  381 - `__typeof__(type)' now supported
  382 
  383 - nccnav fixes: very long lines would appear on the next line (because
  384   ncurses counts tab as one character). Also the request to display the
  385   text of the last function of a file which does not end in a newline
  386   would cause a segmentation violation.
  387 
  388 New in 1.1
  389 ==========
  390 
  391 - Major Feature: ncc now does full analysis on the pointers to functions
  392   and the values assignmed to them; The result is incredibly amazing when
  393   working with projects like the linux kernel where there are lots of
  394   callbacks in structure members.
  395   See the file doc/fptr.c which demonstrates the new features.
  396   Also now aggregate initalizers are parsed to catch function calls
  397   and values assigned to pointer-to-function members.
  398   Several internal changes/cleanups to implement the above features.
  399 
  400 - Patch to work correctly when in -I,-D the argument is in the next argv[]
  401   (Awesome Walrus)
  402 
  403 - Anonymous structures are named by typedef or by first declared object.
  404 
  405 - Wide character and string constants L'x' (bash2 source)
  406 
  407 New in 1.0
  408 ==========
  409 
  410 - Bugfix.  The conditional with omitted operand caused segfault in the usage
  411   report mode.
  412 
  413 - ISOC99 additions. Declarations can appear anywhere in a block (as in C++)
  414   Hexadecimal floating point constants supported (problems with HUGE_VAL,
  415   which is 0x1.0p2048 in glibc)
  416 
  417 - Declaration specifiers may be after storage class specifiers.
  418   For example, "uint32 static X;" is now acceptable (quicktime source).
  419 
  420 - If "-nc00" is used together with "-nckey", string constants are included.
  421   The option to leave out line numbers is removed.
  422 
  423 - Function prototypes are not checked anymore. There is a rare problem
  424   (discovered in quake source) and since ncc is typically a source code
  425   analyser, checking function prototypes is useless.
  426 
  427 New in 0.9
  428 ==========
  429 
  430 - New output format and new viewer. Old formats REMOVED (check your options)
  431 
  432 - Reporting absolute pathnames of source files with "-ncfabs"
  433 
  434 - Many new things in /usr/include/nognu. __FUNCTION__ now defined as the
  435   string literal "__FUNCTION__" because many people use the invalid syntax:
  436   printf ("This is " __ FUNCTION__ "\n");
  437 
  438 - Fixed critical bug discovered with gcc 3.2. Reallocation in expression
  439   parser was broken.
  440 
  441 - GNUC variable size arrays pseudo-supported (no error).
  442 
  443 - labeled-statement=  identifier:statement
  444   and now "if(x)Label:foo();" is working properly (zsh source).
  445 
  446 - Misc fixes. Lots of testing (an entire CD of sources).
  447 
  448 New in 0.8
  449 ==========
  450 
  451 - All fixes in this version were contributed/inspired by Scott McKellar.
  452   Include:
  453 	- Removed comment parsing which was unused.
  454 	- Made file reporting "right" (off by one)
  455 	- Made line reporting "right" as well (off by one)
  456 	- inttree possible signedness bug fixed.
  457 	- Cleanups at introduce_{anon|named}_struct ()
  458 	- Redundant. Lookup() was called twice in a row for members.
  459 	- Misc corrections, optimizations and cleanups everywhere.
  460 
  461 New in 0.7
  462 ==========
  463 
  464 - Line number information finally included and can be optionally left out
  465   with "-ncl0".  Only used when reporting syntax errors for now.
  466 
  467 - Except from, -D, -I options, "-ixxx file" options should also be passed
  468   to the preprocessor.
  469 
  470 - The source file was not unmapped after the lexical analysis, while it
  471   should. Also as found by Scott McKellar string literals were allocated
  472   twice. Now expect 50% less memory usage.
  473 
  474 - Implemented in-file user output with keys (see doc/KEYS)
  475 
  476 - Many "do it right" fixes from Scott McKellar.
  477 
  478 - Added -ncspp option to keep sourcefile.i preprocessed C files.
  479   Extremely useful for debugging failures.
  480 
  481 - In the case of :
  482 	typedef struct { int x, y; } zoo;
  483   if reporting use of members, the anonymous structure
  484   is automatically named `struct zoo'.
  485 
  486 
  487 New in 0.6
  488 ==========
  489 
  490 - In usage report mode, constant expressions (in array sizes and bitfield
  491   sizes), were not calculated if they were not as simple as just a number.
  492   So in:
  493 	extern int foo [32/2];
  494 	int foo [16];
  495   It failed because of redefining foo as an array of different size.
  496   This now fixed (thanks to Doom source code)
  497 
  498 - Type of the result of the last subexpression of a compound statement in
  499   expression (GNUC), implemented.
  500 
  501 - More information about calling functions through pointers to functions.
  502   If the pointer to function is a simple symbol variable, it is converted
  503   to a pseudo-function, calling all the functions assigned to it.
  504   Otherwise there is a report that a handler is called.
  505 
  506 - An __asm__ statement in global used to confuse ncc which reported (ABSENT
  507   symbol). Now __asm__ statements in global are ignored (linux kernel source).
  508 
  509 - A function definition may also be a single __asm__ statement (not
  510   compound). Parsed w/o error and ignored. (linux kernel)