mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 02:53:48 +08:00
gdb/
PR threads/13448 * dwarf2read.c (decode_locdesc): Handle DW_OP_const8u. For DW_OP_GNU_push_tls_address increment the value, new comment for it. gdb/testsuite/ PR threads/13448 * gdb.dwarf2/dw2-var-zero-addr.S: New file. * gdb.dwarf2/dw2-var-zero-addr.exp: New file. * gdb.threads/tls-var-main.c: New file. * gdb.threads/tls-var.c: New file. * gdb.threads/tls-var.exp: New file.
This commit is contained in:
parent
968643aaa9
commit
585861ead5
@ -1,3 +1,9 @@
|
||||
2011-12-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
PR threads/13448
|
||||
* dwarf2read.c (decode_locdesc): Handle DW_OP_const8u.
|
||||
For DW_OP_GNU_push_tls_address increment the value, new comment for it.
|
||||
|
||||
2011-12-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
PR breakpoints/13346
|
||||
|
@ -14668,6 +14668,11 @@ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
|
||||
i += 4;
|
||||
break;
|
||||
|
||||
case DW_OP_const8u:
|
||||
stack[++stacki] = read_8_bytes (objfile->obfd, &data[i]);
|
||||
i += 8;
|
||||
break;
|
||||
|
||||
case DW_OP_constu:
|
||||
stack[++stacki] = read_unsigned_leb128 (NULL, (data + i),
|
||||
&bytes_read);
|
||||
@ -14715,9 +14720,12 @@ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
|
||||
/* Nothing should follow this operator, so the top of stack would
|
||||
be returned. */
|
||||
/* This is valid for partial global symbols, but the variable's
|
||||
address will be bogus in the psymtab. */
|
||||
address will be bogus in the psymtab. Make it always at least
|
||||
non-zero to not look as a variable garbage collected by linker
|
||||
which have DW_OP_addr 0. */
|
||||
if (i < size)
|
||||
dwarf2_complex_location_expr_complaint ();
|
||||
stack[stacki]++;
|
||||
break;
|
||||
|
||||
case DW_OP_GNU_uninit:
|
||||
|
@ -1,3 +1,12 @@
|
||||
2011-12-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
PR threads/13448
|
||||
* gdb.dwarf2/dw2-var-zero-addr.S: New file.
|
||||
* gdb.dwarf2/dw2-var-zero-addr.exp: New file.
|
||||
* gdb.threads/tls-var-main.c: New file.
|
||||
* gdb.threads/tls-var.c: New file.
|
||||
* gdb.threads/tls-var.exp: New file.
|
||||
|
||||
2011-12-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
PR testsuite/12649
|
||||
|
92
gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S
Normal file
92
gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S
Normal file
@ -0,0 +1,92 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2011 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/>. */
|
||||
|
||||
.data
|
||||
|
||||
.section .debug_info
|
||||
.Lcu1_begin:
|
||||
/* CU header */
|
||||
.4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
|
||||
.Lcu1_start:
|
||||
.2byte 2 /* DWARF Version */
|
||||
.4byte .Labbrev1_begin /* Offset into abbrev section */
|
||||
.byte 4 /* Pointer size */
|
||||
|
||||
/* CU die */
|
||||
.uleb128 1 /* Abbrev: DW_TAG_compile_unit */
|
||||
.ascii "dw2-var-zero-addr.c\0" /* DW_AT_name */
|
||||
.ascii "GNU C 4.3.2\0" /* DW_AT_producer */
|
||||
.byte 1 /* DW_AT_language (C) */
|
||||
|
||||
.Ltype_uchar:
|
||||
.uleb128 2 /* Abbrev: DW_TAG_base_type */
|
||||
.ascii "int\0" /* DW_AT_name */
|
||||
.byte 4 /* DW_AT_byte_size */
|
||||
.byte 5 /* DW_AT_encoding */
|
||||
|
||||
.uleb128 3 /* Abbrev: DW_TAG_variable (location) */
|
||||
.ascii "var\0" /* DW_AT_name */
|
||||
.byte 2f - 1f /* DW_AT_location */
|
||||
1: .byte 3 /* DW_OP_addr */
|
||||
.4byte 0 /* <addr> */
|
||||
2: .4byte .Ltype_uchar-.Lcu1_begin /* DW_AT_type */
|
||||
|
||||
.byte 0 /* End of children of CU */
|
||||
|
||||
.Lcu1_end:
|
||||
|
||||
/* Abbrev table */
|
||||
.section .debug_abbrev
|
||||
.Labbrev1_begin:
|
||||
.uleb128 1 /* Abbrev code */
|
||||
.uleb128 0x11 /* DW_TAG_compile_unit */
|
||||
.byte 1 /* has_children */
|
||||
.uleb128 0x3 /* DW_AT_name */
|
||||
.uleb128 0x8 /* DW_FORM_string */
|
||||
.uleb128 0x25 /* DW_AT_producer */
|
||||
.uleb128 0x8 /* DW_FORM_string */
|
||||
.uleb128 0x13 /* DW_AT_language */
|
||||
.uleb128 0xb /* DW_FORM_data1 */
|
||||
.byte 0x0 /* Terminator */
|
||||
.byte 0x0 /* Terminator */
|
||||
|
||||
.uleb128 2 /* Abbrev code */
|
||||
.uleb128 0x24 /* DW_TAG_base_type */
|
||||
.byte 0 /* has_children */
|
||||
.uleb128 0x3 /* DW_AT_name */
|
||||
.uleb128 0x8 /* DW_FORM_string */
|
||||
.uleb128 0xb /* DW_AT_byte_size */
|
||||
.uleb128 0xb /* DW_FORM_data1 */
|
||||
.uleb128 0x3e /* DW_AT_encoding */
|
||||
.uleb128 0xb /* DW_FORM_data1 */
|
||||
.byte 0x0 /* Terminator */
|
||||
.byte 0x0 /* Terminator */
|
||||
|
||||
.uleb128 3 /* Abbrev code (location) */
|
||||
.uleb128 0x34 /* DW_TAG_variable */
|
||||
.byte 0 /* has_children */
|
||||
.uleb128 0x3 /* DW_AT_name */
|
||||
.uleb128 0x8 /* DW_FORM_string */
|
||||
.uleb128 0x2 /* DW_AT_location */
|
||||
.uleb128 0xa /* DW_FORM_block1 */
|
||||
.uleb128 0x49 /* DW_AT_type */
|
||||
.uleb128 0x13 /* DW_FORM_ref4 */
|
||||
.byte 0x0 /* Terminator */
|
||||
.byte 0x0 /* Terminator */
|
||||
|
||||
.byte 0x0 /* Terminator */
|
||||
.byte 0x0 /* Terminator */
|
29
gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp
Normal file
29
gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp
Normal file
@ -0,0 +1,29 @@
|
||||
# Copyright 2011 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
|
||||
}
|
||||
|
||||
set testfile dw2-var-zero-addr
|
||||
if [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.S main.c] {nodebug}] {
|
||||
return -1
|
||||
}
|
||||
|
||||
# FAIL was: = (int *) 0x0
|
||||
# Such DIE record can be produced using: gcc -fdata-sections -Wl,-gc-sections
|
||||
gdb_test "print &var" {No symbol "var" in current context\.}
|
22
gdb/testsuite/gdb.threads/tls-var-main.c
Normal file
22
gdb/testsuite/gdb.threads/tls-var-main.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2011 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/>. */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
23
gdb/testsuite/gdb.threads/tls-var.c
Normal file
23
gdb/testsuite/gdb.threads/tls-var.c
Normal file
@ -0,0 +1,23 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2011 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/>. */
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
/* Place this variable to a separate CU (Compilation Unit) from main so that it
|
||||
has delayed full symtab expansion. */
|
||||
|
||||
__thread const char *tls_var = "hello";
|
40
gdb/testsuite/gdb.threads/tls-var.exp
Normal file
40
gdb/testsuite/gdb.threads/tls-var.exp
Normal file
@ -0,0 +1,40 @@
|
||||
# Copyright 2011 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/>.
|
||||
|
||||
set testfile tls-var
|
||||
set srcfile ${testfile}.c
|
||||
set srcmainfile ${testfile}-main.c
|
||||
set objfile ${objdir}/${subdir}/${testfile}.o
|
||||
set objmainfile ${objdir}/${subdir}/${testfile}-main.o
|
||||
set executable ${testfile}
|
||||
set binfile ${objdir}/${subdir}/${executable}
|
||||
|
||||
if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${objfile} object {debug}] != ""
|
||||
|| [gdb_compile ${srcdir}/${subdir}/${srcmainfile} ${objmainfile} object {}] != ""
|
||||
|| [gdb_compile_pthreads "${objfile} ${objmainfile}" ${binfile} executable {}] != ""} {
|
||||
return -1
|
||||
}
|
||||
|
||||
clean_restart ${executable}
|
||||
|
||||
if ![runto_main] {
|
||||
return 0
|
||||
}
|
||||
|
||||
# FAIL was: type = <thread local variable, no debug info>
|
||||
gdb_test "whatis tls_var" {type = const char \*}
|
||||
|
||||
# FAIL was: $1 = 4195832
|
||||
gdb_test "print tls_var" { = 0x[0-9a-f]+ "hello"}
|
Loading…
Reference in New Issue
Block a user