diff options
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 76 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S | 151 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c | 28 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S | 151 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c | 28 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c | 28 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp | 35 |
9 files changed, 491 insertions, 28 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 71723e9..bb7060c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2014-02-27 Joel Brobecker <brobecker@adacore.com> + + * dwarf2read.c (attr_value_as_address): New function. + (dwarf2_find_base_address, read_call_site_scope): Use + attr_value_as_address in place of DW_ADDR. + (dwarf2_get_pc_bounds): Use attr_value_as_address to get + the low and high addresses. Slight rework of the handling + of the high pc being a constant form, and limit it to + DWARF verson 4 or higher. + (dwarf2_record_block_ranges): Likewise. + (read_partial_die): Likewise. + (new_symbol_full): Use attr_value_as_address in place of DW_ADDR. + 2014-02-26 Tom Tromey <tromey@redhat.com> * exec.c (exec_file_attach): Hold a reference to exec_bfd. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 8c20f15..8a850f1 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1942,6 +1942,36 @@ byte_swap (offset_type value) #define MAYBE_SWAP(V) (V) #endif /* WORDS_BIGENDIAN */ +/* Read the given attribute value as an address, taking the attribute's + form into account. */ + +static CORE_ADDR +attr_value_as_address (struct attribute *attr) +{ + CORE_ADDR addr; + + if (attr->form != DW_FORM_addr && attr->form != DW_FORM_GNU_addr_index) + { + /* Aside from a few clearly defined exceptions, attributes that + contain an address must always be in DW_FORM_addr form. + Unfortunately, some compilers happen to be violating this + requirement by encoding addresses using other forms, such + as DW_FORM_data4 for example. For those broken compilers, + we try to do our best, without any guarantee of success, + to interpret the address correctly. It would also be nice + to generate a complaint, but that would require us to maintain + a list of legitimate cases where a non-address form is allowed, + as well as update callers to pass in at least the CU's DWARF + version. This is more overhead than what we're willing to + expand for a pretty rare case. */ + addr = DW_UNSND (attr); + } + else + addr = DW_ADDR (attr); + + return addr; +} + /* The suffix for an index file. */ #define INDEX_SUFFIX ".gdb-index" @@ -4204,7 +4234,7 @@ dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf2_attr (die, DW_AT_entry_pc, cu); if (attr) { - cu->base_address = DW_ADDR (attr); + cu->base_address = attr_value_as_address (attr); cu->base_known = 1; } else @@ -4212,7 +4242,7 @@ dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf2_attr (die, DW_AT_low_pc, cu); if (attr) { - cu->base_address = DW_ADDR (attr); + cu->base_address = attr_value_as_address (attr); cu->base_known = 1; } } @@ -11260,7 +11290,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) die->offset.sect_off, objfile_name (objfile)); return; } - pc = DW_ADDR (attr) + baseaddr; + pc = attr_value_as_address (attr) + baseaddr; if (cu->call_site_htab == NULL) cu->call_site_htab = htab_create_alloc_ex (16, core_addr_hash, core_addr_eq, @@ -11701,12 +11731,10 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, attr = dwarf2_attr (die, DW_AT_low_pc, cu); if (attr) { - low = DW_ADDR (attr); - if (attr_high->form == DW_FORM_addr - || attr_high->form == DW_FORM_GNU_addr_index) - high = DW_ADDR (attr_high); - else - high = low + DW_UNSND (attr_high); + low = attr_value_as_address (attr); + high = attr_value_as_address (attr_high); + if (cu->header.version >= 4 && attr_form_is_constant (attr_high)) + high += low; } else /* Found high w/o low attribute. */ @@ -11872,13 +11900,11 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block, attr = dwarf2_attr (die, DW_AT_low_pc, cu); if (attr) { - CORE_ADDR low = DW_ADDR (attr); - CORE_ADDR high; - if (attr_high->form == DW_FORM_addr - || attr_high->form == DW_FORM_GNU_addr_index) - high = DW_ADDR (attr_high); - else - high = low + DW_UNSND (attr_high); + CORE_ADDR low = attr_value_as_address (attr); + CORE_ADDR high = attr_value_as_address (attr_high); + + if (cu->header.version >= 4 && attr_form_is_constant (attr_high)) + high += low; record_block_range (block, baseaddr + low, baseaddr + high - 1); } @@ -15336,18 +15362,13 @@ read_partial_die (const struct die_reader_specs *reader, break; case DW_AT_low_pc: has_low_pc_attr = 1; - part_die->lowpc = DW_ADDR (&attr); + part_die->lowpc = attr_value_as_address (&attr); break; case DW_AT_high_pc: has_high_pc_attr = 1; - if (attr.form == DW_FORM_addr - || attr.form == DW_FORM_GNU_addr_index) - part_die->highpc = DW_ADDR (&attr); - else - { - high_pc_relative = 1; - part_die->highpc = DW_UNSND (&attr); - } + part_die->highpc = attr_value_as_address (&attr); + if (cu->header.version >= 4 && attr_form_is_constant (&attr)) + high_pc_relative = 1; break; case DW_AT_location: /* Support the .debug_loc offsets. */ @@ -17560,9 +17581,8 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu, case DW_TAG_label: attr = dwarf2_attr (die, DW_AT_low_pc, cu); if (attr) - { - SYMBOL_VALUE_ADDRESS (sym) = DW_ADDR (attr) + baseaddr; - } + SYMBOL_VALUE_ADDRESS (sym) + = attr_value_as_address (attr) + baseaddr; SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_core_addr; SYMBOL_DOMAIN (sym) = LABEL_DOMAIN; SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 1a45048..431e3ca 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,14 @@ 2014-02-26 Joel Brobecker <brobecker@adacore.com> + * gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S: New file. + * gdb.dwarf2/dw2-abs-hi-pc-hello.c: New file. + * gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S: New file. + * gdb.dwarf2/dw2-abs-hi-pc-world.c: New file. + * gdb.dwarf2/dw2-abs-hi-pc.c: New file. + * gdb.dwarf2/dw2-abs-hi-pc.exp: New file. + +2014-02-26 Joel Brobecker <brobecker@adacore.com> + * testsuite/gdb.python/py-pp-re-notag.c: New file. * testsuite/gdb.python/py-pp-re-notag.ex: New file. * testsuite/gdb.python/py-pp-re-notag.p: New file. diff --git a/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S new file mode 100644 index 0000000..03f9442 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S @@ -0,0 +1,151 @@ +/* Copyright 2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .section .debug_info + .4byte .Ledebug_info0 - .Lsdebug_info0 /* Length of Compilation Unit Info */ +.Lsdebug_info0: + .2byte 0x2 /* DWARF version number */ + .4byte .Ldebug_abbrev0 /* Offset Into Abbrev. Section */ + .byte 0x4 /* Pointer Size (in bytes) */ + .uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */ + .ascii "GNU C 4.7.4 20140206 for GNAT Pro 7.3.0w (20140206)\0" + .byte 0x1 /* DW_AT_language */ + .ascii "dw2-abs-hi-pc-hello.c\0" /* DW_AT_name */ + .ascii "/tmp\0" /* DW_AT_comp_dir */ + .4byte .hello_start /* DW_AT_low_pc */ + .4byte .hello_end /* DW_AT_high_pc */ + .4byte .Ldebug_line0 /* DW_AT_stmt_list */ + .uleb128 0x2 /* (DIE (0x2d) DW_TAG_subprogram) */ + .byte 0x1 /* DW_AT_external */ + .ascii "hello\0" + .byte 0x1 /* DW_AT_decl_file (hello.c) */ + .byte 0x13 /* DW_AT_decl_line */ + .byte 0x1 /* DW_AT_prototyped */ + .4byte .hello_start /* DW_AT_low_pc */ + .4byte .hello_end /* DW_AT_high_pc */ + .byte 0 /* end of children of DIE 0xb */ +.Ledebug_info0: + + .section .debug_abbrev +.Ldebug_abbrev0: + .uleb128 0x1 /* (abbrev code) */ + .uleb128 0x11 /* (TAG: DW_TAG_compile_unit) */ + .byte 0x1 /* DW_children_yes */ + .uleb128 0x25 /* (DW_AT_producer) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x13 /* (DW_AT_language) */ + .uleb128 0xb /* (DW_FORM_data1) */ + .uleb128 0x3 /* (DW_AT_name) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x1b /* (DW_AT_comp_dir) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x11 /* (DW_AT_low_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .uleb128 0x12 /* (DW_AT_high_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .uleb128 0x10 /* (DW_AT_stmt_list) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .byte 0 + .byte 0 + .uleb128 0x2 /* (abbrev code) */ + .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */ + .byte 0 /* DW_children_no */ + .uleb128 0x3f /* (DW_AT_external) */ + .uleb128 0xc /* (DW_FORM_flag) */ + .uleb128 0x3 /* (DW_AT_name) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x3a /* (DW_AT_decl_file) */ + .uleb128 0xb /* (DW_FORM_data1) */ + .uleb128 0x3b /* (DW_AT_decl_line) */ + .uleb128 0xb /* (DW_FORM_data1) */ + .uleb128 0x27 /* (DW_AT_prototyped) */ + .uleb128 0xc /* (DW_FORM_flag) */ + .uleb128 0x11 /* (DW_AT_low_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .uleb128 0x12 /* (DW_AT_high_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .byte 0 + .byte 0 + .byte 0 + + .section .debug_line +.Ldebug_line0: + .4byte LELT-LSLT /* Length of Source Line Info */ +LSLT: + .2byte 0x2 /* DWARF Version */ + .4byte LELTP-LASLTP /* Prolog Length */ +LASLTP: + .byte 0x1 /* Minimum Instruction Length */ + .byte 0x1 /* Default is_stmt_start flag */ + .byte 0x1 /* Line Base Value (Special Opcodes) */ + .byte 0x1 /* Line Range Value (Special Opcodes) */ + .byte 0xd /* Special Opcode Base */ + .byte 0 /* opcode: 0x1 has 0 args */ + .byte 0x1 /* opcode: 0x2 has 1 args */ + .byte 0x1 /* opcode: 0x3 has 1 args */ + .byte 0x1 /* opcode: 0x4 has 1 args */ + .byte 0x1 /* opcode: 0x5 has 1 args */ + .byte 0 /* opcode: 0x6 has 0 args */ + .byte 0 /* opcode: 0x7 has 0 args */ + .byte 0 /* opcode: 0x8 has 0 args */ + .byte 0x1 /* opcode: 0x9 has 1 args */ + .byte 0 /* opcode: 0xa has 0 args */ + .byte 0 /* opcode: 0xb has 0 args */ + .byte 0x1 /* opcode: 0xc has 1 args */ + .byte 0 /* End directory table */ + .ascii "dw2-abs-hi-pc-hello.c\0" /* File Entry: 0x1 */ + .uleb128 0 + .uleb128 0 + .uleb128 0 + .byte 0 /* End file name table */ +LELTP: + .byte 0 /* set address to .hello_start */ + .uleb128 0x5 + .byte 0x2 + .4byte .hello_start + .byte 0x3 /* DW_LNS_advance_line */ + .sleb128 22 /* ... to 23 */ + .byte 0x5 /* column 0 */ + .uleb128 0 /* 0 */ + .byte 1 /* DW_LNS_copy */ + + .byte 0 /* set address to .hello0 */ + .uleb128 0x5 + .byte 0x2 + .4byte .hello0 + .byte 0x3 /* DW_LNS_advance_line */ + .sleb128 1 /* ... to 24 */ + .byte 0x5 /* column 0 */ + .uleb128 0 /* 0 */ + .byte 1 /* DW_LNS_copy */ + + .byte 0 /* set address to .hello1 */ + .uleb128 0x5 + .byte 0x2 + .4byte .hello1 + .byte 0x3 /* DW_LNS_advance_line */ + .sleb128 1 /* ... to 25 */ + .byte 0x5 /* column 0 */ + .uleb128 0 /* 0 */ + .byte 1 /* DW_LNS_copy */ + + .byte 0 /* set address to .hello_end */ + .uleb128 0x5 + .byte 0x2 + .4byte .hello_end + .byte 0 /* end sequence */ + .uleb128 0x1 + .byte 0x1 +LELT: diff --git a/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c new file mode 100644 index 0000000..59c761d --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c @@ -0,0 +1,28 @@ +/* Copyright 2014 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern int v; + +asm (".hello_start: .globl .hello_start\n"); +void +hello (void) +{ +asm (".hello0: .globl .hello0\n"); + v++; +asm (".hello1: .globl .hello1\n"); +} +asm (".hello_end: .globl .hello_end\n"); diff --git a/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S new file mode 100644 index 0000000..c3e89a6 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S @@ -0,0 +1,151 @@ +/* Copyright 2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .section .debug_info + .4byte .Ledebug_info0 - .Lsdebug_info0 /* Length of Compilation Unit Info */ +.Lsdebug_info0: + .2byte 0x2 /* DWARF version number */ + .4byte .Ldebug_abbrev0 /* Offset Into Abbrev. Section */ + .byte 0x4 /* Pointer Size (in bytes) */ + .uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */ + .ascii "GNU C 4.7.4 20140206 for GNAT Pro 7.3.0w (20140206)\0" + .byte 0x1 /* DW_AT_language */ + .ascii "dw2-abs-hi-pc-world.c\0" /* DW_AT_name */ + .ascii "/tmp\0" /* DW_AT_comp_dir */ + .4byte .world_start /* DW_AT_low_pc */ + .4byte .world_end /* DW_AT_high_pc */ + .4byte .Ldebug_line0 /* DW_AT_stmt_list */ + .uleb128 0x2 /* (DIE (0x2d) DW_TAG_subprogram) */ + .byte 0x1 /* DW_AT_external */ + .ascii "world\0" + .byte 0x1 /* DW_AT_decl_file (world.c) */ + .byte 0x13 /* DW_AT_decl_line */ + .byte 0x1 /* DW_AT_prototyped */ + .4byte .world_start /* DW_AT_low_pc */ + .4byte .world_end /* DW_AT_high_pc */ + .byte 0 /* end of children of DIE 0xb */ +.Ledebug_info0: + + .section .debug_abbrev +.Ldebug_abbrev0: + .uleb128 0x1 /* (abbrev code) */ + .uleb128 0x11 /* (TAG: DW_TAG_compile_unit) */ + .byte 0x1 /* DW_children_yes */ + .uleb128 0x25 /* (DW_AT_producer) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x13 /* (DW_AT_language) */ + .uleb128 0xb /* (DW_FORM_data1) */ + .uleb128 0x3 /* (DW_AT_name) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x1b /* (DW_AT_comp_dir) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x11 /* (DW_AT_low_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .uleb128 0x12 /* (DW_AT_high_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .uleb128 0x10 /* (DW_AT_stmt_list) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .byte 0 + .byte 0 + .uleb128 0x2 /* (abbrev code) */ + .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */ + .byte 0 /* DW_children_no */ + .uleb128 0x3f /* (DW_AT_external) */ + .uleb128 0xc /* (DW_FORM_flag) */ + .uleb128 0x3 /* (DW_AT_name) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x3a /* (DW_AT_decl_file) */ + .uleb128 0xb /* (DW_FORM_data1) */ + .uleb128 0x3b /* (DW_AT_decl_line) */ + .uleb128 0xb /* (DW_FORM_data1) */ + .uleb128 0x27 /* (DW_AT_prototyped) */ + .uleb128 0xc /* (DW_FORM_flag) */ + .uleb128 0x11 /* (DW_AT_low_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .uleb128 0x12 /* (DW_AT_high_pc) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .byte 0 + .byte 0 + .byte 0 + + .section .debug_line +.Ldebug_line0: + .4byte LELT-LSLT /* Length of Source Line Info */ +LSLT: + .2byte 0x2 /* DWARF Version */ + .4byte LELTP-LASLTP /* Prolog Length */ +LASLTP: + .byte 0x1 /* Minimum Instruction Length */ + .byte 0x1 /* Default is_stmt_start flag */ + .byte 0x1 /* Line Base Value (Special Opcodes) */ + .byte 0x1 /* Line Range Value (Special Opcodes) */ + .byte 0xd /* Special Opcode Base */ + .byte 0 /* opcode: 0x1 has 0 args */ + .byte 0x1 /* opcode: 0x2 has 1 args */ + .byte 0x1 /* opcode: 0x3 has 1 args */ + .byte 0x1 /* opcode: 0x4 has 1 args */ + .byte 0x1 /* opcode: 0x5 has 1 args */ + .byte 0 /* opcode: 0x6 has 0 args */ + .byte 0 /* opcode: 0x7 has 0 args */ + .byte 0 /* opcode: 0x8 has 0 args */ + .byte 0x1 /* opcode: 0x9 has 1 args */ + .byte 0 /* opcode: 0xa has 0 args */ + .byte 0 /* opcode: 0xb has 0 args */ + .byte 0x1 /* opcode: 0xc has 1 args */ + .byte 0 /* End directory table */ + .ascii "dw2-abs-hi-pc-world.c\0" /* File Entry: 0x1 */ + .uleb128 0 + .uleb128 0 + .uleb128 0 + .byte 0 /* End file name table */ +LELTP: + .byte 0 /* set address to .world_start */ + .uleb128 0x5 + .byte 0x2 + .4byte .world_start + .byte 0x3 /* DW_LNS_advance_line */ + .sleb128 22 /* ... to 23 */ + .byte 0x5 /* column 0 */ + .uleb128 0 /* 0 */ + .byte 1 /* DW_LNS_copy */ + + .byte 0 /* set address to .world0 */ + .uleb128 0x5 + .byte 0x2 + .4byte .world0 + .byte 0x3 /* DW_LNS_advance_line */ + .sleb128 1 /* ... to 24 */ + .byte 0x5 /* column 0 */ + .uleb128 0 /* 0 */ + .byte 1 /* DW_LNS_copy */ + + .byte 0 /* set address to .world1 */ + .uleb128 0x5 + .byte 0x2 + .4byte .world1 + .byte 0x3 /* DW_LNS_advance_line */ + .sleb128 1 /* ... to 25 */ + .byte 0x5 /* column 0 */ + .uleb128 0 /* 0 */ + .byte 1 /* DW_LNS_copy */ + + .byte 0 /* set address to .world_end */ + .uleb128 0x5 + .byte 0x2 + .4byte .world_end + .byte 0 /* end sequence */ + .uleb128 0x1 + .byte 0x1 +LELT: diff --git a/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c new file mode 100644 index 0000000..04f17bd --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c @@ -0,0 +1,28 @@ +/* Copyright 2014 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern int v; + +asm (".world_start: .globl .world_start\n"); +void +world (void) +{ +asm (".world0: .globl .world0\n"); + v++; +asm (".world1: .globl .world1\n"); +} +asm (".world_end: .globl .world_end\n"); diff --git a/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c new file mode 100644 index 0000000..95773a2 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c @@ -0,0 +1,28 @@ +/* Copyright 2014 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern void hello (void); +extern void world (void); + +int v; + +int +main (void) +{ + hello (); + world (); +} diff --git a/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp new file mode 100644 index 0000000..3353fda --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp @@ -0,0 +1,35 @@ +# Copyright 2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile +set executable ${testfile} + +if {[build_executable ${testfile}.exp ${executable} "${testfile}.c ${testfile}-hello-dbg.S ${testfile}-hello.c ${testfile}-world-dbg.S ${testfile}-world.c"] == -1} { + return -1 +} + +clean_restart $executable + +gdb_test "break hello" \ + "Breakpoint $decimal at $hex: file .*dw2-abs-hi-pc-hello\\.c, line 24\\." + +gdb_test "break world" \ + "Breakpoint $decimal at $hex: file .*dw2-abs-hi-pc-world\\.c, line 24\\." |