Commit 9eb0ef7a by Kevin Buettner Committed by Kevin Buettner

Add support for DWARF 3 64-bit sections.

From-SVN: r64589
parent b25a23bd
2003-03-19 Kevin Buettner <kevinb@redhat.com>
* dwarf2out.c (DWARF_INITIAL_LENGTH_SIZE): Define.
(DWARF_COMPILE_UNIT_HEADER_SIZE): Take into account
DWARF_INITIAL_LENGTH_SIZE.
(output_compilation_unit_header, output_pubnames, output_aranges)
(output_line_info): Output 0xffffffff escape value for 64-bit
DWARF extension.
* config/mips/iris6.h (DWARF_INITIAL_LENGTH_SIZE): Define.
2003-03-19 Ulrich Weigand <uweigand@de.ibm.com> 2003-03-19 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/s390.c (s390_preferred_reload_class): Do not * config/s390/s390.c (s390_preferred_reload_class): Do not
......
...@@ -160,6 +160,13 @@ Boston, MA 02111-1307, USA. */ ...@@ -160,6 +160,13 @@ Boston, MA 02111-1307, USA. */
specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */ specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */
#define DWARF_OFFSET_SIZE PTR_SIZE #define DWARF_OFFSET_SIZE PTR_SIZE
/* The size in bytes of the initial length field in a debug info
section. The DWARF 3 (draft) specification defines this to be
either 4 or 12 (with a 4-byte "escape" word when it's 12), but the
SGI/MIPS ABI predates this standard and defines it to be the same
as DWARF_OFFSET_SIZE. */
#define DWARF_INITIAL_LENGTH_SIZE DWARF_OFFSET_SIZE
/* There is no GNU as port for Irix6 yet, so we set MD_EXEC_PREFIX so that /* There is no GNU as port for Irix6 yet, so we set MD_EXEC_PREFIX so that
gcc will automatically find SGI as instead of searching the user's path. gcc will automatically find SGI as instead of searching the user's path.
The latter can fail when building a cross compiler if the user has . in The latter can fail when building a cross compiler if the user has . in
......
...@@ -257,6 +257,18 @@ dw_fde_node; ...@@ -257,6 +257,18 @@ dw_fde_node;
#define DWARF_OFFSET_SIZE 4 #define DWARF_OFFSET_SIZE 4
#endif #endif
/* According to the (draft) DWARF 3 specification, the initial length
should either be 4 or 12 bytes. When it's 12 bytes, the first 4
bytes are 0xffffffff, followed by the length stored in the next 8
bytes.
However, the SGI/MIPS ABI uses an initial length which is equal to
DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
#ifndef DWARF_INITIAL_LENGTH_SIZE
#define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
#endif
#define DWARF_VERSION 2 #define DWARF_VERSION 2
/* Round SIZE up to the nearest BOUNDARY. */ /* Round SIZE up to the nearest BOUNDARY. */
...@@ -3397,7 +3409,8 @@ limbo_die_node; ...@@ -3397,7 +3409,8 @@ limbo_die_node;
language, and compiler version. */ language, and compiler version. */
/* Fixed size portion of the DWARF compilation unit header. */ /* Fixed size portion of the DWARF compilation unit header. */
#define DWARF_COMPILE_UNIT_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 3) #define DWARF_COMPILE_UNIT_HEADER_SIZE \
(DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
/* Fixed size portion of public names info. */ /* Fixed size portion of public names info. */
#define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2) #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
...@@ -6912,7 +6925,11 @@ output_die (die) ...@@ -6912,7 +6925,11 @@ output_die (die)
static void static void
output_compilation_unit_header () output_compilation_unit_header ()
{ {
dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset - DWARF_OFFSET_SIZE, if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff,
"Initial length escape value indicating 64-bit DWARF extension");
dw2_asm_output_data (DWARF_OFFSET_SIZE,
next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
"Length of Compilation Unit Info"); "Length of Compilation Unit Info");
dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number"); dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label, dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
...@@ -7023,6 +7040,9 @@ output_pubnames () ...@@ -7023,6 +7040,9 @@ output_pubnames ()
unsigned i; unsigned i;
unsigned long pubnames_length = size_of_pubnames (); unsigned long pubnames_length = size_of_pubnames ();
if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff,
"Initial length escape value indicating 64-bit DWARF extension");
dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
"Length of Public Names Info"); "Length of Public Names Info");
dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
...@@ -7081,6 +7101,9 @@ output_aranges () ...@@ -7081,6 +7101,9 @@ output_aranges ()
unsigned i; unsigned i;
unsigned long aranges_length = size_of_aranges (); unsigned long aranges_length = size_of_aranges ();
if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff,
"Initial length escape value indicating 64-bit DWARF extension");
dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length, dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
"Length of Address Ranges Info"); "Length of Address Ranges Info");
dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
...@@ -7526,6 +7549,9 @@ output_line_info () ...@@ -7526,6 +7549,9 @@ output_line_info ()
ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff,
"Initial length escape value indicating 64-bit DWARF extension");
dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1, dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
"Length of Source Line Info"); "Length of Source Line Info");
ASM_OUTPUT_LABEL (asm_out_file, l1); ASM_OUTPUT_LABEL (asm_out_file, l1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment