aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2014-11-20Fix build breakage from previous commitSergio Durigan Junior2-6/+15
In the previous commit, I forgot to adjust the prototypes of the functions inside gdb/xml-syscall.c for the case when GDB is compiled without XML support. gdb/ 2014-11-20 Sergio Durigan Junior <sergiodj@redhat.com> PR breakpoints/10737 * xml-syscall.c (set_xml_syscall_file_name): Remove "const" modifier from "struct gdbarch" when compiling without Expat (XML) support. (get_syscall_by_number): Likewise. (get_syscall_by_name): Likewise. (get_syscall_names): Likewise.
2014-11-20Partial fix for PR breakpoints/10737: Make syscall info be per-arch instead ↵Sergio Durigan Junior18-104/+328
of global This patch intends to partially fix PR breakpoints/10737, which is about making the syscall information (for the "catch syscall" command) be per-arch, instead of global. This is not a full fix because of the other issues pointed by Pedro here: <https://sourceware.org/bugzilla/show_bug.cgi?id=10737#c5> However, I consider it a good step towards the real fix. It will also help me fix <https://sourceware.org/bugzilla/show_bug.cgi?id=17402>. What this patch does, basically, is move the "syscalls_info" struct to gdbarch. Currently, the syscall information is stored in a global variable inside gdb/xml-syscall.c, which means that there is no easy way to correlate this info with the current target or architecture being used, for example. This causes strange behaviors, because the syscall info is not re-read when the arch changes. For example, if you put a syscall catchpoint in syscall 5 on i386 (syscall open), and then load a x86_64 program on GDB and put the same syscall 5 there (fstat on x86_64), you will still see that GDB tells you that it is catching "open", even though it is not. With this patch, GDB correctly says that it will be catching fstat syscalls. (gdb) set architecture i386 The target architecture is assumed to be i386 (gdb) catch syscall 5 Catchpoint 1 (syscall 'open' [5]) (gdb) set architecture i386:x86-64 The target architecture is assumed to be i386:x86-64 (gdb) catch syscall 5 Catchpoint 2 (syscall 'open' [5]) But with the patch: (gdb) set architecture i386 The target architecture is assumed to be i386 (gdb) catch syscall 5 Catchpoint 1 (syscall 'open' [5]) (gdb) set architecture i386:x86-64 The target architecture is assumed to be i386:x86-64 (gdb) catch syscall 5 Catchpoint 2 (syscall 'fstat' [5]) As I said, there are still some problems on the "catch syscall" mechanism, because (for example) the user should be able to "catch syscall open" on i386, and then expect "open" to be caught also on x86_64. Currently, it doesn't work. I intend to work on this later. gdb/ 2014-11-20 Sergio Durigan Junior <sergiodj@redhat.com> PR breakpoints/10737 * amd64-linux-tdep.c (amd64_linux_init_abi_common): Adjust call to set_xml_syscall_file_name to provide gdbarch. * arm-linux-tdep.c (arm_linux_init_abi): Likewise. * bfin-linux-tdep.c (bfin_linux_init_abi): Likewise. * breakpoint.c (print_it_catch_syscall): Adjust call to get_syscall_by_number to provide gdbarch. (print_one_catch_syscall): Likewise. (print_mention_catch_syscall): Likewise. (print_recreate_catch_syscall): Likewise. (catch_syscall_split_args): Adjust calls to get_syscall_by_number and get_syscall_by_name to provide gdbarch. (catch_syscall_completer): Adjust call to get_syscall_names to provide gdbarch. * gdbarch.c: Regenerate. * gdbarch.h: Likewise. * gdbarch.sh: Forward declare "struct syscalls_info". (xml_syscall_file): New variable. (syscalls_info): Likewise. * i386-linux-tdep.c (i386_linux_init_abi): Adjust call to set_xml_syscall_file_name to provide gdbarch. * mips-linux-tdep.c (mips_linux_init_abi): Likewise. * ppc-linux-tdep.c (ppc_linux_init_abi): Likewise. * s390-linux-tdep.c (s390_gdbarch_init): Likewise. * sparc-linux-tdep.c (sparc32_linux_init_abi): Likewise. * sparc64-linux-tdep.c (sparc64_linux_init_abi): Likewise. * xml-syscall.c: Include gdbarch.h. (set_xml_syscall_file_name): Accept gdbarch parameter. (get_syscall_by_number): Likewise. (get_syscall_by_name): Likewise. (get_syscall_names): Likewise. (my_gdb_datadir): Delete global variable. (struct syscalls_info) <my_gdb_datadir>: New variable. (struct syscalls_info) <sysinfo>: Rename variable to "syscalls_info". (sysinfo): Delete global variable. (have_initialized_sysinfo): Likewise. (xml_syscall_file): Likewise. (sysinfo_free_syscalls_desc): Rename to... (syscalls_info_free_syscalls_desc): ... this. (free_syscalls_info): Rename "sysinfo" to "syscalls_info". Adjust code to the new layout of "struct syscalls_info". (make_cleanup_free_syscalls_info): Rename parameter "sysinfo" to "syscalls_info". (syscall_create_syscall_desc): Likewise. (syscall_start_syscall): Likewise. (syscall_parse_xml): Likewise. (xml_init_syscalls_info): Likewise. Drop "const" from return value. (init_sysinfo): Rename to... (init_syscalls_info): ...this. Add gdbarch as a parameter. Adjust function to deal with gdbarch. (xml_get_syscall_number): Delete parameter sysinfo. Accept gdbarch as a parameter. Adjust code. (xml_get_syscall_name): Likewise. (xml_list_of_syscalls): Likewise. (set_xml_syscall_file_name): Accept gdbarch as parameter. (get_syscall_by_number): Likewise. (get_syscall_by_name): Likewise. (get_syscall_names): Likewise. * xml-syscall.h (set_xml_syscall_file_name): Likewise. (get_syscall_by_number): Likewise. (get_syscall_by_name): Likewise. (get_syscall_names): Likewise. gdb/testsuite/ 2014-11-20 Sergio Durigan Junior <sergiodj@redhat.com> PR breakpoints/10737 * gdb.base/catch-syscall.exp (do_syscall_tests): Call test_catch_syscall_multi_arch. (test_catch_syscall_multi_arch): New function.
2014-11-20Split struct symtab into two: struct symtab and compunit_symtab.Doug Evans46-970/+1470
Currently "symtabs" in gdb are stored as a single linked list of struct symtab that contains both symbol symtabs (the blockvectors) and file symtabs (the linetables). This has led to confusion, bugs, and performance issues. This patch is conceptually very simple: split struct symtab into two pieces: one part containing things common across the entire compilation unit, and one part containing things specific to each source file. Example. For the case of a program built out of these files: foo.c foo1.h foo2.h bar.c foo1.h bar.h Today we have a single list of struct symtabs: objfile -> foo.c -> foo1.h -> foo2.h -> bar.c -> foo1.h -> bar.h -> NULL where "->" means the "next" pointer in struct symtab. With this patch, that turns into: objfile -> foo.c(cu) -> bar.c(cu) -> NULL | | v v foo.c bar.c | | v v foo1.h foo1.h | | v v foo2.h bar.h | | v v NULL NULL where "foo.c(cu)" and "bar.c(cu)" are struct compunit_symtab objects, and the files foo.c, etc. are struct symtab objects. So now, for example, when we want to iterate over all blockvectors we can now just iterate over the compunit_symtab list. Plus a lot of the data that was either unused or replicated for each symtab in a compilation unit now lives in struct compunit_symtab. E.g., the objfile pointer, the producer string, etc. I thought of moving "language" out of struct symtab but there is logic to try to compute the language based on previously seen files, and I think that's best left as is for now. With my standard monster benchmark with -readnow (which I can't actually do, but based on my calculations), whereas today the list requires 77MB to store all the struct symtabs, it now only requires 37MB. A modest space savings given the gigabytes needed for all the debug info, etc. Still, it's nice. Plus, whereas today we create a copy of dirname for each source file symtab in a compilation unit, we now only create one for the compunit. So this patch is basically just a data structure reorg, I don't expect significant performance improvements from it. Notes: 1) A followup patch can do a similar split for struct partial_symtab. I have left that until after I get the changes I want in to better utilize .gdb_index (it may affect how we do partial syms). 2) Another followup patch *could* rename struct symtab. The term "symtab" is ambiguous and has been a source of confusion. In this patch I'm leaving it alone, calling it the "historical" name of "filetabs", which is what they are now: just the file-name + line-table. gdb/ChangeLog: Split struct symtab into two: struct symtab and compunit_symtab. * amd64-tdep.c (amd64_skip_xmm_prologue): Fetch producer from compunit. * block.c (blockvector_for_pc_sect): Change "struct symtab *" argument to "struct compunit_symtab *". All callers updated. (set_block_compunit_symtab): Renamed from set_block_symtab. Change "struct symtab *" argument to "struct compunit_symtab *". All callers updated. (get_block_compunit_symtab): Renamed from get_block_symtab. Change result to "struct compunit_symtab *". All callers updated. (find_iterator_compunit_symtab): Renamed from find_iterator_symtab. Change result to "struct compunit_symtab *". All callers updated. * block.h (struct global_block) <compunit_symtab>: Renamed from symtab. hange type to "struct compunit_symtab *". All uses updated. (struct block_iterator) <d.compunit_symtab>: Renamed from "d.symtab". Change type to "struct compunit_symtab *". All uses updated. * buildsym.c (struct buildsym_compunit): New struct. (subfiles, buildsym_compdir, buildsym_objfile, main_subfile): Delete. (buildsym_compunit): New static global. (finish_block_internal): Update to fetch objfile from buildsym_compunit. (make_blockvector): Delete objfile argument. (start_subfile): Rewrite to use buildsym_compunit. Don't initialize debugformat, producer. (start_buildsym_compunit): New function. (free_buildsym_compunit): Renamed from free_subfiles_list. All callers updated. (patch_subfile_names): Rewrite to use buildsym_compunit. (get_compunit_symtab): New function. (get_macro_table): Delete argument comp_dir. All callers updated. (start_symtab): Change result to "struct compunit_symtab *". All callers updated. Create the subfile of the main source file. (watch_main_source_file_lossage): Rewrite to use buildsym_compunit. (reset_symtab_globals): Update. (end_symtab_get_static_block): Update to use buildsym_compunit. (end_symtab_without_blockvector): Rewrite. (end_symtab_with_blockvector): Change result to "struct compunit_symtab *". All callers updated. Update to use buildsym_compunit. Don't set symtab->dirname, instead set it in the compunit. Explicitly make sure main symtab is first in its list. Set debugformat, producer, blockvector, block_line_section, and macrotable in the compunit. (end_symtab_from_static_block): Change result to "struct compunit_symtab *". All callers updated. (end_symtab, end_expandable_symtab): Ditto. (set_missing_symtab): Change symtab argument to "struct compunit_symtab *". All callers updated. (augment_type_symtab): Ditto. (record_debugformat): Update to use buildsym_compunit. (record_producer): Update to use buildsym_compunit. * buildsym.h (struct subfile) <dirname>: Delete. <producer, debugformat>: Delete. <buildsym_compunit>: New member. (get_compunit_symtab): Declare. * dwarf2read.c (struct type_unit_group) <compunit_symtab>: Renamed from primary_symtab. Change type to "struct compunit_symtab *". All uses updated. (dwarf2_start_symtab): Change result to "struct compunit_symtab *". All callers updated. (dwarf_decode_macros): Delete comp_dir argument. All callers updated. (struct dwarf2_per_cu_quick_data) <compunit_symtab>: Renamed from symtab. Change type to "struct compunit_symtab *". All uses updated. (dw2_instantiate_symtab): Change result to "struct compunit_symtab *". All callers updated. (dw2_find_last_source_symtab): Ditto. (dw2_lookup_symbol): Ditto. (recursively_find_pc_sect_compunit_symtab): Renamed from recursively_find_pc_sect_symtab. Change result to "struct compunit_symtab *". All callers updated. (dw2_find_pc_sect_compunit_symtab): Renamed from dw2_find_pc_sect_symtab. Change result to "struct compunit_symtab *". All callers updated. (get_compunit_symtab): Renamed from get_symtab. Change result to "struct compunit_symtab *". All callers updated. (recursively_compute_inclusions): Change type of immediate_parent argument to "struct compunit_symtab *". All callers updated. (compute_compunit_symtab_includes): Renamed from compute_symtab_includes. All callers updated. Rewrite to compute includes of compunit_symtabs and not symtabs. (process_full_comp_unit): Update to work with struct compunit_symtab. (process_full_type_unit): Ditto. (dwarf_decode_lines_1): Delete argument comp_dir. All callers updated. (dwarf_decode_lines): Remove special case handling of main subfile. (macro_start_file): Delete argument comp_dir. All callers updated. (dwarf_decode_macro_bytes): Ditto. * guile/scm-block.c (bkscm_print_block_syms_progress_smob): Update to use struct compunit_symtab. * i386-tdep.c (i386_skip_prologue): Fetch producer from compunit. * jit.c (finalize_symtab): Build compunit_symtab. * jv-lang.c (get_java_class_symtab): Change result to "struct compunit_symtab *". All callers updated. * macroscope.c (sal_macro_scope): Fetch macro table from compunit. * macrotab.c (struct macro_table) <compunit_symtab>: Renamed from comp_dir. Change type to "struct compunit_symtab *". All uses updated. (new_macro_table): Change comp_dir argument to cust, "struct compunit_symtab *". All callers updated. * maint.c (struct cmd_stats) <nr_compunit_symtabs>: Renamed from nr_primary_symtabs. All uses updated. (count_symtabs_and_blocks): Update to handle compunits. (report_command_stats): Update output, "primary symtabs" renamed to "compunits". * mdebugread.c (new_symtab): Change result to "struct compunit_symtab *". All callers updated. (parse_procedure): Change type of search_symtab argument to "struct compunit_symtab *". All callers updated. * objfiles.c (objfile_relocate1): Loop over blockvectors in a separate loop. * objfiles.h (struct objfile) <compunit_symtabs>: Renamed from symtabs. Change type to "struct compunit_symtab *". All uses updated. (ALL_OBJFILE_FILETABS): Renamed from ALL_OBJFILE_SYMTABS. All uses updated. (ALL_OBJFILE_COMPUNITS): Renamed from ALL_OBJFILE_PRIMARY_SYMTABS. All uses updated. (ALL_FILETABS): Renamed from ALL_SYMTABS. All uses updated. (ALL_COMPUNITS): Renamed from ALL_PRIMARY_SYMTABS. All uses updated. * psympriv.h (struct partial_symtab) <compunit_symtab>: Renamed from symtab. Change type to "struct compunit_symtab *". All uses updated. * psymtab.c (psymtab_to_symtab): Change result type to "struct compunit_symtab *". All callers updated. (find_pc_sect_compunit_symtab_from_partial): Renamed from find_pc_sect_symtab_from_partial. Change result type to "struct compunit_symtab *". All callers updated. (lookup_symbol_aux_psymtabs): Change result type to "struct compunit_symtab *". All callers updated. (find_last_source_symtab_from_partial): Ditto. * python/py-symtab.c (stpy_get_producer): Fetch producer from compunit. * source.c (forget_cached_source_info_for_objfile): Fetch debugformat and macro_table from compunit. * symfile-debug.c (debug_qf_find_last_source_symtab): Change result type to "struct compunit_symtab *". All callers updated. (debug_qf_lookup_symbol): Ditto. (debug_qf_find_pc_sect_compunit_symtab): Renamed from debug_qf_find_pc_sect_symtab, change result type to "struct compunit_symtab *". All callers updated. * symfile.c (allocate_symtab): Delete objfile argument. New argument cust. (allocate_compunit_symtab): New function. (add_compunit_symtab_to_objfile): New function. * symfile.h (struct quick_symbol_functions) <lookup_symbol>: Change result type to "struct compunit_symtab *". All uses updated. <find_pc_sect_compunit_symtab>: Renamed from find_pc_sect_symtab. Change result type to "struct compunit_symtab *". All uses updated. * symmisc.c (print_objfile_statistics): Compute blockvector count in separate loop. (dump_symtab_1): Update test for primary source symtab. (maintenance_info_symtabs): Update to handle compunit symtabs. (maintenance_check_symtabs): Ditto. * symtab.c (set_primary_symtab): Delete. (compunit_primary_filetab): New function. (compunit_language): New function. (iterate_over_some_symtabs): Change type of arguments "first", "after_last" to "struct compunit_symtab *". All callers updated. Update to loop over symtabs in each compunit. (error_in_psymtab_expansion): Rename symtab argument to cust, and change type to "struct compunit_symtab *". All callers updated. (find_pc_sect_compunit_symtab): Renamed from find_pc_sect_symtab. Change result type to "struct compunit_symtab *". All callers updated. (find_pc_compunit_symtab): Renamed from find_pc_symtab. Change result type to "struct compunit_symtab *". All callers updated. (find_pc_sect_line): Only loop over symtabs within selected compunit instead of all symtabs in the objfile. * symtab.h (struct symtab) <blockvector>: Moved to compunit_symtab. <compunit_symtab> New member. <block_line_section>: Moved to compunit_symtab. <locations_valid>: Ditto. <epilogue_unwind_valid>: Ditto. <macro_table>: Ditto. <dirname>: Ditto. <debugformat>: Ditto. <producer>: Ditto. <objfile>: Ditto. <call_site_htab>: Ditto. <includes>: Ditto. <user>: Ditto. <primary>: Delete (SYMTAB_COMPUNIT): New macro. (SYMTAB_BLOCKVECTOR): Update definition. (SYMTAB_OBJFILE): Update definition. (SYMTAB_DIRNAME): Update definition. (struct compunit_symtab): New type. Common members among all source symtabs within a compilation unit moved here. All uses updated. (COMPUNIT_OBJFILE): New macro. (COMPUNIT_FILETABS): New macro. (COMPUNIT_DEBUGFORMAT): New macro. (COMPUNIT_PRODUCER): New macro. (COMPUNIT_DIRNAME): New macro. (COMPUNIT_BLOCKVECTOR): New macro. (COMPUNIT_BLOCK_LINE_SECTION): New macro. (COMPUNIT_LOCATIONS_VALID): New macro. (COMPUNIT_EPILOGUE_UNWIND_VALID): New macro. (COMPUNIT_CALL_SITE_HTAB): New macro. (COMPUNIT_MACRO_TABLE): New macro. (ALL_COMPUNIT_FILETABS): New macro. (compunit_symtab_ptr): New typedef. (DEF_VEC_P (compunit_symtab_ptr)): New vector type. gdb/testsuite/ChangeLog: * gdb.base/maint.exp: Update expected output.
2014-11-20[Ada] XA type is not redundant if the ranges' subtypes do not matchJoel Brobecker2-0/+17
Jan noticed that gdb.ada/arrayidx.exp regressed after I applied the following patch: commit 8908fca5772fcff9f7766158ba2aa59f5a2b1f68 Author: Joel Brobecker <brobecker@adacore.com> Date: Sat Sep 27 09:09:34 2014 -0700 Subject: [Ada] Ignore __XA types when redundant. What happens is that we're trying to print the value of r_two_three, which is defined as follow: type Index is (One, Two, Three); type RTable is array (Index range Two .. Three) of Integer; R_Two_Three : RTable := (2, 3); The expected output is: (gdb) p r_two_three $1 = (two => 2, 3) But after the patch above was applied, with the program program compiled using gcc-gnat-4.9.2-1.fc21.x86_64 (x86_64-linux), the output becomes: (gdb) p r_two_three $1 = (2, 3) (the name of the first bound is missing). The problem comes from the fact that the compiler described the array's index type as a plain base type, instead of as a subrange of the enumerated type. More particularly, this is what gcc-gnat-4.9.2-1.fc21.x86_64 generated: <3><7ce>: Abbrev Number: 9 (DW_TAG_array_type) <7cf> DW_AT_name : (indirect string, offset: 0xc13): p__rtable [...] <7d7> DW_AT_GNAT_descriptive_type: <0x98a> [...] <4><7df>: Abbrev Number: 8 (DW_TAG_subrange_type) <7e0> DW_AT_type : <0xa79> where DIE 0xa79 is: <1><a79>: Abbrev Number: 2 (DW_TAG_base_type) <a7a> DW_AT_byte_size : 8 <a7b> DW_AT_encoding : 7 (unsigned) <a7c> DW_AT_name : (indirect string, offset: 0xfc): sizetype The actual array subrange type can be found in the array's parallel XA type (the DW_AT_GNAT_descriptive_type). The recent commit correctly found that that bounds taken from the descriptive type are the same as bounds of our array's index type. But it failed to notice that ignoring this descriptive type would make us lose the actual array index type, making us think that we're printing an array indexed by integers. I hadn't seen that problem, because the compiler I used produced debugging info where the array's index type is correctly described: <3><79f>: Abbrev Number: 10 (DW_TAG_array_type) <7a0> DW_AT_name : (indirect string, offset: 0xb3d): p__rtable [...] <4><7b0>: Abbrev Number: 8 (DW_TAG_subrange_type) <7b1> DW_AT_type : <0x9b2> <7b5> DW_AT_upper_bound : 2 ... where DIE 0x9b2 leads us to ... <3><9b2>: Abbrev Number: 9 (DW_TAG_subrange_type) [...] <9b8> DW_AT_type : <0x962> <2><962>: Abbrev Number: 22 (DW_TAG_enumeration_type) <963> DW_AT_name : (indirect string, offset: 0xb34): p__index [...] This patch fixes the issue by also making sure that the subtype of the original range type does match the subtype found in the descriptive type. gdb/ChangeLog: * ada-lang.c (ada_is_redundant_range_encoding): Return 0 if the TYPE_CODE of range_type's base type does not match the TYPE_CODE of encoding_type's base type.
2014-11-19Use 2-byte instead of 4-byte NOP on S390 in 'bp-permanent' test caseAndreas Arnez2-0/+12
The bp-permanent test case assumes that a NOP is exactly as long as a software breakpoint. This is not the case for the S390 "nop" instruction, which is 4 bytes long, while a software breakpoint is just 2 bytes long. The "nopr" instruction has the right size and can be used instead. Without this patch the test case fails on S390 when trying to continue after SIGTRAP on the permanent breakpoint: ... Continuing. Program received signal SIGILL, Illegal instruction. test () at /home/arnez/src/binutils-gdb/gdb/testsuite/gdb.base/bp-permanent.c:40 40 NOP; /* after permanent bp */ (gdb) FAIL: gdb.base/bp-permanent.exp: always_inserted=off, sw_watchpoint=0: basics: stop at permanent breakpoint With this patch the test case succeeds without any FAILs. gdb/testsuite/ChangeLog: * gdb.base/bp-permanent.c (NOP): Define as 2-byte instead of 4-byte instruction on S390.
2014-11-19[Ada] gdb.ada/complete.exp failure on x86_64-windowsJoel Brobecker2-1/+14
Using the example in gdb.ada/complete.exp, the following command on x86_64-windows returns one unwanted completion choice : (gdb) complete p pck p <pck_E>> [all following completions entries snipped, all expected] I tracked down this suprising entry to a minimal symbol whose name is ".refptr.pck_E". The problem occurs while trying to see if this symbol matches "pck" when doing wild-matching as we are doing here: /* Second: Try wild matching... */ if (!match && wild_match_p) { /* Since we are doing wild matching, this means that TEXT may represent an unqualified symbol name. We therefore must also compare TEXT against the unqualified name of the symbol. */ sym_name = ada_unqualified_name (ada_decode (sym_name)); if (strncmp (sym_name, text, text_len) == 0) match = 1; } What happens is that ada_decode correctly identifies the fact that SYM_NAME (".refptr.pck_E") is not following any GNAT encoding, and therefore returns that same name, but bracketed: "<.refptr.pck_E>". This is the convention we use for telling GDB that the decoded name is not a real Ada name - and therefore should not be encoded for operations such as name matching, symbol lookups, etc. So far, so good. Next is the call to ada_unqualified_name, which unfortunately does not notice that the decoded name it is being given isn't a natural symbol, and just blindly strips everything up to the last do, returning "pck_E>". And of course, "pck_E>" matches "pck" now, and so we end up accepting this symbol as a match. This patch fixes the problem by making ada_unqualified_name a little smarter by making sure that the given decoded symbol name does not start with '<'. gdb/ChangeLog: * ada-lang.c (ada_unqualified_name): Return DECODED_NAME if it starts with '<'. Tested on x86_64-windows using AdaCore's testsuite as well as on x86_64-linux.
2014-11-19[Ada] Ignore __XA types when redundant.Joel Brobecker7-0/+181
Consider the following code which declares a variable A2 which is an array of arrays of integers. type Array2_First is array (24 .. 26) of Integer; type Array2_Second is array (1 .. 2) of Array2_First; A1 : Array1_Second := ((10, 11, 12), (13, 14, 15)); Trying to print the type of that variable currently yields: (gdb) ptype A2 type = array (1 .. 2, 24 .. 26) of integer This is not correct, as this is the description of a two-dimension array, which is different from an array of arrays. The expected output is: (gdb) ptype a2 type = array (1 .. 2) of foo_n926_029.array2_first GDB's struct type currently handles multi-dimension arrays the same way arrays of arrays, where each dimension is stored as a sub-array. The ada-valprint module considers that consecutive array layers are in fact multi-dimension arrays. For array of arrays, a typedef layer is introduced between the two arrays, creating a break between each array type. In our situation, A2 is a described as a typedef of an array type... .uleb128 0x8 # (DIE (0x125) DW_TAG_variable) .ascii "a2\0" # DW_AT_name .long 0xfc # DW_AT_type .uleb128 0x4 # (DIE (0xfc) DW_TAG_typedef) .long .LASF5 # DW_AT_name: "foo__array2_second" .long 0x107 # DW_AT_type .uleb128 0x5 # (DIE (0x107) DW_TAG_array_type) .long .LASF5 # DW_AT_name: "foo__array2_second" .long 0xb4 # DW_AT_type .uleb128 0x6 # (DIE (0x114) DW_TAG_subrange_type) .long 0x11b # DW_AT_type .byte 0x2 # DW_AT_upper_bound .byte 0 # end of children of DIE 0x107 ... whose element type is, as expected, a typedef to the sub-array type: .uleb128 0x4 # (DIE (0xb4) DW_TAG_typedef) .long .LASF4 # DW_AT_name: "foo__array2_first" .long 0xbf # DW_AT_type .uleb128 0x9 # (DIE (0xbf) DW_TAG_array_type) .long .LASF4 # DW_AT_name: "foo__array2_first" .long 0xd8 # DW_AT_GNAT_descriptive_type .long 0x1c5 # DW_AT_type .uleb128 0xa # (DIE (0xd0) DW_TAG_subrange_type) .long 0xf0 # DW_AT_type .byte 0x18 # DW_AT_lower_bound .byte 0x1a # DW_AT_upper_bound .byte 0 # end of children of DIE 0xbf The reason why things fails is that, during expression evaluation, GDB tries to "fix" A1's type. Because the sub-array has a parallel (descriptive) type (DIE 0xd8), GDB thinks that our array's index type must be dynamic and therefore needs to be fixed. This in turn causes the sub-array to be "fixed", which itself results in the typedef layer to be stripped. However, looking closer at the parallel type, we see... .uleb128 0xb # (DIE (0xd8) DW_TAG_structure_type) .long .LASF8 # DW_AT_name: "foo__array2_first___XA" [...] .uleb128 0xc # (DIE (0xe4) DW_TAG_member) .long .LASF10 # DW_AT_name: "foo__Tarray2_firstD1___XDLU_24__26" ... that all it tells us is that the array bounds are 24 and 26, which is already correctly provided by the array's DW_TAG_subrange_type bounds, meaning that this parallel type is just redundant. Parallel types in general are slowly being removed in favor of standard DWARF constructs. But in the meantime, this patch kills two birds with one stone: 1. It recognizes this situation where the XA type is useless, and saves an unnecessary range-type fixing; 2. It fixes the issue at hand because ignoring the XA type results in no type fixing being required, which allows the typedef layer to be preserved. gdb/ChangeLog: * ada-lang.c (ada_is_redundant_range_encoding): New function. (ada_is_redundant_index_type_desc): New function. (to_fixed_array_type): Ignore parallel XA type if redundant. gdb/testsuite/ChangeLog: * gdb.ada/arr_arr: New testcase. Tested on x86_64-linux.
2014-11-19varsize-limit error printing element of packed array...Joel Brobecker7-2/+145
... when that packed array is part of a discriminated record and one of the bounds is a discriminant. Consider the following code: type FUNNY_CHAR_T is (NUL, ' ', '"', '#', [etc]); type FUNNY_STR_T is array (POSITIVE range <>) of FUNNY_CHAR_T; pragma PACK (FUNNY_STR_T); type FUNNY_STRING_T (SIZE : NATURAL := 1) is record STR : FUNNY_STR_T (1 .. SIZE) := (others => '0'); LENGTH : NATURAL := 4; end record; TEST: FUNNY_STRING_T(100); GDB is able to print the value of variable "test" and "test.str". But not "test.str(1)": (gdb) p test $1 = (size => 100, str => (33 'A', nul <repeats 99 times>), length => 1) (gdb) p test.str $2 = (33 'A', nul <repeats 99 times>) (gdb) p test.str(1) object size is larger than varsize-limit The problem occurs during the phase where we are trying to resolve the expression subscript operation. On the one hand of the subscript operator, we have the result of the evaluation of "test.str", which is our packed array. We have the following code to handle packed arrays in particular: if (ada_is_constrained_packed_array_type (desc_base_type (value_type (argvec[0])))) argvec[0] = ada_coerce_to_simple_array (argvec[0]); This eventually leads to a call to constrained_packed_array_type to return the "simple array". This function relies on a parallel ___XA type, when available, to determine the bounds. In our case, we find type... failure__funny_string_t__T4b___XA" ... which has one field describing the bounds of our array as: failure__funny_string_t__T3b___XDLU_1__size The part that interests us is after the ___XD suffix or, in other words: "LU_1__size". What this means in GNAT encoding parlance is that the lower bound is 1, and that the upper bound is the value of "size". "size" is our discriminant in this case. Normally, we would access the record's discriminant in order to get the upper bound's value, but we do not have that information, here. We are in a mode where we are just trying to "fix" the type without an actual value. This is what the call to to_fixed_range_type is doing, and because the fix'ing fails, it ends up returning the ___XDLU type unmodified as our index type. This shouldn't be a problem, except that the later part of constrained_packed_array_type then uses that index_type to determine the array size, via a call to get_discrete_bounds. The problem is that the upper bound of the ___XDLU type is dynamic (in the DWARF sense) while get_discrete_bounds implicitly assumes that the bounds are static, and therefore accesses them using macros that assume the bounds values are constants: case TYPE_CODE_RANGE: *lowp = TYPE_LOW_BOUND (type); *highp = TYPE_HIGH_BOUND (type); This therefore returns a bogus value for the upper bound, leading to an unexpectedly large size for our array, which later triggers the varsize-limit guard we've seen above. This patch avoids the problem by adding special handling of dynamic range types. It also extends the documentation of the constrained_packed_array_type function to document what happens in this situation. gdb/ChangeLog: * ada-lang.c (constrained_packed_array_type): Set the length of the return array as if both bounds where zero if that returned array's index type is dynamic. gdb/testsuite/ChangeLog: * gdb.ada/pkd_arr_elem: New Testcase. Tested on x86_64-linux.
2014-11-19Don't set CC in config/i386/go32.mhYao Qi2-1/+4
I cross-compile gdb for msdosdjgpp (both target and host is i586-pc-msdosdjgpp), so the CC should be i586-pc-msdosdjgpp-gcc. However, CC is set incorrectly to gcc after config/i386/go32.mh is inlined into the Makefile. This patch is to remove the CC setting in config/i386/go32.mh. gdb: 2014-11-19 Yao Qi <yao@codesourcery.com> * config/i386/go32.mh (CC): Remove.
2014-11-18symtab.h (SYMTAB_BLOCKVECTOR): Renamed from BLOCKVECTOR. All uses updated.Doug Evans22-62/+76
gdb/ChangeLog: * symtab.h (SYMTAB_BLOCKVECTOR): Renamed from BLOCKVECTOR. All uses updated.
2014-11-18buildsym API cleanupDoug Evans8-126/+145
gdb/ChangeLog: * buildsym.c (buildsym_objfile): New static global. (buildsym_comp_dir): New static global. (finish_block_internal): Delete arg objfile. All callers updated. (finish_block): Delete arg objfile. All callers updated. (start_subfile): Delete arg dirname. All callers updated. (patch_subfile_names): Update buildsym_comp_dir. (get_macro_table): Delete arg objfile. All callers updated. (start_symtab): New arg objfile. All callers updated. Rename arg dirname to comp_dir. (reset_symtab_globals): Initialize buildsym_objfile, buildsym_comp_dir. (end_symtab_get_static_block): Delete arg objfile. All callers updated. (end_symtab_without_blockvector): Ditto. (end_symtab_with_blockvector): Ditto. (end_symtab_from_static_block): Ditto. (end_symtab): Ditto. (end_expandable_symtab): Ditto. (augment_type_symtab): Ditto. * coffread.c (coff_start_symtab): New arg objfile. All callers updated.
2014-11-18symtab.h (SYMTAB_LINETABLE): Renamed from LINETABLE. All uses updated.Doug Evans11-44/+56
gdb/ChangeLog: * symtab.h (SYMTAB_LINETABLE): Renamed from LINETABLE. All uses updated.
2014-11-18SYMTAB_DIRNAME: New macro.Doug Evans7-17/+28
gdb/ChangeLog: * symtab.h (SYMTAB_DIRNAME): New macro. All uses of member symtab.dirname updated to use it.
2014-11-18SYMTAB_OBJFILE: New macro.Doug Evans19-43/+52
gdb/ChangeLog: * symtab.h (SYMTAB_OBJFILE): New macro. All uses of member symtab.objfile updated to use it.
2014-11-18Fix memory leak in watch_main_source_file_lossage.Doug Evans2-0/+6
gdb/ChangeLog: * buildsym.c (watch_main_source_file_lossage): Fix memory leak.
2014-11-18Use SYMBOL_OBJFILE more.Doug Evans11-14/+29
gdb/ChangeLog: * cp-namespace.c (cp_lookup_symbol_imports_or_template): Use SYMBOL_OBJFILE. * findvar.c (default_read_var_value): Ditto. * jv-lang.c (add_class_symtab_symbol): Ditto. * parse.c (operator_check_standard): Ditto. * printcmd.c (address_info): Ditto. * symtab.c (fixup_symbol_section): Ditto. (skip_prologue_sal): Ditto. * tracepoint.c (scope_info): Ditto. * valops.c (find_function_in_inferior): Ditto. * guile/scm-symbol.c (syscm_eq_symbol_smob): Ditto. * python/py-symbol.c (set_symbol): Ditto.
2014-11-18Split up end_symtab_from_static_block into two.Doug Evans2-193/+229
This patch is conceptually quite simple. If you look at end_symtab_from_static_block you'll see that the static_block == NULL case is completely different than the non-NULL case. There's a lot of complexity to handle the NULL case but it seems entirely unnecessary. For example, whether blockvector is NULL is decided at the start, before this for loop: for (subfile = subfiles; subfile; subfile = nextsub) Secondly, after the for loop, we test symtab for non-NULL here: /* Set this for the main source file. */ if (symtab) but symtab will only ever be non-NULL if blockvector was non-NULL. And if blockvector was non_NULL so will symtab. The other case to consider is these lines of code executed before the for loop: /* Read the line table if it has to be read separately. This is only used by xcoffread.c. */ if (objfile->sf->sym_read_linetable != NULL) objfile->sf->sym_read_linetable (objfile); /* Handle the case where the debug info specifies a different path for the main source file. It can cause us to lose track of its line number information. */ watch_main_source_file_lossage (); From my reading of the code, neither of these is useful in the static_block == NULL case. Thus we can make the code more readable by splitting these two cases up, which is what this patch does. gdb/ChangeLog: * buildsym.c (main_subfile): New static global. (free_subfiles_list): New function. (start_symtab): Set main_subfile. (restart_symtab): Replace init of subfiles, current_subfile with call to free_subfiles_list. (watch_main_source_file_lossage): Use main_subfile. (reset_symtab_globals): Replace init of current_subfile with call to free_subfiles_list. (end_symtab_without_blockvector, end_symtab_with_blockvector): New functions, split out from ... (end_symtab_from_static_block): ... here. Rewrite to call them.
2014-11-18The result of symtab expansion is always a primary symtab.Doug Evans3-16/+31
gdb/ChangeLog: * dwarf2read.c (dw2_instantiate_symtab): Add assert. (dw2_lookup_symbol): Remove unnecessary test for primary symbol table. * psymtab.c (lookup_symbol_aux_psymtabs): Ditto. (psymtab_to_symtab): Add comment and assert. (map_matching_symbols_psymtab): Remove unnecessary test for non-primary symtab.
2014-11-18I caught a few mingw32-specific failures for some of the gdb.reverseLuis Machado11-10/+24
tests. FAIL: gdb.reverse/consecutive-precsave.exp: reload precord save file FAIL: gdb.reverse/finish-precsave.exp: reload precord save file FAIL: gdb.reverse/until-precsave.exp: reload core file FAIL: gdb.reverse/watch-precsave.exp: reload core file FAIL: gdb.reverse/step-precsave.exp: reload core file FAIL: gdb.reverse/break-precsave.exp: reload precord save file FAIL: gdb.reverse/sigall-precsave.exp: reload precord save file They happen for two reasons. - mingw32 does not define SIGTRAP, so upon recording a core file, the signal information will be missing, which in turn causes GDB to not display the stopping signal when it loads the same core file. An earlier message warns about this: "warning: Signal SIGTRAP does not exist on this system." - The testcase is crafted in a way that expects a pattern of the stopping signal message instead of a successful core file read message. The following patch fixes this by changing the old pattern to a more reasonable one, while still ignoring the fact that mingw32-based GDB does not record a SIGTRAP in a core file because it does not define it. gdb/testsuite/ 2014-11-18 Luis Machado <lgustavo@codesourcery.com> * gdb.reverse/break-precsave: Expect completion message for core file reads. * gdb.reverse/consecutive-precsave.exp: Likewise. * gdb.reverse/finish-precsave.exp: Likewise. * gdb.reverse/i386-precsave.exp: Likewise. * gdb.reverse/machinestate-precsave.exp: Likewise. * gdb.reverse/sigall-precsave.exp: Likewise. * gdb.reverse/solib-precsave.exp: Likewise. * gdb.reverse/step-precsave.exp: Likewise. * gdb.reverse/until-precsave.exp: Likewise. * gdb.reverse/watch-precsave.exp: Likewise.
2014-11-17GDB testsuite: More fixes for warnings with -std=gnu11Andreas Arnez5-0/+15
Fix some more C compiler warnings for missing function return types and implicit function declarations in the GDB testsuite. gdb/testsuite/ChangeLog: * gdb.base/bp-permanent.c: Include unistd.h. * gdb.python/py-framefilter-mi.c (main): Add return type. * gdb.python/py-framefilter.c (main): Likewise. * gdb.trace/actions-changed.c (main): Likewise.
2014-11-17Eliminate literal line numbers in mi-until.expAndreas Arnez3-13/+26
Remove literal line numbers from the regexps in mi-until.exp. Add appropriate eye-catchers to until.c and refer to those instead. This change fixes the test case after having disturbed the line numbering with the previous fix for compiler warnings with -std=gnu11. gdb/testsuite/ChangeLog: * gdb.mi/until.c: Add eye-catchers. * gdb.mi/mi-until.exp: Refer to eye-catchers instead of literal line numbers.
2014-11-17Drop remaining references to removed source lines in break1.c and ur1.cAndreas Arnez6-54/+47
In some .exp files it was missed to remove the references to eye-catchers like "set breakpoint 9 here" when the non-prototype function header variants they belonged to were deleted. This patch cleans this up. gdb/testsuite/ChangeLog: * gdb.base/condbreak.exp: Drop references to removed non-prototype function header variants in break1.c. * gdb.base/ena-dis-br.exp: Likewise. * gdb.base/hbreak2.exp: Likewise. * gdb.reverse/until-precsave.exp: Drop references to removed non-prototype function header variants in ur1.c. * gdb.reverse/until-reverse.exp: Likewise.
2014-11-17[gdbserver/lynx] spurious failure to write in inferior memoryJoel Brobecker2-5/+12
We noticed the following error on ppc-lynx178, using just about any program: (gdb) tar remote mytarget:4444 Remote debugging using mytarget:4444 0x000100c8 in _start () (gdb) b try Breakpoint 1 at 0x10844: file try.adb, line 11. (gdb) cont Continuing. !!!-> Cannot remove breakpoints because program is no longer writable. !!!-> Further execution is probably impossible. Breakpoint 1, try () at try.adb:11 11 Local : Integer := 18; And, of course, trying to continue yielded the expected outcome: (gdb) c Continuing. warning: Error removing breakpoint 1 Cannot remove breakpoints because program is no longer writable. Further execution is probably impossible. It turns out that the problem is caused by an intentional test against a variable with an undefined value. After GDB receives notification of the inferior stopping, it tries to remove the breakpoint by sending a memory-write packet ("X10844,4:9 "). This leads us to lynx_write_memory, where it tries to split the memory-write into chunks of 4 bytes. And, in order to handle writes which are not aligned on word boundaries, we have the following code: if (skip > 0 || truncate > 0) /* We need to read the memory at this address in order to preserve the data that we are not overwriting. */ lynx_read_memory (addr, (unsigned char *) &buf, xfer_size); if (errno) return errno; (the comment explains what the code is about). Unfortunately, the not-so-glaring error that we've made here is that we're checking ERRNO regardless of whether we've called lynx_read_memory. In our case, because we are writing 4 bytes aligned on a word boundary, we do not call lynx_read_memory and therefore test an ERRNO with an undefined value. gdb/gdbserver/ChangeLog: * lynx-low.c (lynx_write_memory): Put lynx_read_memory and corresponding ERRNO check in same block.
2014-11-17dwarf.exp: In 64-bit units, emit also abbrev offset as a 64-bit fieldPetr Machata2-2/+7
Dwarf::tu and Dwarf::cu allow selection of units with 64-bit offsets through an option. When selected, unit size is encoded properly, but offset to abbreviation unit is still encoded in a 4-byte field. This patch fixes the problem. Reproducer: Dwarf::assemble "blah.s" { tu {is_64 1 version 4 addr_size 8} 0x1122334455667788 the_type { type_unit {} { the_type: } } cu {is_64 1 version 4 addr_size 8} { compile_unit {{language @DW_LANG_C}} {} } } gdb/testsuite: * lib/dwarf.exp (Dwarf::cu, Dwarf::tu): Emit ${_cu_offset_size} bytes abbrev offset.
2014-11-15Add copyright headers.Doug Evans3-0/+51
2014-11-15PR symtab/17559Doug Evans13-12/+131
Basically the problem is that "symtab" is ambiguous. Is it the primary symtab (where we canonically think of blockvectors as being stored) or is it for a specific file (where each file's line table is stored) ? gdb_disassembly wants the symtab that contains the line table but is instead getting the primary symtab. gdb/ChangeLog: PR symtab/17559 * symtab.c (find_pc_line_symtab): New function. * symtab.h (find_pc_line_symtab): Declare. * disasm.c (gdb_disassembly): Call find_pc_line_symtab instead of find_pc_symtab. * tui/tui-disasm.c (tui_set_disassem_content): Ditto. * tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Ditto. * tui/tui-source.c (tui_vertical_source_scroll): Ditto. * tui/tui-win.c (make_visible_with_new_height): Ditto. * tui/tui-winsource.c (tui_horizontal_source_scroll): Ditto. (tui_display_main): Call find_pc_line_symtab instead of find_pc_line. gdb/testsuite/ChangeLog: PR symtab/17559 * gdb.base/line-symtabs.exp: New file. * gdb.base/line-symtabs.c: New file. * gdb.base/line-symtabs.h: New file.
2014-11-15expand_symtab_containing_pc: Renamed from find_pc_sect_symtab_via_partial.Doug Evans4-14/+18
This patch just renames one function. Its only caller is in stack.c where we're printing a backtrace with non-zero info_verbose and we want to make sure all the needed symtabs are expanded before printing the backtrace so that debug symbol reading messages don't pollute the backtrace. I think the new name of the function makes clearer to the reader what is going on. gdb/ChangeLog: * symtab.c (expand_symtab_containing_pc): Renamed from find_pc_sect_symtab_via_partial. All callers updated.
2014-11-15Add missing parenthesisYao Qi2-1/+5
One parenthesis is missing, and it causes a compilation error. This patch is to fix it. gdb: 2014-11-15 Yao Qi <yao@codesourcery.com> * go32-nat.c (go32_create_inferior): Add missing parenthesis.
2014-11-14common-defs.h: include <stdarg.h> before <stdio.h>Joel Brobecker2-1/+6
When trying to build gdbserver on ppc-lynx178, the compiler reports while trying to compile gdbserver/ax.c that vsprintf is not declared. Looking at my C99 reference manual (a draft), I see the following synopsis: #include <stdarg.h> #include <stdio.h> int vsprintf(char * restrict s, [etc]); Looking at stdio.h on LynxOS-178, if found where vsprintf gets declared: #if defined(__varargs_h) || defined(__stdarg_h) \ || defined(_VARARGS_H) || defined(_STDARG_H) extern int vsprintf _AP((char *, const char *, va_list)); #endif Digging further, I noticed that common-defs.h, which is included via server.h, includes stdarg.h after including stdio, explaining why vsprintf does not get declared in this case. This patch fixes the problem by including stdarg.h before stdio.h. gdb/ChangeLog: * common/common-defs.h: Move <stdarg.h> #include ahead of <stdio.h> #include. Tested on x86_64-linux.
2014-11-14handle 'iconv's that define EILSEQ to ENOENTPedro Alves2-10/+27
We're currently pulling gnulib's errno module as a dependency of some other module. That provides an errno.h that defines EILSEQ to a distinct value if the system's errno.h doesn't define it already. However, GNU iconv does this: /* Get errno declaration and values. */ #include <errno.h> /* Some systems, like SunOS 4, don't have EILSEQ. Some systems, like BSD/OS, have EILSEQ in a different header. On these systems, define EILSEQ ourselves. */ #ifndef EILSEQ #define EILSEQ @EILSEQ@ #endif That's in: http://git.savannah.gnu.org/cgit/libiconv.git/tree/include/iconv.h.in The "different header" mentioned is wchar.h. This is handled in: http://git.savannah.gnu.org/cgit/libiconv.git/tree/m4/eilseq.m4 which defines @EILSEQ@ to ENOENT if EILSEQ isn't found in either errno.h or wchar.h. So if iconv sets errno to EILSEQ on such system's, it's really setting it to ENOENT. And when we check for EILSEQ, we're checking for gnulib's value. The result is we won't detect the error correctly. As we dropped support for both SunOS 4 or old BSD/OS, maybe we don't need to care about the wchar.h issue anymore. Still, AFAICS, gnulib's m4/errno_h.m4 doesn't know that EILSEQ may be defined in wchar.h, and so on such systems, ISTM gnulib ends up defining an incompatible EILSEQ itself, but I think that should be fixed on the gnulib side, by making it extract the EILSEQ value out of the system's wchar.h, like GNU iconv does. So that leaves handling the case of gnulib making up a EILSEQ value, which we take as meaning the system really doesn't really define it, which will be the same systems GNU iconv sets errno to ENOENT instead of EILSEQ. Looking at glibc's iconv it seems that ENOENT is never used there. It seems it's safe to always treat ENOENT the same as EILSEQ. The current EILSEQ definition under PHONY_ICONV is obviously stale as gnulib garantees there's always a EILSEQ defined. Tested on x86_64 Fedora 20. gdb/ 2014-11-14 Pedro Alves <palves@redhat.com> * charset.c [PHONY_ICONV && !EILSEQ] (EILSEQ): Don't define. [!PHONY_ICONV] (gdb_iconv): New function. [!PHONY_ICONV] (iconv): Redefine to gdb_iconv.
2014-11-14Fix dw2-ifort-parameter.exp fail with clangYao Qi3-11/+12
The patch <https://sourceware.org/ml/gdb-patches/2014-03/msg00202.html> fixed dw2-ifort-parameter.exp on powerpc64 by adding some labels to get the start and end address of function func. This should also fix the fail on thumb mode, however, this style is quite specific to gcc, and other compiler, such as clang, may not guarantee the order of global asms and functions. The test fails with clang: $ make check RUNTESTFLAGS='dw2-ifort-parameter.exp CC_FOR_TARGET=clang' (gdb) p/x param^M No symbol "param" in current context.^M (gdb) FAIL: gdb.dwarf2/dw2-ifort-parameter.exp: p/x param With this patch applied, dw2-ifort-parameter.exp still passes for gcc on arm thumb mode and popwerpc64, and it also passes for clang on x86_linux. gdb/testsuite: 2014-11-14 Yao Qi <yao@codesourcery.com> * gdb.dwarf2/dw2-ifort-parameter.c: Remove inline asm. (func): Add label func_label. * gdb.dwarf2/dw2-ifort-parameter.exp (Dwarf::assemble): Replace low_pc and high_pc with MACRO_AT_range. Replace name, low_pc and high_pc with MACRO_AT_func.
2014-11-14Fix implptr-optimized-out.exp failYao Qi2-3/+8
Hi, I see the fail in gdb.dwarf2/implptr-optimized-out.exp in thumb mode (gdb) p p->f^M No symbol "p" in current context.^M (gdb) FAIL: gdb.dwarf2/implptr-optimized-out.exp: p p->f and the crash on powerpc64 (gdb) continue^M Continuing.^M ^M Program received signal SIGSEGV, Segmentation fault.^M 0x7d82100810000828 in ?? () The cause of both is that we incorrectly set attribute low_pc, since main isn't resolved to function start address on these targets. In this patch, we replace attributes name, low_pc and high_pc with MACRO_AT_func. The fail on thumb mode is fixed, and crash on powerpc64 is fixed too. gdb/testsuite: 2014-11-14 Yao Qi <yao@codesourcery.com> * gdb.dwarf2/implptr-optimized-out.exp (Dwarf::assemble): Replace name, low_pc and high_pc with MACRO_AT_func.
2014-11-14Use Dwarf::assemble in implptr-optimized-out.expYao Qi3-169/+66
This patch is to use dwarf::assemble to generate debug information, and remove implptr-optimized-out.S as a result. gdb/testsuite: 2014-11-14 Yao Qi <yao@codesourcery.com> * gdb.dwarf2/implptr-optimized-out.exp: Use Dwarf::assemble to produce debug information. * gdb.dwarf2/implptr-optimized-out.S: Removed.
2014-11-14Get start and end address of main in dwz.expYao Qi3-57/+14
On arm-none-eabi target thumb mode, I see the following fail, p the_int^M $2 = 99^M (gdb) FAIL: gdb.dwarf2/dwz.exp: p the_int and on powerpc64 target, we even can't get function main from object file, disassemble main^M No function contains specified address.^M (gdb) FAIL: gdb.dwarf2/dwz.exp: disassemble main This patch is to use MACRO_AT_func attribute to get the main's start address and end address correctly, and also remove some code dwz.exp getting main's length. This patch fixes fails on both thumb mode and powerpc64 target. PASS: gdb.dwarf2/dwz.exp: p other_int PASS: gdb.dwarf2/dwz.exp: p the_int gdb/testsuite: 2014-11-14 Yao Qi <yao@codesourcery.com> * gdb.dwarf2/dwz.exp: Remove the code to compile main.c to object and get function length. (Dwarf::assemble): Replace name, low_pc and high_pc attributes with MACRO_AT_func. (top-level): Replace gdb_compile and clean_restart with prepare_for_testing. * gdb.dwarf2/main.c (main): Add label main_label.
2014-11-14DW attribute macro MACRO_AT_func and MACRO_AT_rangeYao Qi2-6/+131
This patch addes DW macro attributes MACRO_AT_func and MACRO_AT_range in dwarf assembler, which emits "DW_AT_low_pc func_start addr" and "DW_AT_high_pc func_end addr". func_start and func_end are computed automatically by proc function_range. These two attributes are pseudo attribute or macro attribute, which means they are not standard dwarf attribute in dwarf spec. Then can be substituted or expanded to standard attributes or macro attributes. See details in the comments to them. Dwarf assembler is extended to handle them. Now the attributes name/low_pc/high_pc can be replaced with MACRO_AT_func like this: subprogram { {name main} {low_pc main_start addr} {high_pc main_end addr} } becomes: subprogram { {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} } users don't have to worry about the start and end of function main, and they only need to add a label main_label in main. gdb/testsuite: 2014-11-14 Yao Qi <yao@codesourcery.com> * lib/dwarf.exp (function_range): New procedure. (Dwarf::_handle_macro_at_func): New procedure. (Dwarf::_handle_macro_at_range): New procedure. (Dwarf): Handle MACRO_AT_func and MACRO_AT_range.
2014-11-14New proc _handle_attributeYao Qi2-6/+18
This patch is to move some code to a new procedure _handle_attribute, which will be used in my following patches. gdb/testsuite: 2014-11-14 Yao Qi <yao@codesourcery.com> * lib/dwarf.exp (_handle_DW_TAG): Move some code to ... (_handle_attribute): New procedure.
2014-11-13PR symtab/17591Doug Evans2-1/+11
gdb/ChangeLog: PR symtab/17591 * dwarf2read.c (find_slot_in_mapped_hash): Handle "(anonymous namespace)".
2014-11-13dwarf2read.c (update_enumeration_type_from_children): Avoid infinite loop.Doug Evans2-3/+10
gdb/ChangeLog: * dwarf2read.c (update_enumeration_type_from_children): Avoid infinite loop.
2014-11-13NEWS: Fix typo.Jan Kratochvil2-3/+7
gdb/ChangeLog 2014-11-13 Jan Kratochvil <jan.kratochvil@redhat.com> * NEWS (maint set target-async): Fix typo.
2014-11-13GDB testsuite: Fix warnings with -std=gnu11Andreas Arnez41-32/+127
Since upstream GCC has changed the default C language dialect to 'gnu11', it yields multiple warnings in the GDB testsuite for missing function return types and implicit function declarations. This patch attempts to fix these. gdb/testsuite/ChangeLog: * gdb.ada/cond_lang/foo.c (callme): Add return type. * gdb.base/call-sc.c (zed): Likewise. * gdb.base/checkpoint.c (main): Likewise. * gdb.base/dump.c (main): Likewise. * gdb.base/gcore.c (main): Likewise. * gdb.base/huge.c (main): Likewise. * gdb.base/multi-forks.c (main): Likewise. * gdb.base/pr10179-a.c (main): Likewise. * gdb.base/savedregs.c (main): Likewise. * gdb.base/sigaltstack.c (main): Likewise. * gdb.base/siginfo.c (main): Likewise. * gdb.base/structs.c (zed): Likewise. * gdb.mi/mi-stack.c (callee3, callee2, callee1, main): Likewise. * gdb.mi/mi-syn-frame.c (main): Likewise. * gdb.mi/until.c (foo, main): Likewise. * gdb.base/global-var-nested-by-dso.c (b_main, c_main): Declare. * gdb.base/solib-weak.c (foo): Declare. * gdb.base/attach-twice.c: Include stdio.h. * gdb.base/weaklib1.c: Likewise. * gdb.base/weaklib2.c: Likewise. * gdb.base/catch-signal-fork.c: Include stdio.h and sys/wait.h. * gdb.mi/mi-condbreak-call-thr-state-mt.c: Include stdio.h and unistd.h. * gdb.base/attach-pie-misread.c: Include stdlib.h. * gdb.mi/mi-exit-code.c: Likewise. * gdb.base/break-interp-lib.c: Include string.h. * gdb.base/coremaker.c: Likewise. * gdb.base/testenv.c: Likewise. * gdb.python/py-finish-breakpoint.c: Likewise. * gdb.base/inferior-died.c: Include sys/wait.h. * gdb.base/fileio.c: Include time.h. * gdb.base/async-shell.c: Include unistd.h. * gdb.base/dprintf-non-stop.c: Likewise. * gdb.base/info-os.c: Likewise. * gdb.mi/mi-console.c: Likewise. * gdb.mi/watch-nonstop.c: Likewise. * gdb.python/py-events.c: Likewise. * gdb.base/async.c (baz): Move up before its invocation. * gdb.base/code_elim2.c (my_global_func): Likewise. * gdb.base/skip-solib-lib.c (multiply): Likewise. * gdb.base/advance.c (func2): Likewise.
2014-11-13GDB testsuite: drop non-prototype C function header variantsAndreas Arnez46-1682/+49
Remove many old-style function header variants in C source files of the GDB test suite, using the 'unifdef' tool with '-DPROTOTYPES=1'. gdb/testsuite/ChangeLog: * gdb.base/annota1.c: Remove #ifdef PROTOTYPES, keep prototyped variant. * gdb.base/annota3.c: Likewise. * gdb.base/async.c: Likewise. * gdb.base/average.c: Likewise. * gdb.base/call-ar-st.c: Likewise. * gdb.base/call-rt-st.c: Likewise. * gdb.base/call-sc.c: Likewise. * gdb.base/call-strs.c: Likewise. * gdb.base/ending-run.c: Likewise. * gdb.base/execd-prog.c: Likewise. * gdb.base/exprs.c: Likewise. * gdb.base/foll-exec.c: Likewise. * gdb.base/foll-fork.c: Likewise. * gdb.base/foll-vfork.c: Likewise. * gdb.base/funcargs.c: Likewise. * gdb.base/gcore.c: Likewise. * gdb.base/jump.c: Likewise. * gdb.base/langs0.c: Likewise. * gdb.base/langs1.c: Likewise. * gdb.base/langs2.c: Likewise. * gdb.base/mips_pro.c: Likewise. * gdb.base/nodebug.c: Likewise. * gdb.base/opaque0.c: Likewise. * gdb.base/opaque1.c: Likewise. * gdb.base/recurse.c: Likewise. * gdb.base/run.c: Likewise. * gdb.base/scope0.c: Likewise. * gdb.base/scope1.c: Likewise. * gdb.base/setshow.c: Likewise. * gdb.base/setvar.c: Likewise. * gdb.base/shmain.c: Likewise. * gdb.base/shr1.c: Likewise. * gdb.base/shr2.c: Likewise. * gdb.base/sigall.c: Likewise. * gdb.base/signals.c: Likewise. * gdb.base/so-indr-cl.c: Likewise. * gdb.base/solib2.c: Likewise. * gdb.base/structs.c: Likewise. * gdb.base/sum.c: Likewise. * gdb.base/vforked-prog.c: Likewise. * gdb.base/watchpoint.c: Likewise. * gdb.reverse/shr2.c: Likewise. * gdb.reverse/until-reverse.c: Likewise. * gdb.reverse/ur1.c: Likewise. * gdb.reverse/watch-reverse.c: Likewise.
2014-11-13Drop non-prototype C function header variants: 'sepdebug' test caseAndreas Arnez3-47/+18
Remove old-style function header variants from sepdebug.c. Eliminate references to the removed locations "breakpoint 9" and "breakpoint 13" from sepdebug.exp. gdb/testsuite/ChangeLog: * gdb.base/sepdebug.c: Remove #ifdef PROTOTYPES, keep prototyped variant. * gdb.base/sepdebug.exp: Drop references to removed code.
2014-11-13Drop non-prototype C function header variants: 'list' test caseAndreas Arnez3-14/+20
Remove old-style function header variants from list0.h and list1.c. Fill the removed lines with comments or empty lines, such that the line numbering is undisturbed. Changes to the line numbering would require heavy adjustments to list.exp, where many line numbers are hard-coded, as well as a fair amount of knowledge about the source code in and around certain lines. Thus the dependency on the line numbering can not be eliminated so easily, and it may not even be a useful goal for a "list" test case. Another option might be to adjust the literal line numbers in list.exp, but even that is not as straightforward as it may seem, since the test case expects certain source lines to be exactly n lines apart. gdb/testsuite/ChangeLog: * gdb.base/list0.h: Remove #ifdef PROTOTYPES, keep prototyped variant. Preserve original line numbering. * gdb.base/list1.c: Likewise.
2014-11-13Drop non-prototype C function header variants: 'break' test caseAndreas Arnez4-55/+17
Remove old-style function headers from break.c and break1.c. Adjust break.exp accordingly; in particular eliminate references to the removed locations "breakpoint 9, 13, and 16" from break.exp. gdb/testsuite/ChangeLog: * gdb.base/break.c: Remove #ifdef PROTOTYPES, keep prototyped variant. * gdb.base/break1.c: Likewise. * gdb.base/break.exp: Drop references to removed code.
2014-11-13Drop non-prototype C function header variants: solib1.cAndreas Arnez2-9/+8
Clean up solib1.c by removing the #ifdef PROTOTYPES conditional. gdb/testsuite/ChangeLog: * gdb.base/solib1.c: Remove #ifdef PROTOTYPES, keep prototyped variant.
2014-11-13callfuncs.exp: Indent perform_all_tests()Andreas Arnez2-134/+138
The previous patch did not indent perform_all_tests() correctly after moving the main logic into it, to avoid obscuring the functional changes. This patch fixes the indentation. gdb/testsuite/ChangeLog: * gdb.base/callfuncs.exp (perform_all_tests): Re-indent.
2014-11-13Perform all tests in callfuncs.exp with and without C function prototypesAndreas Arnez2-44/+24
In callfuncs.exp, compile callfuncs.c with and without C function header prototypes and execute all tests after each compilation. gdb/testsuite/ChangeLog: * gdb.base/callfuncs.exp: Remove 'prototypes' variable. Move main logic into perform_all_tests() and invoke it with and without function header prototypes. (do_function_calls): Remove conditional XFAIL for PR 5318. (rerun_and_prepare): Remove duplicate code. (perform_all_tests): New. Main logic moved here.
2014-11-13'callfuncs' test case: Fixes in conditionally compiled codeAndreas Arnez2-14/+16
The C source file for the 'callfuncs' test case did not compile with -DNO_PROTOTYPES or -DPROTOTYPES. This patch fixes various syntax errors under #ifdef NO_PROTOTYPES and a small typo under #ifdef PROTOTYPES. gdb/testsuite/ChangeLog: * gdb.base/callfuncs.c (t_float_many_args): Fix syntax error in code guarded by #ifdef NO_PROTOTYPES. (t_double_many_args): Likewise. (DEF_FUNC_MANY_ARGS_1): Likewise. (DEF_FUNC_VALUES_1): Likewise. (t_structs_ldc): Renamed from t_structs_fc in conditional code guarded by #ifdef PROTOTYPES.
2014-11-13Eliminate literal line numbers in mi-console.expAndreas Arnez3-2/+9
Remove the literal line number from a regexp in mi-console.exp. Add an appropriate eye-catcher to mi-console.c and refer to that instead. gdb/testsuite/ChangeLog: * gdb.mi/mi-console.c: Add eye-catcher. * gdb.mi/mi-console.exp (semihosted_string): Refer to eye-catcher instead of literal line number.
2014-11-13Eliminate literal line numbers in shlib-call.expAndreas Arnez3-2/+8
Remove the literal line number from a regexp in shlib-call.exp. Add an appropriate eye-catcher to shr2.c and refer to that instead. gdb/testsuite/ChangeLog: * gdb.base/shr2.c: Add eye-catcher. * gdb.base/shlib-call.exp: Refer to eye-catcher instead of literal line number.