NEWS revision dc2a325d01a19414185f6ab30526b23f1f343782
1-*-org-*- 2* Version 0.7.0 3** Tracing Features 4*** Full support for tracing multi-threaded processes 5 Ltrace now understands thread groups, and it stops all threads 6 before manipulating breakpoints. The downside is that performance 7 of multi-threaded processes is rather bad, because handling any 8 event implies stopping the whole job. The upside is that 9 individual threads don't get random SIGILL's and SIGSEGV's and 10 events are not missed. 11*** Support for tracing inter-library calls 12 -e and -x were extended to allow library selectors. See the man 13 page for details. 14*** Better support for parameter passing ("fetch backend") 15 This version brings a more complete support for parameter passing, 16 including passing structures in registers, passing double on i386, 17 and other edge cases that were unsupported before. The following 18 architectures now have implementation of fetch backend: x86, ppc, 19 ia64, s390, m68k. 20*** Awareness of deny_ptrace SELinux boolean 21 The deny_ptrace boolean denies all processes from being able to 22 use ptrace to manipulate other processes. Ltrace now understands 23 that this boolean exists, and recommends turning it off, if it is 24 on and ltrace fails to attach to a process. 25*** Limited support for tracing returns from tail call functions 26*** -e, -x and -l selectors now allow using globs and regular expressions 27 See the man page for details of the selector syntax. 28*** Test suite can now be run under valgrind 29 Use --enable-valgrind to turn this on. 30*** [ppc] Support both BSS and secure PLTs for 32-bit processes 31*** [mips] Implement software singlestepping 32*** [mips] Add support for CPIC main programs 33*** Support tracing PIE binaries 34** Configuration Files 35*** New abstraction: parameter pack 36 Parameter packs make it much simpler to add specialized decoding 37 logic. The only parameter pack currently implemented is "format" 38 for decoding printf-style format strings. It should be relatively 39 straightforward to add more parameter packs for functions like 40 execl, strftime, and others. 41*** New expression: zero 42 When used in array length expressions, it means "this array ends 43 at the first element with zero value". C strigs are essentially 44 array(char, zero)*. 45*** Lenses: change the way that underlying type is rendered 46 Lenses are used similarly to parametrized types, e.g.: 47 | void func(lens(int)); | 48**** octal 49 "octal", which used to be a separate type, is now lens, which can 50 be used to render any underlying type in base 8. Plain "octal" 51 is still valid and means the same as "octal(int)". 52**** hex, hide, bool 53 Similarly, "hex" lens was introduced to format as base 16. 54 "hide" was introduced to conceal given argument. "bool" lens was 55 added to format objects as either true, or false. 56**** enum 57 "enum" became lens as well. Because enum already uses 58 parentheses to denote the list of enumeration values, the 59 underlying type is selected by square brackets: 60 | void func(enum[short](RED,GREEN,BLUE)); | 61**** string 62 "string" was also turned to lens. The argument can be either a 63 char*, or pointer to array of char, or array of char. The latter 64 is useful in cases like the following: 65 | void func_struct_2(struct(string(array(char, 6)))); | 66*** Using void as sole argument to a function now obsolete 67 Functions that take no arguments shouldn't pretend to take one 68 parameter of void type. That use is now obsolete (but still 69 accepted): 70 | void func(void); | 71 Instead, such functions should be declared like this: 72 | void func(); | 73*** Using void to hide one argument is no longer supported 74 Instead use "hide" lens (see above). ltrace needs to know the 75 exact underlying type to decide what the calling convention is. 76 In the following two declarations, how the second argument is 77 passed may depend on the exact type of the hidden argument: 78 | void func(hide(int), int); | 79 | void func(hide(struct(float,float)), int); | 80** Bugfixes 81*** Fix detaching from a process 82 Earlier, a process that ltrace detached from would sometimes die 83 of SIGSEGV, SIGTRAP, or SIGILL. These were caused by ltrace 84 detaching from the process just after that process hit a 85 breakpoint. Program counter would thus be left pointing 86 mid-instruction, or signals would be left pending. 87*** Argument to -n is now checked for validity 88*** Fix tracing across exec in a stripped binary 89*** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number 90 In cases where the system call shouldn't be restarted, these are 91 set to -1. In that case assume that the return is from the 92 topmost syscall. This gets rid of some "unexpected breakpoint" 93 messages on x86_64 and i386. 94*** [ppc] Fix races in tracing -e events in 64-bit processes 95 As a side effect, events requested via -e now only hit when a PLT 96 call is made, which is consistent with other architectures. 97*** [ppc] Allow stepping over lwarx instruction 98** Known bugs 99*** [arm] Tracing is not supported at all on ARM 100 ltrace might work on older kernels, but no attempt was made to 101 fully support it. Newer kernels don't support PTRACE_SINGLESTEP, 102 which ltrace depends on. Before singlestepping is implemented in 103 software, ARM is considered unsupported. 104 105* Version 0.6.0 106** General Features 107*** Use autotools for building 108*** New option -b: disables output of signals received by the tracee 109*** New option -w: print stack trace of events 110 Pass --with-libunwind to configure to enable the feature. This 111 requires libunwind. 112*** Support tracing of symbols from libraries opened with dlopen 113 These symbols are selected by -x. 114** Architecture-specific Changes 115*** Various fixes for MIPS and PowerPC 116*** Support for ARM Thumb mode 117*** Implement fetching of 5th and further function arguments on s390 118*** Support fork/exec syscalls on 31-bit s390 119*** Support for float and double arguments on x86_64 120*** Fixes for return arguments (after '+') in nested calls on x86_64 121