"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)