Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 1 | -*-org-*- |
Petr Machata | 01b10e1 | 2013-10-23 00:54:47 +0200 | [diff] [blame] | 2 | * Version 0.8.0 |
Petr Machata | 5178825 | 2013-10-24 15:01:08 +0200 | [diff] [blame] | 3 | ** Prototype libraries |
| 4 | - Each DSO can now ship an ltrace config file (called prototype |
| 5 | library) that ltrace will open when that DSO is loaded to process |
| 6 | image. See ltrace(1) for details. |
| 7 | |
| 8 | - ltrace.conf is no longer part of installation tarball. Instead, |
| 9 | we now ship libc.so.conf, libm.so.conf, libacl.so.conf, and |
| 10 | syscalls.conf. Those are now istalled to /usr/share/ltrace by |
| 11 | default. /etc/ltrace.conf and $HOME/.ltrace.conf are still |
| 12 | loaded if present, and can contain arbitrary user configuration. |
| 13 | |
| 14 | - The option -F was retrofitted to be a colon-separated list of |
| 15 | prototype libraries, and directories to look for prototype |
| 16 | libraries in. On Linux, ltrace looks into XDG_CONFIG_HOME, |
| 17 | XDG_CONFIG_DIRS, and /usr/share/ltrace as well. |
| 18 | |
Petr Machata | 6415034 | 2013-11-14 22:53:51 +0100 | [diff] [blame] | 19 | - Wide character strings are supported in prototypes. Use "string" |
| 20 | lens as usual, but use array of integers as underlying type. |
| 21 | libc.so.conf now contains prototypes of wide character functions. |
| 22 | |
| 23 | - Sole void function parameter such as in the following example, is |
| 24 | now considered obsolete: |
| 25 | |
| 26 | | int fork(void); | |
| 27 | |
| 28 | This use is still accepted, taken to mean "hide(int)", but |
| 29 | produces a warning, and will be removed in future. |
Petr Machata | dbd6175 | 2013-11-12 00:14:23 +0100 | [diff] [blame] | 30 | |
Petr Machata | 01b10e1 | 2013-10-23 00:54:47 +0200 | [diff] [blame] | 31 | ** Architectural support |
| 32 | - MIPS and MIPSel are now handled by the same backend. |
Petr Machata | d988483 | 2014-02-05 02:46:07 +0100 | [diff] [blame] | 33 | - ARMv6, ARMv7 and ARMv8 (AArch64) are supported, including full |
| 34 | fetch backend. ARMv8 backend doesn't support tracing of 32-bit |
| 35 | binaries, as currently there's no 32-bit userspace available for |
| 36 | ARM64 processors. |
Petr Machata | 01b10e1 | 2013-10-23 00:54:47 +0200 | [diff] [blame] | 37 | - Imagination Technologies Meta is now supported. |
Petr Machata | dbd6175 | 2013-11-12 00:14:23 +0100 | [diff] [blame] | 38 | |
| 39 | - On Linux, tracing of IFUNC symbols is supported. On i386, |
| 40 | x86_64, ppc32 with secure PLT and ppc64, IRELATIVE PLT slots are |
| 41 | traced as well. |
Petr Machata | 01b10e1 | 2013-10-23 00:54:47 +0200 | [diff] [blame] | 42 | |
| 43 | ** -w output now shows full library path |
| 44 | The output format is similar to glibc's backtrace_symbols, e.g.: |
| 45 | > /bin/ls(_init+0x19be) [0x40398e] |
| 46 | > /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f50cbc3676d] |
| 47 | > /bin/ls(_init+0x25fd) [0x4045cd] |
| 48 | |
Petr Machata | 01b10e1 | 2013-10-23 00:54:47 +0200 | [diff] [blame] | 49 | * Version 0.7.3 [2013-09-15 Sun] |
| 50 | ** Bugfixes |
| 51 | *** [MIPS] Fix build on mips big endian |
| 52 | This bug caused messages like: |
| 53 | | Making all in mips |
| 54 | | /bin/sh: line 17: cd: mips: No such file or directory |
| 55 | *** [MIPS] Fix SIGSEGV on mips big endian |
| 56 | This bug caused runtime messages like: |
| 57 | | [0x4000000] --- SIGSEGV (Segmentation fault) --- |
| 58 | | [0xffffffff] +++ killed by SIGSEGV +++ |
| 59 | *** Fix build with CLANG on FREEBSD |
| 60 | |
Petr Machata | 4b1d162 | 2012-12-07 16:25:22 +0100 | [diff] [blame] | 61 | * Version 0.7.2 [2012-12-07 Fri] |
Petr Machata | 0965420 | 2012-12-05 17:07:21 +0100 | [diff] [blame] | 62 | ** Bugfixes |
Petr Machata | 2e71fef | 2012-12-05 12:07:05 +0100 | [diff] [blame] | 63 | *** (Again) detect VDSO entry in r_debug linkmap with non-empty name |
| 64 | This bug caused messages like: |
| 65 | | Couldn't determine base address of linux-vdso32.so.1 |
| 66 | | Couldn't load ELF object linux-vdso32.so.1: No such file or directory |
Petr Machata | 036fb18 | 2012-12-04 13:38:08 +0100 | [diff] [blame] | 67 | *** Fix building with libunwind 1.1 |
Petr Machata | 0965420 | 2012-12-05 17:07:21 +0100 | [diff] [blame] | 68 | *** Fix prototype lookup for -x symbols from shared libraries |
| 69 | Ltrace was unable to find prototypes of static symbols in shared |
| 70 | libraries. It changed the symbol name internally to the form |
| 71 | name@libfoo.so. Thus mangled, symbols were not found in config |
| 72 | files. |
Petr Machata | 036fb18 | 2012-12-04 13:38:08 +0100 | [diff] [blame] | 73 | |
Petr Machata | 4b1d162 | 2012-12-07 16:25:22 +0100 | [diff] [blame] | 74 | * Version 0.7.1 [2012-11-29 Thu] |
Petr Machata | 61b4c49 | 2012-11-18 21:54:54 +0100 | [diff] [blame] | 75 | ** Bugfixes |
Petr Machata | 61b4c49 | 2012-11-18 21:54:54 +0100 | [diff] [blame] | 76 | *** ltrace.conf.5 is now installed to man5 as it should be |
Petr Machata | 7467b94 | 2012-11-20 02:36:56 +0100 | [diff] [blame] | 77 | *** [PowerPC] A header file necessary for building is now shipped |
| 78 | *** [MIPS] Work around duplicate symbol request bug |
Petr Machata | 61b4c49 | 2012-11-18 21:54:54 +0100 | [diff] [blame] | 79 | This fixes the ltrace abort: |
| 80 | | ./ltrace: proc.c: 755: breakpoint_for_symbol: Assertion `bp->libsym == ((void *)0)' failed. |
| 81 | |
| 82 | *** Detect VDSO entry in r_debug linkmap with non-empty name |
| 83 | This bug caused messages like: |
| 84 | | Couldn't determine base address of linux-vdso32.so.1 |
| 85 | | Couldn't load ELF object linux-vdso32.so.1: No such file or directory |
| 86 | |
| 87 | *** Temporary files are wiped properly after the test suite has been run |
| 88 | *** Parsing typedefs with common prefix now works as it should |
| 89 | More exactly, if there were typedefs X and XY (in this order), and |
| 90 | a reference was made to X, ltrace would match XY instead. |
| 91 | |
| 92 | ** Cofiguration Files |
| 93 | *** The following prototypes in ltrace.conf were added or updated |
Petr Machata | 528d1b2 | 2012-11-20 02:42:18 +0100 | [diff] [blame] | 94 | __ctype_get_mb_cur_max, __endmntent, __getmntent_r, __setmntent, |
| 95 | a64l, abort, abs, addmntent, getmntent_r, hasmntopt, inet_addr, |
| 96 | inet_aton, inet_lnaof, inet_makeaddr, inet_netof, inet_network, |
| 97 | inet_ntoa, kill, l64a, labs, memcpy, memmove, setlocale, |
| 98 | sigaction, sigaddset, sigandset, sigdelset, sigemptyset, |
| 99 | sigfillset, sigisemptyset, sigismember, signal, sigorset, |
| 100 | sigpending, sigprocmask, sigsuspend. |
Petr Machata | 61b4c49 | 2012-11-18 21:54:54 +0100 | [diff] [blame] | 101 | |
| 102 | *** Duplicate typedefs are now guarded against |
Petr Machata | 8c98e40 | 2012-11-19 01:30:31 +0100 | [diff] [blame] | 103 | *** It's now possible to define recursive structures |
| 104 | Please read ltrace.conf(5) man page, chapter "recursive |
| 105 | structures", to learn about this new feature. |
Petr Machata | 61b4c49 | 2012-11-18 21:54:54 +0100 | [diff] [blame] | 106 | |
Petr Machata | ec4ab25 | 2012-11-20 02:00:16 +0100 | [diff] [blame] | 107 | *** New lens "bitvec" is available |
| 108 | This allows displaying various data types as bit vectors. Please |
| 109 | read ltrace.conf(5) to learn more. |
| 110 | |
Petr Machata | aa933f2 | 2012-11-20 02:09:15 +0100 | [diff] [blame] | 111 | *** Octal lens renamed to "oct" |
| 112 | For reasons of consistency with "hex". "octal" is still valid and |
| 113 | will be for forseeable future. |
| 114 | |
Petr Machata | f197727 | 2012-11-29 15:49:16 +0100 | [diff] [blame] | 115 | *** The hex lens can now format floating point arguments |
| 116 | |
Petr Machata | 4b1d162 | 2012-12-07 16:25:22 +0100 | [diff] [blame] | 117 | * Version 0.7.0 [2012-11-09 Fri] |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 118 | ** Tracing |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 119 | *** Full support for tracing multi-threaded processes |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 120 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 121 | Ltrace now understands thread groups, and it stops all threads |
| 122 | before manipulating breakpoints. The downside is that performance |
| 123 | of multi-threaded processes is rather bad, because handling any |
| 124 | event implies stopping the whole job. The upside is that |
| 125 | individual threads don't get random SIGILL's and SIGSEGV's and |
| 126 | events are not missed. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 127 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 128 | *** Support for tracing inter-library calls |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 129 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 130 | -e and -x were extended to allow library selectors. See the man |
| 131 | page for details. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 132 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 133 | *** Better support for parameter passing ("fetch backend") |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 134 | |
Petr Machata | 9265da4 | 2012-11-02 02:56:08 +0100 | [diff] [blame] | 135 | This version brings more complete support for parameter passing, |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 136 | including passing structures in registers, passing double on i386, |
Petr Machata | 9265da4 | 2012-11-02 02:56:08 +0100 | [diff] [blame] | 137 | and other edge cases that were not handled correctly before. The |
| 138 | following architectures now have implementation of fetch backend: |
| 139 | i386, x86_64, ppc, ppc64, ia64, s390, s390x, m68k. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 140 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 141 | *** Awareness of deny_ptrace SELinux boolean |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 142 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 143 | The deny_ptrace boolean denies all processes from being able to |
| 144 | use ptrace to manipulate other processes. Ltrace now understands |
| 145 | that this boolean exists, and recommends turning it off, if it is |
| 146 | on and ltrace fails to attach to a process. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 147 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 148 | *** Limited support for tracing returns from tail call functions |
| 149 | *** -e, -x and -l selectors now allow using globs and regular expressions |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 150 | |
Petr Machata | 2ee358f | 2012-10-29 15:12:48 +0100 | [diff] [blame] | 151 | See the man page for details of the selector syntax. This changes |
| 152 | the way -x and -l behave with respect to tracing libraries opened |
| 153 | by dlopen: |
| 154 | |
| 155 | - In 0.6.0, only those -x symbols that were unmatched in main |
| 156 | binary were used to search through symbol table of libraries |
| 157 | opened with dlopen. In 0.7.0, -x and -e are applied uniformly |
| 158 | to each mapped binary: the main binary, dependent DSO's, and any |
| 159 | dlopened libraries. |
| 160 | |
| 161 | - In 0.6.0, -l argument was a filename to open and inspect. In |
| 162 | 0.7.0, -l is a glob expression matched against each mapped |
| 163 | binary. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 164 | |
Petr Machata | 40de797 | 2012-11-02 02:52:58 +0100 | [diff] [blame] | 165 | *** -g command line option dropped |
| 166 | |
| 167 | This option was introduced in 0.6.0 with the meaning identical to |
| 168 | -L, which should be used instead. |
| 169 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 170 | *** Test suite can now be run under valgrind |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 171 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 172 | Use --enable-valgrind to turn this on. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 173 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 174 | *** [ppc] Support both BSS and secure PLTs for 32-bit processes |
| 175 | *** [mips] Implement software singlestepping |
| 176 | *** [mips] Add support for CPIC main programs |
Petr Machata | adbf467 | 2012-10-19 01:52:52 +0200 | [diff] [blame] | 177 | *** Support tracing PIE binaries |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 178 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 179 | ** Configuration Files |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 180 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 181 | *** New abstraction: parameter pack |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 182 | |
Petr Machata | 69a12f2 | 2012-11-05 23:42:21 +0100 | [diff] [blame] | 183 | Parameter packs describe zero or more of actual arguments, whose |
| 184 | type can be determined in runtime. The only parameter pack |
| 185 | currently implemented is "format" for decoding printf-style format |
| 186 | strings. |
Petr Machata | 9265da4 | 2012-11-02 02:56:08 +0100 | [diff] [blame] | 187 | |
| 188 | In future, it should be relatively straightforward to add more |
Petr Machata | 69a12f2 | 2012-11-05 23:42:21 +0100 | [diff] [blame] | 189 | parameter packs for functions like execl, and others. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 190 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 191 | *** New expression: zero |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 192 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 193 | When used in array length expressions, it means "this array ends |
Petr Machata | 69a12f2 | 2012-11-05 23:42:21 +0100 | [diff] [blame] | 194 | at the first element with zero value". C strings are essentially |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 195 | array(char, zero)*. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 196 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 197 | *** Lenses: change the way that underlying type is rendered |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 198 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 199 | Lenses are used similarly to parametrized types, e.g.: |
| 200 | | void func(lens(int)); | |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 201 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 202 | **** octal |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 203 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 204 | "octal", which used to be a separate type, is now lens, which can |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 205 | be used to render any underlying type in base 8. Plain "octal" |
Petr Machata | 9265da4 | 2012-11-02 02:56:08 +0100 | [diff] [blame] | 206 | is still valid and means the same thing as "octal(int)". |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 207 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 208 | **** hex, hide, bool |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 209 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 210 | Similarly, "hex" lens was introduced to format as base 16. |
| 211 | "hide" was introduced to conceal given argument. "bool" lens was |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 212 | added to format objects as either true, or false. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 213 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 214 | **** enum |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 215 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 216 | "enum" became lens as well. Because enum already uses |
| 217 | parentheses to denote the list of enumeration values, the |
| 218 | underlying type is selected by square brackets: |
Petr Machata | 9265da4 | 2012-11-02 02:56:08 +0100 | [diff] [blame] | 219 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 220 | | void func(enum[short](RED,GREEN,BLUE)); | |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 221 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 222 | **** string |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 223 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 224 | "string" was also turned to lens. The argument can be either a |
| 225 | char*, or pointer to array of char, or array of char. The latter |
| 226 | is useful in cases like the following: |
Petr Machata | 9265da4 | 2012-11-02 02:56:08 +0100 | [diff] [blame] | 227 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 228 | | void func_struct_2(struct(string(array(char, 6)))); | |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 229 | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 230 | *** Misspelling of "int" as "itn" temporarily accepted, but deprecated |
| 231 | |
| 232 | Pre-0.7 ltrace shipped a buggy version of ltrace.conf that |
| 233 | contained the following prototype: |
| 234 | |
| 235 | | itn acl_valid(addr); | |
| 236 | |
| 237 | To support extant versions of ltrace.conf, that use is now |
| 238 | considered valid, and "itn" is a synonym of "int". It is however |
| 239 | deprecated, and will produce a warning in future. |
| 240 | |
| 241 | *** Using void as top-level function argument now deprecated |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 242 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 243 | Functions that take no arguments shouldn't pretend to take one |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 244 | parameter of void type. For example the following: |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 245 | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 246 | | int fork(void); | |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 247 | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 248 | ... should be declared like this: |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 249 | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 250 | | int fork(); | |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 251 | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 252 | To support extant versions of ltrace.conf, that use is now |
| 253 | considered valid. It is however deprecated, and will produce a |
| 254 | warning in future. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 255 | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 256 | *** Using void to hide one argument is now obsolete |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 257 | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 258 | Ltrace needs to know the exact underlying type to decide what the |
| 259 | calling convention is. The use of void to mean "hide this |
| 260 | argument", such as the following example, is therefore obsolete: |
| 261 | |
| 262 | | void func(void, array(int, arg1)); | |
| 263 | |
| 264 | Instead, rewrite the prototype depending on the exact underlying |
| 265 | type: |
| 266 | |
Petr Machata | 69dfb09 | 2012-10-28 21:09:11 +0100 | [diff] [blame] | 267 | | void func(hide(int), array(int, arg1)); | |
| 268 | | void func(hide(long), array(int, arg1)); | |
Petr Machata | 2bf8893 | 2012-10-27 20:17:50 +0200 | [diff] [blame] | 269 | |
| 270 | To support extant versions of ltrace.conf, this use is still |
| 271 | accepted, and "void" is taken to mean "hide(int)". It is however |
| 272 | obsolete, produces a warning, and will be removed in future. |
Petr Machata | 9ad2f19 | 2012-10-25 14:39:15 +0200 | [diff] [blame] | 273 | |
| 274 | ** Documentation |
| 275 | |
| 276 | *** New manual page ltrace.conf(5) |
| 277 | *** README, INSTALL brought up to date |
| 278 | *** New file CREDITS with a list of contributors |
Petr Machata | 9265da4 | 2012-11-02 02:56:08 +0100 | [diff] [blame] | 279 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 280 | ** Bugfixes |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 281 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 282 | *** Fix detaching from a process |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 283 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 284 | Earlier, a process that ltrace detached from would sometimes die |
| 285 | of SIGSEGV, SIGTRAP, or SIGILL. These were caused by ltrace |
| 286 | detaching from the process just after that process hit a |
| 287 | breakpoint. Program counter would thus be left pointing |
| 288 | mid-instruction, or signals would be left pending. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 289 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 290 | *** Argument to -n is now checked for validity |
| 291 | *** Fix tracing across exec in a stripped binary |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 292 | *** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 293 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 294 | In cases where the system call shouldn't be restarted, these are |
| 295 | set to -1. In that case assume that the return is from the |
| 296 | topmost syscall. This gets rid of some "unexpected breakpoint" |
| 297 | messages on x86_64 and i386. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 298 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 299 | *** [ppc] Fix races in tracing -e events in 64-bit processes |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 300 | |
Petr Machata | 854696c | 2012-11-02 02:56:40 +0100 | [diff] [blame] | 301 | On ppc, the contents of PLT table change after the first call. |
| 302 | Ltrace used to handle this by reinserting the (now overwritten) |
| 303 | breakpoint after the function returns. This introduced a window |
| 304 | where calls to the same function from the same binary (either a |
| 305 | recursive calls, or calls from another thread) weren't traced. |
| 306 | This is fixed as of 0.7.0. |
| 307 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 308 | As a side effect, events requested via -e now only hit when a PLT |
| 309 | call is made, which is consistent with other architectures. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 310 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 311 | *** [ppc] Allow stepping over lwarx instruction |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 312 | |
Petr Machata | 3de5e36 | 2012-10-23 17:35:57 +0200 | [diff] [blame] | 313 | ** Known bugs |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 314 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 315 | *** [arm] Tracing is not supported at all on ARM |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 316 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 317 | ltrace might work on older kernels, but no attempt was made to |
| 318 | fully support it. Newer kernels don't support PTRACE_SINGLESTEP, |
| 319 | which ltrace depends on. Before singlestepping is implemented in |
| 320 | software, ARM is considered unsupported. |
| 321 | |
Petr Machata | 4b1d162 | 2012-12-07 16:25:22 +0100 | [diff] [blame] | 322 | * Version 0.6.0 [2011-01-06 Thu] |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 323 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 324 | ** General Features |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 325 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 326 | *** Use autotools for building |
| 327 | *** New option -b: disables output of signals received by the tracee |
| 328 | *** New option -w: print stack trace of events |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 329 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 330 | Pass --with-libunwind to configure to enable the feature. This |
| 331 | requires libunwind. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 332 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 333 | *** Support tracing of symbols from libraries opened with dlopen |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 334 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 335 | These symbols are selected by -x. |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 336 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 337 | ** Architecture-specific Changes |
Petr Machata | 103d041 | 2012-10-25 14:38:52 +0200 | [diff] [blame] | 338 | |
Petr Machata | c11c01e | 2012-10-19 01:51:06 +0200 | [diff] [blame] | 339 | *** Various fixes for MIPS and PowerPC |
| 340 | *** Support for ARM Thumb mode |
| 341 | *** Implement fetching of 5th and further function arguments on s390 |
| 342 | *** Support fork/exec syscalls on 31-bit s390 |
| 343 | *** Support for float and double arguments on x86_64 |
| 344 | *** Fixes for return arguments (after '+') in nested calls on x86_64 |
Petr Machata | e99af27 | 2012-10-26 00:29:52 +0200 | [diff] [blame] | 345 | |
| 346 | * License |
| 347 | ------------------------------------------------------------------------------- |
Petr Machata | d988483 | 2014-02-05 02:46:07 +0100 | [diff] [blame] | 348 | Copyright (C) 2012-2014 Petr Machata <pmachata@redhat.com> |
Petr Machata | e99af27 | 2012-10-26 00:29:52 +0200 | [diff] [blame] | 349 | This file is part of ltrace. |
| 350 | |
| 351 | ltrace is free software; you can redistribute it and/or modify it |
| 352 | under the terms of the GNU General Public License as published by the |
| 353 | Free Software Foundation; either version 2 of the License, or (at your |
| 354 | option) any later version. |
| 355 | |
| 356 | ltrace is distributed in the hope that it will be useful, but WITHOUT |
| 357 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 358 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 359 | for more details. |
| 360 | |
| 361 | You should have received a copy of the GNU General Public License |
| 362 | along with this program. If not, see <http://www.gnu.org/licenses/>. |