|
|
1.1 root 1: Notes on the GNU Implementation of DWARF Debugging Information
2: --------------------------------------------------------------
3: Last Updated: Sun Oct 4 10:04:13 PDT 1992 by [email protected]
4: -----------------------------------------------------
5:
6: This file describes special and unique aspects of the GNU implementation
7: of the DWARF debugging information language, as provided in the GNU version
8: 2.x compiler(s).
9:
10: For general information about the DWARF debugging information language,
11: you should obtain the DWARF version 1 specification document (and perhaps
12: also the DWARF version 2 draft specification document) developed by the
13: UNIX International Programming Languages Special Interest Group. A copy
14: of the the DWARF version 1 specification (in PostScript form) may be
15: obtained either from me <[email protected]> or from UNIX International. (See
16: below.) The file you are looking at now only describes known deviations
17: from the UI/PLSIG DWARF version 1 specification, together with those
18: things which are allowed by the DWARF version 1 specification but which
19: are known to cause interoperability problems (e.g. with SVR4 SDB).
20:
21: To obtain a copy of the DWARF version 1 specification from UNIX International,
22: use the following procedure:
23:
24: ---------------------------------------------------------------------------
25: Send mail to [email protected] containing the following:
26:
27: path [email protected]
28: send PUBLIC/dwarf.v1.mm
29:
30: for the troff source, or
31:
32: send PUBLIC/dwarf.v1.ps
33:
34: for the postscript. If you system supports uncompress and uudecode,
35: you can request that the data be compressed by placing the command
36: 'compress' in the message.
37:
38: If you have any questions about the archive service, please contact
39: Shane P. McCarron, UI Project Manager, <[email protected]>.
40: ---------------------------------------------------------------------------
41:
42: The generation of DWARF debugging information by the GNU version 2.x C
43: compiler has now been tested rather extensively for m88k, i386, i860, and
44: Sparc targets. The DWARF output of the GNU C compiler appears to inter-
45: operate well with the standard SVR4 SDB debugger on these kinds of target
46: systems (but of course, there are no guarantees).
47:
48: DWARF generation for the GNU g++ compiler is still not operable. This is
49: due primarily to the many remaining cases where the g++ front end does not
50: conform to the conventions used in the GNU C front end for representing
51: various kinds of declarations in the TREE data structure. It is not clear
52: at this time how these problems will be addressed.
53:
54: Future plans for the dwarfout.c module of the GNU compiler(s) includes the
55: addition of full support for GNU FORTRAN. (This should, in theory, be a
56: lot simpler to add than adding support for g++... but we'll see.)
57:
58: Many features from the evolving DWARF version 2 (draft) specification have
59: been adapted to, and used in the GNU implementation of DWARF (version 1).
60: In most of these cases, a DWARF version 2 (draft) approach is used in place
61: of (or in addition to) DWARF version 1 stuff simply because it is apparent
62: that DWARF version 1 is not sufficiently expressive to provide the kinds of
63: information which may be necessary to support really robust debugging.
64: In *all* of these cases however, the use of DWARF version 2 (draft) features
65: should not interfere in any way with the interoperability (of GNU compilers)
66: with generally available "classic" (pre version 1) DWARF consumer tools
67: (e.g. SVR4 SDB). Full support for DWARF version 2 should be available
68: sometime after the DWARF version 2 specification has been finalized.
69:
70: The DWARF generation enhancement for the GNU compiler(s) was initially
71: donated to the Free Software Foundation by Network Computing Devices.
72: (Thanks NCD!) Additional development and maintenance of dwarfout.c has
73: been largely supported (i.e. funded) by Intel Corporation. (Thanks Intel!)
74:
75: If you have questions or comments about the DWARF generation feature, please
76: send mail to me <[email protected]>. I will be happy to investigate any bugs
77: reported and I may even provide fixes (but of course, I can make no promises).
78:
79: The DWARF debugging information produced by GCC may deviate in a few minor
80: (but perhaps significant) respects from the DWARF debugging information
81: currently produced by other C compilers. A serious attempt has been made
82: however to conform to the published specifications, to existing practice,
83: and to generally accepted norms in the GNU implementation of DWARF.
84:
85: If you are interested in obtaining more information about DWARF or in
86: participating in the continuing evolution of DWARF within the UI/PLSIG
87: group, please contact either myself or the UI/PLSIG chairman, Dan Oldman
88: <[email protected]>. The UI/PLSIG welcomes and encourages the
89: participation of new members who might be interested in discussing debugging
90: issues in general, and DWARF in particular. There are no dues and you
91: DO NOT have to be a UI member in order to join the UI/PLSIG. The UI/PLSIG
92: operates an E-mail mailing list and holds regular meeting in various cities.
93: If you don't have time to participate actively, but would like to be kept
94: abreast of recent developments, you con join the UI/PLSIG mailing list and
95: just listen in on our lively discussions.
96:
97: ** IMPORTANT NOTE ** ** IMPORTANT NOTE ** ** IMPORTANT NOTE **
98:
99: Under normal circumstances, the DWARF information generated by the GNU
100: compilers (in an assembly language file) is essentially impossible for
101: a human being to read. This fact can make it very difficult to debug
102: certain DWARF-related problems. In order to overcome this difficulty,
103: a feature has been added to dwarfout.c (enabled by the -fverbose-asm
104: option) which causes additional comments to be placed into the assembly
105: language output file, out to the right-hand side of most bits of DWARF
106: material. The comments indicate (far more clearly that the obscure
107: DWARF hex codes do) what is actually being encoded in DWARF. Thus, the
108: -fverbose-asm option can be highly useful for those who must study the
109: DWARF output from the GNU compilers in detail.
110:
111: ---------
112:
113: (Footnote: Within this file, the term `Debugging Information Entry' will
114: be abbreviated as `DIE'.)
115:
116:
117: Release Notes (aka known bugs)
118: -------------------------------
119:
120: In one very obscure case involving dynamically sized arrays, the DWARF
121: "location information" for such an array may make it appear that the
122: array has been totally optimized out of existence, when in fact it
123: *must* actually exist. (This only happens when you are using *both* -g
124: *and* -O.) This is due to aggressive dead store elimination in the
125: compiler, and to the fact that the DECL_RTL expressions associated with
126: variables are not always updated to correctly reflect the effects of
127: GCC's aggressive dead store elimination.
128:
129: -------------------------------
130:
131: When attempting to set a breakpoint at the "start" of a function compiled
132: with -g1, the debugger currently has no way of knowing exactly where the
133: end of the prologue code for the function is. Thus, for most targets,
134: all the debugger can do is to set the breakpoint at the AT_low_pc address
135: for the function. But if you stop there and then try to look at one or
136: more of the formal parameter values, they may not have been "homed" yet,
137: so you may get inaccurate answers (or perhaps even addressing errors).
138:
139: Some people may consider this simply a non-feature, but I consider it a
140: bug, and I hope to provide some some GNU-specific attributes (on function
141: DIEs) which will specify the address of the end of the prologue and the
142: address of the beginning of the epilogue in a future release.
143:
144: -------------------------------
145:
146: It is believed at this time that old bugs relating to the AT_bit_offset
147: values for bit-fields have been fixed.
148:
149: There may still be some very obscure bugs relating to the DWARF description
150: of type `long long' bit-fields for target machines (e.g. 80x86 machines)
151: where the alignment of type `long long' data objects is different from
152: (and less than) the size of a type `long long' data object.
153:
154: Please report any problems with the DWARF description of bit-fields as you
155: would any other GCC bug. (Procedures for bug reporting are given in the
156: GNU C compiler manual.)
157:
158: --------------------------------
159:
160: At this time, GCC does not know how to handle the GNU C "nested functions"
161: extension. (See the GCC manual for more info on this extension to ANSI C.)
162:
163: --------------------------------
164:
165: The GNU compilers now represent inline functions (and inlined instances
166: thereof) in exactly the manner described by the current DWARF version 2
167: (draft) specification. The version 1 specification for handling inline
168: functions (and inlined instances) was known to be brain-damaged (by the
169: PLSIG) when the version 1 spec was finalized, but it was simply too late
170: in the cycle to get it removed before the version 1 spec was formally
171: released to the public (by UI).
172:
173: --------------------------------
174:
175: At this time, GCC does not generate the kind of really precise information
176: about the exact declared types of entities with signed integral types which
177: is required by the current DWARF draft specification.
178:
179: Specifically, the current DWARF draft specification seems to require that
180: the type of an non-unsigned integral bit-field member of a struct or union
181: type be represented as either a "signed" type or as a "plain" type,
182: depending upon the the exact set of keywords that were used in the
183: type specification for the given bit-field member. It was felt (by the
184: UI/PLSIG) that this distinction between "plain" and "signed" integral types
185: could have some significance (in the case of bit-fields) because ANSI C
186: does not constrain the signedness of a plain bit-field, whereas it does
187: constrain the signedness of an explicitly "signed" bit-field. For this
188: reason, the current DWARF specification calls for compilers to produce
189: type information (for *all* integral typed entities... not just bit-fields)
190: which explicitly indicates the signedness of the relevant type to be
191: "signed" or "plain" or "unsigned".
192:
193: Unfortunately, the GNU DWARF implementation is currently incapable of making
194: such distinctions.
195:
196: --------------------------------
197:
198:
199: Known Interoperability Problems
200: -------------------------------
201:
202: Although the GNU implementation of DWARF conforms (for the most part) with
203: the current UI/PLSIG DWARF version 1 specification (with many compatible
204: version 2 features added in as "vendor specific extensions" just for good
205: measure) there are a few known cases where GCC's DWARF output can cause
206: some confusion for "classic" (pre version 1) DWARF consumers such as the
207: System V Release 4 SDB debugger. These cases are described in this section.
208:
209: --------------------------------
210:
211: The DWARF version 1 specification includes the fundamental type codes
212: FT_ext_prec_float, FT_complex, FT_dbl_prec_complex, and FT_ext_prec_complex.
213: Since GNU C is only a C compiler (and since C doesn't provide any "complex"
214: data types) the only one of these fundamental type codes which GCC ever
215: generates is FT_ext_prec_float. This fundamental type code is generated
216: by GCC for the `long double' data type. Unfortunately, due to an apparent
217: bug in the SVR4 SDB debugger, SDB can become very confused wherever any
218: attempt is made to print a variable, parameter, or field whose type was
219: given in terms of FT_ext_prec_float.
220:
221: (Actually, SVR4 SDB fails to understand *any* of the four fundamental type
222: codes mentioned here. This will fact will cause additional problems when
223: there is a GNU FORTRAN front-end.)
224:
225: --------------------------------
226:
227: In general, it appears that SVR4 SDB is not able to effectively ignore
228: fundamental type codes in the "implementation defined" range. This can
229: cause problems when a program being debugged uses the `long long' data
230: type (or the signed or unsigned varieties thereof) because these types
231: are not defined by ANSI C, and thus, GCC must use its own private fundamental
232: type codes (from the implementation-defined range) to represent these types.
233:
234: --------------------------------
235:
236:
237: General GNU DWARF extensions
238: ----------------------------
239:
240: In the current DWARF version 1 specification, no mechanism is specified by
241: which accurate information about executable code from include files can be
242: properly (and fully) described. (The DWARF version 2 specification *does*
243: specify such a mechanism, but it is about 10 times more complicated than
244: it needs to be so I'm not terribly anxious to try to implement it right
245: away.)
246:
247: In the GNU implementation of DWARF version 1, a fully downward-compatible
248: extension has been implemented which permits the GNU compilers to specify
249: which executable lines come from which files. This extension places
250: additional information (about source file names) in GNU-specific sections
251: (which should be totally ignored by all non-GNU DWARF consumers) so that
252: this extended information can be provided (to GNU DWARF consumers) in a way
253: which is totally transparent (and invisible) to non-GNU DWARF consumers
254: (e.g. the SVR4 SDB debugger). The additional information is placed *only*
255: in specialized GNU-specific sections, where it should never even be seen
256: by non-GNU DWARF consumers.
257:
258: To understand this GNU DWARF extension, imagine that the sequence of entries
259: in the .lines section is broken up into several subsections. Each contiguous
260: sequence of .line entries which relates to a sequence of lines (or statements)
261: from one particular file (either a `base' file or an `include' file) could
262: be called a `line entries chunk' (LEC).
263:
264: For each LEC there is one entry in the .debug_srcinfo section.
265:
266: Each normal entry in the .debug_srcinfo section consists of two 4-byte
267: words of data as follows:
268:
269: (1) The starting address (relative to the entire .line section)
270: of the first .line entry in the relevant LEC.
271:
272: (2) The starting address (relative to the entire .debug_sfnames
273: section) of a NUL terminated string representing the
274: relevant filename. (This filename name be either a
275: relative or an absolute filename, depending upon how the
276: given source file was located during compilation.)
277:
278: Obviously, each .debug_srcinfo entry allows you to find the relevant filename,
279: and it also points you to the first .line entry that was generated as a result
280: of having compiled a given source line from the given source file.
281:
282: Each subsequent .line entry should also be assumed to have been produced
283: as a result of compiling yet more lines from the same file. The end of
284: any given LEC is easily found by looking at the first 4-byte pointer in
285: the *next* .debug_srcinfo entry. That next .debug_srcinfo entry points
286: to a new and different LEC, so the preceding LEC (implicitly) must have
287: ended with the last .line section entry which occurs at the 2 1/2 words
288: just before the address given in the first pointer of the new .debug_srcinfo
289: entry.
290:
291: The following picture may help to clarify this feature. Let's assume that
292: `LE' stands for `.line entry'. Also, assume that `* 'stands for a pointer.
293:
294:
295: .line section .debug_srcinfo section .debug_sfnames section
296: ----------------------------------------------------------------
297:
298: LE <---------------------- *
299: LE * -----------------> "foobar.c" <---
300: LE |
301: LE |
302: LE <---------------------- * |
303: LE * -----------------> "foobar.h" <| |
304: LE | |
305: LE | |
306: LE <---------------------- * | |
307: LE * -----------------> "inner.h" | |
308: LE | |
309: LE <---------------------- * | |
310: LE * ------------------------------- |
311: LE |
312: LE |
313: LE |
314: LE |
315: LE <---------------------- * |
316: LE * -----------------------------------
317: LE
318: LE
319: LE
320:
321: In effect, each entry in the .debug_srcinfo section points to *both* a
322: filename (in the .debug_sfnames section) and to the start of a block of
323: consecutive LEs (in the .line section).
324:
325: Note that just like in the .line section, there are specialized first and
326: last entries in the .debug_srcinfo section for each object file. These
327: special first and last entries for the .debug_srcinfo section are very
328: different from the normal .debug_srcinfo section entries. They provide
329: additional information which may be helpful to a debugger when it is
330: interpreting the data in the .debug_srcinfo, .debug_sfnames, and .line
331: sections.
332:
333: The first entry in the .debug_srcinfo section for each compilation unit
334: consists of five 4-byte words of data. The contents of these five words
335: should be interpreted (by debuggers) as follows:
336:
337: (1) The starting address (relative to the entire .line section)
338: of the .line section for this compilation unit.
339:
340: (2) The starting address (relative to the entire .debug_sfnames
341: section) of the .debug_sfnames section for this compilation
342: unit.
343:
344: (3) The starting address (in the execution virtual address space)
345: of the .text section for this compilation unit.
346:
347: (4) The ending address plus one (in the execution virtual address
348: space) of the .text section for this compilation unit.
349:
350: (5) The date/time (in seconds since midnight 1/1/70) at which the
351: compilation of this compilation unit occurred. This value
352: should be interpreted as an unsigned quantity because gcc
353: might be configured to generate a default value of 0xffffffff
354: in this field (in cases where it is desired to have object
355: files created at different times from identical source files
356: be byte-for-byte identical). By default, these timestamps
357: are *not* generated by dwarfout.c (so that object files
358: compiled at different times will be byte-for-byte identical).
359: If you wish to enable this "timestamp" feature however, you
360: can simply place a #define for the symbol `DWARF_TIMESTAMPS'
361: in your target configuration file and then rebuild the GNU
362: compiler(s).
363:
364: Note that the first string placed into the .debug_sfnames section for each
365: compilation unit is the name of the directory in which compilation occurred.
366: This string ends with a `/' (to help indicate that it is the pathname of a
367: directory). Thus, the second word of each specialized initial .debug_srcinfo
368: entry for each compilation unit may be used as a pointer to the (string)
369: name of the compilation directory, and that string may in turn be used to
370: "absolutize" any relative pathnames which may appear later on in the
371: .debug_sfnames section entries for the same compilation unit.
372:
373: The fifth and last word of each specialized starting entry for a compilation
374: unit in the .debug_srcinfo section may (depending upon your configuration)
375: indicate the date/time of compilation, and this may be used (by a debugger)
376: to determine if any of the source files which contributed code to this
377: compilation unit are newer than the object code for the compilation unit
378: itself. If so, the debugger may wish to print an "out-of-date" warning
379: about the compilation unit.
380:
381: The .debug_srcinfo section associated with each compilation will also have
382: a specialized terminating entry. This terminating .debug_srcinfo section
383: entry will consist of the following two 4-byte words of data:
384:
385: (1) The offset, measured from the start of the .line section to
386: the beginning of the terminating entry for the .line section.
387:
388: (2) A word containing the value 0xffffffff.
389:
390: --------------------------------
391:
392: In the current DWARF version 1 specification, no mechanism is specified by
393: which information about macro definitions and un-definitions may be provided
394: to the DWARF consumer.
395:
396: The DWARF version 2 (draft) specification does specify such a mechanism.
397: That specification was based on the GNU ("vendor specific extension")
398: which provided some support for macro definitions and un-definitions,
399: but the "official" DWARF version 2 (draft) specification mechanism for
400: handling macros and the GNU implementation have diverged somewhat. I
401: plan to update the GNU implementation to conform to the "official"
402: DWARF version 2 (draft) specification as soon as I get time to do that.
403:
404: Note that in the GNU implementation, additional information about macro
405: definitions and un-definitions is *only* provided when the -g3 level of
406: debug-info production is selected. (The default level is -g2 and the
407: plain old -g option is considered to be identical to -g2.)
408:
409: GCC records information about macro definitions and undefinitions primarily
410: in a section called the .debug_macinfo section. Normal entries in the
411: .debug_macinfo section consist of the following three parts:
412:
413: (1) A special "type" byte.
414:
415: (2) A 3-byte line-number/filename-offset field.
416:
417: (3) A NUL terminated string.
418:
419: The interpretation of the second and third parts is dependent upon the
420: value of the leading (type) byte.
421:
422: The type byte may have one of four values depending upon the type of the
423: .debug_macinfo entry which follows. The 1-byte MACINFO type codes presently
424: used, and their meanings are as follows:
425:
426: MACINFO_start A base file or an include file starts here.
427: MACINFO_resume The current base or include file ends here.
428: MACINFO_define A #define directive occurs here.
429: MACINFO_undef A #undef directive occur here.
430:
431: (Note that the MACINFO_... codes mentioned here are simply symbolic names
432: for constants which are defined in the GNU dwarf.h file.)
433:
434: For MACINFO_define and MACINFO_undef entries, the second (3-byte) field
435: contains the number of the source line (relative to the start of the current
436: base source file or the current include files) when the #define or #undef
437: directive appears. For a MACINFO_define entry, the following string field
438: contains the name of the macro which is defined, followed by its definition.
439: Note that the definition is always separated from the name of the macro
440: by at least one whitespace character. For a MACINFO_undef entry, the
441: string which follows the 3-byte line number field contains just the name
442: of the macro which is being undef'ed.
443:
444: For a MACINFO_start entry, the 3-byte field following the type byte contains
445: the offset, relative to the start of the .debug_sfnames section for the
446: current compilation unit, of a string which names the new source file which
447: is beginning its inclusion at this point. Following that 3-byte field,
448: each MACINFO_start entry always contains a zero length NUL terminated
449: string.
450:
451: For a MACINFO_resume entry, the 3-byte field following the type byte contains
452: the line number WITHIN THE INCLUDING FILE at which the inclusion of the
453: current file (whose inclusion ends here) was initiated. Following that
454: 3-byte field, each MACINFO_resume entry always contains a zero length NUL
455: terminated string.
456:
457: Each set of .debug_macinfo entries for each compilation unit is terminated
458: by a special .debug_macinfo entry consisting of a 4-byte zero value followed
459: by a single NUL byte.
460:
461: --------------------------------
462:
463: In the current DWARF draft specification, no provision is made for providing
464: a separate level of (limited) debugging information necessary to support
465: tracebacks (only) through fully-debugged code (e.g. code in system libraries).
466:
467: A proposal to define such a level was submitted (by me) to the UI/PLSIG.
468: This proposal was rejected by the UI/PLSIG for inclusion into the DWARF
469: version 1 specification for two reasons. First, it was felt (by the PLSIG)
470: that the issues involved in supporting a "traceback only" subset of DWARF
471: were not well understood. Second, and perhaps more importantly, the PLSIG
472: is already having enough trouble agreeing on what it means to be "conformant"
473: to the DWARF specification, and it was felt that trying to specify multiple
474: different *levels* of conformance would only complicate our discussions of
475: this already divisive issue. Nonetheless, the GNU implementation of DWARF
476: provides an abbreviated "traceback only" level of debug-info production for
477: use with fully-debugged "system library" code. This level should only be
478: used for fully debugged system library code, and even then, it should only
479: be used where there is a very strong need to conserve disk space. This
480: abbreviated level of debug-info production can be used by specifying the
481: -g1 option on the compilation command line.
482:
483: --------------------------------
484:
485: As mentioned above, the GNU implementation of DWARF currently uses the DWARF
486: version 2 (draft) approach for inline functions (and inlined instances
487: thereof). This is used in preference to the version 1 approach because
488: (quite simply) the version 1 approach is highly brain-damaged and probably
489: unworkable.
490:
491: --------------------------------
492:
493:
494: GNU DWARF Representation of GNU C Extensions to ANSI C
495: ------------------------------------------------------
496:
497: The file dwarfout.c has been designed and implemented so as to provide
498: some reasonable DWARF representation for each and every declarative
499: construct which is accepted by the GNU C compiler. Since the GNU C
500: compiler accepts a superset of ANSI C, this means that there are some
501: cases in which the DWARF information produced by GCC must take some
502: liberties in improvising DWARF representations for declarations which
503: are only valid in (extended) GNU C.
504:
505: In particular, GNU C provides at least three significant extensions to
506: ANSI C when it comes to declarations. These are (1) inline functions,
507: and (2) dynamic arrays, and (3) incomplete enum types. (See the GCC
508: manual for more information on these GNU extensions to ANSI C.) When
509: used, these GNU C extensions are represented (in the generated DWARF
510: output of GCC) in the most natural and intuitively obvious ways.
511:
512: In the case of inline functions, the DWARF representation is exactly as
513: called for in the DWARF version 2 (draft) specification for an identical
514: function written in C++; i.e. we "reuse" the representation of inline
515: functions which has been defined for C++ to support this GNU C extension.
516:
517: In the case of dynamic arrays, we use the most obvious representational
518: mechanism available; i.e. an array type in which the upper bound of
519: some dimension (usually the first and only dimension) is a variable
520: rather than a constant. (See the DWARF version 1 specification for more
521: details.)
522:
523: In the case of incomplete enum types, such types are represented simply
524: as TAG_enumeration_type DIEs which DO NOT contain either AT_byte_size
525: attributes or AT_element_list attributes.
526:
527: --------------------------------
528:
529:
530: Future Directions
531: -----------------
532:
533: The codes, formats, and other paraphernalia necessary to provide proper
534: support for symbolic debugging for the C++ language are still being worked
535: on by the UI/PLSIG. The vast majority of the additions to DWARF which will
536: be needed to completely support C++ have already been hashed out and agreed
537: upon, but a few small issues (e.g. anonymous unions, access declarations)
538: are still being discussed. Also, we in the PLSIG are still discussing
539: whether or not we need to do anything special for C++ templates. (At this
540: time it is not yet clear whether we even need to do anything special for
541: these.)
542:
543: Unfortunately, as mentioned above, there are quite a few problems in the
544: g++ front end itself, and these are currently responsible for severly
545: restricting the progress which can be made on adding DWARF support
546: specifically for the g++ front-end. Furthermore, Richard Stallman has
547: expressed the view that C++ friendships might not be important enough to
548: describe (in DWARF). This view directly conflicts with both the DWARF
549: version 1 and version 2 (draft) specifications, so until this small
550: misunderstanding is cleared up, DWARF support for g++ is unlikely.
551:
552: With regard to FORTRAN, the UI/PLSIG has defined what is believed to be a
553: complete and sufficient set of codes and rules for adequately representing
554: all of FORTRAN 77, and most of Fortran 90 in DWARF. While some support for
555: this has been implemented in dwarfout.c, further implementation and testing
556: will have to await the arrival of the GNU Fortran front-end (which is
557: currently in early alpha test as of this writing).
558:
559: GNU DWARF support for other languages (i.e. Pascal and Modula) is a moot
560: issue until there are GNU front-ends for these other languages.
561:
562: GNU DWARF support for DWARF version 2 will probably not be attempted until
563: such time as the version 2 specification is finalized. (More work needs
564: to be done on the version 2 specification to make the new "abbreviations"
565: feature of version 2 more easily implementable. Until then, it will be
566: a royal pain the ass to implement version 2 "abbreviations".) For the
567: time being, version 2 features will be added (in a version 1 compatible
568: manner) when and where these features seem necessary or extremely desirable.
569:
570: As currently defined, DWARF only describes a (binary) language which can
571: be used to communicate symbolic debugging information from a compiler
572: through an assembler and a linker, to a debugger. There is no clear
573: specification of what processing should be (or must be) done by the
574: assembler and/or the linker. Fortunately, the role of the assembler
575: is easily inferred (by anyone knowledgeable about assemblers) just by
576: looking at examples of assembly-level DWARF code. Sadly though, the
577: allowable (or required) processing steps performed by a linker are
578: harder to infer and (perhaps) even harder to agree upon. There are
579: several forms of very useful `post-processing' steps which intelligent
580: linkers *could* (in theory) perform on object files containing DWARF,
581: but any and all such link-time transformations are currently both disallowed
582: and unspecified.
583:
584: In particular, possible link-time transformations of DWARF code which could
585: provide significant benefits include (but are not limited to):
586:
587: Commonization of duplicate DIEs obtained from multiple input
588: (object) files.
589:
590: Cross-compilation type checking based upon DWARF type information
591: for objects and functions.
592:
593: Other possible `compacting' transformations designed to save disk
594: space and to reduce linker & debugger I/O activity.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.