Changes since 2.1:
New in 2.7
==========
- In the case where in a Makefile we had a target like:
gcc foo.c bar.c zoo.c -o program
using ncc instead of gcc would fail. Now this case is
handled correctly. If -ncgcc is specified gcc will be
executed as above. ncc instead will analyse each file
and then link the generated .nccout files to program.nccout.
(qemu)
- Fixed leaving ncurses mode -> xterm -> re-enter ncurses in
nccnav. Patch by Sylvain Beucler.
- New command line option -nccpp=<preprocessor>, useful for
using ncc in cross compilation, from Jose Vasconcellos
New in 2.6
==========
- '-m*' flags are passed to the preprocessor. For example if
'-mmmx' is not used in preprocessing, the macro __MMX__ is not
declared and importing <mmintrin.h> will fail. (X11R71)
- If nccnav is executed from the root of the source tree, it will
show relative file paths (good).
- Updated instructions for kernel hacking. Some object files were
missed.
- Fixed segfault with __gu_val.
- Speed up linking nccout object files.
- nccnav crashed if it couldn't open the temporary file.
New in 2.5
==========
- The nccnav viewer can show functions and files with "vi", thus
with syntax coloring. This will happen if you press 'v' on a
function.
- The nccnav viewer can start from the list of global variables
(by pressing 'g' in the initial screen).
- nccar will understand the "r" option and replace members in
the archive instead of just appending the data. That's the
right thing because with the old version, linking archives
into bigger archives would result in geometric explosion of
the size of the files.
- Better type propagation in conditional expressions.
(x ? (void*)0 : (struct A*)a)->x;
now works (gcc/LIM_DATA)
- support for anonymous structures and unions (GNUC):
struct X {
union {
int a, b, c;
}
};
void f (struct X *x)
{
x->a = 1;
}
(linux 2.17)
- Fixes to hack linux 2.17:
- The "__typeof__ (function)" can be used to declare another function
- forward enum declarations
- char X[] = ("hello"); // was error
- The expression in a Variable Length Array is not constant (and in fact
it can call functions).
int X [y = foo()]; // was error
- Debian package and Doc fixes by Anuradha Weeraman.
New in 2.4
==========
- Bugfix (segfault with gcc 4.x) from Florian Larysch.
- More configury for 'alloca()' in dbstree.
- new command line option '-ncnoerr'. When there are errors in
expressions, ncc will not terminate the compilations. Instead
it will link all functions that had errors with the special
pseudo-function "NCC:syntax_error()".
New in 2.3
==========
- Bugfix (segfault with gcc 4.0) from Deepak Ravi.
- a typedef name used as a label would cause a syntax error (JamVM)
- Applying '*' on a function has no effect. (pygame)
void (*F)();
(**F)(); // used to be error
- Support for '_Complex' as a declaration specifier.
New in 2.2
==========
- Included a LICENSE text in doc so ncc can be part of Debian.
- Bugfix/crash in nccnav. Pressing the up-arrow in functions
mode caused a segmentation violation because isalpha(KEY_UP)
is true.
- if the last statement of a compound statement in expression
was an __asm__ and that was the first expression of the program
we had a segfault. Thanks to Thomas Petazzoni.
- Header file fixes for MacOS. (Adam Shostack)
- __inline__ is accepted as 'inline'. gcc-3.4.4 broke things
again.
- more pointer-to-function cases caught:
fptr = flag ? p->tp_call : 0;
now detects that calling fptr() may call p->tp_call()
(python)
ncc is a compiler that produces program analysis information. ncc
is a decent replacement of cflow and cscope able to analyse any
program using the gcc compiler. The program also incliudes a
graphical call-graph navigator and source browser which is extremely
practical for hacking and comprehending large projects.
Does someone find this useful?