This patch restructures dbxout.c not to use printf under any circumstances. It also overhauls the handling of continued stabs strings -- formerly each place that emitted part of a string would keep count of how many characters had been emitted, and at designated 'continuation points' the line would be split if there were too many. This meant that DBX_CONTIN_LENGTH had to be viewed as more of a guideline than an upper limit; there are several target headers which complain about not being able to use the correct value. Also, this structure forced the subsequent parameters to the .stabs directive to be carried around in global variables. Now we build the .stabs string in an obstack and break it up into appropriately-sized chunks when it's done. This means that DBX_CONTIN_LENGTH is now accurate, and the globals go away. Note that the obstack is used even when there is no limit on the length of a .stabs string. This is because it would take more #ifdefs to write straight to stdio in that case. Also, strange but true, writing straight to stdio is slower. Yes, I profiled it. On powerpc-darwin, I see 1.5-2.5% improvement in user and wall time from this patch (--disable-checking configuration). The patch produces no regressions in the GCC test suite on powerpc-darwin or i686-linux. In addition, on i686-linux there are no regressions in the GDB testsuite either in default mode (DWARF) or with --target_board=unix/gdb:debug_flags=-gstabs+ (forces use of stabs). dbxout.c has a lot of tentacles into the target headers; I would appreciate review of those changes by target maintainers. There is a bit more refactoring in here than is strictly necessary, and I suspect I haven't updated all the relevant bits of the documentation. Comments appreciated. zw