summaryrefslogtreecommitdiff
path: root/libdwarf/NEWS
blob: 4aa6176d0473d91b092e38e0d0ca90d3e48ff417 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
December 13, 2011
  dwarf_lineoff() is now deprecated, dwarf_lineoff_b() is
  strongly recommended instead.
  dwarf_add_line_entry() does not have all the line fields
  needed for generating DWARF3/4, use dwarf_add_line_entry_b() instead.
  Generation of DWARF3/4 is not yet functional, this new function
  is a first step.
October 29, 2011
  Added support for reading .debug_types (type unit) data.
October 26,2011
  Revised the Makefile.in and README to make building libdwarf
  easier to accomplish with unusual locations of libelf headers
  or other headers or libraries.
June 04,2011
  Non-Elf objects could be used with libdwarf, but 
  no one has contributed non-elf-reading code for libdwarf
  and a crucial detail was not documented so those writing
  such object-reading code have not done it entirely correctly.  
  Fundamentally such code must treat a section index of 0 as
  a real but empty section with no name (an empty name).
  dwarf_elf_access.c and dwarf_elf_init_finish.c have some comments
  on this point now.
March 29,2011
  All the code changed a lot because indentations were all over
  the map, now they are consistent.  
  Additions were made to DWARF4 support.
  Now we use dicheck (a new open source application) to check indentation.
  Library users will not see any change, all interfaces remain
  as before.
January 12,2010
  A libdwarf user has noticed that the April 4, 2009 
  consumer function changes introduced
  a problem:  the default CFA column was DW_FRAME_CFA_COL
  even when a newer DWARF3 consumer frame interface like 
  dwarf_get_fde_info_for_all_regs3() is used.  The 
  libdwarf2.1.pdf documentation
  stated the default should be DW_FRAME_CFA_COL3 in that case.

  The introduction of a caller-specified  frame-column
  function (dwarf_set_frame_cfa_value())
  in that April 4, 2009 release was flawed in that it failed 
  to match the documentation.
  
  Now the default frame column is DW_FRAME_CFA_COL3 unless 
  the configure option  --enable-oldframecol
  is used at libdwarf build time.
  If you are using libdwarf old frame consumer interfaces 
  dwarf_get_fde_info_for_reg(), dwarf_get_fde_info_for_cfa_reg(), 
  and dwarf_get_fde_info_for_all_regs() and want unchanged operation
  then please configure libdwarf with --enable-oldframecol .
  or add the call dwarf_set_frame_cfa_value(dbg,DW_FRAME_CFA_COL)
  after calling a libdwarf initialization function.
  It is impossible to configure a single libdwarf.a so that
  it transparently defaults to both DW_FRAME_CFA_COL
  and DW_FRAME_CFA_COL3.
  
  A call such as dwarf_set_frame_cfa_value(dbg,DW_FRAME_CFA_COL3)
  or dwarf_set_frame_cfa_value(dbg,DW_FRAME_CFA_COL)
  (or some other name/value of your choosing)
  following the dwarf_init() call gives your application
  full control of the frame cfa column independent of the libdwarf
  configure option.  See the libdwarf2.1.pdf documentation for details.
  We strongly recommend that you use dwarf_set_frame_cfa_value()
  to avoid a configure-time dependency.
  
July 7, 2009
  Implemented support for elf 'rela' relocations so libdwarf and dwarfdump
  can read *nix .o files with such relocations reasonably, 
  at least for some machines
  (see dwarf_elf_access.c for EM_  in 'case' statements.)
  This changes the binary access for non-Elf object users (folks
  who have coded there own non-Elf access routines do reference
  internals of dwarf_opaque.h), but the new data can be left zero
  and the rest of the code should work fine.
  dwarf_opaque.h gathers section data in Dwarf_Section_s structs
  which simplifies the code in dwarf_init_finish.c and clarifies
  what fields are section related.
July 4, 2009
  When something erroneous is detected in a die
  information about the CU context may be of interest.
  So we added dwarf_CU_dieoffset_given_die(), a function which allows
  clients to find the relevant CU die for any die.  
  The consumer can use normal attribute access functions to 
  print information about that CU die (and the erroneous die,
  of course).  See the libdwarf consumer document for more
  information.
April 27, 2009
  Interface additions: dwarf_loclist_from_expr_a() and
  dwarf_get_ranges_a() are new interfaces like
  dwarf_loclist_from_expr() and dwarf_get_ranges() respectively,
  but with arguments allowing
  full support for different CIEs
  in an executable  having different address-sizes
  (and their compilation unit DIEs if .debug_info is present).
  dwarf_get_loclist_entry() does not support
  differing address sizes per CIE/CU.
April 4, 2009
  Added new functions dwarf_set_frame_cfa_value()
  dwarf_set_frame_same_value(), and
  dwarf_set_frame_undefined_value(). These are essential
  for ABIs where the real register numbers exceed 1033
  (such as ppc).  Failing to use these leads to 
  frame instructions  DW_CFA_undefined and
  DW_CFA_same_value emitting values that cannot be
  interpreted correctly by a libdwarf consumer.
  See dwarfdump for examples of use.
Feb 14, 2009
  Added configure option --enable-nonstandardprintf
  which makes it easy to get printf of Dwarf_Unsigned (etc)
  types correct even for non-standard compilers.
Dec 30, 2008
  Added interfaces for getting and printing the .debug_ranges
  data.
Dec 8, 2008
  Record the abbreviation 'code' (index) in each DIE.
  Making it possible for a pretty-printer to print the 
  abbreviation code.
Sep 30, 2008
  Phil Mucci provided an a.out test chase which demonstrates a bug
  in 64bit DWARF2 output by gcc.   Now libdwarf works around this
  and with -v -v -v -v prints a warning.
Sep 29, 2008
  Thanks to Phil Mucci for providing a little-endian 64bit
  test object file that exposed a problem when there are 'extra' bytes
  (possibly unused) after a line table prologue header and before the
  line table itself.  This releases fixes the bug.

  Thanks to Matthew Legendre for pointing out that we were sharing
  de_fde_count for eh and non-eh and that could cause erroneous
  error returns in a couple of functions.
  These counts are now separate.
April 9, 2008
  libdwarf would behave badly if one compilation unit had more than 64K
  abbreviations: It was both very slow dealing with abbreviations and would
  get mixed up and error-off.  Increased the size of some internal variables
  and rewrote abbreviation lookup.
February 18, 2008
  It is now possible to write one's own access to objects, making it possible
  to use a different library than libelf or even read a completely
  different object format than ELF.
  See dwarf_object_init() and see the new source files
  dwarf_original_elf_init.c and dwarf_elf_access.c  for example
  code using the new function-pointer approach as it's implementation.
  Thanks to Josh Fuhs for doing the design and 99% of the work to make
  this happen.
February 2, 2008
  Now pro_init() defaults to standard DWARF3 generated offset sizes.
  But if a new flag DW_DLC_OFFSET_SIZE_64 or'd into flags passed to
  dwarf_produser_init() or dwarf_producer_init_b, 
  the DWARF3 extended offset size is generated (if the address size
  is 64 bit).
  The new configure option  --enable-dwarf-format-strict-32bit 
  forces pro_init() to always cause 32bit offset dwarf generation.
  The new configure option --enable-dwarf-format-sgi-irix forces
  the old SGI IRIX 64bit offset generation for 64bit pointer size objects.

  This is intended to simplify standard DWARF3 generation with
  the now-normal use of 32bit DWARF offsets for both 32 and 64
  bit pointer objects.
 
  It does require that anyone wanting SGI IRIX dwarf generation
  with its non-standard offsets for 64bit objects use the new
  --enable-dwarf-format-sgi-irix configure time option.

  This has no effect on dwarf reader code. It affects code calling
  the libdwarf producer interfaces.

December 8, 2007
  Had to add an ugly configure conditional as libelf has
  unconditional use of off64_t in recent libelf.h
July 3, 2007
  A new interface function, dwarf_loclist_from_expr(),
  allows easy extraction of dwarf expression bytes from
  expressions in frame data.
May 8, 2007
  Now documents released as .mm and .pdf (no longer as .ps).
May 7, 2007
  Incorporates Sun Microsystems  extensions to dwarf.h and
  to the consumer and producer libraries.   The changes
  include corrections so the producer library  cleans up it's memory
  use on a call to dwarf_producer_finish(dbg).
  Thanks to Chris Quenelle of Sun for these contributions.

March 20, 2007
  nroff/troff and the AT&T -mm package are not widely available,
  so now the Makefile refers to groff, which works quite nicely.

February 20, 2007
  Documented libdwarf thread safety in README.
  Fixed memory leak in  dwarf macro reading code.
  Removed use of static data in dwarf macro
  reading code: now uses stack/heap (for
  thread safety).

February 9, 2007
  Maintenance of libdwarf is now outside SGI
  as David Anderson has left SGI.

March 29, 2006
  The March  27, 2006 version accomodates DWARF3.
  Some people have been using the library without
  altering dwarf.h, libdwarf.h to accomodate
  large numbers of registers.  This exposed a bug
  (an off-by-one error) but also makes it clear
  additional documentation is needed.  So 
  in libdwarf large new comments near 'TARGET DEPENDENCY'
  attempt to explain better.
Oct 03, 2005
  The July version had an incompatible interface: old
  dealloc code did not always work right. The incompatibility
  is now fixed and the new features remain.

July 15, 2005
  New optional alloc-check code optionally checks all
  allocated memory is freed (malloc_check.h malloc_check.c)
  Various new dealloc routines written as the previous approach
  of letting client code do detailed dealloc turned out not
  to dealloc all memory.
  To get the new checking you must manually change a line
  in malloc_check.h and rebuild libdwarf.


Mar 31, 2005
  Documented  the libexc.so/.debug_funcnames
  dependency and the 64bit-offset DWARF extension in
  mips_extentions.{mm,ps}.

Mar 21, 2005
  gcc 3.3 and 3.4 .eh_frame 'z' augmentations are not handled
  correctly, so libdwarf gives an error when attempting to
  print such. gcc 2 'eh' augmentation is simpler and
  prints correctly.  (.eh_frame is a GNU section,
  not DWARF2/3, and what is recorded in .eh_frame is not
  specified by DWARF2/3, though .eh_frame does resemble
  DWARF2/3 .debug_frame).


Oct 28, 2004
  Updated contact address in copyright: SGI moved 1/4 mile
  in 2003 to a new address: 1500 Crittenden Lane.
  
  Documented additional vendor extensions.

Oct 27, 2004
  Added known vendor extensions to dwarf2/3 to dwarf.h
  HP, GNU, PGI and UPC extensions are now recorded.
  Recorded vendor extensions from Concurrent.

Feb 3, 2004
  If 'Dwarf_Word' is 64 bits, two macros reading leb numbers
  fail to initialize upper bits of the values read.
  First noticed with bogus line numbers printing from dwarfdump.
  Now we use already-existing functions, avoiding the problem.

Oct 02, 2003
  Support .debug_loc section fully.

Sept 29, 2003
  Support DW_FORM_indirect properly.
  Supports loclists in part (but not multiple loclist entries yet).
  Support 'padding bytes' at end of .debug_arange and
  .debug_pubnames and .debug_pubtypes per CU
  (recent dwarf committee email made it clear this is appropriate).

May 23, 2002
  Libdwarf now asks for sections only when they are
  used, so that unneeded sections aren't loaded.
  Support for using SGI's ELF library as an alternative to
  using AT&T libelf-style has been added (the SGI ELF
  library is presently only available internally to SGI).

Jan 10, 2002
  Fixed memory leak in dwarf_finish().

Aug 21, 2001
  If one called dwarf_add_file_decl()
  or dwarf_add_directory_decl() but never added a line,
  .debug_line was not produced.  This was a mistake,
  as if any file or directory was provided .debug_line
  should be produced. Now it is produced.

June 14, 2001
  Given a cu header offset, it was not easy to derive the
  CU header DIE offset. Created the new
  function dwarf_get_cu_die_offset_given_cu_header_offset()
  do get the CU header DIE offset.
  Added the function dwarf_get_arange_cu_header_offset()
  so the cu header offset could be retrieved from .debug_aranges
  information.

June 07, 2001
  Major bug in dwarf_leb.c decoding large integers 
  (Dwarf_Signed 64 bit where library is compiled in ILP32) 
  found and fixed.

May 21, 2001
  Some small fixes have been found by various folks,
  so it seems time to prepare a new source release.
  See ChangeLog for details.

April 15, 2000
  The libdwarf copyright has changed to
     version 2.1 of the GNU Lesser General Public License.
  Anyone holding a version of libdwarf that was published
  before this new copyright is allowed to use
    the copyright published in that earlier libdwarf source
    on the earlier source
  or to use 
    this new copyright on the earlier source,
  at their option.


December 08, 1999
  The dwarf committee has adopted the offset-extension
  proposal. This allows compatibly emitting
  dwarf with 64bit offsets.

  The dwarf reader now automatically figures out which is in use.
  The dwarf writer configures itself at the time the
  writer initialization routine is called, though
  the writer is restricted, at libdwarf 
  compile time, to one of
		mips/sgi pure 32/pure 64 offsets/pointers.

		32bit offsets only (per dwarf 2.0.0 and cygnus)

		32bit offsets with extension to 64bit offsets
		allowed (the offset-extension newly passed).
  
  In addition, a great deal of duplicate code
  for the sgi  .debug_weaknames, .debug_funcnames, 
  .debug_varnames and .debug_typenames sections has
  been removed: a single set of functions does the real work now.
  
Sept 29, 1999
  Just found out that cygnus is, on 64bit targets, generating
  32bit offsets (as elf32 has, for example) with 64 bit
  pointers (in references to text and data).
  Whereas sgi has always generated 64bit dwarf with
  64 bit offsets (as in elf64) and 64bit pointers for
  64bit pointer objects.
  I'll call the sgi approach 64-bit and the cygnus approach
  32bit-offsets.

  Cygnus is following the DWARF2 spec as written, so they are
  right in doing only 32bit-offsets.

  Folks at sgi (including me) think that, as for elf64,
  the offsets in dwarf for 64bit pointer-apps should be
  64 bits.  We think it is only a matter of time
  before we really *need* 64bit offsets and when that happens
  it will be on an important app.  Disk space is cheap,
  so lets just go 64 bit on 64bit apps (such as ia64 apps)
  to avoid a future problem.
  I(davea@sgi.com) think the 'pointer-size' references in the dwarf
  spec were really written for 64-bit pointer apps.
  I don't recall serious consideration of 64bit pointer
  apps in the committee deliberations (I did miss
  a couple of meetings) and think 64bit offsets
  are consistent with dwarf2, even though the speci
  was not written for such. We think true full 64 bit
  dwarf2 is the right way to go (the spec changes
  are obvious: file and section offsets become 64bit
  with 64bit pointer objects.
 
  MIPS/SGI is definitely 64-bit offsets for 64 bit objects,
  cygnus is definitely 32bit-offsets for earlier 64bit pointer
  environments.

  At any rate, now the dwarf reader allows and accomodates
  both and the dwarf producer also accomodates both.
  Some tweaking of the pro_init.c or dwarf_init_finish.c
  files may be necessary in future: no other changes should
  be needed to accomodate the two 64bit approaches, as
  the library (and dwarfdump) now deal with both forms.


August 20, 1999
  Added some #ifndef/#define to pro_util.h to let libdwarf build
  on more hosts.  (since those hosts don't need the producer
  code, AFAIK, zero values suffice for missing #defines.)

July 21, 1999
  Now reader transparently reads either-endianness data
  from an either-endianness object.
  Updated dwarf.h and libdwarf.h to recognize
  GNU egcs dwarf extensions and to print the egcs eh_frame
  section.

June 10, 1999
  gnu configure version of libdwarf made available for the
  first time.  
  Still allows only same-endian-as-host in objects.
  
August, 1994
  libdwarf source made available for ftp on sgigate.sgi.com
	/ftp/pub

June, 1994
  Consumer interface changed completely, following
  "Candy Machine Interfaces" chapter from
   "Writing Solid Code" by Steve Maguire (Microsoft Press).

April,  1993
  Initial version of libdwarf  for dwarf version 2
  written at sgi.