26-FEB-2005 Derek Bruening (iye@alum.mit.edu) * DynamoRIO Beta Version 0.9.4 (build 2005.02.26) * Extended Windows support to include Windows 2003 through SP1 and Windows XP through SP2 * Fixed bugs in handling asynchronous procedure calls on Windows XP * Enabled internal infrastructure features: open-address hashtable, separate direct stubs, and adaptive working set sizing * Added human-readable error messages to all internal DynamoRIO errors * Removed dependence on specific glibc weak symbols, allowing single DynamoRIO shared library to run on all Linuxes * Removed linux filter library, now all in libdynamorio.so * Added custom client statistics support to the Windows GUI * Fixed a number of signal-handling issues with later Linux kernels * Fixed a bug in building traces that caused instruction expansion errors * Fixed clone bug: Instr clones are now fully independent * Fixed conditional branch instrumentation bugs: taken/not taken errors and poor handling of jecxz/loop* * Added new API routines: dr_delete_fragment(), dr_fragment_exists_at(), dr_trace_head_at(), dr_trace_exists_at(), instr_branch_selfmod_exit(), instr_branch_set_selfmod_exit(), instr_make_persistent(), instr_free_raw_bits() * Changed instr_length() to return an unsigned int, and instr_set_raw_bits() to take in an unsigned int * Changed dr_replace_fragment() so that it deletes the InstrList passed in -- the caller must clone() it to keep a copy 21-MAR-2003 Derek Bruening (iye@mit.edu) * DynamoRIO Beta Version 0.9.3 (build 2003.03.21) * Added adaptive optimization support: dr_decode_fragment(), dr_replace_fragment(), dr_fragment_size() * Added custom trace support: dynamorio_end_trace() client hook and dr_mark_trace_head() API routine * Added support for adding prefixes to basic blocks. Each prefix restores one register from the standard spill location. The routine dr_add_prefixes_to_basic_blocks() should be called during client initialization. Alongside this is support for marking a branch as targeting the prefix rather than the main entry point: instr_branch_set_prefix_target() and instr_branch_targets_prefix(). * Added support for custom exit stubs: instr_set_exit_stub_code() and instr_exit_stub_code() * Added support for using DynamoRIO as a library for a standalone client application (as opposed to a client library that works with DynamoRIO in executing a target application). This makes DynamoRIO useful as an IA-32 disassembly library, etc. Just call dr_standalone_init() to initialize a drcontext. * Added adaptive-level-of-detail instruction representation support: decode_raw(), decode_opcode(), decode_cti(), instr_reuse(), instr_decode(), instr_decode_cti(), instr_decode_opcode(), instr_opcode_valid(), instr_get_opcode_eflags(), instr_get_arith_flags(), instr_expand(), instr_get_next_expanded(), instr_get_prev_expanded(), instrlist_first_expanded(), instrlist_last_expanded(), instrlist_decode_cti() * Added some miscellaneous instruction routines: instr_mem_usage(), instr_compute_address(), opnd_compute_address() * Changed instr_is_cti_short_rewrite() to take in a byte * pointer * Removed instr_eflags_valid() (eflags info auto-magically derived now) * Name changes for consistency: instr_set_raw_bits_invalid => instr_set_raw_bits_valid(bool) instr_set_do_not_mangle => instr_set_ok_to_mangle * Added dynamorio_fork_init() client routine for Linux * Added support for fork, vfork, execve, and signals on Linux * Added routines to save and restore floating-point, MMX, and SSE state: proc_save_fpstate() and proc_restore_fpstate() * Added dr_mutex_{init,lock,unlock,trylock} convenience routines Combined with the thread init and exit routines, finally you can easily write a proper thread-aware client. * Added dynamorio_thread_init() and dynamorio_thread_exit() client routines * Statistics changes: for Linux, added num_signals. Changed name "logfile" to "logdir". * Changed runtime options for trace dumping: -dump_traces => -tracedump_binary and -tracedump_text -dump_trace_origins => -tracedump_origins is now independent of normal trace dump, so you can get just the origins -prof_counts and -prof_times do NOT automatically select trace dumping, you have to do it yourself (and pick text or binary) * Discovered that FILE is DLL-private on Windows, making it impossible to use a FILE* outside of the DLL that created it. Thus we must use HANDLE on Windows. Added a File data type and associated routines that hide the distinction between FILE on Linux and HANDLE on Windows: dr_open_file(), dr_close_file(), dr_flush_file(), dr_write_file(), dr_read_file(). * Added dr_log() and dr_get_logfile(), giving client ability to write to the DynamoRIO log files, and dr_open_log_file(), letting client open its own file in the DynamoRIO logging directory * Added -notify option to control printing of info on logging files, etc. to stderr independently of loglevel * Changed logging to use thread-private logfiles in a per-process logging directory; removed runtime option -logthreads * Added missing SSE2 opcodes: movntpd, movnti, movntdq, maskmovdqu * Fixed bug that cleared the drcontext user field on every callback * Revamped the API documentation, mainly adding instruction representation information 04-OCT-2002 Derek Bruening (iye@mit.edu) * DynamoRIO Beta Version 0.9.2 (build 2002.10.04) * Added routines for application-independent client memory allocation, both thread-local and global * Added a routine to return the current thread context * Added missing SSE2 opcodes: pshufd, pshufhw, pshuflw, punpcklqdq, punpckhqdq, paddq, pmuludq, psubq, psrldq, pslldq * Fixed linux bug preventing xemacs, other X apps from running * Fixed heap locking bug 14-JUN-2002 Derek Bruening (iye@mit.edu) * DynamoRIO Beta Version 0.9.1 (build 2002.06.14) * Initial release