diff --git a/.gitignore b/.gitignore index 1b7ea00..80d07b6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ insight-6.8-1.tar.bz2 /insight-7.4.50.tar.xz /insight-7.8.50.20140827.tar.bz2 /insight-7.10.50.20160208.tar.xz +/insight-7.12.50.20170416.tar.xz diff --git a/gdb-6.3-readnever-20050907.patch b/gdb-6.3-readnever-20050907.patch deleted file mode 100644 index ef8cf51..0000000 --- a/gdb-6.3-readnever-20050907.patch +++ /dev/null @@ -1,96 +0,0 @@ -2004-11-18 Andrew Cagney - - * dwarf2read.c: Include "top.c". - (dwarf2_has_info): Check for readnever_symbol_files. - * symfile.c (readnever_symbol_files): Define. - * top.h (readnever_symbol_files): Declare. - * main.c (captured_main): Add --readnever option. - (print_gdb_help): Ditto. - -2004-11-18 Andrew Cagney - - * gdb.texinfo (File Options): Document --readnever. - -Index: gdb-7.10.50.20151022/gdb/doc/gdb.texinfo -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/doc/gdb.texinfo 2015-10-22 22:16:50.483482288 +0200 -+++ gdb-7.10.50.20151022/gdb/doc/gdb.texinfo 2015-10-22 22:28:22.042554142 +0200 -@@ -1032,6 +1032,12 @@ Read each symbol file's entire symbol ta - the default, which is to read it incrementally as it is needed. - This makes startup slower, but makes future operations faster. - -+@item --readnever -+@cindex @code{--readnever} -+Do not read each symbol file's symbolic debug information. This makes -+startup faster but at the expense of not being able to perform -+symbolic debugging. -+ - @end table - - @node Mode Options -Index: gdb-7.10.50.20151022/gdb/main.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/main.c 2015-10-22 22:16:50.485482299 +0200 -+++ gdb-7.10.50.20151022/gdb/main.c 2015-10-22 22:28:22.042554142 +0200 -@@ -604,6 +604,7 @@ captured_main (void *data) - {"tui", no_argument, 0, OPT_TUI}, - {"dbx", no_argument, &dbx_commands, 1}, - {"readnow", no_argument, &readnow_symbol_files, 1}, -+ {"readnever", no_argument, &readnever_symbol_files, 1}, - {"r", no_argument, &readnow_symbol_files, 1}, - {"quiet", no_argument, &quiet, 1}, - {"q", no_argument, &quiet, 1}, -@@ -1253,6 +1254,7 @@ Selection of debuggee and its files:\n\n - --se=FILE Use FILE as symbol file and executable file.\n\ - --symbols=SYMFILE Read symbols from SYMFILE.\n\ - --readnow Fully read symbol files on first access.\n\ -+ --readnever Do not read symbol files.\n\ - --write Set writing into executable and core files.\n\n\ - "), stream); - fputs_unfiltered (_("\ -Index: gdb-7.10.50.20151022/gdb/symfile.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/symfile.c 2015-10-22 22:16:50.486482305 +0200 -+++ gdb-7.10.50.20151022/gdb/symfile.c 2015-10-22 22:28:22.043554148 +0200 -@@ -80,6 +80,7 @@ static void clear_symtab_users_cleanup ( - - /* Global variables owned by this file. */ - int readnow_symbol_files; /* Read full symbols immediately. */ -+int readnever_symbol_files; /* Never read full symbols. */ - - /* Functions this file defines. */ - -Index: gdb-7.10.50.20151022/gdb/dwarf2read.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/dwarf2read.c 2015-10-22 22:28:22.046554165 +0200 -+++ gdb-7.10.50.20151022/gdb/dwarf2read.c 2015-10-22 22:29:17.664881642 +0200 -@@ -70,6 +70,7 @@ - #include "filestuff.h" - #include "build-id.h" - #include "namespace.h" -+#include "top.h" - - #include - #include -@@ -2059,7 +2060,8 @@ dwarf2_has_info (struct objfile *objfile - (void *) names); - dwarf2_per_objfile->objfile = objfile; - } -- return (!dwarf2_per_objfile->info.is_virtual -+ return !readnever_symbol_files && -+ (!dwarf2_per_objfile->info.is_virtual - && dwarf2_per_objfile->info.s.section != NULL - && !dwarf2_per_objfile->abbrev.is_virtual - && dwarf2_per_objfile->abbrev.s.section != NULL); -Index: gdb-7.10.50.20151022/gdb/top.h -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/top.h 2015-10-22 22:16:50.490482329 +0200 -+++ gdb-7.10.50.20151022/gdb/top.h 2015-10-22 22:28:22.047554171 +0200 -@@ -74,6 +74,7 @@ extern int gdb_in_secondary_prompt_p (vo - - /* From random places. */ - extern int readnow_symbol_files; -+extern int readnever_symbol_files; - - /* Perform _initialize initialization. */ - extern void gdb_init (char *); diff --git a/gdb-6.3-rh-dummykfail-20041202.patch b/gdb-6.3-rh-dummykfail-20041202.patch new file mode 100644 index 0000000..1f0bc9d --- /dev/null +++ b/gdb-6.3-rh-dummykfail-20041202.patch @@ -0,0 +1,22 @@ +2003-07-11 Elena Zannoni + + * lib/gdb.exp (setup_kfail, kfail): Redefine procedures. + +--- ./gdb/testsuite/lib/gdb.exp.1 2004-11-24 15:59:46.131394720 -0500 ++++ ./gdb/testsuite/lib/gdb.exp 2004-11-24 16:01:06.304206600 -0500 +@@ -63,6 +63,15 @@ + + ### Only procedures should come after this point. + ++if {![llength [info procs kfail]]} { ++ proc setup_kfail { args } { ++ #setup_xfail args ++ } ++ proc kfail { bugid message } { ++ fail $message ++ } ++} ++ + # + # gdb_version -- extract and print the version number of GDB + # diff --git a/gdb-6.3-rh-testversion-20041202.patch b/gdb-6.3-rh-testversion-20041202.patch new file mode 100644 index 0000000..8b9a4bf --- /dev/null +++ b/gdb-6.3-rh-testversion-20041202.patch @@ -0,0 +1,19 @@ +2003-02-24 Elena Zannoni + + * gdb.gdb/selftest.exp: Add matching on specific Red Hat only version + string. + +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.gdb/selftest.exp +=================================================================== +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.gdb/selftest.exp 2017-02-07 19:47:06.472874620 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.gdb/selftest.exp 2017-02-07 19:48:12.593380575 +0100 +@@ -53,6 +53,9 @@ + -re ".\[0-9\]+ = +.+ +0x.*\[0-9.\]+.*$gdb_prompt $" { + pass "printed version with cast" + } ++ -re ".\[0-9\]+ = .(Fedora|Red Hat Enterprise Linux) \[\\(\\)0-9.a-z\\-\]+.*$gdb_prompt $" { ++ pass "printed version Fedora or Red Hat Enterprise Linux only" ++ } + } + + # start the "xgdb" process diff --git a/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch b/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch index 7cb307a..aa1a646 100644 --- a/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch +++ b/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch @@ -34,11 +34,11 @@ glibc-debuginfo-2.7-2.x86_64: /usr/lib/debug/lib64/libc.so.6.debug: <81a2> DW_AT_name : (indirect string, offset: 0x280e): __errno_location <81a8> DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location -Index: gdb-7.8.1/gdb/printcmd.c +Index: gdb-7.12.50.20170207/gdb/printcmd.c =================================================================== ---- gdb-7.8.1.orig/gdb/printcmd.c 2014-11-21 19:05:44.699959209 +0100 -+++ gdb-7.8.1/gdb/printcmd.c 2014-11-21 19:05:44.868959291 +0100 -@@ -980,6 +980,10 @@ print_command_1 (const char *exp, int vo +--- gdb-7.12.50.20170207.orig/gdb/printcmd.c 2017-02-07 21:06:20.196593884 +0100 ++++ gdb-7.12.50.20170207/gdb/printcmd.c 2017-02-07 21:07:10.230973906 +0100 +@@ -1258,6 +1258,10 @@ if (exp && *exp) { @@ -46,13 +46,13 @@ Index: gdb-7.8.1/gdb/printcmd.c + function descriptors. */ + if (target_has_execution && strcmp (exp, "errno") == 0) + exp = "*(*(int *(*)(void)) __errno_location) ()"; - expr = parse_expression (exp); - make_cleanup (free_current_contents, &expr); - val = evaluate_expression (expr); -Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno.c + expression_up expr = parse_expression (exp); + val = evaluate_expression (expr.get ()); + } +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2014-11-21 19:05:44.869959291 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2017-02-07 21:06:20.196593884 +0100 @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -82,10 +82,10 @@ Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno.c + + return 0; /* breakpoint */ +} -Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2014-11-21 19:05:44.869959291 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2017-02-07 21:06:20.196593884 +0100 @@ -0,0 +1,60 @@ +# Copyright 2007 Free Software Foundation, Inc. + @@ -104,7 +104,7 @@ Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno.exp + +set testfile dw2-errno +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] + +proc prep {} { + global srcdir subdir binfile @@ -147,10 +147,10 @@ Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno.exp + +# TODO: Test the error on resolving ERRNO with only libc loaded. +# Just how to find the current libc filename? -Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno2.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno2.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno2.c 2014-11-21 19:05:44.869959291 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno2.c 2017-02-07 21:06:20.196593884 +0100 @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -180,10 +180,10 @@ Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno2.c + + return 0; /* breakpoint */ +} -Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp 2014-11-21 19:13:01.553171326 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp 2017-02-07 21:06:20.197593892 +0100 @@ -0,0 +1,71 @@ +# Copyright 2007 Free Software Foundation, Inc. + @@ -202,7 +202,7 @@ Index: gdb-7.8.1/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp + +set testfile dw2-errno2 +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] + +proc prep { message {do_xfail 0} } { with_test_prefix $message { + global srcdir subdir binfile variant diff --git a/gdb-6.5-bz216711-clone-is-outermost.patch b/gdb-6.5-bz216711-clone-is-outermost.patch index 1554837..657eeb4 100644 --- a/gdb-6.5-bz216711-clone-is-outermost.patch +++ b/gdb-6.5-bz216711-clone-is-outermost.patch @@ -23,10 +23,10 @@ instead. Port to GDB-6.7. -Index: gdb-7.10.50.20160121/gdb/amd64-linux-tdep.c +Index: gdb-7.10.90.20160211/gdb/amd64-linux-tdep.c =================================================================== ---- gdb-7.10.50.20160121.orig/gdb/amd64-linux-tdep.c 2016-01-22 17:19:01.945819383 +0100 -+++ gdb-7.10.50.20160121/gdb/amd64-linux-tdep.c 2016-01-22 17:21:54.609855292 +0100 +--- gdb-7.10.90.20160211.orig/gdb/amd64-linux-tdep.c 2016-02-15 23:37:06.936501443 +0100 ++++ gdb-7.10.90.20160211/gdb/amd64-linux-tdep.c 2016-02-15 23:37:39.928735691 +0100 @@ -292,6 +292,80 @@ /* Set the program counter for process PTID to PC. */ @@ -117,10 +117,10 @@ Index: gdb-7.10.50.20160121/gdb/amd64-linux-tdep.c /* Add the %orig_rax register used for syscall restarting. */ set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc); -Index: gdb-7.10.50.20160121/gdb/amd64-tdep.c +Index: gdb-7.10.90.20160211/gdb/amd64-tdep.c =================================================================== ---- gdb-7.10.50.20160121.orig/gdb/amd64-tdep.c 2016-01-22 17:19:01.945819383 +0100 -+++ gdb-7.10.50.20160121/gdb/amd64-tdep.c 2016-01-22 17:21:54.610855298 +0100 +--- gdb-7.10.90.20160211.orig/gdb/amd64-tdep.c 2016-02-15 23:37:06.936501443 +0100 ++++ gdb-7.10.90.20160211/gdb/amd64-tdep.c 2016-02-15 23:37:39.929735698 +0100 @@ -2494,6 +2494,7 @@ { struct amd64_frame_cache *cache = @@ -160,10 +160,10 @@ Index: gdb-7.10.50.20160121/gdb/amd64-tdep.c else (*this_id) = frame_id_build (cache->base + 16, get_frame_pc (this_frame)); } -Index: gdb-7.10.50.20160121/gdb/i386-tdep.c +Index: gdb-7.10.90.20160211/gdb/i386-tdep.c =================================================================== ---- gdb-7.10.50.20160121.orig/gdb/i386-tdep.c 2016-01-22 17:19:01.945819383 +0100 -+++ gdb-7.10.50.20160121/gdb/i386-tdep.c 2016-01-22 17:21:54.612855310 +0100 +--- gdb-7.10.90.20160211.orig/gdb/i386-tdep.c 2016-02-15 23:37:06.936501443 +0100 ++++ gdb-7.10.90.20160211/gdb/i386-tdep.c 2016-02-15 23:37:39.931735713 +0100 @@ -8305,6 +8305,9 @@ tdep->xsave_xcr0_offset = -1; @@ -174,10 +174,10 @@ Index: gdb-7.10.50.20160121/gdb/i386-tdep.c tdep->record_regmap = i386_record_regmap; set_gdbarch_long_long_align_bit (gdbarch, 32); -Index: gdb-7.10.50.20160121/gdb/i386-tdep.h +Index: gdb-7.10.90.20160211/gdb/i386-tdep.h =================================================================== ---- gdb-7.10.50.20160121.orig/gdb/i386-tdep.h 2016-01-22 17:19:01.945819383 +0100 -+++ gdb-7.10.50.20160121/gdb/i386-tdep.h 2016-01-22 17:21:54.612855310 +0100 +--- gdb-7.10.90.20160211.orig/gdb/i386-tdep.h 2016-02-15 23:37:06.936501443 +0100 ++++ gdb-7.10.90.20160211/gdb/i386-tdep.h 2016-02-15 23:37:39.932735720 +0100 @@ -240,6 +240,9 @@ /* Regsets. */ @@ -188,10 +188,10 @@ Index: gdb-7.10.50.20160121/gdb/i386-tdep.h }; /* Floating-point registers. */ -Index: gdb-7.10.50.20160121/gdb/testsuite/gdb.threads/bt-clone-stop.c +Index: gdb-7.10.90.20160211/gdb/testsuite/gdb.threads/bt-clone-stop.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20160121/gdb/testsuite/gdb.threads/bt-clone-stop.c 2016-01-22 17:21:54.612855310 +0100 ++++ gdb-7.10.90.20160211/gdb/testsuite/gdb.threads/bt-clone-stop.c 2016-02-15 23:37:39.932735720 +0100 @@ -0,0 +1,39 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -232,10 +232,10 @@ Index: gdb-7.10.50.20160121/gdb/testsuite/gdb.threads/bt-clone-stop.c + for (;;) + pause(); +} -Index: gdb-7.10.50.20160121/gdb/testsuite/gdb.threads/bt-clone-stop.exp +Index: gdb-7.10.90.20160211/gdb/testsuite/gdb.threads/bt-clone-stop.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20160121/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2016-01-22 17:23:42.188497347 +0100 ++++ gdb-7.10.90.20160211/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2016-02-15 23:37:56.197851204 +0100 @@ -0,0 +1,61 @@ +# Copyright 2006 Free Software Foundation, Inc. + @@ -261,7 +261,7 @@ Index: gdb-7.10.50.20160121/gdb/testsuite/gdb.threads/bt-clone-stop.exp + +set testfile bt-clone-stop +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] +if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested "Couldn't compile test program" + return -1 diff --git a/gdb-6.6-buildid-locate-core-as-arg.patch b/gdb-6.6-buildid-locate-core-as-arg.patch deleted file mode 100644 index 523b7e0..0000000 --- a/gdb-6.6-buildid-locate-core-as-arg.patch +++ /dev/null @@ -1,197 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2010-01/msg00558.html -Subject: Re: [patch] print a more useful error message for "gdb core" - -[ Fixed up since the mail. ] - -On Thu, 21 Jan 2010 18:17:15 +0100, Doug Evans wrote: -> Not an exhaustive list, but if we go down the path of converting "gdb -> corefile" to "gdb -c corefile", then we also need to think about "file -> corefile" being converted to "core corefile" [or "target core -> corefile", "core" is apparently deprecated in favor of "target core"] -> and "target exec corefile" -> "target core corefile". Presumably -> "file corefile" (and "target exec corefile") would discard the -> currently selected executable. But maybe not. Will that be confusing -> for users? I don't know. - -While thinking about it overriding some GDB _commands_ was not my intention. - -There is a general assumption if I have a shell COMMAND and some FILE I can do -$ COMMAND FILE -and COMMAND will appropriately load the FILE. - -FSF GDB currently needs to specify also the executable file for core files -which already inhibits this intuitive expectation. OTOH with the build-id -locating patch which could allow such intuitive start notneeding the -executable file. Still it currently did not work due to the required "-c": -$ COMMAND -c COREFILE - -Entering "file", "core-file" or "attach" commands is already explicit enough -so that it IMO should do what the command name says without any -autodetections. The second command line argument -(captured_main->pid_or_core_arg) is also autodetected (for PID or CORE) but -neither "attach" accepts a core file nor "core-file" accepts a PID. - - -The patch makes sense only with the build-id patchset so this is not submit -for FSF GDB inclusion yet. I am fine with your patch (+/- Hui Zhu's pending -bfd_check_format_matches) as the patch below is its natural extension. - - -Sorry for the delay, -Jan - - -2010-01-25 Jan Kratochvil - - * exceptions.h (enum errors ): New. - * exec.c: Include exceptions.h. - (exec_file_attach ): Call throw_error (IS_CORE_ERROR, ...). - * main.c (exec_or_core_file_attach): New. - (captured_main ): Set also corearg. - (captured_main ): New variable func. - Call exec_or_core_file_attach if COREARG matches EXECARG. Call - symbol_file_add_main only if CORE_BFD remained NULL. - -Http://sourceware.org/ml/gdb-patches/2010-01/msg00517.html -2010-01-20 Doug Evans - - * exec.c (exec_file_attach): Print a more useful error message if the - user did "gdb core". - -Index: gdb-7.9.50.20150531/gdb/exec.c -=================================================================== ---- gdb-7.9.50.20150531.orig/gdb/exec.c 2015-05-31 03:48:29.000000000 +0200 -+++ gdb-7.9.50.20150531/gdb/exec.c 2015-05-31 20:07:35.092878685 +0200 -@@ -35,6 +35,7 @@ - #include "progspace.h" - #include "gdb_bfd.h" - #include "gcore.h" -+#include "exceptions.h" - - #include - #include "readline/readline.h" -@@ -298,12 +299,27 @@ exec_file_attach (const char *filename, - - if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching)) - { -+ int is_core; -+ -+ /* If the user accidentally did "gdb core", print a useful -+ error message. Check it only after bfd_object has been checked as -+ a valid executable may get recognized for example also as -+ "trad-core". */ -+ is_core = bfd_check_format (exec_bfd, bfd_core); -+ - /* Make sure to close exec_bfd, or else "run" might try to use - it. */ - exec_close (); -- error (_("\"%s\": not in executable format: %s"), -- scratch_pathname, -- gdb_bfd_errmsg (bfd_get_error (), matching)); -+ -+ if (is_core != 0) -+ throw_error (IS_CORE_ERROR, -+ _("\"%s\" is a core file.\n" -+ "Please specify an executable to debug."), -+ scratch_pathname); -+ else -+ error (_("\"%s\": not in executable format: %s"), -+ scratch_pathname, -+ gdb_bfd_errmsg (bfd_get_error (), matching)); - } - - if (build_section_table (exec_bfd, §ions, §ions_end)) -Index: gdb-7.9.50.20150531/gdb/main.c -=================================================================== ---- gdb-7.9.50.20150531.orig/gdb/main.c 2015-05-31 20:07:34.183872824 +0200 -+++ gdb-7.9.50.20150531/gdb/main.c 2015-05-31 20:10:05.095845935 +0200 -@@ -435,6 +435,37 @@ typedef struct cmdarg { - /* Define type VEC (cmdarg_s). */ - DEF_VEC_O (cmdarg_s); - -+/* Call exec_file_attach. If it detected FILENAME is a core file call -+ core_file_command. Print the original exec_file_attach error only if -+ core_file_command failed to find a matching executable. */ -+ -+static void -+exec_or_core_file_attach (const char *filename, int from_tty) -+{ -+ volatile struct gdb_exception e; -+ -+ gdb_assert (exec_bfd == NULL); -+ -+ TRY -+ { -+ exec_file_attach (filename, from_tty); -+ } -+ CATCH (e, RETURN_MASK_ALL) -+ { -+ if (e.error == IS_CORE_ERROR) -+ { -+ core_file_command ((char *) filename, from_tty); -+ -+ /* Iff the core file found its executable suppress the error message -+ from exec_file_attach. */ -+ if (exec_bfd != NULL) -+ return; -+ } -+ throw_exception (e); -+ } -+ END_CATCH -+} -+ - static int - captured_main (void *data) - { -@@ -923,6 +954,8 @@ captured_main (void *data) - { - symarg = argv[optind]; - execarg = argv[optind]; -+ if (optind + 1 == argc && corearg == NULL) -+ corearg = argv[optind]; - optind++; - } - -@@ -1080,11 +1113,25 @@ captured_main (void *data) - && symarg != NULL - && strcmp (execarg, symarg) == 0) - { -+ catch_command_errors_const_ftype *func; -+ -+ /* Call exec_or_core_file_attach only if the file was specified as -+ a command line argument (and not an a command line option). */ -+ if (corearg != NULL && strcmp (corearg, execarg) == 0) -+ { -+ func = exec_or_core_file_attach; -+ corearg = NULL; -+ } -+ else -+ func = exec_file_attach; -+ - /* The exec file and the symbol-file are the same. If we can't - open it, better only print one error message. -- catch_command_errors returns non-zero on success! */ -- if (catch_command_errors_const (exec_file_attach, execarg, -- !batch_flag)) -+ catch_command_errors returns non-zero on success! -+ Do not load EXECARG as a symbol file if it has been already processed -+ as a core file. */ -+ if (catch_command_errors_const (func, execarg, !batch_flag) -+ && core_bfd == NULL) - catch_command_errors_const (symbol_file_add_main, symarg, - !batch_flag); - } -Index: gdb-7.9.50.20150531/gdb/common/common-exceptions.h -=================================================================== ---- gdb-7.9.50.20150531.orig/gdb/common/common-exceptions.h 2015-05-31 03:48:29.000000000 +0200 -+++ gdb-7.9.50.20150531/gdb/common/common-exceptions.h 2015-05-31 20:07:35.093878692 +0200 -@@ -105,6 +105,9 @@ enum errors { - "_ERROR" is appended to the name. */ - MAX_COMPLETIONS_REACHED_ERROR, - -+ /* Attempt to load a core file as executable. */ -+ IS_CORE_ERROR, -+ - /* Add more errors here. */ - NR_ERRORS - }; diff --git a/gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch b/gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch index b3750cd..32f2a83 100644 --- a/gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch +++ b/gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch @@ -15,10 +15,10 @@ Comments by Sergio Durigan Junior : NULL after it is free'd, otherwise the code below thinks that it is still valid and doesn't print the necessary warning ("Try: yum install ..."). -Index: gdb-7.9.90.20150709/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-install-warning.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-install-warning.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.9.90.20150709/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-install-warning.exp 2015-07-09 22:22:26.278304653 +0200 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-install-warning.exp 2017-02-26 19:14:58.492609659 +0100 @@ -0,0 +1,97 @@ +# Copyright (C) 2014 Free Software Foundation, Inc. + @@ -51,9 +51,9 @@ Index: gdb-7.9.90.20150709/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-inst +} + +# We first need to generate a corefile -+set escapedfilename [string_to_regexp ${objdir}/${subdir}/gcore.test] ++set escapedfilename [string_to_regexp [standard_output_file gcore.test]] +set core_supported 0 -+gdb_test_multiple "gcore ${objdir}/${subdir}/gcore.test" \ ++gdb_test_multiple "gcore [standard_output_file gcore.test]" \ + "save a corefile" \ +{ + -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" { @@ -84,19 +84,19 @@ Index: gdb-7.9.90.20150709/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-inst + gdb_test "set build-id-verbose 1" "" \ + "set build-id-verbose" + -+ gdb_test "set debug-file-directory ${objdir}/${subdir}" "" \ ++ gdb_test "set debug-file-directory [file dirname [standard_output_file gcore.test]]" "" \ + "set debug-file-directory" + -+ gdb_test "core-file ${objdir}/${subdir}/gcore.test" \ -+ "Missing separate debuginfo for the main executable file\r\nTry: (yum|dnf) --enablerepo='\\*debug\\*' install $objdir/$subdir/$build_id_without_debug\r\n.*" \ ++ gdb_test "core-file [standard_output_file gcore.test]" \ ++ "Missing separate debuginfo for the main executable file\r\nTry: (yum|dnf) --enablerepo='\\*debug\\*' install [standard_output_file $build_id_without_debug]\r\n.*" \ + "test first yum/dnf warning" +} + +# Now we define and create our .build-id -+file mkdir [file dirname ${objdir}/${subdir}/${build_id_without_debug}] ++file mkdir [file dirname [standard_output_file ${build_id_without_debug}]] +# Cannot use "file link" (from TCL) because it requires the target file to +# exist. -+remote_exec build "ln -s $binfile ${objdir}/${subdir}/${build_id_without_debug}" ++remote_exec build "ln -s $binfile [standard_output_file ${build_id_without_debug}]" + +# Reinitialize GDB to get the second yum/dnf warning +gdb_exit @@ -107,21 +107,21 @@ Index: gdb-7.9.90.20150709/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-inst + gdb_test "set build-id-verbose 1" "" \ + "set build-id-verbose" + -+ gdb_test "set debug-file-directory ${objdir}/${subdir}" "" \ ++ gdb_test "set debug-file-directory [file dirname [standard_output_file gcore.test]]" "" \ + "set debug-file-directory" + -+ gdb_test "core-file ${objdir}/${subdir}/gcore.test" \ ++ gdb_test "core-file [standard_output_file gcore.test]" \ + "Missing separate debuginfo for the main executable file\r\nTry: (yum|dnf) --enablerepo='\\*debug\\*' install $binfile\r\n.*" \ + "test second yum/dnf warning" +} + +# Leaving the link there will cause breakage in the next run. -+remote_exec build "rm -f ${objdir}/${subdir}/${build_id_without_debug}" -Index: gdb-7.9.90.20150709/gdb/build-id.c ++remote_exec build "rm -f [standard_output_file ${build_id_without_debug}]" +Index: gdb-7.12.50.20170207/gdb/build-id.c =================================================================== ---- gdb-7.9.90.20150709.orig/gdb/build-id.c 2015-07-09 22:22:26.278304653 +0200 -+++ gdb-7.9.90.20150709/gdb/build-id.c 2015-07-09 22:22:51.398502329 +0200 -@@ -589,7 +589,10 @@ build_id_to_debug_bfd (size_t build_id_l +--- gdb-7.12.50.20170207.orig/gdb/build-id.c 2017-02-26 19:14:51.943562799 +0100 ++++ gdb-7.12.50.20170207/gdb/build-id.c 2017-02-26 19:14:58.492609659 +0100 +@@ -589,7 +589,10 @@ do_cleanups (inner); if (abfd == NULL) @@ -131,5 +131,5 @@ Index: gdb-7.9.90.20150709/gdb/build-id.c + continue; + } - if (build_id_verify (abfd, build_id_len, build_id)) + if (build_id_verify (abfd.get(), build_id_len, build_id)) break; diff --git a/gdb-6.6-buildid-locate-solib-missing-ids.patch b/gdb-6.6-buildid-locate-solib-missing-ids.patch index a89893c..f4dccc9 100644 --- a/gdb-6.6-buildid-locate-solib-missing-ids.patch +++ b/gdb-6.6-buildid-locate-solib-missing-ids.patch @@ -1,3 +1,6 @@ +gdb returns an incorrect back trace when applying a debuginfo +https://bugzilla.redhat.com/show_bug.cgi?id=1339862 + Index: gdb-7.9.90.20150709/gdb/solib-svr4.c =================================================================== --- gdb-7.9.90.20150709.orig/gdb/solib-svr4.c 2015-07-09 18:18:54.526417766 +0200 @@ -57,3 +60,163 @@ Index: gdb-7.9.90.20150709/gdb/solib-svr4.c xfree (build_id_filename); xfree (build_id); +--- /dev/null 2016-07-02 20:29:01.679404943 +0200 ++++ gdb-7.11.50.20160721/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp 2016-07-31 23:04:49.062753722 +0200 +@@ -0,0 +1,105 @@ ++# Copyright 2016 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 . ++ ++if {[skip_shlib_tests]} { ++ return 0 ++} ++ ++set testfile "gcore-buildid-exec-but-not-solib" ++set srcmainfile ${testfile}-main.c ++set srclibfile ${testfile}-lib.c ++set libfile [standard_output_file ${testfile}-lib.so] ++set objfile [standard_output_file ${testfile}-main.o] ++set executable ${testfile}-main ++set binfile [standard_output_file ${executable}] ++set gcorefile [standard_output_file ${executable}.gcore] ++set outdir [file dirname $binfile] ++ ++if { [gdb_compile_shlib ${srcdir}/${subdir}/${srclibfile} ${libfile} "debug additional_flags=-Wl,--build-id"] != "" ++ || [gdb_compile ${srcdir}/${subdir}/${srcmainfile} ${objfile} object {debug}] != "" } { ++ unsupported "-Wl,--build-id compilation failed" ++ return -1 ++} ++set opts [list debug shlib=${libfile} "additional_flags=-Wl,--build-id"] ++if { [gdb_compile ${objfile} ${binfile} executable $opts] != "" } { ++ unsupported "-Wl,--build-id compilation failed" ++ return -1 ++} ++ ++clean_restart $executable ++gdb_load_shlib $libfile ++ ++# Does this gdb support gcore? ++set test "help gcore" ++gdb_test_multiple $test $test { ++ -re "Undefined command: .gcore.*\r\n$gdb_prompt $" { ++ # gcore command not supported -- nothing to test here. ++ unsupported "gdb does not support gcore on this target" ++ return -1; ++ } ++ -re "Save a core file .*\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++ ++if { ![runto lib] } then { ++ return -1 ++} ++ ++set escapedfilename [string_to_regexp ${gcorefile}] ++ ++set test "save a corefile" ++gdb_test_multiple "gcore ${gcorefile}" $test { ++ -re "Saved corefile ${escapedfilename}\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "Can't create a corefile\r\n$gdb_prompt $" { ++ unsupported $test ++ return -1 ++ } ++} ++ ++# Now restart gdb and load the corefile. ++ ++clean_restart $executable ++gdb_load_shlib $libfile ++ ++set buildid [build_id_debug_filename_get $libfile] ++ ++regsub {\.debug$} $buildid {} buildid ++ ++set debugdir [standard_output_file ${testfile}-debugdir] ++file delete -force -- $debugdir ++ ++file mkdir $debugdir/[file dirname $libfile] ++file copy $libfile $debugdir/${libfile} ++ ++file mkdir $debugdir/[file dirname $buildid] ++file copy $libfile $debugdir/${buildid} ++ ++remote_exec build "ln -s /lib ${debugdir}/" ++remote_exec build "ln -s /lib64 ${debugdir}/" ++# /usr is not needed, all the libs are in /lib64: libm.so.6 libc.so.6 ld-linux-x86-64.so.2 ++ ++gdb_test "set solib-absolute-prefix $debugdir" ++ ++gdb_test_no_output "set debug-file-directory $debugdir" "set debug-file-directory" ++ ++gdb_test "core ${gcorefile}" "Core was generated by .*" "re-load generated corefile" ++ ++gdb_test "frame" "#0 \[^\r\n\]* lib .*" "library got loaded" ++ ++gdb_test "bt" ++gdb_test "info shared" +--- /dev/null 2016-07-02 20:29:01.679404943 +0200 ++++ gdb-7.11.50.20160721/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-main.c 2016-07-28 21:06:40.977786922 +0200 +@@ -0,0 +1,25 @@ ++/* Copyright 2010 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 . */ ++ ++extern void lib (void); ++ ++int ++main (void) ++{ ++ lib (); ++ return 0; ++} +--- /dev/null 2016-07-02 20:29:01.679404943 +0200 ++++ gdb-7.11.50.20160721/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c 2016-07-28 21:06:40.977786922 +0200 +@@ -0,0 +1,21 @@ ++/* Copyright 2010 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 . */ ++ ++void ++lib (void) ++{ ++} diff --git a/gdb-6.6-buildid-locate.patch b/gdb-6.6-buildid-locate.patch deleted file mode 100644 index 679c0f5..0000000 --- a/gdb-6.6-buildid-locate.patch +++ /dev/null @@ -1,1254 +0,0 @@ -Index: gdb-7.10.50.20151022/gdb/corelow.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/corelow.c 2015-10-22 22:30:46.226403087 +0200 -+++ gdb-7.10.50.20151022/gdb/corelow.c 2015-10-22 22:30:49.266420986 +0200 -@@ -45,6 +45,10 @@ - #include "gdb_bfd.h" - #include "completer.h" - #include "filestuff.h" -+#include "auxv.h" -+#include "elf/common.h" -+#include "gdbcmd.h" -+#include "build-id.h" - - #ifndef O_LARGEFILE - #define O_LARGEFILE 0 -@@ -266,6 +270,53 @@ add_to_thread_list (bfd *abfd, asection - inferior_ptid = ptid; /* Yes, make it current. */ - } - -+static int build_id_core_loads = 1; -+ -+static void -+build_id_locate_exec (int from_tty) -+{ -+ CORE_ADDR at_entry; -+ struct bfd_build_id *build_id; -+ char *execfilename, *debug_filename; -+ char *build_id_filename; -+ struct cleanup *back_to; -+ -+ if (exec_bfd != NULL || symfile_objfile != NULL) -+ return; -+ -+ if (target_auxv_search (¤t_target, AT_ENTRY, &at_entry) <= 0) -+ return; -+ -+ build_id = build_id_addr_get (at_entry); -+ if (build_id == NULL) -+ return; -+ back_to = make_cleanup (xfree, build_id); -+ -+ /* SYMFILE_OBJFILE should refer to the main executable (not only to its -+ separate debug info file). gcc44+ keeps .eh_frame only in the main -+ executable without its duplicate .debug_frame in the separate debug info -+ file - such .eh_frame would not be found if SYMFILE_OBJFILE would refer -+ directly to the separate debug info file. */ -+ -+ execfilename = build_id_to_filename (build_id, &build_id_filename); -+ make_cleanup (xfree, build_id_filename); -+ -+ if (execfilename != NULL) -+ { -+ make_cleanup (xfree, execfilename); -+ exec_file_attach (execfilename, from_tty); -+ symbol_file_add_main (execfilename, from_tty); -+ if (symfile_objfile != NULL) -+ symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED; -+ } -+ else -+ debug_print_missing (_("the main executable file"), build_id_filename); -+ -+ do_cleanups (back_to); -+ -+ /* No automatic SOLIB_ADD as the libraries would get read twice. */ -+} -+ - /* This routine opens and sets up the core file bfd. */ - - static void -@@ -404,6 +455,14 @@ core_open (const char *arg, int from_tty - switch_to_thread (thread->ptid); - } - -+ /* Find the build_id identifiers. If it gets executed after -+ POST_CREATE_INFERIOR we would clash with asking to discard the already -+ loaded VDSO symbols. If it gets executed before bfd_map_over_sections -+ INFERIOR_PTID is still not set and libthread_db initialization crashes on -+ PID == 0 in ps_pglobal_lookup. */ -+ if (build_id_core_loads != 0) -+ build_id_locate_exec (from_tty); -+ - post_create_inferior (&core_ops, from_tty); - - /* Now go through the target stack looking for threads since there -@@ -1058,4 +1117,11 @@ _initialize_corelow (void) - init_core_ops (); - - add_target_with_completer (&core_ops, filename_completer); -+ -+ add_setshow_boolean_cmd ("build-id-core-loads", class_files, -+ &build_id_core_loads, _("\ -+Set whether CORE-FILE loads the build-id associated files automatically."), _("\ -+Show whether CORE-FILE loads the build-id associated files automatically."), -+ NULL, NULL, NULL, -+ &setlist, &showlist); - } -Index: gdb-7.10.50.20151022/gdb/doc/gdb.texinfo -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/doc/gdb.texinfo 2015-10-22 22:30:46.233403128 +0200 -+++ gdb-7.10.50.20151022/gdb/doc/gdb.texinfo 2015-10-22 22:30:49.271421015 +0200 -@@ -18495,6 +18495,27 @@ information files. - - @end table - -+You can also adjust the current verbosity of the @dfn{build id} locating. -+ -+@table @code -+ -+@kindex set build-id-verbose -+@item set build-id-verbose 0 -+No additional messages are printed. -+ -+@item set build-id-verbose 1 -+Missing separate debug filenames are printed. -+ -+@item set build-id-verbose 2 -+Missing separate debug filenames are printed and also all the parsing of the -+binaries to find their @dfn{build id} content is printed. -+ -+@kindex show build-id-verbose -+@item show build-id-verbose -+Show the current verbosity value for the @dfn{build id} content locating. -+ -+@end table -+ - @cindex @code{.gnu_debuglink} sections - @cindex debug link sections - A debug link is a special section of the executable file named -Index: gdb-7.10.50.20151022/gdb/solib-svr4.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/solib-svr4.c 2015-10-22 22:30:46.235403140 +0200 -+++ gdb-7.10.50.20151022/gdb/solib-svr4.c 2015-10-22 22:30:49.272421021 +0200 -@@ -45,6 +45,7 @@ - #include "auxv.h" - #include "gdb_bfd.h" - #include "probe.h" -+#include "build-id.h" - - static struct link_map_offsets *svr4_fetch_link_map_offsets (void); - static int svr4_have_link_map_offsets (void); -@@ -1416,9 +1417,52 @@ svr4_read_so_list (CORE_ADDR lm, CORE_AD - continue; - } - -- strncpy (newobj->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); -- newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; -- strcpy (newobj->so_original_name, newobj->so_name); -+ { -+ struct bfd_build_id *build_id; -+ -+ strncpy (newobj->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); -+ newobj->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; -+ /* May get overwritten below. */ -+ strcpy (newobj->so_name, newobj->so_original_name); -+ -+ build_id = build_id_addr_get (newobj->lm_info->l_ld); -+ if (build_id != NULL) -+ { -+ char *name, *build_id_filename; -+ -+ /* Missing the build-id matching separate debug info file -+ would be handled while SO_NAME gets loaded. */ -+ name = build_id_to_filename (build_id, &build_id_filename); -+ if (name != NULL) -+ { -+ strncpy (newobj->so_name, name, SO_NAME_MAX_PATH_SIZE - 1); -+ newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; -+ xfree (name); -+ } -+ else -+ { -+ debug_print_missing (newobj->so_name, build_id_filename); -+ -+ /* In the case the main executable was found according to -+ its build-id (from a core file) prevent loading -+ a different build of a library with accidentally the -+ same SO_NAME. -+ -+ It suppresses bogus backtraces (and prints "??" there -+ instead) if the on-disk files no longer match the -+ running program version. */ -+ -+ if (symfile_objfile != NULL -+ && (symfile_objfile->flags -+ & OBJF_BUILD_ID_CORE_LOADED) != 0) -+ newobj->so_name[0] = 0; -+ } -+ -+ xfree (build_id_filename); -+ xfree (build_id); -+ } -+ } -+ - xfree (buffer); - - /* If this entry has no name, or its name matches the name -Index: gdb-7.10.50.20151022/gdb/elfread.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/elfread.c 2015-10-22 22:30:46.235403140 +0200 -+++ gdb-7.10.50.20151022/gdb/elfread.c 2015-10-22 22:30:49.272421021 +0200 -@@ -1259,9 +1259,10 @@ elf_symfile_read (struct objfile *objfil - && objfile->separate_debug_objfile == NULL - && objfile->separate_debug_objfile_backlink == NULL) - { -- char *debugfile; -+ char *debugfile, *build_id_filename; - -- debugfile = find_separate_debug_file_by_buildid (objfile); -+ debugfile = find_separate_debug_file_by_buildid (objfile, -+ &build_id_filename); - - if (debugfile == NULL) - debugfile = find_separate_debug_file_by_debuglink (objfile); -@@ -1275,6 +1276,12 @@ elf_symfile_read (struct objfile *objfil - symbol_file_add_separate (abfd, debugfile, symfile_flags, objfile); - do_cleanups (cleanup); - } -+ /* Check if any separate debug info has been extracted out. */ -+ else if (bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink") -+ != NULL) -+ debug_print_missing (objfile_name (objfile), build_id_filename); -+ -+ xfree (build_id_filename); - } - } - -Index: gdb-7.10.50.20151022/gdb/symfile.h -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/symfile.h 2015-10-22 22:30:46.236403145 +0200 -+++ gdb-7.10.50.20151022/gdb/symfile.h 2015-10-22 22:30:49.273421027 +0200 -@@ -584,6 +584,10 @@ void expand_symtabs_matching (expand_sym - void map_symbol_filenames (symbol_filename_ftype *fun, void *data, - int need_fullname); - -+/* build-id support. */ -+extern struct bfd_build_id *build_id_addr_get (CORE_ADDR addr); -+extern void debug_print_missing (const char *binary, const char *debug); -+ - /* From dwarf2read.c */ - - /* Names for a dwarf2 debugging section. The field NORMAL is the normal -Index: gdb-7.10.50.20151022/gdb/testsuite/lib/gdb.exp -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/testsuite/lib/gdb.exp 2015-10-22 22:30:46.237403151 +0200 -+++ gdb-7.10.50.20151022/gdb/testsuite/lib/gdb.exp 2015-10-22 22:30:49.273421027 +0200 -@@ -1640,6 +1640,16 @@ proc default_gdb_start { } { - warning "Couldn't set the width to 0." - } - } -+ # Turn off the missing warnings as the testsuite does not expect it. -+ send_gdb "set build-id-verbose 0\n" -+ gdb_expect 10 { -+ -re "$gdb_prompt $" { -+ verbose "Disabled the missing debug infos warnings." 2 -+ } -+ timeout { -+ warning "Could not disable the missing debug infos warnings.." -+ } -+ } - return 0 - } - -Index: gdb-7.10.50.20151022/gdb/testsuite/lib/mi-support.exp -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/testsuite/lib/mi-support.exp 2015-10-22 22:30:49.274421033 +0200 -+++ gdb-7.10.50.20151022/gdb/testsuite/lib/mi-support.exp 2015-10-22 22:31:24.869631575 +0200 -@@ -204,6 +204,16 @@ proc default_mi_gdb_start { args } { - warning "Couldn't set the width to 0." - } - } -+ # Turn off the missing warnings as the testsuite does not expect it. -+ send_gdb "190-gdb-set build-id-verbose 0\n" -+ gdb_expect 10 { -+ -re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" { -+ verbose "Disabled the missing debug infos warnings." 2 -+ } -+ timeout { -+ warning "Could not disable the missing debug infos warnings.." -+ } -+ } - - # Create the new PTY for the inferior process. - if { $separate_inferior_pty } { -Index: gdb-7.10.50.20151022/gdb/objfiles.h -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/objfiles.h 2015-10-22 22:30:46.238403157 +0200 -+++ gdb-7.10.50.20151022/gdb/objfiles.h 2015-10-22 22:30:49.274421033 +0200 -@@ -489,6 +489,10 @@ struct objfile - - #define OBJF_NOT_FILENAME (1 << 6) - -+/* This file was loaded according to the BUILD_ID_CORE_LOADS rules. */ -+ -+#define OBJF_BUILD_ID_CORE_LOADED (1 << 12) -+ - /* Declarations for functions defined in objfiles.c */ - - extern struct objfile *allocate_objfile (bfd *, const char *name, int); -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/corefile.exp -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/testsuite/gdb.base/corefile.exp 2015-10-22 22:30:46.238403157 +0200 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.base/corefile.exp 2015-10-22 22:30:49.274421033 +0200 -@@ -293,3 +293,33 @@ gdb_test_multiple "core-file $corefile" - pass $test - } - } -+ -+ -+# Test auto-loading of binary files through build-id from the core file. -+set buildid [build_id_debug_filename_get $binfile] -+set wholetest "binfile found by build-id" -+if {$buildid == ""} { -+ untested "$wholetest (binary has no build-id)" -+} else { -+ gdb_exit -+ gdb_start -+ -+ regsub {\.debug$} $buildid {} buildid -+ set debugdir ${objdir}/${subdir}/${testfile}-debugdir -+ file delete -force -- $debugdir -+ file mkdir $debugdir/[file dirname $buildid] -+ file copy $binfile $debugdir/$buildid -+ -+ set test "show debug-file-directory" -+ gdb_test_multiple $test $test { -+ -re "The directory where separate debug symbols are searched for is \"(.*)\"\\.\r\n$gdb_prompt $" { -+ set debugdir_orig $expect_out(1,string) -+ pass $test -+ } -+ } -+ gdb_test_no_output "set debug-file-directory $debugdir:$debugdir_orig" "set debug-file-directory" -+ gdb_test "show build-id-core-loads" {Whether CORE-FILE loads the build-id associated files automatically is on\.} -+ gdb_test "core-file $corefile" "\r\nProgram terminated with .*" "core-file without executable" -+ gdb_test "info files" "Local exec file:\r\n\[ \t\]*`[string_to_regexp $debugdir/$buildid]', file type .*" -+ pass $wholetest -+} -Index: gdb-7.10.50.20151022/gdb/build-id.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/build-id.c 2015-10-22 22:30:46.238403157 +0200 -+++ gdb-7.10.50.20151022/gdb/build-id.c 2015-10-22 22:34:36.579774662 +0200 -@@ -26,11 +26,67 @@ - #include "objfiles.h" - #include "filenames.h" - #include "gdbcore.h" -+#include "libbfd.h" -+#include "gdbcore.h" -+#include "gdbcmd.h" -+#include "observer.h" -+#include "elf/external.h" -+#include "elf/internal.h" -+#include "elf/common.h" -+#include "elf-bfd.h" -+#include -+ -+#define BUILD_ID_VERBOSE_NONE 0 -+#define BUILD_ID_VERBOSE_FILENAMES 1 -+#define BUILD_ID_VERBOSE_BINARY_PARSE 2 -+static int build_id_verbose = BUILD_ID_VERBOSE_FILENAMES; -+static void -+show_build_id_verbose (struct ui_file *file, int from_tty, -+ struct cmd_list_element *c, const char *value) -+{ -+ fprintf_filtered (file, _("Verbosity level of the build-id locator is %s.\n"), -+ value); -+} -+/* Locate NT_GNU_BUILD_ID and return its matching debug filename. -+ FIXME: NOTE decoding should be unified with the BFD core notes decoding. */ -+ -+static struct bfd_build_id * -+build_id_buf_get (bfd *templ, gdb_byte *buf, bfd_size_type size) -+{ -+ bfd_byte *p; -+ -+ p = buf; -+ while (p < buf + size) -+ { -+ /* FIXME: bad alignment assumption. */ -+ Elf_External_Note *xnp = (Elf_External_Note *) p; -+ size_t namesz = H_GET_32 (templ, xnp->namesz); -+ size_t descsz = H_GET_32 (templ, xnp->descsz); -+ bfd_byte *descdata = (gdb_byte *) xnp->name + BFD_ALIGN (namesz, 4); -+ -+ if (H_GET_32 (templ, xnp->type) == NT_GNU_BUILD_ID -+ && namesz == sizeof "GNU" -+ && memcmp (xnp->name, "GNU", sizeof "GNU") == 0) -+ { -+ size_t size = descsz; -+ gdb_byte *data = (void *) descdata; -+ struct bfd_build_id *retval; -+ -+ retval = xmalloc (sizeof *retval - 1 + size); -+ retval->size = size; -+ memcpy (retval->data, data, size); -+ -+ return retval; -+ } -+ p = descdata + BFD_ALIGN (descsz, 4); -+ } -+ return NULL; -+} - - /* See build-id.h. */ - - const struct bfd_build_id * --build_id_bfd_get (bfd *abfd) -+build_id_bfd_shdr_get (bfd *abfd) - { - if (!bfd_check_format (abfd, bfd_object)) - return NULL; -@@ -42,6 +98,348 @@ build_id_bfd_get (bfd *abfd) - return NULL; - } - -+/* Core files may have missing (corrupt) SHDR but PDHR is correct there. -+ bfd_elf_bfd_from_remote_memory () has too much overhead by -+ allocating/reading all the available ELF PT_LOADs. */ -+ -+static struct bfd_build_id * -+build_id_phdr_get (bfd *templ, bfd_vma loadbase, unsigned e_phnum, -+ Elf_Internal_Phdr *i_phdr) -+{ -+ int i; -+ struct bfd_build_id *retval = NULL; -+ -+ for (i = 0; i < e_phnum; i++) -+ if (i_phdr[i].p_type == PT_NOTE && i_phdr[i].p_filesz > 0) -+ { -+ Elf_Internal_Phdr *hdr = &i_phdr[i]; -+ gdb_byte *buf; -+ int err; -+ -+ buf = xmalloc (hdr->p_filesz); -+ err = target_read_memory (loadbase + i_phdr[i].p_vaddr, buf, -+ hdr->p_filesz); -+ if (err == 0) -+ retval = build_id_buf_get (templ, buf, hdr->p_filesz); -+ else -+ retval = NULL; -+ xfree (buf); -+ if (retval != NULL) -+ break; -+ } -+ return retval; -+} -+ -+/* First we validate the file by reading in the ELF header and checking -+ the magic number. */ -+ -+static inline bfd_boolean -+elf_file_p (Elf64_External_Ehdr *x_ehdrp64) -+{ -+ gdb_assert (sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr)); -+ gdb_assert (offsetof (Elf64_External_Ehdr, e_ident) -+ == offsetof (Elf32_External_Ehdr, e_ident)); -+ gdb_assert (sizeof (((Elf64_External_Ehdr *) 0)->e_ident) -+ == sizeof (((Elf32_External_Ehdr *) 0)->e_ident)); -+ -+ return ((x_ehdrp64->e_ident[EI_MAG0] == ELFMAG0) -+ && (x_ehdrp64->e_ident[EI_MAG1] == ELFMAG1) -+ && (x_ehdrp64->e_ident[EI_MAG2] == ELFMAG2) -+ && (x_ehdrp64->e_ident[EI_MAG3] == ELFMAG3)); -+} -+ -+/* Translate an ELF file header in external format into an ELF file header in -+ internal format. */ -+ -+#define H_GET_WORD(bfd, ptr) (is64 ? H_GET_64 (bfd, (ptr)) \ -+ : H_GET_32 (bfd, (ptr))) -+#define H_GET_SIGNED_WORD(bfd, ptr) (is64 ? H_GET_S64 (bfd, (ptr)) \ -+ : H_GET_S32 (bfd, (ptr))) -+ -+static void -+elf_swap_ehdr_in (bfd *abfd, -+ const Elf64_External_Ehdr *src64, -+ Elf_Internal_Ehdr *dst) -+{ -+ int is64 = bfd_get_arch_size (abfd) == 64; -+#define SRC(field) (is64 ? src64->field \ -+ : ((const Elf32_External_Ehdr *) src64)->field) -+ -+ int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; -+ memcpy (dst->e_ident, SRC (e_ident), EI_NIDENT); -+ dst->e_type = H_GET_16 (abfd, SRC (e_type)); -+ dst->e_machine = H_GET_16 (abfd, SRC (e_machine)); -+ dst->e_version = H_GET_32 (abfd, SRC (e_version)); -+ if (signed_vma) -+ dst->e_entry = H_GET_SIGNED_WORD (abfd, SRC (e_entry)); -+ else -+ dst->e_entry = H_GET_WORD (abfd, SRC (e_entry)); -+ dst->e_phoff = H_GET_WORD (abfd, SRC (e_phoff)); -+ dst->e_shoff = H_GET_WORD (abfd, SRC (e_shoff)); -+ dst->e_flags = H_GET_32 (abfd, SRC (e_flags)); -+ dst->e_ehsize = H_GET_16 (abfd, SRC (e_ehsize)); -+ dst->e_phentsize = H_GET_16 (abfd, SRC (e_phentsize)); -+ dst->e_phnum = H_GET_16 (abfd, SRC (e_phnum)); -+ dst->e_shentsize = H_GET_16 (abfd, SRC (e_shentsize)); -+ dst->e_shnum = H_GET_16 (abfd, SRC (e_shnum)); -+ dst->e_shstrndx = H_GET_16 (abfd, SRC (e_shstrndx)); -+ -+#undef SRC -+} -+ -+/* Translate an ELF program header table entry in external format into an -+ ELF program header table entry in internal format. */ -+ -+static void -+elf_swap_phdr_in (bfd *abfd, -+ const Elf64_External_Phdr *src64, -+ Elf_Internal_Phdr *dst) -+{ -+ int is64 = bfd_get_arch_size (abfd) == 64; -+#define SRC(field) (is64 ? src64->field \ -+ : ((const Elf32_External_Phdr *) src64)->field) -+ -+ int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; -+ -+ dst->p_type = H_GET_32 (abfd, SRC (p_type)); -+ dst->p_flags = H_GET_32 (abfd, SRC (p_flags)); -+ dst->p_offset = H_GET_WORD (abfd, SRC (p_offset)); -+ if (signed_vma) -+ { -+ dst->p_vaddr = H_GET_SIGNED_WORD (abfd, SRC (p_vaddr)); -+ dst->p_paddr = H_GET_SIGNED_WORD (abfd, SRC (p_paddr)); -+ } -+ else -+ { -+ dst->p_vaddr = H_GET_WORD (abfd, SRC (p_vaddr)); -+ dst->p_paddr = H_GET_WORD (abfd, SRC (p_paddr)); -+ } -+ dst->p_filesz = H_GET_WORD (abfd, SRC (p_filesz)); -+ dst->p_memsz = H_GET_WORD (abfd, SRC (p_memsz)); -+ dst->p_align = H_GET_WORD (abfd, SRC (p_align)); -+ -+#undef SRC -+} -+ -+#undef H_GET_SIGNED_WORD -+#undef H_GET_WORD -+ -+static Elf_Internal_Phdr * -+elf_get_phdr (bfd *templ, bfd_vma ehdr_vma, unsigned *e_phnum_pointer, -+ bfd_vma *loadbase_pointer) -+{ -+ /* sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr) */ -+ Elf64_External_Ehdr x_ehdr64; /* Elf file header, external form */ -+ Elf_Internal_Ehdr i_ehdr; /* Elf file header, internal form */ -+ bfd_size_type x_phdrs_size; -+ gdb_byte *x_phdrs_ptr; -+ Elf_Internal_Phdr *i_phdrs; -+ int err; -+ unsigned int i; -+ bfd_vma loadbase; -+ int loadbase_set; -+ -+ gdb_assert (templ != NULL); -+ gdb_assert (sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr)); -+ -+ /* Read in the ELF header in external format. */ -+ err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr64, sizeof x_ehdr64); -+ if (err) -+ { -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Error reading ELF header at address 0x%lx"), -+ (unsigned long) ehdr_vma); -+ return NULL; -+ } -+ -+ /* Now check to see if we have a valid ELF file, and one that BFD can -+ make use of. The magic number must match, the address size ('class') -+ and byte-swapping must match our XVEC entry. */ -+ -+ if (! elf_file_p (&x_ehdr64) -+ || x_ehdr64.e_ident[EI_VERSION] != EV_CURRENT -+ || !((bfd_get_arch_size (templ) == 64 -+ && x_ehdr64.e_ident[EI_CLASS] == ELFCLASS64) -+ || (bfd_get_arch_size (templ) == 32 -+ && x_ehdr64.e_ident[EI_CLASS] == ELFCLASS32))) -+ { -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Unrecognized ELF header at address 0x%lx"), -+ (unsigned long) ehdr_vma); -+ return NULL; -+ } -+ -+ /* Check that file's byte order matches xvec's */ -+ switch (x_ehdr64.e_ident[EI_DATA]) -+ { -+ case ELFDATA2MSB: /* Big-endian */ -+ if (! bfd_header_big_endian (templ)) -+ { -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Unrecognized " -+ "big-endian ELF header at address 0x%lx"), -+ (unsigned long) ehdr_vma); -+ return NULL; -+ } -+ break; -+ case ELFDATA2LSB: /* Little-endian */ -+ if (! bfd_header_little_endian (templ)) -+ { -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Unrecognized " -+ "little-endian ELF header at address 0x%lx"), -+ (unsigned long) ehdr_vma); -+ return NULL; -+ } -+ break; -+ case ELFDATANONE: /* No data encoding specified */ -+ default: /* Unknown data encoding specified */ -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Unrecognized " -+ "ELF header endianity at address 0x%lx"), -+ (unsigned long) ehdr_vma); -+ return NULL; -+ } -+ -+ elf_swap_ehdr_in (templ, &x_ehdr64, &i_ehdr); -+ -+ /* The file header tells where to find the program headers. -+ These are what we use to actually choose what to read. */ -+ -+ if (i_ehdr.e_phentsize != (bfd_get_arch_size (templ) == 64 -+ ? sizeof (Elf64_External_Phdr) -+ : sizeof (Elf32_External_Phdr)) -+ || i_ehdr.e_phnum == 0) -+ { -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Invalid ELF program headers from the ELF header " -+ "at address 0x%lx"), (unsigned long) ehdr_vma); -+ return NULL; -+ } -+ -+ x_phdrs_size = (bfd_get_arch_size (templ) == 64 ? sizeof (Elf64_External_Phdr) -+ : sizeof (Elf32_External_Phdr)); -+ -+ i_phdrs = xmalloc (i_ehdr.e_phnum * (sizeof *i_phdrs + x_phdrs_size)); -+ x_phdrs_ptr = (void *) &i_phdrs[i_ehdr.e_phnum]; -+ err = target_read_memory (ehdr_vma + i_ehdr.e_phoff, (bfd_byte *) x_phdrs_ptr, -+ i_ehdr.e_phnum * x_phdrs_size); -+ if (err) -+ { -+ free (i_phdrs); -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Error reading " -+ "ELF program headers at address 0x%lx"), -+ (unsigned long) (ehdr_vma + i_ehdr.e_phoff)); -+ return NULL; -+ } -+ -+ loadbase = ehdr_vma; -+ loadbase_set = 0; -+ for (i = 0; i < i_ehdr.e_phnum; ++i) -+ { -+ elf_swap_phdr_in (templ, (Elf64_External_Phdr *) -+ (x_phdrs_ptr + i * x_phdrs_size), &i_phdrs[i]); -+ /* IA-64 vDSO may have two mappings for one segment, where one mapping -+ is executable only, and one is read only. We must not use the -+ executable one (PF_R is the first one, PF_X the second one). */ -+ if (i_phdrs[i].p_type == PT_LOAD && (i_phdrs[i].p_flags & PF_R)) -+ { -+ /* Only the first PT_LOAD segment indicates the file bias. -+ Next segments may have P_VADDR arbitrarily higher. -+ If the first segment has P_VADDR zero any next segment must not -+ confuse us, the first one sets LOADBASE certainly enough. */ -+ if (!loadbase_set && i_phdrs[i].p_offset == 0) -+ { -+ loadbase = ehdr_vma - i_phdrs[i].p_vaddr; -+ loadbase_set = 1; -+ } -+ } -+ } -+ -+ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) -+ warning (_("build-id: Found ELF header at address 0x%lx, loadbase 0x%lx"), -+ (unsigned long) ehdr_vma, (unsigned long) loadbase); -+ -+ *e_phnum_pointer = i_ehdr.e_phnum; -+ *loadbase_pointer = loadbase; -+ return i_phdrs; -+} -+ -+/* BUILD_ID_ADDR_GET gets ADDR located somewhere in the object. -+ Find the first section before ADDR containing an ELF header. -+ We rely on the fact the sections from multiple files do not mix. -+ FIXME: We should check ADDR is contained _inside_ the section with possibly -+ missing content (P_FILESZ < P_MEMSZ). These omitted sections are currently -+ hidden by _BFD_ELF_MAKE_SECTION_FROM_PHDR. */ -+ -+static CORE_ADDR build_id_addr; -+struct build_id_addr_sect -+ { -+ struct build_id_addr_sect *next; -+ asection *sect; -+ }; -+static struct build_id_addr_sect *build_id_addr_sect; -+ -+static void build_id_addr_candidate (bfd *abfd, asection *sect, void *obj) -+{ -+ if (build_id_addr >= bfd_section_vma (abfd, sect)) -+ { -+ struct build_id_addr_sect *candidate; -+ -+ candidate = xmalloc (sizeof *candidate); -+ candidate->next = build_id_addr_sect; -+ build_id_addr_sect = candidate; -+ candidate->sect = sect; -+ } -+} -+ -+struct bfd_build_id * -+build_id_addr_get (CORE_ADDR addr) -+{ -+ struct build_id_addr_sect *candidate; -+ struct bfd_build_id *retval = NULL; -+ Elf_Internal_Phdr *i_phdr = NULL; -+ bfd_vma loadbase = 0; -+ unsigned e_phnum = 0; -+ -+ if (core_bfd == NULL) -+ return NULL; -+ -+ build_id_addr = addr; -+ gdb_assert (build_id_addr_sect == NULL); -+ bfd_map_over_sections (core_bfd, build_id_addr_candidate, NULL); -+ -+ /* Sections are sorted in the high-to-low VMAs order. -+ Stop the search on the first ELF header we find. -+ Do not continue the search even if it does not contain NT_GNU_BUILD_ID. */ -+ -+ for (candidate = build_id_addr_sect; candidate != NULL; -+ candidate = candidate->next) -+ { -+ i_phdr = elf_get_phdr (core_bfd, -+ bfd_section_vma (core_bfd, candidate->sect), -+ &e_phnum, &loadbase); -+ if (i_phdr != NULL) -+ break; -+ } -+ -+ if (i_phdr != NULL) -+ { -+ retval = build_id_phdr_get (core_bfd, loadbase, e_phnum, i_phdr); -+ xfree (i_phdr); -+ } -+ -+ while (build_id_addr_sect != NULL) -+ { -+ candidate = build_id_addr_sect; -+ build_id_addr_sect = candidate->next; -+ xfree (candidate); -+ } -+ -+ return retval; -+} -+ - /* See build-id.h. */ - - int -@@ -50,7 +448,7 @@ build_id_verify (bfd *abfd, size_t check - const struct bfd_build_id *found; - int retval = 0; - -- found = build_id_bfd_get (abfd); -+ found = build_id_bfd_shdr_get (abfd); - - if (found == NULL) - warning (_("File \"%s\" has no build-id, file skipped"), -@@ -65,23 +463,56 @@ build_id_verify (bfd *abfd, size_t check - return retval; - } - -+static char * -+link_resolve (const char *symlink, int level) -+{ -+ char buf[PATH_MAX + 1], *target, *retval; -+ ssize_t got; -+ -+ if (level > 10) -+ return xstrdup (symlink); -+ -+ got = readlink (symlink, buf, sizeof (buf)); -+ if (got < 0 || got >= sizeof (buf)) -+ return xstrdup (symlink); -+ buf[got] = '\0'; -+ -+ if (IS_ABSOLUTE_PATH (buf)) -+ target = xstrdup (buf); -+ else -+ { -+ char *dir = ldirname (symlink); -+ -+ if (dir == NULL) -+ return xstrdup (symlink); -+ target = xstrprintf ("%s" -+#ifndef HAVE_DOS_BASED_FILE_SYSTEM -+ "/" -+#else /* HAVE_DOS_BASED_FILE_SYSTEM */ -+ "\\" -+#endif /* HAVE_DOS_BASED_FILE_SYSTEM */ -+ "%s", dir, buf); -+ } -+ -+ retval = link_resolve (target, level + 1); -+ xfree (target); -+ return retval; -+} -+ - /* See build-id.h. */ - - bfd * --build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id) -+build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id, -+ char **link_return, int add_debug_suffix) - { -- char *link, *debugdir; -+ char *link, *debugdir, *link_all = NULL; - VEC (char_ptr) *debugdir_vec; - struct cleanup *back_to; - int ix; - bfd *abfd = NULL; -- int alloc_len; - - /* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */ -- alloc_len = (strlen (debug_file_directory) -- + (sizeof "/.build-id/" - 1) + 1 -- + 2 * build_id_len + (sizeof ".debug" - 1) + 1); -- link = (char *) alloca (alloc_len); -+ link = xmalloc (strlen (debug_file_directory) + 2 * build_id_len + 50); - - /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will - cause "/.build-id/..." lookups. */ -@@ -94,9 +525,12 @@ build_id_to_debug_bfd (size_t build_id_l - size_t debugdir_len = strlen (debugdir); - const gdb_byte *data = build_id; - size_t size = build_id_len; -- char *s; - char *filename = NULL; - struct cleanup *inner; -+ unsigned seqno; -+ struct stat statbuf_trash; -+ /* Initialize it just to avoid a GCC false warning. */ -+ char *s, *link0 = NULL, *link0_resolved; - - memcpy (link, debugdir, debugdir_len); - s = &link[debugdir_len]; -@@ -110,47 +544,281 @@ build_id_to_debug_bfd (size_t build_id_l - *s++ = '/'; - while (size-- > 0) - s += sprintf (s, "%02x", (unsigned) *data++); -- strcpy (s, ".debug"); -+ for (seqno = 0;; seqno++) -+ { -+ char *s2; - -- /* lrealpath() is expensive even for the usually non-existent files. */ -- if (access (link, F_OK) == 0) -- filename = lrealpath (link); -+ if (seqno) -+ { -+ /* There can be multiple build-id symlinks pointing to real files -+ with the same build-id (such as hard links). Some of the real -+ files may not be installed. */ -+ -+ s2 = s + sprintf (s, ".%u", seqno); -+ } -+ else -+ s2 = s; -+ -+ if (add_debug_suffix) -+ strcpy (s2, ".debug"); -+ else -+ *s2 = 0; -+ -+ if (!seqno) -+ { -+ /* If none of the real files is found report as missing file -+ always the non-.%u-suffixed file. */ -+ link0 = xstrdup (link); -+ } -+ -+ /* `access' automatically dereferences LINK. */ -+ if (lstat (link, &statbuf_trash) != 0) -+ { -+ /* Stop increasing SEQNO. */ -+ break; -+ } -+ -+ filename = lrealpath (link); -+ if (filename == NULL) -+ continue; -+ -+ /* We expect to be silent on the non-existing files. */ -+ inner = make_cleanup (xfree, filename); -+ abfd = gdb_bfd_open (filename, gnutarget, -1); -+ do_cleanups (inner); - -- if (filename == NULL) -- continue; -+ if (abfd == NULL) -+ continue; - -- /* We expect to be silent on the non-existing files. */ -- inner = make_cleanup (xfree, filename); -- abfd = gdb_bfd_open (filename, gnutarget, -1); -- do_cleanups (inner); -+ if (build_id_verify (abfd, build_id_len, build_id)) -+ break; - -- if (abfd == NULL) -- continue; -+ gdb_bfd_unref (abfd); -+ abfd = NULL; - -- if (build_id_verify (abfd, build_id_len, build_id)) -- break; -+ filename = NULL; -+ } - -- gdb_bfd_unref (abfd); -- abfd = NULL; -+ if (filename != NULL) -+ { -+ /* LINK_ALL is not used below in this non-NULL FILENAME case. */ -+ xfree (link0); -+ break; -+ } -+ -+ /* If the symlink has target request to install the target. -+ BASE-debuginfo.rpm contains the symlink but BASE.rpm may be missing. -+ https://bugzilla.redhat.com/show_bug.cgi?id=981154 */ -+ link0_resolved = link_resolve (link0, 0); -+ xfree (link0); -+ -+ if (link_all == NULL) -+ link_all = link0_resolved; -+ else -+ { -+ size_t len_orig = strlen (link_all); -+ -+ link_all = xrealloc (link_all, -+ len_orig + 1 + strlen (link0_resolved) + 1); -+ -+ /* Use whitespace instead of DIRNAME_SEPARATOR to be compatible with -+ its possible use as an argument for installation command. */ -+ link_all[len_orig] = ' '; -+ -+ strcpy (&link_all[len_orig + 1], link0_resolved); -+ xfree (link0_resolved); -+ } -+ } -+ -+ if (link_return != NULL) -+ { -+ if (abfd != NULL) -+ { -+ *link_return = link; -+ link = NULL; -+ } -+ else -+ { -+ *link_return = link_all; -+ link_all = NULL; -+ } - } -+ xfree (link); -+ xfree (link_all); - - do_cleanups (back_to); - return abfd; - } - -+char * -+build_id_to_filename (const struct bfd_build_id *build_id, char **link_return) -+{ -+ bfd *abfd; -+ char *result; -+ -+ abfd = build_id_to_debug_bfd (build_id->size, build_id->data, link_return, 0); -+ if (abfd == NULL) -+ return NULL; -+ -+ result = xstrdup (bfd_get_filename (abfd)); -+ gdb_bfd_unref (abfd); -+ return result; -+} -+ -+/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages -+ Try to install the hash file ... -+ avoidance. */ -+ -+struct missing_filepair -+ { -+ char *binary; -+ char *debug; -+ char data[1]; -+ }; -+ -+static struct htab *missing_filepair_hash; -+static struct obstack missing_filepair_obstack; -+ -+static void * -+missing_filepair_xcalloc (size_t nmemb, size_t nmemb_size) -+{ -+ void *retval; -+ size_t size = nmemb * nmemb_size; -+ -+ retval = obstack_alloc (&missing_filepair_obstack, size); -+ memset (retval, 0, size); -+ return retval; -+} -+ -+static hashval_t -+missing_filepair_hash_func (const struct missing_filepair *elem) -+{ -+ hashval_t retval = 0; -+ -+ retval ^= htab_hash_string (elem->binary); -+ if (elem->debug != NULL) -+ retval ^= htab_hash_string (elem->debug); -+ -+ return retval; -+} -+ -+static int -+missing_filepair_eq (const struct missing_filepair *elem1, -+ const struct missing_filepair *elem2) -+{ -+ return strcmp (elem1->binary, elem2->binary) == 0 -+ && ((elem1->debug == NULL) == (elem2->debug == NULL)) -+ && (elem1->debug == NULL || strcmp (elem1->debug, elem2->debug) == 0); -+} -+ -+static void -+missing_filepair_change (void) -+{ -+ if (missing_filepair_hash != NULL) -+ { -+ obstack_free (&missing_filepair_obstack, NULL); -+ /* All their memory came just from missing_filepair_OBSTACK. */ -+ missing_filepair_hash = NULL; -+ } -+} -+ -+static void -+debug_print_executable_changed (void) -+{ -+ missing_filepair_change (); -+} -+ -+/* Notify user the file BINARY with (possibly NULL) associated separate debug -+ information file DEBUG is missing. DEBUG may or may not be the build-id -+ file such as would be: -+ /usr/lib/debug/.build-id/dd/b1d2ce632721c47bb9e8679f369e2295ce71be.debug -+ */ -+ -+void -+debug_print_missing (const char *binary, const char *debug) -+{ -+ size_t binary_len0 = strlen (binary) + 1; -+ size_t debug_len0 = debug ? strlen (debug) + 1 : 0; -+ struct missing_filepair missing_filepair_find; -+ struct missing_filepair *missing_filepair; -+ struct missing_filepair **slot; -+ -+ if (build_id_verbose < BUILD_ID_VERBOSE_FILENAMES) -+ return; -+ -+ if (missing_filepair_hash == NULL) -+ { -+ obstack_init (&missing_filepair_obstack); -+ missing_filepair_hash = htab_create_alloc (64, -+ (hashval_t (*) (const void *)) missing_filepair_hash_func, -+ (int (*) (const void *, const void *)) missing_filepair_eq, NULL, -+ missing_filepair_xcalloc, NULL); -+ } -+ -+ /* Use MISSING_FILEPAIR_FIND first instead of calling obstack_alloc with -+ obstack_free in the case of a (rare) match. The problem is ALLOC_F for -+ MISSING_FILEPAIR_HASH allocates from MISSING_FILEPAIR_OBSTACK maintenance -+ structures for MISSING_FILEPAIR_HASH. Calling obstack_free would possibly -+ not to free only MISSING_FILEPAIR but also some such structures (allocated -+ during the htab_find_slot call). */ -+ -+ missing_filepair_find.binary = (char *) binary; -+ missing_filepair_find.debug = (char *) debug; -+ slot = (struct missing_filepair **) htab_find_slot (missing_filepair_hash, -+ &missing_filepair_find, -+ INSERT); -+ -+ /* While it may be still printed duplicitely with the missing debuginfo file -+ * it is due to once printing about the binary file build-id link and once -+ * about the .debug file build-id link as both the build-id symlinks are -+ * located in the debuginfo package. */ -+ -+ if (*slot != NULL) -+ return; -+ -+ missing_filepair = obstack_alloc (&missing_filepair_obstack, -+ sizeof (*missing_filepair) - 1 -+ + binary_len0 + debug_len0); -+ missing_filepair->binary = missing_filepair->data; -+ memcpy (missing_filepair->binary, binary, binary_len0); -+ if (debug != NULL) -+ { -+ missing_filepair->debug = missing_filepair->binary + binary_len0; -+ memcpy (missing_filepair->debug, debug, debug_len0); -+ } -+ else -+ missing_filepair->debug = NULL; -+ -+ *slot = missing_filepair; -+ -+ /* We do not collect and flush these messages as each such message -+ already requires its own separate lines. */ -+ -+ fprintf_unfiltered (gdb_stdlog, -+ _("Missing separate debuginfo for %s\n"), binary); -+ if (debug != NULL) -+ fprintf_unfiltered (gdb_stdlog, _("Try to install the hash file %s\n"), -+ debug); -+} -+ - /* See build-id.h. */ - - char * --find_separate_debug_file_by_buildid (struct objfile *objfile) -+find_separate_debug_file_by_buildid (struct objfile *objfile, -+ char **build_id_filename_return) - { - const struct bfd_build_id *build_id; - -- build_id = build_id_bfd_get (objfile->obfd); -+ if (build_id_filename_return) -+ *build_id_filename_return = NULL; -+ -+ build_id = build_id_bfd_shdr_get (objfile->obfd); - if (build_id != NULL) - { - bfd *abfd; - -- abfd = build_id_to_debug_bfd (build_id->size, build_id->data); -+ abfd = build_id_to_debug_bfd (build_id->size, build_id->data, -+ build_id_filename_return, 1); - /* Prevent looping on a stripped .debug file. */ - if (abfd != NULL - && filename_cmp (bfd_get_filename (abfd), -@@ -170,3 +838,21 @@ find_separate_debug_file_by_buildid (str - } - return NULL; - } -+ -+extern void _initialize_build_id (void); -+ -+void -+_initialize_build_id (void) -+{ -+ add_setshow_zinteger_cmd ("build-id-verbose", no_class, &build_id_verbose, -+ _("\ -+Set debugging level of the build-id locator."), _("\ -+Show debugging level of the build-id locator."), _("\ -+Level 1 (default) enables printing the missing debug filenames,\n\ -+level 2 also prints the parsing of binaries to find the identificators."), -+ NULL, -+ show_build_id_verbose, -+ &setlist, &showlist); -+ -+ observer_attach_executable_changed (debug_print_executable_changed); -+} -Index: gdb-7.10.50.20151022/gdb/build-id.h -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/build-id.h 2015-10-22 22:30:46.239403163 +0200 -+++ gdb-7.10.50.20151022/gdb/build-id.h 2015-10-22 22:30:49.275421039 +0200 -@@ -20,9 +20,10 @@ - #ifndef BUILD_ID_H - #define BUILD_ID_H - --/* Locate NT_GNU_BUILD_ID from ABFD and return its content. */ -+/* Separate debuginfo files have corrupted PHDR but SHDR is correct there. -+ Locate NT_GNU_BUILD_ID from ABFD and return its content. */ - --extern const struct bfd_build_id *build_id_bfd_get (bfd *abfd); -+extern const struct bfd_build_id *build_id_bfd_shdr_get (bfd *abfd); - - /* Return true if ABFD has NT_GNU_BUILD_ID matching the CHECK value. - Otherwise, issue a warning and return false. */ -@@ -36,13 +37,18 @@ extern int build_id_verify (bfd *abfd, - the caller. */ - - extern bfd *build_id_to_debug_bfd (size_t build_id_len, -- const bfd_byte *build_id); -+ const bfd_byte *build_id, char **link_return, -+ int add_debug_suffix); -+ -+extern char *build_id_to_filename (const struct bfd_build_id *build_id, -+ char **link_return); - - /* Find the separate debug file for OBJFILE, by using the build-id - associated with OBJFILE's BFD. If successful, returns a malloc'd - file name for the separate debug file. The caller must free this. - Otherwise, returns NULL. */ - --extern char *find_separate_debug_file_by_buildid (struct objfile *objfile); -+extern char *find_separate_debug_file_by_buildid (struct objfile *objfile, -+ char **build_id_filename_return); - - #endif /* BUILD_ID_H */ -Index: gdb-7.10.50.20151022/gdb/dwarf2read.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/dwarf2read.c 2015-10-22 22:30:46.242403181 +0200 -+++ gdb-7.10.50.20151022/gdb/dwarf2read.c 2015-10-22 22:30:49.278421057 +0200 -@@ -2514,7 +2514,7 @@ dwarf2_get_dwz_file (void) - } - - if (dwz_bfd == NULL) -- dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid); -+ dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid, NULL, 1); - - if (dwz_bfd == NULL) - error (_("could not find '.gnu_debugaltlink' file for %s"), -Index: gdb-7.10.50.20151022/gdb/python/py-objfile.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/python/py-objfile.c 2015-10-22 22:30:46.243403187 +0200 -+++ gdb-7.10.50.20151022/gdb/python/py-objfile.c 2015-10-22 22:30:49.278421057 +0200 -@@ -139,7 +139,7 @@ objfpy_get_build_id (PyObject *self, voi - - TRY - { -- build_id = build_id_bfd_get (objfile->obfd); -+ build_id = build_id_bfd_shdr_get (objfile->obfd); - } - CATCH (except, RETURN_MASK_ALL) - { -@@ -548,7 +548,7 @@ objfpy_lookup_objfile_by_build_id (const - /* Don't return separate debug files. */ - if (objfile->separate_debug_objfile_backlink != NULL) - continue; -- obfd_build_id = build_id_bfd_get (objfile->obfd); -+ obfd_build_id = build_id_bfd_shdr_get (objfile->obfd); - if (obfd_build_id == NULL) - continue; - if (objfpy_build_id_matches (obfd_build_id, build_id)) -Index: gdb-7.10.50.20151022/gdb/coffread.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/coffread.c 2015-10-22 22:30:46.244403193 +0200 -+++ gdb-7.10.50.20151022/gdb/coffread.c 2015-10-22 22:30:49.278421057 +0200 -@@ -739,7 +739,7 @@ coff_symfile_read (struct objfile *objfi - { - char *debugfile; - -- debugfile = find_separate_debug_file_by_buildid (objfile); -+ debugfile = find_separate_debug_file_by_buildid (objfile, NULL); - - if (debugfile == NULL) - debugfile = find_separate_debug_file_by_debuglink (objfile); diff --git a/gdb-6.6-bz235197-fork-detach-info.patch b/gdb-6.6-bz235197-fork-detach-info.patch index d131580..660fa74 100644 --- a/gdb-6.6-bz235197-fork-detach-info.patch +++ b/gdb-6.6-bz235197-fork-detach-info.patch @@ -3,10 +3,10 @@ Port to GDB-6.8pre. Remove the `[' character from the GDB-6.8 default message. -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/fork-detach.c +Index: gdb-7.10.90.20160211/gdb/testsuite/gdb.base/fork-detach.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/fork-detach.c 2015-10-27 22:38:46.693459569 +0100 ++++ gdb-7.10.90.20160211/gdb/testsuite/gdb.base/fork-detach.c 2016-02-15 23:25:36.686600598 +0100 @@ -0,0 +1,57 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -65,10 +65,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/fork-detach.c + } + return 0; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/fork-detach.exp +Index: gdb-7.10.90.20160211/gdb/testsuite/gdb.base/fork-detach.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/fork-detach.exp 2015-10-27 22:38:46.693459569 +0100 ++++ gdb-7.10.90.20160211/gdb/testsuite/gdb.base/fork-detach.exp 2016-02-15 23:27:55.792588265 +0100 @@ -0,0 +1,36 @@ +# Copyright 2007 Free Software Foundation, Inc. + @@ -88,7 +88,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/fork-detach.exp + +set testfile fork-detach +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested "Couldn't compile test program" + return -1 @@ -106,11 +106,11 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/fork-detach.exp +gdb_test "" \ + "Detaching after fork from child process.*\\\[Inferior .* exited normally\\\]" \ + "Info message caught" -Index: gdb-7.10.50.20151027/gdb/infrun.c +Index: gdb-7.10.90.20160211/gdb/infrun.c =================================================================== ---- gdb-7.10.50.20151027.orig/gdb/infrun.c 2015-10-27 22:38:34.333386939 +0100 -+++ gdb-7.10.50.20151027/gdb/infrun.c 2015-10-27 22:38:46.695459581 +0100 -@@ -477,7 +477,7 @@ holding the child stopped. Try \"set de +--- gdb-7.10.90.20160211.orig/gdb/infrun.c 2016-02-15 23:25:01.432350289 +0100 ++++ gdb-7.10.90.20160211/gdb/infrun.c 2016-02-15 23:27:49.274541986 +0100 +@@ -478,7 +478,7 @@ remove_breakpoints_pid (ptid_get_pid (inferior_ptid)); } @@ -119,11 +119,11 @@ Index: gdb-7.10.50.20151027/gdb/infrun.c { /* Ensure that we have a process ptid. */ ptid_t process_ptid = pid_to_ptid (ptid_get_pid (child_ptid)); -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/catch-syscall.exp +Index: gdb-7.10.90.20160211/gdb/testsuite/gdb.base/catch-syscall.exp =================================================================== ---- gdb-7.10.50.20151027.orig/gdb/testsuite/gdb.base/catch-syscall.exp 2015-10-27 22:43:47.015224320 +0100 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/catch-syscall.exp 2015-10-27 22:44:29.327472955 +0100 -@@ -165,7 +165,7 @@ proc check_for_program_end {} { +--- gdb-7.10.90.20160211.orig/gdb/testsuite/gdb.base/catch-syscall.exp 2016-02-15 23:25:01.432350289 +0100 ++++ gdb-7.10.90.20160211/gdb/testsuite/gdb.base/catch-syscall.exp 2016-02-15 23:25:36.689600619 +0100 +@@ -165,7 +165,7 @@ # Deleting the catchpoints delete_breakpoints @@ -132,7 +132,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/catch-syscall.exp } proc test_catch_syscall_without_args {} { -@@ -236,7 +236,7 @@ proc test_catch_syscall_with_wrong_args +@@ -236,7 +236,7 @@ # If it doesn't, everything is right (since we don't have # a syscall named "mlock" in it). Otherwise, this is a failure. set thistest "catch syscall with unused syscall ($syscall_name)" diff --git a/gdb-6.6-scheduler_locking-step-is-default.patch b/gdb-6.6-scheduler_locking-step-is-default.patch index 4967b92..ad9f643 100644 --- a/gdb-6.6-scheduler_locking-step-is-default.patch +++ b/gdb-6.6-scheduler_locking-step-is-default.patch @@ -1,8 +1,8 @@ -Index: gdb-7.10.50.20151022/gdb/infrun.c +Index: gdb-7.12.50.20170207/gdb/infrun.c =================================================================== ---- gdb-7.10.50.20151022.orig/gdb/infrun.c 2015-10-22 22:30:15.887224452 +0200 -+++ gdb-7.10.50.20151022/gdb/infrun.c 2015-10-22 22:30:25.742282478 +0200 -@@ -2175,7 +2175,7 @@ static const char *const scheduler_enums +--- gdb-7.12.50.20170207.orig/gdb/infrun.c 2017-02-07 21:07:40.321202448 +0100 ++++ gdb-7.12.50.20170207/gdb/infrun.c 2017-02-07 21:07:42.680220365 +0100 +@@ -2218,7 +2218,7 @@ schedlock_replay, NULL }; @@ -11,11 +11,11 @@ Index: gdb-7.10.50.20151022/gdb/infrun.c static void show_scheduler_mode (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-cli.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi-cli.exp =================================================================== ---- gdb-7.10.50.20151022.orig/gdb/testsuite/gdb.mi/mi-cli.exp 2015-10-22 22:29:38.352003447 +0200 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-cli.exp 2015-10-22 22:30:15.888224458 +0200 -@@ -199,7 +199,7 @@ mi_expect_stop "breakpoint-hit" "main" " +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.mi/mi-cli.exp 2017-02-07 21:07:40.322202455 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi-cli.exp 2017-02-07 21:07:42.680220365 +0100 +@@ -199,7 +199,7 @@ # Test that the token is output even for CLI commands # Also test that *stopped includes frame information. mi_gdb_test "34 next" \ @@ -24,33 +24,33 @@ Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-cli.exp "34 next: run" # Test that the new current source line is output to the console -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-logging.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi-logging.exp =================================================================== ---- gdb-7.10.50.20151022.orig/gdb/testsuite/gdb.mi/mi-logging.exp 2015-10-22 22:29:38.352003447 +0200 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-logging.exp 2015-10-22 22:30:15.888224458 +0200 -@@ -53,7 +53,7 @@ close $chan +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.mi/mi-logging.exp 2017-02-07 21:07:42.681220372 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi-logging.exp 2017-02-07 21:09:36.950088269 +0100 +@@ -53,7 +53,7 @@ set mi_log_prompt "\[(\]gdb\[)\] \[\r\n\]+" -if [regexp "\\^done\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] { +if [regexp "\\^done\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] { - pass "Log file contents" + pass "log file contents" } else { - fail "Log file contents" -@@ -76,7 +76,7 @@ set chan [open $milogfile] + fail "log file contents" +@@ -76,7 +76,7 @@ set logcontent [read $chan] close $chan -if [regexp "1001\\^done\[\r\n\]+$mi_log_prompt.*1002\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt.*1003\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] { +if [regexp "1001\\^done\[\r\n\]+$mi_log_prompt.*1002\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt.*1003\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] { - pass "Redirect log file contents" + pass "redirect log file contents" } else { - fail "Redirect log file contents" -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-console.exp + fail "redirect log file contents" +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi-console.exp =================================================================== ---- gdb-7.10.50.20151022.orig/gdb/testsuite/gdb.mi/mi-console.exp 2015-10-22 22:29:38.353003453 +0200 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-console.exp 2015-10-22 22:30:15.888224458 +0200 -@@ -60,6 +60,9 @@ if { [gdb_compile "${srcdir}/${subdir}/ +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.mi/mi-console.exp 2017-02-07 21:07:40.323202463 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi-console.exp 2017-02-07 21:07:42.681220372 +0100 +@@ -60,6 +60,9 @@ mi_run_to_main @@ -60,3 +60,16 @@ Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.mi/mi-console.exp # The output we get from the target depends on how it is hosted. If # we are semihosted (e.g., the sim or a remote target that supports # the File I/O remote protocol extension), we see the target I/O +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/inline-cmds.exp +=================================================================== +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.opt/inline-cmds.exp 2017-02-07 21:07:40.323202463 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/inline-cmds.exp 2017-02-07 21:07:42.681220372 +0100 +@@ -331,7 +331,7 @@ + + send_gdb "interpreter-exec console \"step\"\n" + gdb_expect { +- -re "\\^running\r\n\\*running,thread-id=\"all\"\r\n${mi_gdb_prompt}${cli_output_re}" { ++ -re "\\^running\r\n\\*running,thread-id=\"1\"\r\n${mi_gdb_prompt}${cli_output_re}" { + pass $message + } + timeout { diff --git a/gdb-6.8-attach-signalled-detach-stopped.patch b/gdb-6.8-attach-signalled-detach-stopped.patch deleted file mode 100644 index a0c472b..0000000 --- a/gdb-6.8-attach-signalled-detach-stopped.patch +++ /dev/null @@ -1,177 +0,0 @@ -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/infrun.c gdb-7.10.50.20160106/gdb/infrun.c ---- gdb-7.10.50.20160106-orig/gdb/infrun.c 2016-01-09 15:05:06.127481758 +0100 -+++ gdb-7.10.50.20160106/gdb/infrun.c 2016-01-09 15:05:24.054593048 +0100 -@@ -626,6 +626,13 @@ holding the child stopped. Try \"set de - target_pid_to_str (process_ptid)); - } - -+#ifdef NEED_DETACH_SIGSTOP -+ /* We should check PID_WAS_STOPPED and detach it stopped accordingly. -+ In this point of code it cannot be 1 as we would not get FORK -+ executed without CONTINUE first which resets PID_WAS_STOPPED. -+ We would have to first TARGET_STOP and WAITPID it as with running -+ inferior PTRACE_DETACH, SIGSTOP will ignore the signal. */ -+#endif - target_detach (NULL, 0); - } - -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/linux-nat.c gdb-7.10.50.20160106/gdb/linux-nat.c ---- gdb-7.10.50.20160106-orig/gdb/linux-nat.c 2016-01-09 15:05:06.225482366 +0100 -+++ gdb-7.10.50.20160106/gdb/linux-nat.c 2016-01-09 15:05:24.050593023 +0100 -@@ -194,6 +194,11 @@ enum tribool have_ptrace_getregset = TRI - static struct target_ops *linux_ops; - static struct target_ops linux_ops_saved; - -+#ifdef NEED_DETACH_SIGSTOP -+/* PID of the inferior stopped by SIGSTOP before attaching (or zero). */ -+static pid_t pid_was_stopped; -+ -+#endif - /* The method to call, if any, when a new thread is attached. */ - static void (*linux_nat_new_thread) (struct lwp_info *); - -@@ -961,6 +966,9 @@ linux_nat_post_attach_wait (ptid_t ptid, - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LNPAW: Attaching to a stopped process\n"); -+#ifdef NEED_DETACH_SIGSTOP -+ pid_was_stopped = ptid_get_pid (ptid); -+#endif - - /* The process is definitely stopped. It is in a job control - stop, unless the kernel predates the TASK_STOPPED / -@@ -1303,6 +1311,25 @@ get_pending_status (struct lwp_info *lp, - gdb_signal_to_string (signo)); - } - -+#ifdef NEED_DETACH_SIGSTOP -+ /* Workaround RHEL-5 kernel which has unreliable PTRACE_DETACH, SIGSTOP (that -+ many TIDs are left unstopped). See RH Bug 496732. */ -+ if (ptid_get_pid (lp->ptid) == pid_was_stopped) -+ { -+ int err; -+ -+ errno = 0; -+ err = kill_lwp (ptid_get_lwp (lp->ptid), SIGSTOP); -+ if (debug_linux_nat) -+ { -+ fprintf_unfiltered (gdb_stdlog, -+ "SC: lwp kill %d %s\n", -+ err, -+ errno ? safe_strerror (errno) : "ERRNO-OK"); -+ } -+ } -+ -+#endif - return 0; - } - -@@ -1416,6 +1443,10 @@ linux_nat_detach (struct target_ops *ops - } - else - linux_ops->to_detach (ops, args, from_tty); -+#ifdef NEED_DETACH_SIGSTOP -+ -+ pid_was_stopped = 0; -+#endif - } - - /* Resume execution of the inferior process. If STEP is nonzero, -@@ -1674,6 +1705,16 @@ linux_nat_resume (struct target_ops *ops - return; - } - -+#ifdef NEED_DETACH_SIGSTOP -+ /* At this point, we are going to resume the inferior and if we -+ have attached to a stopped process, we no longer should leave -+ it as stopped if the user detaches. PTID variable has PID set to LWP -+ while we need to check the real PID here. */ -+ -+ if (!step && lp && pid_was_stopped == ptid_get_pid (lp->ptid)) -+ pid_was_stopped = 0; -+ -+#endif - if (resume_many) - iterate_over_lwps (ptid, linux_nat_resume_callback, lp); - -@@ -3618,6 +3659,10 @@ linux_nat_mourn_inferior (struct target_ - - /* Let the arch-specific native code know this process is gone. */ - linux_nat_forget_process (pid); -+#ifdef NEED_DETACH_SIGSTOP -+ -+ pid_was_stopped = 0; -+#endif - } - - /* Convert a native/host siginfo object, into/from the siginfo in the -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/testsuite/gdb.threads/attach-stopped.exp gdb-7.10.50.20160106/gdb/testsuite/gdb.threads/attach-stopped.exp ---- gdb-7.10.50.20160106-orig/gdb/testsuite/gdb.threads/attach-stopped.exp 2016-01-06 02:48:38.000000000 +0100 -+++ gdb-7.10.50.20160106/gdb/testsuite/gdb.threads/attach-stopped.exp 2016-01-09 15:05:48.917747101 +0100 -@@ -56,7 +56,65 @@ proc corefunc { threadtype } { - gdb_reinitialize_dir $srcdir/$subdir - gdb_load ${binfile} - -- # Verify that we can attach to the stopped process. -+ # Verify that we can attach to the process by first giving its -+ # executable name via the file command, and using attach with the -+ # process ID. -+ -+ set test "$threadtype: set file, before attach1 to stopped process" -+ gdb_test_multiple "file $binfile" "$test" { -+ -re "Load new symbol table from.*y or n. $" { -+ gdb_test "y" "Reading symbols from $escapedbinfile\.\.\.*done." \ -+ "$test (re-read)" -+ } -+ -re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $" { -+ pass "$test" -+ } -+ } -+ -+ set test "$threadtype: attach1 to stopped, after setting file" -+ gdb_test_multiple "attach $testpid" "$test" { -+ -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" { -+ pass "$test" -+ } -+ } -+ -+ # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there. -+ if {[string equal $threadtype threaded]} { -+ gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: attach1 to stopped bt" -+ } else { -+ gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach1 to stopped bt" -+ } -+ -+ # Exit and detach the process. -+ -+ gdb_exit -+ -+ # Avoid some race: -+ sleep 2 -+ -+ if [catch {open /proc/${testpid}/status r} fileid] { -+ set line2 "NOTFOUND" -+ } else { -+ gets $fileid line1; -+ gets $fileid line2; -+ close $fileid; -+ } -+ -+ set test "$threadtype: attach1, exit leaves process stopped" -+ if {[string match "*(stopped)*" $line2]} { -+ pass $test -+ } else { -+ fail $test -+ } -+ -+ # At this point, the process should still be stopped -+ -+ gdb_start -+ gdb_reinitialize_dir $srcdir/$subdir -+ gdb_load ${binfile} -+ -+ # Verify that we can attach to the process just by giving the -+ # process ID. - - set test "$threadtype: attach2 to stopped, after setting file" - gdb_test_multiple "attach $testpid" "$test" { diff --git a/gdb-6.8-bz436037-reg-no-longer-active.patch b/gdb-6.8-bz436037-reg-no-longer-active.patch deleted file mode 100644 index 4987714..0000000 --- a/gdb-6.8-bz436037-reg-no-longer-active.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: gdb-6.8.50.20090803/gdb/valops.c -=================================================================== ---- gdb-6.8.50.20090803.orig/gdb/valops.c 2009-08-04 06:30:45.000000000 +0200 -+++ gdb-6.8.50.20090803/gdb/valops.c 2009-08-04 06:33:05.000000000 +0200 -@@ -926,10 +926,18 @@ value_assign (struct value *toval, struc - struct gdbarch *gdbarch; - int value_reg; - -- /* Figure out which frame this is in currently. */ -- frame = frame_find_by_id (VALUE_FRAME_ID (toval)); - value_reg = VALUE_REGNUM (toval); - -+ /* Figure out which frame this is in currently. */ -+ frame = frame_find_by_id (VALUE_FRAME_ID (toval)); -+ /* "set $reg+=1" should work on programs with no debug info, -+ but frame_find_by_id returns NULL here (RH bug 436037). -+ Use current frame, it represents CPU state in this case. -+ If frame_find_by_id is changed to do it internally -+ (it is contemplated there), remove this. */ -+ if (!frame) -+ frame = get_current_frame (); -+ /* Probably never happens. */ - if (!frame) - error (_("Value being assigned to is no longer active.")); - diff --git a/gdb-6.8-quit-never-aborts.patch b/gdb-6.8-quit-never-aborts.patch index 47e1c64..0dc71b8 100644 --- a/gdb-6.8-quit-never-aborts.patch +++ b/gdb-6.8-quit-never-aborts.patch @@ -5,39 +5,43 @@ Some of the threads may not be properly PTRACE_DETACHed which hurts if they should have been detached with SIGSTOP (as they are accidentally left running on the debugger termination). -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/defs.h gdb-7.10.50.20160106/gdb/defs.h ---- gdb-7.10.50.20160106-orig/gdb/defs.h 2016-01-09 15:06:57.658172875 +0100 -+++ gdb-7.10.50.20160106/gdb/defs.h 2016-01-09 15:07:12.431264378 +0100 -@@ -145,6 +145,9 @@ extern void set_quit_flag (void); +Index: gdb-7.12.50.20170207/gdb/defs.h +=================================================================== +--- gdb-7.12.50.20170207.orig/gdb/defs.h 2017-02-26 21:11:35.654350580 +0100 ++++ gdb-7.12.50.20170207/gdb/defs.h 2017-02-26 21:11:52.932473129 +0100 +@@ -169,6 +169,10 @@ /* Flag that function quit should call quit_force. */ extern volatile int sync_quit_force_run; +#ifdef NEED_DETACH_SIGSTOP +extern int quit_flag_cleanup; +#endif - extern int immediate_quit; - ++ extern void quit (void); -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/extension.c gdb-7.10.50.20160106/gdb/extension.c ---- gdb-7.10.50.20160106-orig/gdb/extension.c 2016-01-06 02:48:37.000000000 +0100 -+++ gdb-7.10.50.20160106/gdb/extension.c 2016-01-09 15:07:12.434264396 +0100 -@@ -833,6 +833,11 @@ check_quit_flag (void) + + /* Helper for the QUIT macro. */ +Index: gdb-7.12.50.20170207/gdb/extension.c +=================================================================== +--- gdb-7.12.50.20170207.orig/gdb/extension.c 2017-02-26 21:11:35.655350587 +0100 ++++ gdb-7.12.50.20170207/gdb/extension.c 2017-02-26 21:11:52.933473136 +0100 +@@ -830,6 +830,11 @@ int i, result = 0; const struct extension_language_defn *extlang; +#ifdef NEED_DETACH_SIGSTOP + if (quit_flag_cleanup) + return 0; -+ +#endif ++ ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) { if (extlang->ops->check_quit_flag != NULL) -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/top.c gdb-7.10.50.20160106/gdb/top.c ---- gdb-7.10.50.20160106-orig/gdb/top.c 2016-01-06 02:48:38.000000000 +0100 -+++ gdb-7.10.50.20160106/gdb/top.c 2016-01-09 15:07:12.432264384 +0100 -@@ -1557,7 +1557,13 @@ quit_force (char *args, int from_tty) - qt.args = args; +Index: gdb-7.12.50.20170207/gdb/top.c +=================================================================== +--- gdb-7.12.50.20170207.orig/gdb/top.c 2017-02-26 21:11:35.655350587 +0100 ++++ gdb-7.12.50.20170207/gdb/top.c 2017-02-26 21:11:52.933473136 +0100 +@@ -1619,7 +1619,13 @@ + qt.args = NULL; qt.from_tty = from_tty; +#ifndef NEED_DETACH_SIGSTOP @@ -50,20 +54,21 @@ diff -dup -rup gdb-7.10.50.20160106-orig/gdb/top.c gdb-7.10.50.20160106/gdb/top. /* Get out of tfind mode, and kill or detach all inferiors. */ TRY -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/utils.c gdb-7.10.50.20160106/gdb/utils.c ---- gdb-7.10.50.20160106-orig/gdb/utils.c 2016-01-09 15:06:57.654172850 +0100 -+++ gdb-7.10.50.20160106/gdb/utils.c 2016-01-09 15:07:12.433264390 +0100 -@@ -122,6 +122,13 @@ int job_control; +Index: gdb-7.12.50.20170207/gdb/utils.c +=================================================================== +--- gdb-7.12.50.20170207.orig/gdb/utils.c 2017-02-26 21:11:35.657350601 +0100 ++++ gdb-7.12.50.20170207/gdb/utils.c 2017-02-26 21:11:52.934473143 +0100 +@@ -106,6 +106,13 @@ - int immediate_quit; + int job_control; +#ifdef NEED_DETACH_SIGSTOP +/* Nonzero means we are already processing the quitting cleanups and we should + no longer get aborted. */ + +int quit_flag_cleanup; -+ +#endif ++ /* Nonzero means that strings with character values >0x7F should be printed as octal escapes. Zero means just print the value (e.g. it's an international character, and the terminal or window can cope.) */ diff --git a/gdb-add-index-chmod.patch b/gdb-add-index-chmod.patch new file mode 100644 index 0000000..00b37c4 --- /dev/null +++ b/gdb-add-index-chmod.patch @@ -0,0 +1,69 @@ +http://sourceware.org/ml/gdb-patches/2017-01/msg00110.html +Subject: [patch] contrib/gdb-add-index.sh: chmod u+w + + +--AhhlLboLdkugWU4S +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline + +Hi, + +in Fedora 24 it still worked, in Fedora 25 it does not - *-debuginfo.rpm +no longer have the .gdb_index accelerating section now. + +It happens because: +objcopy: unable to copy file 'foo.debug'; reason: Permission denied + +*.debug files in Fedora were always 444 but the time gdb-add-index is run is +still before the *.debug split and in Fedora 24 the files were -rwxr-xr-x +that time while in Fedora 25 they are apparently no longer w. + +OK for check-in? + + +Jan + +--AhhlLboLdkugWU4S +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline; filename=1 + +gdb/ChangeLog +2017-01-06 Jan Kratochvil + + * contrib/gdb-add-index.sh: Use chmod u+w for $file. + +diff --git a/gdb/contrib/gdb-add-index.sh b/gdb/contrib/gdb-add-index.sh +index 0cd4ce3..5a190a0 100755 +--- a/gdb/contrib/gdb-add-index.sh ++++ b/gdb/contrib/gdb-add-index.sh +@@ -38,10 +38,11 @@ fi + dir="${file%/*}" + test "$dir" = "$file" && dir="." + index="${file}.gdb-index" ++mode="${file}.mode" + +-rm -f $index ++rm -f $index $mode + # Ensure intermediate index file is removed when we exit. +-trap "rm -f $index" 0 ++trap "rm -f $index $mode" 0 + + $GDB --batch -nx -iex 'set auto-load no' \ + -ex "file $file" -ex "save gdb-index $dir" || { +@@ -58,8 +59,13 @@ $GDB --batch -nx -iex 'set auto-load no' \ + status=0 + + if test -f "$index"; then ++ touch "$mode" ++ chmod --reference="$file" "$mode" ++ # objcopy: unable to copy file 'foo.debug'; reason: Permission denied ++ chmod u+w "$file" + $OBJCOPY --add-section .gdb_index="$index" \ + --set-section-flags .gdb_index=readonly "$file" "$file" ++ chmod --reference="$mode" "$file" + status=$? + else + echo "$myname: No index was created for $file" 1>&2 + +--AhhlLboLdkugWU4S-- + diff --git a/gdb-archer-pie-addons-keep-disabled.patch b/gdb-archer-pie-addons-keep-disabled.patch deleted file mode 100644 index b6a486d..0000000 --- a/gdb-archer-pie-addons-keep-disabled.patch +++ /dev/null @@ -1,83 +0,0 @@ -Index: gdb-7.10.50.20160121/gdb/breakpoint.c -=================================================================== ---- gdb-7.10.50.20160121.orig/gdb/breakpoint.c 2016-01-21 21:52:34.243387043 +0100 -+++ gdb-7.10.50.20160121/gdb/breakpoint.c 2016-01-21 21:53:00.365542925 +0100 -@@ -16139,6 +16139,50 @@ - static struct cmd_list_element *enablebreaklist = NULL; - - void -+breakpoints_relocate (struct objfile *objfile, struct section_offsets *delta) -+{ -+ struct bp_location *bl, **blp_tmp; -+ int changed = 0; -+ -+ gdb_assert (objfile->separate_debug_objfile_backlink == NULL); -+ -+ ALL_BP_LOCATIONS (bl, blp_tmp) -+ { -+ struct obj_section *osect; -+ -+ /* BL->SECTION can be correctly NULL for breakpoints with multiple -+ locations expanded through symtab. */ -+ -+ ALL_OBJFILE_OSECTIONS (objfile, osect) -+ { -+ CORE_ADDR relocated_address; -+ CORE_ADDR delta_offset; -+ -+ delta_offset = ANOFFSET (delta, osect->the_bfd_section->index); -+ if (delta_offset == 0) -+ continue; -+ relocated_address = bl->address + delta_offset; -+ -+ if (obj_section_addr (osect) <= relocated_address -+ && relocated_address < obj_section_endaddr (osect)) -+ { -+ if (bl->inserted) -+ remove_breakpoint (bl, mark_uninserted); -+ -+ bl->address += delta_offset; -+ bl->requested_address += delta_offset; -+ -+ changed = 1; -+ } -+ } -+ } -+ -+ if (changed) -+ qsort (bp_location, bp_location_count, sizeof (*bp_location), -+ bp_location_compare); -+} -+ -+void - _initialize_breakpoint (void) - { - struct cmd_list_element *c; -Index: gdb-7.10.50.20160121/gdb/breakpoint.h -=================================================================== ---- gdb-7.10.50.20160121.orig/gdb/breakpoint.h 2016-01-21 21:52:34.244387049 +0100 -+++ gdb-7.10.50.20160121/gdb/breakpoint.h 2016-01-21 21:53:00.366542931 +0100 -@@ -1629,4 +1629,7 @@ - UIOUT iff debugging multiple threads. */ - extern void maybe_print_thread_hit_breakpoint (struct ui_out *uiout); - -+extern void breakpoints_relocate (struct objfile *objfile, -+ struct section_offsets *delta); -+ - #endif /* !defined (BREAKPOINT_H) */ -Index: gdb-7.10.50.20160121/gdb/objfiles.c -=================================================================== ---- gdb-7.10.50.20160121.orig/gdb/objfiles.c 2016-01-21 21:52:34.245387055 +0100 -+++ gdb-7.10.50.20160121/gdb/objfiles.c 2016-01-21 21:53:00.367542937 +0100 -@@ -916,6 +916,11 @@ - obj_section_addr (s)); - } - -+ /* Final call of breakpoint_re_set can keep breakpoint locations disabled if -+ their addresses match. */ -+ if (objfile->separate_debug_objfile_backlink == NULL) -+ breakpoints_relocate (objfile, delta); -+ - /* Data changed. */ - return 1; - } diff --git a/gdb-archer-pie-addons.patch b/gdb-archer-pie-addons.patch index 85a6967..240b17e 100644 --- a/gdb-archer-pie-addons.patch +++ b/gdb-archer-pie-addons.patch @@ -42,30 +42,6 @@ Index: gdb-7.9.50.20150520/gdb/gdbtypes.h #define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n)) -Index: gdb-7.9.50.20150520/gdb/jv-lang.c -=================================================================== ---- gdb-7.9.50.20150520.orig/gdb/jv-lang.c 2015-05-31 16:55:29.724475491 +0200 -+++ gdb-7.9.50.20150520/gdb/jv-lang.c 2015-05-31 16:55:30.820482408 +0200 -@@ -427,7 +427,8 @@ java_link_class_type (struct gdbarch *gd - - fields = NULL; - nfields--; /* First set up dummy "class" field. */ -- SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas)); -+ SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas) -+ - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type))))); - TYPE_FIELD_NAME (type, nfields) = "class"; - TYPE_FIELD_TYPE (type, nfields) = value_type (clas); - SET_TYPE_FIELD_PRIVATE (type, nfields); -@@ -475,7 +476,8 @@ java_link_class_type (struct gdbarch *gd - SET_TYPE_FIELD_PROTECTED (type, i); - } - if (accflags & 0x0008) /* ACC_STATIC */ -- SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset); -+ SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset -+ - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type))))); - else - SET_FIELD_BITPOS (TYPE_FIELD (type, i), 8 * boffset); - if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */ Index: gdb-7.9.50.20150520/gdb/value.c =================================================================== --- gdb-7.9.50.20150520.orig/gdb/value.c 2015-05-31 16:55:29.725475497 +0200 diff --git a/gdb-archer-vla-tests.patch b/gdb-archer-vla-tests.patch index 556f9d1..6c8a3a6 100644 --- a/gdb-archer-vla-tests.patch +++ b/gdb-archer-vla-tests.patch @@ -1,8 +1,8 @@ -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.ada/packed_array.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.ada/packed_array.exp =================================================================== ---- gdb-7.10.50.20151027.orig/gdb/testsuite/gdb.ada/packed_array.exp 2015-10-27 02:48:32.000000000 +0100 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.ada/packed_array.exp 2015-11-03 22:23:27.212877605 +0100 -@@ -56,5 +56,11 @@ gdb_test_multiple "$test" "$test" { +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.ada/packed_array.exp 2017-02-26 19:15:28.552824751 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.ada/packed_array.exp 2017-02-26 19:15:36.597882316 +0100 +@@ -56,5 +56,11 @@ # are. Observed with (FSF GNU Ada 4.5.3 20110124). xfail $test } @@ -14,10 +14,493 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.ada/packed_array.exp + } } -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S 2015-11-03 22:23:27.212877605 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S 2017-02-26 19:15:36.598882323 +0100 +@@ -0,0 +1,358 @@ ++ .file "x86_64-vla-pointer.c" ++ .text ++.Ltext0: ++ .globl foo ++ .type foo, @function ++foo: ++.LFB0: ++ .file 1 "gdb.arch/x86_64-vla-pointer.c" ++ # gdb.arch/x86_64-vla-pointer.c:22 ++ .loc 1 22 0 ++ .cfi_startproc ++# BLOCK 2 seq:0 ++# PRED: ENTRY (FALLTHRU) ++ pushq %rbp ++ .cfi_def_cfa_offset 16 ++ .cfi_offset 6, -16 ++ movq %rsp, %rbp ++ .cfi_def_cfa_register 6 ++ pushq %rbx ++ subq $56, %rsp ++ .cfi_offset 3, -24 ++ movl %edi, -52(%rbp) ++ # gdb.arch/x86_64-vla-pointer.c:22 ++ .loc 1 22 0 ++ movq %rsp, %rax ++ movq %rax, %rsi ++ # gdb.arch/x86_64-vla-pointer.c:23 ++ .loc 1 23 0 ++ movl -52(%rbp), %eax ++ movslq %eax, %rdx ++ subq $1, %rdx ++ movq %rdx, -32(%rbp) ++ movslq %eax, %rdx ++ movq %rdx, %r8 ++ movl $0, %r9d ++ # gdb.arch/x86_64-vla-pointer.c:24 ++ .loc 1 24 0 ++ movslq %eax, %rdx ++ movq %rdx, %rcx ++ movl $0, %ebx ++ cltq ++ movl $16, %edx ++ subq $1, %rdx ++ addq %rdx, %rax ++ movl $16, %ebx ++ movl $0, %edx ++ divq %rbx ++ imulq $16, %rax, %rax ++ subq %rax, %rsp ++ movq %rsp, %rax ++ addq $0, %rax ++ movq %rax, -40(%rbp) ++ # gdb.arch/x86_64-vla-pointer.c:27 ++ .loc 1 27 0 ++ movl $0, -20(%rbp) ++# SUCC: 4 [100.0%] ++ jmp .L2 ++# BLOCK 3 seq:1 ++# PRED: 4 ++.L3: ++ # gdb.arch/x86_64-vla-pointer.c:28 ++ .loc 1 28 0 discriminator 3 ++ movl -20(%rbp), %eax ++ movl %eax, %ecx ++ movq -40(%rbp), %rdx ++ movl -20(%rbp), %eax ++ cltq ++ movb %cl, (%rdx,%rax) ++# SUCC: 4 (FALLTHRU,DFS_BACK) ++ # gdb.arch/x86_64-vla-pointer.c:27 ++ .loc 1 27 0 discriminator 3 ++ addl $1, -20(%rbp) ++# BLOCK 4 seq:2 ++# PRED: 3 (FALLTHRU,DFS_BACK) 2 [100.0%] ++.L2: ++ # gdb.arch/x86_64-vla-pointer.c:27 ++ .loc 1 27 0 is_stmt 0 discriminator 1 ++ movl -20(%rbp), %eax ++ cmpl -52(%rbp), %eax ++# SUCC: 3 5 (FALLTHRU) ++ jl .L3 ++# BLOCK 5 seq:3 ++# PRED: 4 (FALLTHRU) ++ # gdb.arch/x86_64-vla-pointer.c:30 ++ .loc 1 30 0 is_stmt 1 ++ movq -40(%rbp), %rax ++ movb $0, (%rax) ++ movq %rsi, %rsp ++ # gdb.arch/x86_64-vla-pointer.c:31 ++ .loc 1 31 0 ++ nop ++ movq -8(%rbp), %rbx ++ leave ++ .cfi_def_cfa 7, 8 ++# SUCC: EXIT [100.0%] ++ ret ++ .cfi_endproc ++.LFE0: ++ .size foo, .-foo ++.Letext0: ++ .section .debug_info,"",@progbits ++.Ldebug_info0: ++ .long 0xa5 # Length of Compilation Unit Info ++ .value 0x4 # DWARF version number ++ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section ++ .byte 0x8 # Pointer Size (in bytes) ++ .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit) ++ .long .LASF3 # DW_AT_producer: "GNU C11 6.2.1 20160916 (Red Hat 6.2.1-2) -mtune=generic -march=x86-64 -g" ++ .byte 0xc # DW_AT_language ++ .long .LASF4 # DW_AT_name: "gdb.arch/x86_64-vla-pointer.c" ++ .long .LASF5 # DW_AT_comp_dir: "/home/jkratoch/redhat/fedora/gdb/master/gdb-7.12/gdb/testsuite" ++ .quad .Ltext0 # DW_AT_low_pc ++ .quad .Letext0-.Ltext0 # DW_AT_high_pc ++ .long .Ldebug_line0 # DW_AT_stmt_list ++ .uleb128 0x2 # (DIE (0x2d) DW_TAG_subprogram) ++ # DW_AT_external ++ .ascii "foo\0" # DW_AT_name ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c) ++ .byte 0x15 # DW_AT_decl_line ++ # DW_AT_prototyped ++ .quad .LFB0 # DW_AT_low_pc ++ .quad .LFE0-.LFB0 # DW_AT_high_pc ++ .uleb128 0x1 # DW_AT_frame_base ++ .byte 0x9c # DW_OP_call_frame_cfa ++ # DW_AT_GNU_all_call_sites ++ .long 0x80 # DW_AT_sibling ++ .uleb128 0x3 # (DIE (0x4a) DW_TAG_formal_parameter) ++ .long .LASF6 # DW_AT_name: "size" ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c) ++ .byte 0x15 # DW_AT_decl_line ++ .long 0x80 # DW_AT_type ++ .uleb128 0x3 # DW_AT_location ++ .byte 0x91 # DW_OP_fbreg ++ .sleb128 -68 ++ .uleb128 0x4 # (DIE (0x59) DW_TAG_typedef) ++ .long .LASF7 # DW_AT_name: "array_t" ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c) ++ .byte 0x17 # DW_AT_decl_line ++ .long 0x87 # DW_AT_type ++ .uleb128 0x5 # (DIE (0x64) DW_TAG_variable) ++ .long .LASF0 # DW_AT_name: "array" ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c) ++ .byte 0x18 # DW_AT_decl_line ++ .long 0x59 # DW_AT_type ++ .uleb128 0x3 # DW_AT_location ++ .byte 0x91 # DW_OP_fbreg ++ .sleb128 -56 ++ .byte 0x6 # DW_OP_deref ++ .uleb128 0x6 # (DIE (0x73) DW_TAG_variable) ++ .ascii "i\0" # DW_AT_name ++ .byte 0x1 # DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c) ++ .byte 0x19 # DW_AT_decl_line ++ .long 0x80 # DW_AT_type ++ .uleb128 0x2 # DW_AT_location ++ .byte 0x91 # DW_OP_fbreg ++ .sleb128 -36 ++ .byte 0 # end of children of DIE 0x2d ++ .uleb128 0x7 # (DIE (0x80) DW_TAG_base_type) ++ .byte 0x4 # DW_AT_byte_size ++ .byte 0x5 # DW_AT_encoding ++ .ascii "int\0" # DW_AT_name ++ .uleb128 0x8 # (DIE (0x87) DW_TAG_array_type) ++ .long 0xa1 # DW_AT_type ++ .long 0x9a # DW_AT_sibling ++ .uleb128 0x9 # (DIE (0x90) DW_TAG_subrange_type) ++ .long 0x9a # DW_AT_type ++ .uleb128 0x3 # DW_AT_upper_bound ++ .byte 0x91 # DW_OP_fbreg ++ .sleb128 -48 ++ .byte 0x6 # DW_OP_deref ++ .byte 0 # end of children of DIE 0x87 ++ .uleb128 0xa # (DIE (0x9a) DW_TAG_base_type) ++ .byte 0x8 # DW_AT_byte_size ++ .byte 0x7 # DW_AT_encoding ++ .long .LASF1 # DW_AT_name: "sizetype" ++ .uleb128 0xa # (DIE (0xa1) DW_TAG_base_type) ++ .byte 0x1 # DW_AT_byte_size ++ .byte 0x6 # DW_AT_encoding ++ .long .LASF2 # DW_AT_name: "char" ++ .byte 0 # end of children of DIE 0xb ++ .section .debug_abbrev,"",@progbits ++.Ldebug_abbrev0: ++ .uleb128 0x1 # (abbrev code) ++ .uleb128 0x11 # (TAG: DW_TAG_compile_unit) ++ .byte 0x1 # DW_children_yes ++ .uleb128 0x25 # (DW_AT_producer) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x13 # (DW_AT_language) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x1b # (DW_AT_comp_dir) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x12 # (DW_AT_high_pc) ++ .uleb128 0x7 # (DW_FORM_data8) ++ .uleb128 0x10 # (DW_AT_stmt_list) ++ .uleb128 0x17 # (DW_FORM_sec_offset) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x2 # (abbrev code) ++ .uleb128 0x2e # (TAG: DW_TAG_subprogram) ++ .byte 0x1 # DW_children_yes ++ .uleb128 0x3f # (DW_AT_external) ++ .uleb128 0x19 # (DW_FORM_flag_present) ++ .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 0x19 # (DW_FORM_flag_present) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x12 # (DW_AT_high_pc) ++ .uleb128 0x7 # (DW_FORM_data8) ++ .uleb128 0x40 # (DW_AT_frame_base) ++ .uleb128 0x18 # (DW_FORM_exprloc) ++ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) ++ .uleb128 0x19 # (DW_FORM_flag_present) ++ .uleb128 0x1 # (DW_AT_sibling) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x3 # (abbrev code) ++ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) ++ .byte 0 # DW_children_no ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .uleb128 0x2 # (DW_AT_location) ++ .uleb128 0x18 # (DW_FORM_exprloc) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x4 # (abbrev code) ++ .uleb128 0x16 # (TAG: DW_TAG_typedef) ++ .byte 0 # DW_children_no ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x5 # (abbrev code) ++ .uleb128 0x34 # (TAG: DW_TAG_variable) ++ .byte 0 # DW_children_no ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .uleb128 0x2 # (DW_AT_location) ++ .uleb128 0x18 # (DW_FORM_exprloc) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x6 # (abbrev code) ++ .uleb128 0x34 # (TAG: DW_TAG_variable) ++ .byte 0 # DW_children_no ++ .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 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .uleb128 0x2 # (DW_AT_location) ++ .uleb128 0x18 # (DW_FORM_exprloc) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x7 # (abbrev code) ++ .uleb128 0x24 # (TAG: DW_TAG_base_type) ++ .byte 0 # DW_children_no ++ .uleb128 0xb # (DW_AT_byte_size) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3e # (DW_AT_encoding) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0x8 # (DW_FORM_string) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x8 # (abbrev code) ++ .uleb128 0x1 # (TAG: DW_TAG_array_type) ++ .byte 0x1 # DW_children_yes ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .uleb128 0x1 # (DW_AT_sibling) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x9 # (abbrev code) ++ .uleb128 0x21 # (TAG: DW_TAG_subrange_type) ++ .byte 0 # DW_children_no ++ .uleb128 0x49 # (DW_AT_type) ++ .uleb128 0x13 # (DW_FORM_ref4) ++ .uleb128 0x2f # (DW_AT_upper_bound) ++ .uleb128 0x18 # (DW_FORM_exprloc) ++ .byte 0 ++ .byte 0 ++ .uleb128 0xa # (abbrev code) ++ .uleb128 0x24 # (TAG: DW_TAG_base_type) ++ .byte 0 # DW_children_no ++ .uleb128 0xb # (DW_AT_byte_size) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3e # (DW_AT_encoding) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .section .debug_aranges,"",@progbits ++ .long 0x2c # Length of Address Ranges Info ++ .value 0x2 # DWARF Version ++ .long .Ldebug_info0 # Offset of Compilation Unit Info ++ .byte 0x8 # Size of Address ++ .byte 0 # Size of Segment Descriptor ++ .value 0 # Pad to 16 byte boundary ++ .value 0 ++ .quad .Ltext0 # Address ++ .quad .Letext0-.Ltext0 # Length ++ .quad 0 ++ .quad 0 ++ .section .debug_line,"",@progbits ++.Ldebug_line0: ++ .section .debug_str,"MS",@progbits,1 ++.LASF4: ++ .string "gdb.arch/x86_64-vla-pointer.c" ++.LASF7: ++ .string "array_t" ++.LASF3: ++ .string "GNU C11 6.2.1 20160916 (Red Hat 6.2.1-2) -mtune=generic -march=x86-64 -g" ++.LASF2: ++ .string "char" ++.LASF1: ++ .string "sizetype" ++.LASF5: ++ .string "/home/jkratoch/redhat/fedora/gdb/master/gdb-7.12/gdb/testsuite" ++.LASF6: ++ .string "size" ++.LASF0: ++ .string "array" ++ .ident "GCC: (GNU) 6.2.1 20160916 (Red Hat 6.2.1-2)" ++ .section .note.GNU-stack,"",@progbits +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c 2017-02-26 19:15:36.598882323 +0100 +@@ -0,0 +1,45 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2009 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 . */ ++ ++#if 0 ++ ++void ++foo (int size) ++{ ++ typedef char array_t[size]; ++ array_t array; ++ int i; ++ ++ for (i = 0; i < size; i++) ++ array[i] = i; ++ ++ array[0] = 0; /* break-here */ ++} ++ ++#else ++ ++void foo (int size); ++ ++int ++main (void) ++{ ++ foo (26); ++ foo (78); ++ return 0; ++} ++ ++#endif +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp 2017-02-26 19:15:36.598882323 +0100 +@@ -0,0 +1,65 @@ ++# Copyright 2009 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 . ++ ++if ![istarget "x86_64-*-*"] then { ++ verbose "Skipping over gdb.arch/x86_64-vla-pointer.exp test made only for x86_64." ++ return ++} ++ ++set testfile x86_64-vla-pointer ++set srcasmfile ${testfile}-foo.S ++set srcfile ${testfile}.c ++set binfile [standard_output_file ${testfile}] ++set binobjfile [standard_output_file ${testfile}-foo.o] ++if { [gdb_compile "${srcdir}/${subdir}/${srcasmfile}" "${binobjfile}" object {}] != "" } { ++ untested "Couldn't compile test program" ++ return -1 ++} ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${binobjfile}" "${binfile}" executable {}] != "" } { ++ untested "Couldn't compile test program" ++ return -1 ++} ++ ++gdb_exit ++gdb_start ++gdb_reinitialize_dir $srcdir/$subdir ++gdb_load ${binfile} ++ ++if ![runto_main] { ++ untested x86_64-vla-pointer ++ return -1 ++} ++ ++gdb_breakpoint $srcfile:[gdb_get_line_number "break-here"] ++ ++gdb_continue_to_breakpoint "break-here" ++ ++gdb_test "whatis array" "type = array_t" "first: whatis array" ++gdb_test "whatis array_t" "type = char \\\[variable length\\\]" "first: whatis array_t" ++gdb_test "ptype array" "type = char \\\[26\\\]" "first: ptype array" ++ ++gdb_test "whatis *array" "type = char" "first: whatis *array" ++gdb_test "ptype *array" "type = char" "first: ptype *array" ++ ++gdb_test "p array\[1\]" "\\$\[0-9\] = 1 '\\\\001'" ++gdb_test "p array\[2\]" "\\$\[0-9\] = 2 '\\\\002'" ++gdb_test "p array\[3\]" "\\$\[0-9\] = 3 '\\\\003'" ++gdb_test "p array\[4\]" "\\$\[0-9\] = 4 '\\\\004'" ++ ++gdb_continue_to_breakpoint "break_here" ++ ++gdb_test "whatis array" "type = array_t" "second: whatis array" ++gdb_test "whatis array_t" "type = char \\\[variable length\\\]" "second: whatis array_t" ++gdb_test "ptype array" "type = char \\\[78\\\]" "second: ptype array" +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S 2017-02-26 19:15:36.598882323 +0100 @@ -0,0 +1,455 @@ + .file "x86_64-vla-typedef.c" + .section .debug_abbrev,"",@progbits @@ -474,11 +957,11 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S + .string "GNU C 4.3.2 20081105 (Red Hat 4.3.2-7)" + .ident "GCC: (GNU) 4.3.2 20081105 (Red Hat 4.3.2-7)" + .section .note.GNU-stack,"",@progbits -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c 2015-11-03 22:23:27.213877611 +0100 -@@ -0,0 +1,43 @@ ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c 2017-02-26 19:15:36.599882330 +0100 +@@ -0,0 +1,45 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 Free Software Foundation, Inc. @@ -513,6 +996,8 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c + +#else + ++void foo (int size); ++ +int +main (void) +{ @@ -522,10 +1007,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c +} + +#endif -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp 2017-02-26 19:15:36.599882330 +0100 @@ -0,0 +1,64 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -552,8 +1037,8 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp +set testfile x86_64-vla-typedef +set srcasmfile ${testfile}-foo.S +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} -+set binobjfile ${objdir}/${subdir}/${testfile}-foo.o ++set binfile [standard_output_file ${testfile}] ++set binobjfile [standard_output_file ${testfile}-foo.o] +if { [gdb_compile "${srcdir}/${subdir}/${srcasmfile}" "${binobjfile}" object {}] != "" } { + untested "Couldn't compile test program" + return -1 @@ -591,10 +1076,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp +gdb_test "whatis array" "type = array_t" "second: whatis array" + +gdb_test "ptype array" "type = char \\\[78\\\]" "second: ptype array" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/arrayidx.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/arrayidx.c =================================================================== ---- gdb-7.10.50.20151027.orig/gdb/testsuite/gdb.base/arrayidx.c 2015-10-27 02:48:32.000000000 +0100 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/arrayidx.c 2015-11-03 22:23:27.213877611 +0100 +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.base/arrayidx.c 2017-02-26 19:15:28.555824772 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/arrayidx.c 2017-02-26 19:15:36.599882330 +0100 @@ -17,6 +17,13 @@ int array[] = {1, 2, 3, 4}; @@ -609,13 +1094,13 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/arrayidx.c int main (void) { -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/arrayidx.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/arrayidx.exp =================================================================== ---- gdb-7.10.50.20151027.orig/gdb/testsuite/gdb.base/arrayidx.exp 2015-10-27 02:48:32.000000000 +0100 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/arrayidx.exp 2015-11-03 22:23:27.213877611 +0100 -@@ -49,4 +49,12 @@ gdb_test "print array" \ +--- gdb-7.12.50.20170207.orig/gdb/testsuite/gdb.base/arrayidx.exp 2017-02-26 19:15:28.555824772 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/arrayidx.exp 2017-02-26 19:15:36.599882330 +0100 +@@ -49,4 +49,12 @@ "\\{\\\[0\\\] = 1, \\\[1\\\] = 2, \\\[2\\\] = 3, \\\[3\\\] = 4\\}" \ - "Print array with array-indexes on" + "print array with array-indexes on" - +set test "p unbound.a == &unbound.a\[0\]" @@ -627,10 +1112,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/arrayidx.exp + unsupported "$test (no GCC)" + } +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/internal-var-field-address.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/internal-var-field-address.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/internal-var-field-address.c 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/internal-var-field-address.c 2017-02-26 19:15:36.599882330 +0100 @@ -0,0 +1,20 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -652,10 +1137,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/internal-var-field-address.c +struct { + int field; +} staticstruct = { 1 }; -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/internal-var-field-address.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/internal-var-field-address.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/internal-var-field-address.exp 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/internal-var-field-address.exp 2017-02-26 19:15:36.600882337 +0100 @@ -0,0 +1,26 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -683,10 +1168,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/internal-var-field-address.ex + +gdb_test {set $varstruct = staticstruct} +gdb_test {p $varstruct.field} " = 1" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-frame.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-frame.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-frame.c 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-frame.c 2017-02-26 19:15:36.600882337 +0100 @@ -0,0 +1,31 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -719,10 +1204,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-frame.c + f (s); + return 0; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-frame.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-frame.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-frame.exp 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-frame.exp 2017-02-26 19:15:36.600882337 +0100 @@ -0,0 +1,38 @@ +# Copyright 2011 Free Software Foundation, Inc. +# @@ -762,10 +1247,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-frame.exp +} + +gdb_test "bt full" "\r\n +s = \"X\\\\000\"\r\n.*" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-overflow.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-overflow.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-overflow.c 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-overflow.c 2017-02-26 19:15:36.600882337 +0100 @@ -0,0 +1,30 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -797,10 +1282,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-overflow.c + + return 0; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-overflow.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-overflow.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-overflow.exp 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla-overflow.exp 2017-02-26 19:15:36.600882337 +0100 @@ -0,0 +1,109 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -832,9 +1317,9 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-overflow.exp +# #29 in backtrace_command_1 () at ../../gdb/stack.c:1273 + +set testfile vla-overflow -+set shfile ${objdir}/${subdir}/${testfile}-gdb.sh ++set shfile [standard_output_file ${testfile}-gdb.sh] +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested "Couldn't compile test program" + return -1 @@ -911,10 +1396,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla-overflow.exp +gdb_test "bt" "in \[^ \]*abort \\(.* in main \\(.*" "Backtrace after abort()" + +verbose -log "kb_found in bt after abort() = [expr [memory_v_pages_get] * $pagesize / 1024]" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla.c 2015-11-03 22:23:27.213877611 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla.c 2017-02-26 19:15:36.600882337 +0100 @@ -0,0 +1,55 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -971,10 +1456,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla.c + foo (78); + return 0; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla.exp 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.base/vla.exp 2017-02-26 19:15:36.600882337 +0100 @@ -0,0 +1,62 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -993,7 +1478,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla.exp + +set testfile vla +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested "Couldn't compile test program" + return -1 @@ -1038,10 +1523,382 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.base/vla.exp +gdb_test "p temp1" " = '1' " "second: print temp1" +gdb_test "p temp2" " = '2' " "second: print temp2" +gdb_test "p temp3" " = '3' " "second: print temp3" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.cp/gdb9593.cc =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.cp/gdb9593.cc 2017-02-26 19:15:36.601882344 +0100 +@@ -0,0 +1,180 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2008, 2009 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 . ++ */ ++#include ++ ++using namespace std; ++ ++class NextOverThrowDerivates ++{ ++ ++public: ++ ++ ++ // Single throw an exception in this function. ++ void function1() ++ { ++ throw 20; ++ } ++ ++ // Throw an exception in another function. ++ void function2() ++ { ++ function1(); ++ } ++ ++ // Throw an exception in another function, but handle it ++ // locally. ++ void function3 () ++ { ++ { ++ try ++ { ++ function1 (); ++ } ++ catch (...) ++ { ++ cout << "Caught and handled function1 exception" << endl; ++ } ++ } ++ } ++ ++ void rethrow () ++ { ++ try ++ { ++ function1 (); ++ } ++ catch (...) ++ { ++ throw; ++ } ++ } ++ ++ void finish () ++ { ++ // We use this to test that a "finish" here does not end up in ++ // this frame, but in the one above. ++ try ++ { ++ function1 (); ++ } ++ catch (int x) ++ { ++ } ++ function1 (); // marker for until ++ } ++ ++ void until () ++ { ++ function1 (); ++ function1 (); // until here ++ } ++ ++}; ++NextOverThrowDerivates next_cases; ++ ++ ++int main () ++{ ++ try ++ { ++ next_cases.function1 (); ++ } ++ catch (...) ++ { ++ // Discard ++ } ++ ++ try ++ { ++ next_cases.function2 (); ++ } ++ catch (...) ++ { ++ // Discard ++ } ++ ++ try ++ { ++ // This is duplicated so we can next over one but step into ++ // another. ++ next_cases.function2 (); ++ } ++ catch (...) ++ { ++ // Discard ++ } ++ ++ next_cases.function3 (); ++ ++ try ++ { ++ next_cases.rethrow (); ++ } ++ catch (...) ++ { ++ // Discard ++ } ++ ++ try ++ { ++ // Another duplicate so we can test "finish". ++ next_cases.function2 (); ++ } ++ catch (...) ++ { ++ // Discard ++ } ++ ++ // Another test for "finish". ++ try ++ { ++ next_cases.finish (); ++ } ++ catch (...) ++ { ++ } ++ ++ // Test of "until". ++ try ++ { ++ next_cases.finish (); ++ } ++ catch (...) ++ { ++ } ++ ++ // Test of "until" with an argument. ++ try ++ { ++ next_cases.until (); ++ } ++ catch (...) ++ { ++ } ++ ++ // Test of "advance". ++ try ++ { ++ next_cases.until (); ++ } ++ catch (...) ++ { ++ } ++} ++ +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.cp/gdb9593.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.cp/gdb9593.exp 2017-02-26 19:15:36.601882344 +0100 +@@ -0,0 +1,182 @@ ++# Copyright 2008, 2009 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 . ++ ++ ++if $tracelevel then { ++ strace $tracelevel ++} ++ ++if { [skip_cplus_tests] } { continue } ++ ++set testfile "gdb9593" ++set srcfile ${testfile}.cc ++set binfile [standard_output_file $testfile] ++ ++# Create and source the file that provides information about the compiler ++# used to compile the test case. ++if [get_compiler_info "c++"] { ++ untested gdb9593.exp ++ return -1 ++} ++ ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { ++ untested gdb9593.exp ++ return -1 ++} ++ ++# Some targets can't do function calls, so don't even bother with this ++# test. ++if [target_info exists gdb,cannot_call_functions] { ++ setup_xfail "*-*-*" 9593 ++ fail "This target can not call functions" ++ continue ++} ++ ++gdb_exit ++gdb_start ++gdb_reinitialize_dir $srcdir/$subdir ++gdb_load ${binfile} ++ ++if ![runto_main] then { ++ perror "couldn't run to main" ++ continue ++} ++ ++# See whether we have the needed unwinder hooks. ++set ok 1 ++gdb_test_multiple "print _Unwind_DebugHook" "check for unwinder hook" { ++ -re "= .*_Unwind_DebugHook.*\r\n$gdb_prompt $" { ++ pass "check for unwinder hook" ++ } ++ -re "No symbol .* in current context.\r\n$gdb_prompt $" { ++ # Pass the test so we don't get bogus fails in the results. ++ pass "check for unwinder hook" ++ set ok 0 ++ } ++} ++if {!$ok} { ++ untested gdb9593.exp ++ return -1 ++} ++ ++# See http://sourceware.org/bugzilla/show_bug.cgi?id=9593 ++ ++gdb_test "next" \ ++ ".*catch (...).*" \ ++ "next over a throw 1" ++ ++gdb_test "next" \ ++ ".*next_cases.function2.*" \ ++ "next past catch 1" ++ ++gdb_test "next" \ ++ ".*catch (...).*" \ ++ "next over a throw 2" ++ ++gdb_test "next" \ ++ ".*next_cases.function2.*" \ ++ "next past catch 2" ++ ++gdb_test "step" \ ++ ".*function1().*" \ ++ "step into function2 1" ++ ++gdb_test "next" \ ++ ".*catch (...).*" \ ++ "next over a throw 3" ++ ++gdb_test "next" \ ++ ".*next_cases.function3.*" \ ++ "next past catch 3" ++ ++gdb_test "next" \ ++ ".*next_cases.rethrow.*" \ ++ "next over a throw 4" ++ ++gdb_test "next" \ ++ ".*catch (...).*" \ ++ "next over a rethrow" ++ ++gdb_test "next" \ ++ ".*next_cases.function2.*" \ ++ "next after a rethrow" ++ ++gdb_test "step" \ ++ ".*function1().*" \ ++ "step into function2 2" ++ ++gdb_test "finish" \ ++ ".*catch (...).*" \ ++ "finish 1" ++ ++gdb_test "next" \ ++ ".*next_cases.finish ().*" \ ++ "next past catch 4" ++ ++gdb_test "step" \ ++ ".*function1 ().*" \ ++ "step into finish method" ++ ++gdb_test "finish" \ ++ ".*catch (...).*" \ ++ "finish 2" ++ ++gdb_test "next" \ ++ ".*next_cases.finish ().*" \ ++ "next past catch 5" ++ ++gdb_test "step" \ ++ ".*function1 ().*" \ ++ "step into finish, for until" ++ ++gdb_test "until" \ ++ ".*function1 ().*" \ ++ "until with no argument 1" ++ ++set line [gdb_get_line_number "marker for until" $testfile.cc] ++ ++gdb_test "until $line" \ ++ ".*function1 ().*" \ ++ "next past catch 6" ++ ++gdb_test "until" \ ++ ".*catch (...).*" \ ++ "until with no argument 2" ++ ++set line [gdb_get_line_number "until here" $testfile.cc] ++ ++gdb_test "next" \ ++ ".*next_cases.until ().*" \ ++ "next past catch 6" ++ ++gdb_test "step" \ ++ ".*function1 ().*" \ ++ "step into until" ++ ++gdb_test "until $line" \ ++ ".*catch (...).*" \ ++ "until-over-throw" ++ ++gdb_test "next" \ ++ ".*next_cases.until ().*" \ ++ "next past catch 7" ++ ++gdb_test "step" \ ++ ".*function1 ().*" \ ++ "step into until, for advance" ++ ++gdb_test "advance $line" \ ++ ".*catch (...).*" \ ++ "advance-over-throw" +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S 2017-02-26 19:15:36.601882344 +0100 @@ -0,0 +1,246 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -1289,10 +2146,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S + .string "char" +.Luint_str: + .string "unsigned int" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp 2017-02-26 19:15:36.602882352 +0100 @@ -0,0 +1,66 @@ +# Copyright 2010 Free Software Foundation, Inc. + @@ -1360,10 +2217,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp + +# The register contains unpredictable value - the array size. +gdb_test "ptype reg_string" {type = char \[-?[0-9]+\]} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-stripped.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-stripped.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-stripped.c 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-stripped.c 2017-02-26 19:15:36.602882352 +0100 @@ -0,0 +1,42 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -1407,10 +2264,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-stripped.c + func1 (1, 2); + return 0; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 2017-02-26 19:15:36.602882352 +0100 @@ -0,0 +1,79 @@ +# Copyright 2006 Free Software Foundation, Inc. + @@ -1443,7 +2300,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp + +set testfile "dw2-stripped" +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile}.x ++set binfile [standard_output_file ${testfile}.x] + +remote_exec build "rm -f ${binfile}" + @@ -1491,10 +2348,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp +gdb_test "step" \ + "func.* \\(.*\\) at .*" \ + "step" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S 2017-02-26 19:15:36.602882352 +0100 @@ -0,0 +1,83 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -1579,10 +2436,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-loca + + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp 2017-02-26 19:15:36.602882352 +0100 @@ -0,0 +1,37 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -1621,10 +2478,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-loca +clean_restart $binfile + +gdb_test "ptype struct some_struct" "type = struct some_struct {\[\r\n \t\]*void field;\[\r\n \t\]*}" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S 2015-11-03 22:23:27.214877617 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S 2017-02-26 19:15:36.602882352 +0100 @@ -0,0 +1,121 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -1747,10 +2604,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S + .byte 0x0 /* Terminator */ + + .byte 0x0 /* Terminator */ -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp 2017-02-26 19:15:36.603882359 +0100 @@ -0,0 +1,39 @@ +# Copyright 2012 Free Software Foundation, Inc. + @@ -1791,10 +2648,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp + +gdb_test "ptype notype_string" {type = char \[129\]} +gdb_test "p notype_string" " = 'x' " -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dwarf-stride.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dwarf-stride.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2017-02-26 19:15:36.603882359 +0100 @@ -0,0 +1,42 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -1838,10 +2695,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dwarf-stride.exp +gdb_continue_to_breakpoint "break-here" ".*break-here.*" +gdb_test "p c40pt(1)" " = '0-hello.*" +gdb_test "p c40pt(2)" " = '1-hello.*" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dwarf-stride.f90 +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dwarf-stride.f90 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dwarf-stride.f90 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dwarf-stride.f90 2017-02-26 19:15:36.603882359 +0100 @@ -0,0 +1,40 @@ +! Copyright 2009 Free Software Foundation, Inc. +! @@ -1883,11 +2740,11 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dwarf-stride.f90 + print *, c40pt ! break-here + +end program repro -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dynamic.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp 2015-11-03 22:27:25.481281904 +0100 -@@ -0,0 +1,151 @@ ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dynamic.exp 2017-02-26 19:15:36.603882359 +0100 +@@ -0,0 +1,154 @@ +# Copyright 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify @@ -1913,7 +2770,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp + +set testfile "dynamic" +set srcfile ${testfile}.f90 -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f90 quiet}] != "" } { + untested "Couldn't compile ${srcfile}" @@ -1932,11 +2789,13 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp + +gdb_breakpoint [gdb_get_line_number "varx-init"] +gdb_continue_to_breakpoint "varx-init" -+gdb_test "p varx" "\\$\[0-9\]* = " "p varx unallocated" -+gdb_test "ptype varx" "type = " "ptype varx unallocated" -+gdb_test "p varx(1,5,17)" {no such vector element \(vector not allocated\)} "p varx(1,5,17) unallocated" -+gdb_test "p varx(1,5,17)=1" {no such vector element \(vector not allocated\)} "p varx(1,5,17)=1 unallocated" -+gdb_test "ptype varx(1,5,17)" {no such vector element \(vector not allocated\)} "ptype varx(1,5,17) unallocated" ++ ++# http://www.cs.rpi.edu/~szymansk/OOF90/bugs.html#5 ++# Do not: gdb_test "p varx" "\\$\[0-9\]* = " "p varx unallocated" ++# Do not: gdb_test "ptype varx" {type = real\(kind=4\) \(:,:,:\)} "ptype varx unallocated" ++# Do not: gdb_test "p varx(1,5,17)" {no such vector element \(vector not allocated\)} "p varx(1,5,17) unallocated" ++# Do not: gdb_test "p varx(1,5,17)=1" {no such vector element \(vector not allocated\)} "p varx(1,5,17)=1 unallocated" ++# Do not: gdb_test "ptype varx(1,5,17)" {no such vector element \(vector not allocated\)} "ptype varx(1,5,17) unallocated" + +gdb_breakpoint [gdb_get_line_number "varx-allocated"] +gdb_continue_to_breakpoint "varx-allocated" @@ -1951,8 +2810,9 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp +gdb_test "p varx(1, 5, 17)" "\\$\[0-9\]* = 7" +gdb_test "p varx(2, 6, 18)" "\\$\[0-9\]* = 8" +gdb_test "p varx(6, 15, 28)" "\\$\[0-9\]* = 9" -+gdb_test "p varv" "\\$\[0-9\]* = " "p varv unassociated" -+gdb_test "ptype varv" "type = " "ptype varv unassociated" ++# http://www.cs.rpi.edu/~szymansk/OOF90/bugs.html#5 ++# Do not: gdb_test "p varv" "\\$\[0-9\]* = " "p varv unassociated" ++# Do not: gdb_test "ptype varv" {type = real\(kind=4\) \(:,:,:\)} "ptype varv unassociated" + +set test "output varx" +gdb_test_multiple $test $test { @@ -1980,7 +2840,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp +gdb_continue_to_breakpoint "varv-deassociated" +# The latter one is for the Intel Fortran Compiler 10.1.008 pointer type. +gdb_test "p varv" "\\$\[0-9\]* = (|.*(Cannot access it|Unable to access the object) because the object is not associated.)" "p varv deassociated" -+gdb_test "ptype varv" "type = (|.*(Cannot access it|Unable to access the object) because the object is not associated.)" "ptype varv deassociated" ++gdb_test "ptype varv" {type = real\(kind=4\) \(:,:,:\)} "ptype varv deassociated" +gdb_test "p l" "\\$\[0-9\]* = \\.FALSE\\." "p l if varv deassociated" +gdb_test "p varv(1,5,17)" {no such vector element \(vector not associated\)} +gdb_test "ptype varv(1,5,17)" {no such vector element \(vector not associated\)} @@ -1988,7 +2848,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp +gdb_breakpoint [gdb_get_line_number "varx-deallocated"] +gdb_continue_to_breakpoint "varx-deallocated" +gdb_test "p varx" "\\$\[0-9\]* = " "p varx deallocated" -+gdb_test "ptype varx" "type = " "ptype varx deallocated" ++gdb_test "ptype varx" {type = real\(kind=4\) \(:,:,:\)} "ptype varx deallocated" +gdb_test "p l" "\\$\[0-9\]* = \\.FALSE\\." "p l if varx deallocated" +gdb_test "p varx(1,5,17)" {no such vector element \(vector not allocated\)} "p varx(1,5,17) deallocated" +gdb_test "ptype varx(1,5,17)" {no such vector element \(vector not allocated\)} "ptype varx(1,5,17) deallocated" @@ -2039,10 +2899,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.exp +gdb_test "p vart(3,8)" "\\$\[0-9\]* = 9" +# maps to foo::vary(1,3) +gdb_test "p vart(2,9)" "\\$\[0-9\]* = 10" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.f90 +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dynamic.f90 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.f90 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/dynamic.f90 2017-02-26 19:15:36.603882359 +0100 @@ -0,0 +1,98 @@ +! Copyright 2007 Free Software Foundation, Inc. +! @@ -2142,10 +3002,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/dynamic.f90 + if (x (1, 1) .ne. 8 .or. x (2, 2) .ne. 9 .or. x (1, 2) .ne. 4) call abort + if (x (3, 1) .ne. 10) call abort +end -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/string.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/string.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/string.exp 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/string.exp 2017-02-26 19:15:36.604882366 +0100 @@ -0,0 +1,59 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -2170,7 +3030,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/string.exp + +set testfile "string" +set srcfile ${testfile}.f90 -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f90 quiet}] != "" } { + untested "Couldn't compile ${srcfile}" @@ -2206,10 +3066,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/string.exp +gdb_continue_to_breakpoint "var-finish" +gdb_test "p e" "\\$\[0-9\]* = 'e '" "p e re-set" +gdb_test "p f" "\\$\[0-9\]* = \\(\\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f2 ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\)" "p *f re-set" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/string.f90 +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/string.f90 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/string.f90 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/string.f90 2017-02-26 19:15:36.604882366 +0100 @@ -0,0 +1,37 @@ +! Copyright 2008 Free Software Foundation, Inc. +! @@ -2248,10 +3108,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/string.f90 + h = 'h' + call foo (g, h) +end -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/subrange.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/subrange.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/subrange.exp 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/subrange.exp 2017-02-26 19:15:36.604882366 +0100 @@ -0,0 +1,72 @@ +# Copyright 2011 Free Software Foundation, Inc. + @@ -2325,10 +3185,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/subrange.exp +gdb_unload +setup_kfail "*-*-*" "vlaregression/9999" +gdb_test {p $a (3, 2:2)} { = \(23\)} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/subrange.f90 +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/subrange.f90 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/subrange.f90 2015-11-03 22:23:27.215877623 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.fortran/subrange.f90 2017-02-26 19:15:36.604882366 +0100 @@ -0,0 +1,28 @@ +! Copyright 2011 Free Software Foundation, Inc. +! @@ -2358,10 +3218,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.fortran/subrange.f90 + ptr => a + write (*,*) a ! break-static +end -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.mi/mi2-var-stale-type.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi2-var-stale-type.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.mi/mi2-var-stale-type.c 2015-11-03 22:23:27.216877629 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi2-var-stale-type.c 2017-02-26 19:15:36.604882366 +0100 @@ -0,0 +1,26 @@ +/* Copyright 2011 Free Software Foundation, Inc. + @@ -2389,10 +3249,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.mi/mi2-var-stale-type.c + + return 0; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp 2015-11-03 22:23:27.216877629 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp 2017-02-26 19:15:36.604882366 +0100 @@ -0,0 +1,57 @@ +# Copyright 2011 Free Software Foundation, Inc. +# @@ -2451,10 +3311,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp +mi_create_varobj "vla" "vla" "create local variable vla" + +mi_gdb_test "-var-update *" "\\^done,changelist=.*" "-var-update *" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register-func.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/array-from-register-func.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register-func.c 2015-11-03 22:23:27.216877629 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/array-from-register-func.c 2017-02-26 19:15:36.604882366 +0100 @@ -0,0 +1,22 @@ +/* This file is part of GDB, the GNU debugger. + @@ -2478,10 +3338,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register-func.c +{ + return arr[0]; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register.c +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/array-from-register.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register.c 2015-11-03 22:23:27.216877629 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/array-from-register.c 2017-02-26 19:15:36.605882373 +0100 @@ -0,0 +1,28 @@ +/* This file is part of GDB, the GNU debugger. + @@ -2511,10 +3371,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register.c + + return 0; +} -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/array-from-register.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register.exp 2015-11-03 22:23:27.216877629 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/array-from-register.exp 2017-02-26 19:15:36.605882373 +0100 @@ -0,0 +1,33 @@ +# Copyright 2009 Free Software Foundation, Inc. +# @@ -2549,10 +3409,87 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.opt/array-from-register.exp +# Seen regression: +# Address requested for identifier "arr" which is in register $rdi +gdb_test "p arr\[0\]" "\\$\[0-9\]+ = 42" -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.pascal/arrays.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/fortran-string.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/fortran-string.exp 2017-02-26 19:15:36.605882373 +0100 +@@ -0,0 +1,39 @@ ++# Copyright 2009 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 2 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, write to the Free Software ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++# This file was written by Jan Kratochvil . ++ ++# Test GDB can cope with Fortran strings having their length present in a CPU ++# register. With -O0 the string length is passed on the stack. To make this ++# test meaningful the follow assertion should pass. It is not being checked ++# here as the "_s" symbol is compiler dependent: ++# (gdb) info address _s ++# Symbol "_s" is a variable in register XX. ++ ++set test fortran-string ++set srcfile ${test}.f90 ++if { [prepare_for_testing ${test}.exp ${test} ${srcfile} {debug f90 additional_flags=-O2}] } { ++ return -1 ++} ++ ++if ![runto $srcfile:[gdb_get_line_number "s = s"]] then { ++ perror "couldn't run to breakpoint MAIN__" ++ continue ++} ++ ++gdb_test "frame" ".*s='foo'.*" ++gdb_test "ptype s" "type = character\\*3" ++gdb_test "p s" "\\$\[0-9\]* = 'foo'" +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/fortran-string.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.opt/fortran-string.f90 2017-02-26 19:15:36.605882373 +0100 +@@ -0,0 +1,28 @@ ++! Copyright 2009 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 2 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, write to the Free Software ++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++! ++! Ihis file is the Fortran source file for dynamic.exp. ++! Original file written by Jakub Jelinek . ++! Modified for the GDB testcase by Jan Kratochvil . ++ ++ subroutine f(s) ++ character*(*) s ++ s = s ++ end ++ ++ program main ++ call f ('foo') ++ end +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.pascal/arrays.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.pascal/arrays.exp 2015-11-03 22:23:27.216877629 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.pascal/arrays.exp 2017-02-26 19:15:36.605882373 +0100 @@ -0,0 +1,104 @@ +# Copyright 2008, 2009 Free Software Foundation, Inc. +# @@ -2577,7 +3514,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.pascal/arrays.exp + +set testfile "arrays" +set srcfile ${testfile}.pas -+set binfile ${objdir}/${subdir}/${testfile}$EXEEXT ++set binfile [standard_output_file ${testfile}$EXEEXT] + +# These tests only work with fpc, using the -gw3 compile-option +pascal_init @@ -2658,10 +3595,10 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.pascal/arrays.exp +} +gdb_test "print DynArrChar" ".* = 'abcdefghijklm'" "Print dynamic array of char" + -Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.pascal/arrays.pas +Index: gdb-7.12.50.20170207/gdb/testsuite/gdb.pascal/arrays.pas =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151027/gdb/testsuite/gdb.pascal/arrays.pas 2015-11-03 22:23:27.216877629 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/gdb.pascal/arrays.pas 2017-02-26 19:15:36.605882373 +0100 @@ -0,0 +1,82 @@ +{ + Copyright 2008, 2009 Free Software Foundation, Inc. @@ -2745,11 +3682,11 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/gdb.pascal/arrays.pas + s := 'test'#0'string'; + writeln(s); { set breakpoint 2 here } +end. -Index: gdb-7.10.50.20151027/gdb/testsuite/lib/gdb.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/lib/gdb.exp =================================================================== ---- gdb-7.10.50.20151027.orig/gdb/testsuite/lib/gdb.exp 2015-11-03 22:23:26.684874457 +0100 -+++ gdb-7.10.50.20151027/gdb/testsuite/lib/gdb.exp 2015-11-03 22:23:27.217877635 +0100 -@@ -173,6 +173,11 @@ proc gdb_unload {} { +--- gdb-7.12.50.20170207.orig/gdb/testsuite/lib/gdb.exp 2017-02-26 19:15:28.564824836 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/lib/gdb.exp 2017-02-26 19:15:36.607882387 +0100 +@@ -178,6 +178,11 @@ send_gdb "y\n" exp_continue } @@ -2761,11 +3698,11 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/lib/gdb.exp -re "Discard symbol table from .*y or n.*$" { send_gdb "y\n" exp_continue -Index: gdb-7.10.50.20151027/gdb/testsuite/lib/pascal.exp +Index: gdb-7.12.50.20170207/gdb/testsuite/lib/pascal.exp =================================================================== ---- gdb-7.10.50.20151027.orig/gdb/testsuite/lib/pascal.exp 2015-10-27 02:48:32.000000000 +0100 -+++ gdb-7.10.50.20151027/gdb/testsuite/lib/pascal.exp 2015-11-03 22:23:27.217877635 +0100 -@@ -37,6 +37,9 @@ proc pascal_init {} { +--- gdb-7.12.50.20170207.orig/gdb/testsuite/lib/pascal.exp 2017-02-26 19:15:28.565824844 +0100 ++++ gdb-7.12.50.20170207/gdb/testsuite/lib/pascal.exp 2017-02-26 19:15:36.607882387 +0100 +@@ -37,6 +37,9 @@ global pascal_compiler_is_fpc global gpc_compiler global fpc_compiler @@ -2775,7 +3712,7 @@ Index: gdb-7.10.50.20151027/gdb/testsuite/lib/pascal.exp global env if { $pascal_init_done == 1 } { -@@ -64,6 +67,20 @@ proc pascal_init {} { +@@ -64,6 +67,20 @@ set pascal_compiler_is_fpc 1 verbose -log "Free Pascal compiler found" } diff --git a/gdb-archer.patch b/gdb-archer.patch deleted file mode 100644 index 617cc0f..0000000 --- a/gdb-archer.patch +++ /dev/null @@ -1,617 +0,0 @@ -http://sourceware.org/gdb/wiki/ProjectArcher -http://sourceware.org/gdb/wiki/ArcherBranchManagement - -GIT snapshot: -commit f0ee78c5ccefe388a64273353ecd5c99dae62558 - -tromey/python - - -diff --git a/README.archer b/README.archer -new file mode 100644 -index 0000000..173b8ea ---- /dev/null -+++ b/README.archer -@@ -0,0 +1,2 @@ -+This branch originally held the Python code for gdb. It still exists -+because a small amount of code here has not yet been merged upstream. -diff --git a/gdb/Makefile.in b/gdb/Makefile.in -index 95104ef..a9b198a 100644 ---- a/gdb/Makefile.in -+++ b/gdb/Makefile.in -@@ -1534,6 +1534,12 @@ stamp-h: $(srcdir)/config.in config.status - CONFIG_LINKS= \ - $(SHELL) config.status - -+.gdbinit: $(srcdir)/gdbinit.in config.status -+ CONFIG_FILES=".gdbinit:gdbinit.in" \ -+ CONFIG_COMMANDS= \ -+ CONFIG_HEADERS= \ -+ $(SHELL) config.status -+ - config.status: $(srcdir)/configure configure.tgt configure.host ../bfd/development.sh - $(SHELL) config.status --recheck - -diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in -index 30cfd17..e977b30 100644 ---- a/gdb/data-directory/Makefile.in -+++ b/gdb/data-directory/Makefile.in -@@ -65,7 +65,10 @@ PYTHON_FILE_LIST = \ - gdb/unwinder.py \ - gdb/prompt.py \ - gdb/xmethod.py \ -+ gdb/types.py \ - gdb/command/__init__.py \ -+ gdb/command/ignore_errors.py \ -+ gdb/command/pahole.py \ - gdb/command/xmethods.py \ - gdb/command/frame_filters.py \ - gdb/command/unwinders.py \ -@@ -76,6 +79,8 @@ PYTHON_FILE_LIST = \ - gdb/function/__init__.py \ - gdb/function/caller_is.py \ - gdb/function/strfns.py \ -+ gdb/function/caller_is.py \ -+ gdb/function/in_scope.py \ - gdb/printer/__init__.py \ - gdb/printer/bound_registers.py - -diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo -index 1665372..c4caffc 100644 ---- a/gdb/doc/gdb.texinfo -+++ b/gdb/doc/gdb.texinfo -@@ -1225,6 +1225,16 @@ for remote debugging. - Run using @var{device} for your program's standard input and output. - @c FIXME: kingdon thinks there is more to -tty. Investigate. - -+@item -P -+@cindex @code{-P} -+@itemx --python -+@cindex @code{--python} -+Change interpretation of command line so that the argument immediately -+following this switch is taken to be the name of a Python script file. -+This option stops option processing; subsequent options are passed to -+Python as @code{sys.argv}. This option is only available if Python -+scripting support was enabled when @value{GDBN} was configured. -+ - @c resolve the situation of these eventually - @item -tui - @cindex @code{--tui} -diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi -index 57ec22e..13beb05 100644 ---- a/gdb/doc/python.texi -+++ b/gdb/doc/python.texi -@@ -88,8 +88,6 @@ containing @code{end}. For example: - - @smallexample - (@value{GDBP}) python --Type python script --End with a line saying just "end". - >print 23 - >end - 23 -diff --git a/gdb/gdb-gdb.gdb.in b/gdb/gdb-gdb.gdb.in -index 05a38b2..9801fdf 100644 ---- a/gdb/gdb-gdb.gdb.in -+++ b/gdb/gdb-gdb.gdb.in -@@ -1,5 +1,15 @@ - echo Setting up the environment for debugging gdb.\n - -+# Set up the Python library and "require" command. -+python -+from os.path import abspath -+gdb.datadir = abspath ('@srcdir@/python/lib') -+gdb.pythonlibdir = gdb.datadir -+gdb.__path__ = [gdb.datadir + '/gdb'] -+sys.path.insert(0, gdb.datadir) -+end -+source @srcdir@/python/lib/gdb/__init__.py -+ - if !$gdb_init_done - set variable $gdb_init_done = 1 - -diff --git a/gdb/main.c b/gdb/main.c -index aecd60a..d0f7834 100644 ---- a/gdb/main.c -+++ b/gdb/main.c -@@ -33,6 +33,7 @@ - - #include "interps.h" - #include "main.h" -+#include "python/python.h" - #include "source.h" - #include "cli/cli-cmds.h" - #include "objfiles.h" -@@ -453,6 +454,8 @@ captured_main (void *data) - char *cdarg = NULL; - char *ttyarg = NULL; - -+ int python_script = 0; -+ - /* These are static so that we can take their address in an - initializer. */ - static int print_help; -@@ -663,10 +666,14 @@ captured_main (void *data) - {"args", no_argument, &set_args, 1}, - {"l", required_argument, 0, 'l'}, - {"return-child-result", no_argument, &return_child_result, 1}, -+#if HAVE_PYTHON -+ {"python", no_argument, 0, 'P'}, -+ {"P", no_argument, 0, 'P'}, -+#endif - {0, no_argument, 0, 0} - }; - -- while (1) -+ while (!python_script) - { - int option_index; - -@@ -684,6 +691,9 @@ captured_main (void *data) - case 0: - /* Long option that just sets a flag. */ - break; -+ case 'P': -+ python_script = 1; -+ break; - case OPT_SE: - symarg = optarg; - execarg = optarg; -@@ -864,7 +874,31 @@ captured_main (void *data) - - /* Now that gdb_init has created the initial inferior, we're in - position to set args for that inferior. */ -- if (set_args) -+ if (python_script) -+ { -+ /* The first argument is a python script to evaluate, and -+ subsequent arguments are passed to the script for -+ processing there. */ -+ if (optind >= argc) -+ { -+ fprintf_unfiltered (gdb_stderr, -+ _("%s: Python script file name required\n"), -+ argv[0]); -+ exit (1); -+ } -+ -+ /* FIXME: should handle inferior I/O intelligently here. -+ E.g., should be possible to run gdb in pipeline and have -+ Python (and gdb) output go to stderr or file; and if a -+ prompt is needed, open the tty. */ -+ quiet = 1; -+ /* FIXME: should read .gdbinit if, and only if, a prompt is -+ requested by the script. Though... maybe this is not -+ ideal? */ -+ /* FIXME: likewise, reading in history. */ -+ inhibit_gdbinit = 1; -+ } -+ else if (set_args) - { - /* The remaining options are the command-line options for the - inferior. The first one is the sym/exec file, and the rest -@@ -1137,7 +1171,8 @@ captured_main (void *data) - - /* Read in the old history after all the command files have been - read. */ -- init_history (); -+ if (!python_script) -+ init_history (); - - if (batch_flag) - { -@@ -1148,13 +1183,25 @@ captured_main (void *data) - /* Show time and/or space usage. */ - do_cleanups (pre_stat_chain); - -- /* NOTE: cagney/1999-11-07: There is probably no reason for not -- moving this loop and the code found in captured_command_loop() -- into the command_loop() proper. The main thing holding back that -- change - SET_TOP_LEVEL() - has been eliminated. */ -- while (1) -+#if HAVE_PYTHON -+ if (python_script) - { -- catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL); -+ extern int pagination_enabled; -+ pagination_enabled = 0; -+ run_python_script (argc - optind, &argv[optind]); -+ return 1; -+ } -+ else -+#endif -+ { -+ /* NOTE: cagney/1999-11-07: There is probably no reason for not -+ moving this loop and the code found in captured_command_loop() -+ into the command_loop() proper. The main thing holding back that -+ change - SET_TOP_LEVEL() - has been eliminated. */ -+ while (1) -+ { -+ catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL); -+ } - } - /* No exit -- exit is through quit_command. */ - } -@@ -1188,6 +1235,12 @@ print_gdb_help (struct ui_file *stream) - fputs_unfiltered (_("\ - This is the GNU debugger. Usage:\n\n\ - gdb [options] [executable-file [core-file or process-id]]\n\ -+ gdb [options] --args executable-file [inferior-arguments ...]\n"), stream); -+#if HAVE_PYTHON -+ fputs_unfiltered (_("\ -+ gdb [options] [--python|-P] script-file [script-arguments ...]\n"), stream); -+#endif -+ fputs_unfiltered (_("\n\ - gdb [options] --args executable-file [inferior-arguments ...]\n\n\ - "), stream); - fputs_unfiltered (_("\ -@@ -1232,6 +1285,13 @@ Output and user interface control:\n\n\ - #endif - fputs_unfiltered (_("\ - --dbx DBX compatibility mode.\n\ -+"), stream); -+#if HAVE_PYTHON -+ fputs_unfiltered (_("\ -+ --python, -P Following argument is Python script file; remaining\n\ -+ arguments are passed to script.\n"), stream); -+#endif -+ fputs_unfiltered (_("\ - -q, --quiet, --silent\n\ - Do not print version number on startup.\n\n\ - "), stream); -diff --git a/gdb/python/lib/gdb/command/ignore_errors.py b/gdb/python/lib/gdb/command/ignore_errors.py -new file mode 100644 -index 0000000..6fa48ff ---- /dev/null -+++ b/gdb/python/lib/gdb/command/ignore_errors.py -@@ -0,0 +1,37 @@ -+# Ignore errors in user commands. -+ -+# Copyright (C) 2008 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 . -+ -+import gdb -+ -+class IgnoreErrorsCommand (gdb.Command): -+ """Execute a single command, ignoring all errors. -+Only one-line commands are supported. -+This is primarily useful in scripts.""" -+ -+ def __init__ (self): -+ super (IgnoreErrorsCommand, self).__init__ ("ignore-errors", -+ gdb.COMMAND_OBSCURE, -+ # FIXME... -+ gdb.COMPLETE_COMMAND) -+ -+ def invoke (self, arg, from_tty): -+ try: -+ gdb.execute (arg, from_tty) -+ except: -+ pass -+ -+IgnoreErrorsCommand () -diff --git a/gdb/python/lib/gdb/command/pahole.py b/gdb/python/lib/gdb/command/pahole.py -new file mode 100644 -index 0000000..e08eaf5 ---- /dev/null -+++ b/gdb/python/lib/gdb/command/pahole.py -@@ -0,0 +1,81 @@ -+# pahole command for gdb -+ -+# Copyright (C) 2008, 2009, 2012 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 . -+ -+import gdb -+ -+class Pahole (gdb.Command): -+ """Show the holes in a structure. -+This command takes a single argument, a type name. -+It prints the type and displays comments showing where holes are.""" -+ -+ def __init__ (self): -+ super (Pahole, self).__init__ ("pahole", gdb.COMMAND_NONE, -+ gdb.COMPLETE_SYMBOL) -+ -+ def maybe_print_hole(self, bitpos, field_bitpos): -+ if bitpos != field_bitpos: -+ hole = field_bitpos - bitpos -+ print (' /* XXX %d bit hole, try to pack */' % hole) -+ -+ def pahole (self, type, level, name): -+ if name is None: -+ name = '' -+ tag = type.tag -+ if tag is None: -+ tag = '' -+ print ('%sstruct %s {' % (' ' * (2 * level), tag)) -+ bitpos = 0 -+ for field in type.fields (): -+ # Skip static fields. -+ if not hasattr (field, ('bitpos')): -+ continue -+ -+ ftype = field.type.strip_typedefs() -+ -+ self.maybe_print_hole(bitpos, field.bitpos) -+ bitpos = field.bitpos -+ if field.bitsize > 0: -+ fieldsize = field.bitsize -+ else: -+ # TARGET_CHAR_BIT here... -+ fieldsize = 8 * ftype.sizeof -+ -+ # TARGET_CHAR_BIT -+ print (' /* %3d %3d */' % (int (bitpos / 8), int (fieldsize / 8)), end = "") -+ bitpos = bitpos + fieldsize -+ -+ if ftype.code == gdb.TYPE_CODE_STRUCT: -+ self.pahole (ftype, level + 1, field.name) -+ else: -+ print (' ' * (2 + 2 * level), end = "") -+ print ('%s %s' % (str (ftype), field.name)) -+ -+ if level == 0: -+ self.maybe_print_hole(bitpos, 8 * type.sizeof) -+ -+ print (' ' * (14 + 2 * level), end = "") -+ print ('} %s' % name) -+ -+ def invoke (self, arg, from_tty): -+ type = gdb.lookup_type (arg) -+ type = type.strip_typedefs () -+ if type.code != gdb.TYPE_CODE_STRUCT: -+ raise (TypeError, '%s is not a struct type' % arg) -+ print (' ' * 14, end = "") -+ self.pahole (type, 0, '') -+ -+Pahole() -diff --git a/gdb/python/lib/gdb/function/in_scope.py b/gdb/python/lib/gdb/function/in_scope.py -new file mode 100644 -index 0000000..8742680 ---- /dev/null -+++ b/gdb/python/lib/gdb/function/in_scope.py -@@ -0,0 +1,47 @@ -+# In-scope function. -+ -+# Copyright (C) 2008 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 . -+ -+import gdb -+ -+class InScope (gdb.Function): -+ """Return True if all the given variables or macros are in scope. -+Takes one argument for each variable name to be checked.""" -+ -+ def __init__ (self): -+ super (InScope, self).__init__ ("in_scope") -+ -+ def invoke (self, *vars): -+ if len (vars) == 0: -+ raise (TypeError, "in_scope takes at least one argument") -+ -+ # gdb.Value isn't hashable so it can't be put in a map. -+ # Convert to string first. -+ wanted = set (map (lambda x: x.string (), vars)) -+ found = set () -+ block = gdb.selected_frame ().block () -+ while block: -+ for sym in block: -+ if (sym.is_argument or sym.is_constant -+ or sym.is_function or sym.is_variable): -+ if sym.name in wanted: -+ found.add (sym.name) -+ -+ block = block.superblock -+ -+ return wanted == found -+ -+InScope () -diff --git a/gdb/python/python.c b/gdb/python/python.c -index 4f88b0e..870a1ba 100644 ---- a/gdb/python/python.c -+++ b/gdb/python/python.c -@@ -93,6 +93,8 @@ const struct extension_language_defn extension_language_python = - #include "linespec.h" - #include "source.h" - #include "version.h" -+#include "inferior.h" -+#include "gdbthread.h" - #include "target.h" - #include "gdbthread.h" - #include "interps.h" -@@ -1262,6 +1264,83 @@ gdbpy_print_stack (void) - - /* Return the current Progspace. - There always is one. */ -+/* True if 'gdb -P' was used, false otherwise. */ -+static int running_python_script; -+ -+/* True if we are currently in a call to 'gdb.cli', false otherwise. */ -+static int in_cli; -+ -+/* Enter the command loop. */ -+ -+static PyObject * -+gdbpy_cli (PyObject *unused1, PyObject *unused2) -+{ -+ if (! running_python_script || in_cli) -+ return PyErr_Format (PyExc_RuntimeError, "cannot invoke CLI recursively"); -+ -+ if (ui_out_is_mi_like_p (current_uiout)) -+ return PyErr_Format (PyExc_RuntimeError, _("Cannot invoke CLI from MI.")); -+ -+ in_cli = 1; -+ current_interp_command_loop (); -+ in_cli = 0; -+ -+ Py_RETURN_NONE; -+} -+ -+/* Set up the Python argument vector and evaluate a script. This is -+ used to implement 'gdb -P'. */ -+ -+void -+run_python_script (int argc, char **argv) -+{ -+ FILE *input; -+ -+ /* We never free this, since we plan to exit at the end. */ -+ ensure_python_env (get_current_arch (), current_language); -+ -+ running_python_script = 1; -+ -+#if PYTHON_ABI_VERSION < 3 -+ PySys_SetArgv (argc - 1, argv + 1); -+#else -+ { -+ wchar_t **wargv = alloca (sizeof (*wargv) * (argc + 1)); -+ int i; -+ -+ for (i = 1; i < argc; i++) -+ { -+ size_t len = mbstowcs (NULL, argv[i], 0); -+ size_t len2; -+ -+ if (len == (size_t) -1) -+ { -+ fprintf (stderr, "Invalid multibyte argument #%d \"%s\"\n", -+ i, argv[i]); -+ exit (1); -+ } -+ wargv[i] = alloca (sizeof (**wargv) * (len + 1)); -+ len2 = mbstowcs (wargv[i], argv[i], len + 1); -+ assert (len2 == len); -+ } -+ wargv[argc] = NULL; -+ PySys_SetArgv (argc - 1, wargv + 1); -+ } -+#endif -+ -+ input = fopen (argv[0], "r"); -+ if (! input) -+ { -+ fprintf (stderr, "could not open %s: %s\n", argv[0], strerror (errno)); -+ exit (1); -+ } -+ PyRun_SimpleFile (input, argv[0]); -+ fclose (input); -+ exit (0); -+} -+ -+ -+ - - static PyObject * - gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2) -@@ -1982,6 +2061,8 @@ PyMethodDef python_GdbMethods[] = - Evaluate command, a string, as a gdb CLI command. Optionally returns\n\ - a Python String containing the output of the command if to_string is\n\ - set to True." }, -+ { "cli", gdbpy_cli, METH_NOARGS, -+ "Enter the gdb CLI" }, - { "parameter", gdbpy_parameter, METH_VARARGS, - "Return a gdb parameter's value" }, - -diff --git a/gdb/python/python.h b/gdb/python/python.h -index e6bfcca..688daa3 100644 ---- a/gdb/python/python.h -+++ b/gdb/python/python.h -@@ -25,4 +25,6 @@ - /* This is all that python exports to gdb. */ - extern const struct extension_language_defn extension_language_python; - -+extern void run_python_script (int argc, char **argv); -+ - #endif /* GDB_PYTHON_H */ -diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp -index 9f25a48..88b0842 100644 ---- a/gdb/testsuite/gdb.gdb/selftest.exp -+++ b/gdb/testsuite/gdb.gdb/selftest.exp -@@ -92,6 +92,10 @@ proc do_steps_and_nexts {} { - set description "step over cmdarg_vec initialization" - set command "step" - } -+ -re ".*python_script = 0.*$gdb_prompt $" { -+ set description "step over python_script initialization" -+ set command "step" -+ } - -re ".*pre_stat_chain = make_command_stats_cleanup.*$gdb_prompt $" { - set description "next over make_command_stats_cleanup and everything it calls" - set command "next" -diff --git a/gdb/testsuite/gdb.python/py-frame.exp b/gdb/testsuite/gdb.python/py-frame.exp -index 33fdbe5..264d00f 100644 ---- a/gdb/testsuite/gdb.python/py-frame.exp -+++ b/gdb/testsuite/gdb.python/py-frame.exp -@@ -95,6 +95,8 @@ gdb_test "python print ('result = %s' % f0.read_var ('a'))" " = 1" "test Frame.r - - gdb_test "python print ('result = %s' % (gdb.selected_frame () == f1))" " = True" "test gdb.selected_frame" - -+gdb_test "python print ('result = %s' % (f0.block ()))" "" "test Frame.block" -+ - # Can read SP register. - gdb_test "python print ('result = %s' % (gdb.selected_frame ().read_register ('sp') == gdb.parse_and_eval ('\$sp')))" \ - " = True" \ -diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp -index baa17b7..45ad67e 100644 ---- a/gdb/testsuite/gdb.python/py-value.exp -+++ b/gdb/testsuite/gdb.python/py-value.exp -@@ -388,6 +388,15 @@ proc test_value_after_death {} { - "print value's type" - } - -+# Regression test for a cast failure. The bug was that if we cast a -+# value to its own type, gdb could crash. This happened because we -+# could end up double-freeing a struct value. -+proc test_cast_regression {} { -+ gdb_test "python v = gdb.Value(5)" "" "create value for cast test" -+ gdb_test "python v = v.cast(v.type)" "" "cast value for cast test" -+ gdb_test "python print(v)" "5" "print value for cast test" -+} -+ - # Regression test for invalid subscript operations. The bug was that - # the type of the value was not being checked before allowing a - # subscript operation to proceed. -@@ -517,6 +526,7 @@ test_value_in_inferior - test_inferior_function_call - test_lazy_strings - test_value_after_death -+test_cast_regression - - # Test either C or C++ values. - diff --git a/gdb-attach-fail-reasons-5of5.patch b/gdb-attach-fail-reasons-5of5.patch index 48d7ab4..d9c55a9 100644 --- a/gdb-attach-fail-reasons-5of5.patch +++ b/gdb-attach-fail-reasons-5of5.patch @@ -37,13 +37,13 @@ gdb/gdbserver/ (linux_create_inferior, linux_tracefork_child): Call it instead of direct ptrace. -Index: gdb-7.10.50.20160106/gdb/nat/linux-ptrace.c +Index: gdb-7.12.50.20170226/gdb/nat/linux-ptrace.c =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/nat/linux-ptrace.c 2016-01-08 19:15:57.580707944 +0100 -+++ gdb-7.10.50.20160106/gdb/nat/linux-ptrace.c 2016-01-08 19:16:02.654736246 +0100 -@@ -24,6 +24,10 @@ - #include "gdb_wait.h" - #include "gdb_ptrace.h" +--- gdb-7.12.50.20170226.orig/gdb/nat/linux-ptrace.c 2017-02-26 21:27:14.780009449 +0100 ++++ gdb-7.12.50.20170226/gdb/nat/linux-ptrace.c 2017-02-26 21:27:18.838038193 +0100 +@@ -27,6 +27,10 @@ + #include + #endif +#ifdef HAVE_SELINUX_SELINUX_H +# include @@ -52,7 +52,7 @@ Index: gdb-7.10.50.20160106/gdb/nat/linux-ptrace.c /* Stores the ptrace options supported by the running kernel. A value of -1 means we did not check for features yet. A value of 0 means there are no supported features. */ -@@ -48,6 +52,8 @@ +@@ -51,6 +55,8 @@ buffer_xml_printf (buffer, _("process %d is a zombie " "- the process has already terminated"), (int) pid); @@ -84,11 +84,11 @@ Index: gdb-7.10.50.20160106/gdb/nat/linux-ptrace.c /* Extract extended ptrace event from wait status. */ int -Index: gdb-7.10.50.20160106/gdb/nat/linux-ptrace.h +Index: gdb-7.12.50.20170226/gdb/nat/linux-ptrace.h =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/nat/linux-ptrace.h 2016-01-08 19:15:57.581707950 +0100 -+++ gdb-7.10.50.20160106/gdb/nat/linux-ptrace.h 2016-01-08 19:16:02.655736251 +0100 -@@ -164,6 +164,7 @@ +--- gdb-7.12.50.20170226.orig/gdb/nat/linux-ptrace.h 2017-02-26 21:27:14.780009449 +0100 ++++ gdb-7.12.50.20170226/gdb/nat/linux-ptrace.h 2017-02-26 21:27:18.838038193 +0100 +@@ -185,6 +185,7 @@ extern char *linux_ptrace_attach_fail_reason_string (ptid_t ptid, int err); extern void linux_ptrace_init_warnings (void); @@ -96,11 +96,11 @@ Index: gdb-7.10.50.20160106/gdb/nat/linux-ptrace.h extern void linux_check_ptrace_features (void); extern void linux_enable_event_reporting (pid_t pid, int attached); extern void linux_disable_event_reporting (pid_t pid); -Index: gdb-7.10.50.20160106/gdb/configure.ac +Index: gdb-7.12.50.20170226/gdb/configure.ac =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/configure.ac 2016-01-08 19:15:57.582707955 +0100 -+++ gdb-7.10.50.20160106/gdb/configure.ac 2016-01-08 19:16:02.656736257 +0100 -@@ -2077,6 +2077,10 @@ +--- gdb-7.12.50.20170226.orig/gdb/configure.ac 2017-02-26 21:27:14.781009456 +0100 ++++ gdb-7.12.50.20170226/gdb/configure.ac 2017-02-26 21:27:18.839038200 +0100 +@@ -2092,6 +2092,10 @@ esac AC_DEFINE_UNQUOTED(GDBINIT,"$gdbinit",[The .gdbinit filename.]) @@ -111,11 +111,11 @@ Index: gdb-7.10.50.20160106/gdb/configure.ac dnl Handle optional features that can be enabled. # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR, -Index: gdb-7.10.50.20160106/gdb/gdbserver/configure.ac +Index: gdb-7.12.50.20170226/gdb/gdbserver/configure.ac =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/gdbserver/configure.ac 2016-01-08 19:15:57.582707955 +0100 -+++ gdb-7.10.50.20160106/gdb/gdbserver/configure.ac 2016-01-08 19:16:02.656736257 +0100 -@@ -524,6 +524,10 @@ +--- gdb-7.12.50.20170226.orig/gdb/gdbserver/configure.ac 2017-02-26 21:27:14.781009456 +0100 ++++ gdb-7.12.50.20170226/gdb/gdbserver/configure.ac 2017-02-26 21:27:18.839038200 +0100 +@@ -469,6 +469,10 @@ fi fi @@ -126,11 +126,11 @@ Index: gdb-7.10.50.20160106/gdb/gdbserver/configure.ac AC_SUBST(GDBSERVER_DEPFILES) AC_SUBST(GDBSERVER_LIBS) AC_SUBST(srv_xmlbuiltin) -Index: gdb-7.10.50.20160106/gdb/gdbserver/linux-low.c +Index: gdb-7.12.50.20170226/gdb/gdbserver/linux-low.c =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/gdbserver/linux-low.c 2016-01-08 19:15:57.585707972 +0100 -+++ gdb-7.10.50.20160106/gdb/gdbserver/linux-low.c 2016-01-08 19:16:02.658736268 +0100 -@@ -853,6 +853,29 @@ +--- gdb-7.12.50.20170226.orig/gdb/gdbserver/linux-low.c 2017-02-26 21:27:14.783009470 +0100 ++++ gdb-7.12.50.20170226/gdb/gdbserver/linux-low.c 2017-02-26 21:27:18.841038214 +0100 +@@ -946,6 +946,29 @@ return lwp; } @@ -160,7 +160,7 @@ Index: gdb-7.10.50.20160106/gdb/gdbserver/linux-low.c /* Start an inferior process and returns its pid. ALLARGS is a vector of program-name and args. */ -@@ -876,7 +899,7 @@ +@@ -969,7 +992,7 @@ if (pid == 0) { close_most_fds (); @@ -169,31 +169,11 @@ Index: gdb-7.10.50.20160106/gdb/gdbserver/linux-low.c setpgid (0, 0); -Index: gdb-7.10.50.20160106/gdb/inf-ptrace.c +Index: gdb-7.12.50.20170226/gdb/linux-nat.c =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/inf-ptrace.c 2016-01-08 19:15:57.586707977 +0100 -+++ gdb-7.10.50.20160106/gdb/inf-ptrace.c 2016-01-08 19:16:02.659736274 +0100 -@@ -79,7 +79,15 @@ - inf_ptrace_me (void) - { - /* "Trace me, Dr. Memory!" */ -+ errno = 0; - ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3)0, 0); -+ if (errno != 0) -+ { -+ fprintf_unfiltered (gdb_stderr, _("Cannot create process: %s\n"), -+ safe_strerror (errno)); -+ gdb_flush (gdb_stderr); -+ _exit (0177); -+ } - } - - /* Start a new inferior Unix child process. EXEC_FILE is the file to -Index: gdb-7.10.50.20160106/gdb/linux-nat.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/linux-nat.c 2016-01-08 19:15:57.587707983 +0100 -+++ gdb-7.10.50.20160106/gdb/linux-nat.c 2016-01-08 19:16:02.660736279 +0100 -@@ -1016,6 +1016,7 @@ +--- gdb-7.12.50.20170226.orig/gdb/linux-nat.c 2017-02-26 21:27:14.785009484 +0100 ++++ gdb-7.12.50.20170226/gdb/linux-nat.c 2017-02-26 21:27:18.842038221 +0100 +@@ -1110,6 +1110,7 @@ { struct cleanup *restore_personality = maybe_disable_address_space_randomization (disable_randomization); @@ -201,7 +181,7 @@ Index: gdb-7.10.50.20160106/gdb/linux-nat.c /* The fork_child mechanism is synchronous and calls target_wait, so we have to mask the async mode. */ -@@ -1023,7 +1024,28 @@ +@@ -1117,7 +1118,28 @@ /* Make sure we report all signals during startup. */ linux_nat_pass_signals (ops, 0, NULL); @@ -231,11 +211,11 @@ Index: gdb-7.10.50.20160106/gdb/linux-nat.c do_cleanups (restore_personality); } -Index: gdb-7.10.50.20160106/gdb/config.in +Index: gdb-7.12.50.20170226/gdb/config.in =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/config.in 2016-01-08 19:15:57.588707989 +0100 -+++ gdb-7.10.50.20160106/gdb/config.in 2016-01-08 19:16:02.660736279 +0100 -@@ -264,6 +264,9 @@ +--- gdb-7.12.50.20170226.orig/gdb/config.in 2017-02-26 21:27:14.786009491 +0100 ++++ gdb-7.12.50.20170226/gdb/config.in 2017-02-26 21:27:18.842038221 +0100 +@@ -270,6 +270,9 @@ /* Define if librpm library is being used. */ #undef HAVE_LIBRPM @@ -245,7 +225,7 @@ Index: gdb-7.10.50.20160106/gdb/config.in /* Define to 1 if you have the header file. */ #undef HAVE_LIBUNWIND_IA64_H -@@ -396,6 +399,9 @@ +@@ -402,6 +405,9 @@ /* Define to 1 if you have the `scm_new_smob' function. */ #undef HAVE_SCM_NEW_SMOB @@ -255,11 +235,11 @@ Index: gdb-7.10.50.20160106/gdb/config.in /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE -Index: gdb-7.10.50.20160106/gdb/configure +Index: gdb-7.12.50.20170226/gdb/configure =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/configure 2016-01-08 19:15:57.593708017 +0100 -+++ gdb-7.10.50.20160106/gdb/configure 2016-01-08 19:16:02.665736307 +0100 -@@ -14653,6 +14653,64 @@ +--- gdb-7.12.50.20170226.orig/gdb/configure 2017-02-26 21:27:14.790009519 +0100 ++++ gdb-7.12.50.20170226/gdb/configure 2017-02-26 21:27:18.846038249 +0100 +@@ -15492,6 +15492,64 @@ _ACEOF @@ -324,11 +304,11 @@ Index: gdb-7.10.50.20160106/gdb/configure # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR, # except that the argument to --with-sysroot is optional. -Index: gdb-7.10.50.20160106/gdb/gdbserver/config.in +Index: gdb-7.12.50.20170226/gdb/gdbserver/config.in =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/gdbserver/config.in 2016-01-08 19:15:57.595708028 +0100 -+++ gdb-7.10.50.20160106/gdb/gdbserver/config.in 2016-01-08 19:16:02.665736307 +0100 -@@ -117,6 +117,9 @@ +--- gdb-7.12.50.20170226.orig/gdb/gdbserver/config.in 2017-02-26 21:27:14.791009527 +0100 ++++ gdb-7.12.50.20170226/gdb/gdbserver/config.in 2017-02-26 21:27:18.846038249 +0100 +@@ -123,6 +123,9 @@ /* Define to 1 if you have the `mcheck' library (-lmcheck). */ #undef HAVE_LIBMCHECK @@ -338,7 +318,7 @@ Index: gdb-7.10.50.20160106/gdb/gdbserver/config.in /* Define if the target supports branch tracing. */ #undef HAVE_LINUX_BTRACE -@@ -193,6 +196,9 @@ +@@ -199,6 +202,9 @@ /* Define to 1 if you have the `pwrite' function. */ #undef HAVE_PWRITE @@ -348,11 +328,11 @@ Index: gdb-7.10.50.20160106/gdb/gdbserver/config.in /* Define to 1 if you have the `setns' function. */ #undef HAVE_SETNS -Index: gdb-7.10.50.20160106/gdb/gdbserver/configure +Index: gdb-7.12.50.20170226/gdb/gdbserver/configure =================================================================== ---- gdb-7.10.50.20160106.orig/gdb/gdbserver/configure 2016-01-08 19:15:57.597708039 +0100 -+++ gdb-7.10.50.20160106/gdb/gdbserver/configure 2016-01-08 19:16:02.667736318 +0100 -@@ -7311,6 +7311,64 @@ +--- gdb-7.12.50.20170226.orig/gdb/gdbserver/configure 2017-02-26 21:27:14.793009541 +0100 ++++ gdb-7.12.50.20170226/gdb/gdbserver/configure 2017-02-26 21:27:18.848038263 +0100 +@@ -8429,6 +8429,64 @@ fi fi diff --git a/gdb-btrobust.patch b/gdb-btrobust.patch index b797723..dd57543 100644 --- a/gdb-btrobust.patch +++ b/gdb-btrobust.patch @@ -3,83 +3,32 @@ printed, but a default backtrace will occur in this case. -- -Index: gdb-7.9.50.20150520/gdb/python/py-framefilter.c +Index: gdb-7.12.50.20170226/gdb/python/py-framefilter.c =================================================================== ---- gdb-7.9.50.20150520.orig/gdb/python/py-framefilter.c 2015-05-31 17:36:34.681952530 +0200 -+++ gdb-7.9.50.20150520/gdb/python/py-framefilter.c 2015-05-31 17:55:01.884788031 +0200 -@@ -1523,6 +1523,7 @@ gdbpy_apply_frame_filter (const struct e - PyObject *iterable; - PyObject *item; - htab_t levels_printed; -+ int count_printed = 0; - - if (!gdb_python_initialized) - return EXT_LANG_BT_NO_FILTERS; -@@ -1543,24 +1544,7 @@ gdbpy_apply_frame_filter (const struct e - iterable = bootstrap_python_frame_filters (frame, frame_low, frame_high); - - if (iterable == NULL) -- { -- /* Normally if there is an error GDB prints the exception, -- abandons the backtrace and exits. The user can then call "bt -- no-filters", and get a default backtrace (it would be -- confusing to automatically start a standard backtrace halfway -- through a Python filtered backtrace). However in the case -- where GDB cannot initialize the frame filters (most likely -- due to incorrect auto-load paths), GDB has printed nothing. -- In this case it is OK to print the default backtrace after -- printing the error message. GDB returns EXT_LANG_BT_NO_FILTERS -- here to signify there are no filters after printing the -- initialization error. This return code will trigger a -- default backtrace. */ -- -- gdbpy_print_stack (); -- do_cleanups (cleanups); -- return EXT_LANG_BT_NO_FILTERS; -- } -+ goto error_nothing_printed; +--- gdb-7.12.50.20170226.orig/gdb/python/py-framefilter.c 2017-02-26 21:33:23.150618708 +0100 ++++ gdb-7.12.50.20170226/gdb/python/py-framefilter.c 2017-02-26 21:33:29.993667179 +0100 +@@ -1388,6 +1388,7 @@ + htab_eq_pointer, + NULL)); - /* If iterable is None, then there are no frame filters registered. - If this is the case, defer to default GDB printing routines in MI -@@ -1591,15 +1575,40 @@ gdbpy_apply_frame_filter (const struct e ++ int count_printed = 0; + while (true) + { + gdbpy_ref<> item (PyIter_Next (iterable.get ())); +@@ -1397,7 +1398,7 @@ + if (PyErr_Occurred ()) + { + gdbpy_print_stack (); +- return EXT_LANG_BT_ERROR; ++ return count_printed > 0 ? EXT_LANG_BT_ERROR : EXT_LANG_BT_NO_FILTERS; + } + break; + } +@@ -1409,6 +1410,7 @@ error and continue with other frames. */ if (success == EXT_LANG_BT_ERROR) gdbpy_print_stack (); -+ + count_printed++; } - if (item == NULL && PyErr_Occurred ()) -- goto error; -+ { -+ if (count_printed > 0) -+ goto error; -+ else -+ goto error_nothing_printed; -+ } - - done: - do_cleanups (cleanups); return success; - -+ /* Normally if there is an error GDB prints the exception, -+ abandons the backtrace and exits. The user can then call "bt -+ no-filters", and get a default backtrace (it would be -+ confusing to automatically start a standard backtrace halfway -+ through a Python filtered backtrace). However in the case -+ where GDB cannot initialize the frame filters (most likely -+ due to incorrect auto-load paths), GDB has printed nothing. -+ In this case it is OK to print the default backtrace after -+ printing the error message. GDB returns EXT_LANG_BT_NO_FILTERS -+ here to signify there are no filters after printing the -+ initialization error. This return code will trigger a -+ default backtrace. */ -+ -+ error_nothing_printed: -+ gdbpy_print_stack (); -+ do_cleanups (cleanups); -+ return EXT_LANG_BT_NO_FILTERS; -+ - /* Exit and abandon backtrace on error, printing the exception that - is set. */ - error: diff --git a/gdb-bz1219747-attach-kills.patch b/gdb-bz1219747-attach-kills.patch new file mode 100644 index 0000000..fe3781c --- /dev/null +++ b/gdb-bz1219747-attach-kills.patch @@ -0,0 +1,222 @@ +http://sourceware.org/ml/gdb-patches/2015-10/msg00301.html +Subject: [PATCH 1/3] Never kill PID on: gdb exec PID + +Hi, + +in some cases with deleted main executable GDB will want to kill the inferior. + +$ cp /bin/sleep /tmp/sleep;/tmp/sleep 1h&p=$! +$ rm /tmp/sleep +$ gdb /tmp/sleep $p +GNU gdb (GDB) 7.10.50.20151016-cvs +/tmp/sleep: No such file or directory. +Attaching to process 9694 +/tmp/sleep (deleted): No such file or directory. +A program is being debugged already. Kill it? (y or n) _ + +The first attachment of "/tmp/sleep" commandline argument errors at: + +#0 throw_error (error=GENERIC_ERROR, fmt=0x116d135 "%s.") at ./common/common-exceptions.c:371 +#1 in throw_perror_with_name (errcode=GENERIC_ERROR, string=0x7fffffffdb96 "/dfsfds") at utils.c:974 +#2 in perror_with_name (string=0x7fffffffdb96 "/dfsfds") at utils.c:982 +#3 in exec_file_attach (filename=0x7fffffffdb96 "/dfsfds", from_tty=1) at exec.c:268 +267 if (scratch_chan < 0) +268 perror_with_name (filename); +#4 in catch_command_errors_const (command=0x80f59f , arg=0x7fffffffdb96 "/dfsfds", from_tty=1) at main.c:395 +#5 in captured_main (data=0x7fffffffd6f0) at main.c:1051 +1051 if (catch_command_errors_const (exec_file_attach, execarg, +1052 !batch_flag)) + +Then GDB tries to attach to the process $p: + +#0 inferior_appeared (inf=0x240e0b0, pid=29210) at inferior.c:305 +#1 in inf_ptrace_attach (ops=0x2339540, args=0x21dcdc0 "29210", from_tty=1) at inf-ptrace.c:206 +#2 in linux_nat_attach (ops=0x2339540, args=0x21dcdc0 "29210", from_tty=1) at linux-nat.c:1278 +#3 in attach_command (args=0x21dcdc0 "29210", from_tty=1) at infcmd.c:2748 +#4 in catch_command_errors (command=0x79d7e5 , arg=0x7fffffffdb9e "29210", from_tty=1) at main.c:368 +#5 in captured_main (data=0x7fffffffd6f0) at main.c:1082 +1082 if (catch_command_errors (attach_command, pid_or_core_arg, +1083 !batch_flag) == 0) + +This succeeds and since this moment GDB has a valid inferior. But despite that +the lines +1082 if (catch_command_errors (attach_command, pid_or_core_arg, +1083 !batch_flag) == 0) +still fail because consequently attach_command() fails to find the associated +executable file: + +#0 throw_error (error=GENERIC_ERROR, fmt=0x116d135 "%s.") at ./common/common-exceptions.c:371 +#1 in throw_perror_with_name (errcode=GENERIC_ERROR, string=0x2477860 "/tmp/sleep (deleted)") at utils.c:974 +#2 in perror_with_name (string=0x2477860 "/tmp/sleep (deleted)") at utils.c:982 +#3 in exec_file_attach (filename=0x2477860 "/tmp/sleep (deleted)", from_tty=1) at exec.c:268 +267 if (scratch_chan < 0) +268 perror_with_name (filename); +#4 in exec_file_locate_attach (pid=29210, from_tty=1) at exec.c:173 +#5 in attach_command_post_wait (args=0x24739b0 "29210", from_tty=1, async_exec=0) at infcmd.c:2628 +#6 in attach_command_continuation (args=0x2473590, err=0) at infcmd.c:2700 +#7 in do_my_continuations_1 (pmy_chain=0x7fffffffd190, err=0) at continuations.c:59 +#8 in do_my_continuations (list=0x240e130, err=0) at continuations.c:83 +#9 in do_all_inferior_continuations (err=0) at continuations.c:125 +#10 in inferior_event_handler (event_type=INF_EXEC_COMPLETE, client_data=0x0) at inf-loop.c:60 +#11 in fetch_inferior_event (client_data=0x0) at infrun.c:3929 +#12 in inferior_event_handler (event_type=INF_REG_EVENT, client_data=0x0) at inf-loop.c:44 +#13 in handle_target_event (error=0, client_data=0x0) at linux-nat.c:4681 +#14 in handle_file_event (file_ptr=0x21e4170, ready_mask=1) at event-loop.c:708 +#15 in gdb_wait_for_event (block=0) at event-loop.c:834 +#16 in gdb_do_one_event () at event-loop.c:298 +#17 in wait_sync_command_done () at top.c:373 +#18 in maybe_wait_sync_command_done (was_sync=0) at top.c:388 +#19 in catch_command_errors (command=0x79d7e5 , arg=0x7fffffffdb9e "29210", from_tty=1) at main.c:370 +#20 in captured_main (data=0x7fffffffd6f0) at main.c:1082 +1082 if (catch_command_errors (attach_command, pid_or_core_arg, +1083 !batch_flag) == 0) + +and therefore GDB executes the following: + +(gdb) bt +#5 in query (ctlstr=0x1141ae8 "A program is being debugged already. Kill it? ") at utils.c:1371 +#6 in target_preopen (from_tty=1) at target.c:2183 +2179 if (have_inferiors ()) +2180 { +2181 if (!from_tty +2182 || !have_live_inferiors () +2183 || query (_("A program is being debugged already. Kill it? "))) +2184 iterate_over_inferiors (dispose_inferior, NULL); +2185 else +2186 error (_("Program not killed.")); +2187 } +#7 in core_open (arg=0x7fffffffdb9f "9694", from_tty=1) at corelow.c:283 +#8 in core_file_command (filename=0x7fffffffdb9f "9694", from_tty=1) at corefile.c:77 +#9 in catch_command_errors (command=0x86ca16 , arg=0x7fffffffdb9f "9694", from_tty=1) at main.c:368 +#10 in captured_main (data=0x7fffffffd6f0) at main.c:1084 +1084 catch_command_errors (core_file_command, pid_or_core_arg, +1085 !batch_flag); + +No regressions on {x86_64,x86_64-m32,i686}-fedora24pre-linux-gnu. + + +Thanks, +Jan + + +gdb/ChangeLog +2015-10-16 Jan Kratochvil + + * main.c (captured_main): Run core_file_command for pid_or_core_arg + only if not have_inferiors (). + +gdb/testsuite/ChangeLog +2015-10-16 Jan Kratochvil + + * gdb.base/attach-kills.c: New. + * gdb.base/attach-kills.exp: New. +--- + gdb/testsuite/gdb.base/attach-kills.c | 25 ++++++++++++++++ + gdb/testsuite/gdb.base/attach-kills.exp | 49 +++++++++++++++++++++++++++++++ + 2 files changed, 74 insertions(+) + create mode 100644 gdb/testsuite/gdb.base/attach-kills.c + create mode 100644 gdb/testsuite/gdb.base/attach-kills.exp + +diff --git a/gdb/main.c b/gdb/main.c +index 49c9b68..bc19699 100644 +--- a/gdb/main.c ++++ b/gdb/main.c +@@ -1080,7 +1080,10 @@ captured_main (void *data) + if (isdigit (pid_or_core_arg[0])) + { + if (catch_command_errors (attach_command, pid_or_core_arg, +- !batch_flag) == 0) ++ !batch_flag) == 0 ++ /* attach_command could succeed partially and core_file_command ++ would try to kill it. */ ++ && !have_inferiors ()) + catch_command_errors (core_file_command, pid_or_core_arg, + !batch_flag); + } +diff --git a/gdb/testsuite/gdb.base/attach-kills.c b/gdb/testsuite/gdb.base/attach-kills.c +new file mode 100644 +index 0000000..2398f00 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/attach-kills.c +@@ -0,0 +1,25 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2015 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 . */ ++ ++#include ++ ++int ++main (void) ++{ ++ sleep (600); ++ return 0; ++} +diff --git a/gdb/testsuite/gdb.base/attach-kills.exp b/gdb/testsuite/gdb.base/attach-kills.exp +new file mode 100644 +index 0000000..9a93cb7 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/attach-kills.exp +@@ -0,0 +1,49 @@ ++# Copyright (C) 2015 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 . ++ ++if { ![can_spawn_for_attach] } { ++ return 0 ++} ++ ++standard_testfile ++ ++if { [build_executable ${testfile}.exp $testfile] == -1 } { ++ return -1 ++} ++ ++# Start the program running and then wait for a bit, to be sure ++# that it can be attached to. ++ ++set test_spawn_id [spawn_wait_for_attach $binfile] ++set testpid [spawn_id_get_pid $test_spawn_id] ++ ++remote_exec target "cp -pf -- $binfile $binfile-copy" ++remote_exec target "rm -f -- $binfile" ++ ++set test "start gdb" ++set res [gdb_spawn_with_cmdline_opts \ ++ "-iex \"set height 0\" -iex \"set width 0\" /DoEsNoTeXySt $testpid"] ++if { $res != 0} { ++ fail "$test (spawn)" ++ kill_wait_spawned_process $test_spawn_id ++ return -1 ++} ++gdb_test_multiple "" $test { ++ -re "\r\nAttaching to .*\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++ ++kill_wait_spawned_process $test_spawn_id + diff --git a/gdb-bz541866-rwatch-before-run.patch b/gdb-bz541866-rwatch-before-run.patch new file mode 100644 index 0000000..ba0622a --- /dev/null +++ b/gdb-bz541866-rwatch-before-run.patch @@ -0,0 +1,165 @@ +Index: gdb-7.11.90.20160807/gdb/config/i386/linux64.mh +=================================================================== +--- gdb-7.11.90.20160807.orig/gdb/config/i386/linux64.mh 2016-08-07 22:27:13.889285274 +0200 ++++ gdb-7.11.90.20160807/gdb/config/i386/linux64.mh 2016-08-07 22:29:20.451311124 +0200 +@@ -7,7 +7,7 @@ + linux-procfs.o linux-ptrace.o linux-btrace.o \ + linux-waitpid.o linux-personality.o x86-linux.o \ + x86-linux-dregs.o amd64-linux-siginfo.o linux-namespaces.o +-NAT_FILE= config/nm-linux.h ++NAT_FILE= nm-linux64.h + NAT_CDEPS = $(srcdir)/proc-service.list + + # The dynamically loaded libthread_db needs access to symbols in the +Index: gdb-7.11.90.20160807/gdb/config/i386/linux.mh +=================================================================== +--- gdb-7.11.90.20160807.orig/gdb/config/i386/linux.mh 2016-08-07 22:27:13.889285274 +0200 ++++ gdb-7.11.90.20160807/gdb/config/i386/linux.mh 2016-08-07 22:29:20.451311124 +0200 +@@ -1,6 +1,6 @@ + # Host: Intel 386 running GNU/Linux. + +-NAT_FILE= config/nm-linux.h ++NAT_FILE= nm-linux.h + NATDEPFILES= inf-ptrace.o fork-child.o \ + x86-nat.o x86-dregs.o i386-linux-nat.o x86-linux-nat.o \ + proc-service.o linux-thread-db.o \ +Index: gdb-7.11.90.20160807/gdb/config/i386/nm-linux.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.11.90.20160807/gdb/config/i386/nm-linux.h 2016-08-07 22:29:20.451311124 +0200 +@@ -0,0 +1,28 @@ ++/* Native support for GNU/Linux i386. ++ ++ Copyright 2010 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 . */ ++ ++#ifndef NM_LINUX_H ++#define NM_LINUX_H ++ ++#include "config/nm-linux.h" ++ ++/* Red Hat backward compatibility with gdb-6.8. */ ++#define target_can_use_hardware_watchpoint(type, cnt, ot) 1 ++ ++#endif /* NM_LINUX64_H */ +Index: gdb-7.11.90.20160807/gdb/config/i386/nm-linux64.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.11.90.20160807/gdb/config/i386/nm-linux64.h 2016-08-07 22:29:20.451311124 +0200 +@@ -0,0 +1,28 @@ ++/* Native support for GNU/Linux amd64. ++ ++ Copyright 2010 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 . */ ++ ++#ifndef NM_LINUX64_H ++#define NM_LINUX64_H ++ ++#include "config/nm-linux.h" ++ ++/* Red Hat backward compatibility with gdb-6.8. */ ++#define target_can_use_hardware_watchpoint(type, cnt, ot) 1 ++ ++#endif /* NM_LINUX64_H */ +Index: gdb-7.11.90.20160807/gdb/target.h +=================================================================== +--- gdb-7.11.90.20160807.orig/gdb/target.h 2016-08-07 22:27:13.889285274 +0200 ++++ gdb-7.11.90.20160807/gdb/target.h 2016-08-07 22:29:20.452311132 +0200 +@@ -1939,9 +1939,11 @@ + one. OTHERTYPE is the number of watchpoints of other types than + this one used so far. */ + ++#ifndef target_can_use_hardware_watchpoint + #define target_can_use_hardware_watchpoint(TYPE,CNT,OTHERTYPE) \ + (*current_target.to_can_use_hw_breakpoint) (¤t_target, \ + TYPE, CNT, OTHERTYPE) ++#endif + + /* Returns the number of debug registers needed to watch the given + memory region, or zero if not supported. */ +Index: gdb-7.11.90.20160807/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.11.90.20160807/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp 2016-08-07 22:29:20.452311132 +0200 +@@ -0,0 +1,40 @@ ++# Copyright 2009, 2010 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 . ++ ++# Arch not supporting hw watchpoints does not imply no_hardware_watchpoints set. ++if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] ++ && ![istarget "ia64-*-*"]) ++ || [target_info exists gdb,no_hardware_watchpoints]} then { ++ verbose "Skipping watchpoint-hw-before-run test." ++ return ++} ++ ++set test watchpoint-hw-before-run ++set srcfile watchpoint-hw-hit-once.c ++if { [prepare_for_testing ${test}.exp ${test} ${srcfile}] } { ++ return -1 ++} ++ ++gdb_test "rwatch watchee" "ardware read watchpoint 1: watchee" ++ ++# `runto_main' or `runto main' would delete the watchpoint created above. ++ ++if { [gdb_start_cmd] < 0 } { ++ untested start ++ return -1 ++} ++gdb_test "" "main .* at .*" "start" ++ ++gdb_test "continue" "Continuing.\r\n\r\nHardware read watchpoint \[0-9\]+: watchee\r\n\r\nValue = 0\r\n.*" +Index: gdb-7.11.90.20160807/gdb/breakpoint.c +=================================================================== +--- gdb-7.11.90.20160807.orig/gdb/breakpoint.c 2016-08-07 22:33:38.835405458 +0200 ++++ gdb-7.11.90.20160807/gdb/breakpoint.c 2016-08-07 22:34:45.023941950 +0200 +@@ -14953,7 +14953,7 @@ + + if (bpt->type == bp_hardware_breakpoint) + { +- int i; ++ int i ATTRIBUTE_UNUSED; + i = hw_breakpoint_used_count (); + target_resources_ok = + target_can_use_hardware_watchpoint (bp_hardware_breakpoint, diff --git a/gdb-container-rh-pkg.patch b/gdb-container-rh-pkg.patch new file mode 100644 index 0000000..0b8a3a2 --- /dev/null +++ b/gdb-container-rh-pkg.patch @@ -0,0 +1,21 @@ +--- gdb-7.11/gdb/remote.c-orig 2016-04-06 17:46:52.428921496 +0200 ++++ gdb-7.11/gdb/remote.c 2016-04-06 18:28:26.781923516 +0200 +@@ -13002,7 +13002,17 @@ remote_pid_to_exec_file (struct target_o + char *annex = NULL; + + if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE) +- return NULL; ++ { ++ warning (_("Remote gdbserver does not support determining executable " ++ "automatically.\n" ++"RHEL <=6.8 and <=7.2 versions of gdbserver do not support such automatic executable detection.\n" ++"The following versions of gdbserver support it:\n" ++"- Upstream version of gdbserver (unsupported) 7.10 or later\n" ++"- Red Hat Developer Toolset (DTS) version of gdbserver from DTS 4.0 or later (only on x86_64)\n" ++"- RHEL-7.3 versions of gdbserver (on any architecture)" ++)); ++ return NULL; ++ } + + if (filename != NULL) + xfree (filename); diff --git a/gdb-dts-rhel6-python-compat.patch b/gdb-dts-rhel6-python-compat.patch new file mode 100644 index 0000000..8adf7f4 --- /dev/null +++ b/gdb-dts-rhel6-python-compat.patch @@ -0,0 +1,308 @@ +https://bugzilla.redhat.com/show_bug.cgi?id=1020004 + +Index: gdb-7.12.50.20170207/gdb/data-directory/Makefile.in +=================================================================== +--- gdb-7.12.50.20170207.orig/gdb/data-directory/Makefile.in 2017-02-26 21:10:31.418894975 +0100 ++++ gdb-7.12.50.20170207/gdb/data-directory/Makefile.in 2017-02-26 21:11:07.083147930 +0100 +@@ -71,6 +71,8 @@ + gdb/__init__.py \ + gdb/FrameDecorator.py \ + gdb/FrameIterator.py \ ++ gdb/FrameWrapper.py \ ++ gdb/backtrace.py \ + gdb/frames.py \ + gdb/printing.py \ + gdb/prompt.py \ +@@ -83,6 +85,7 @@ + gdb/command/pahole.py \ + gdb/command/xmethods.py \ + gdb/command/explore.py \ ++ gdb/command/backtrace.py \ + gdb/command/frame_filters.py \ + gdb/command/pretty_printers.py \ + gdb/command/prompt.py \ +Index: gdb-7.12.50.20170207/gdb/python/lib/gdb/FrameWrapper.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/python/lib/gdb/FrameWrapper.py 2017-02-26 21:10:31.419894983 +0100 +@@ -0,0 +1,122 @@ ++# Wrapper API for frames. ++ ++# Copyright (C) 2008, 2009 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 . ++ ++import gdb ++ ++# FIXME: arguably all this should be on Frame somehow. ++class FrameWrapper: ++ def __init__ (self, frame): ++ self.frame = frame; ++ ++ def write_symbol (self, stream, sym, block): ++ if len (sym.linkage_name): ++ nsym, is_field_of_this = gdb.lookup_symbol (sym.linkage_name, block) ++ if nsym.addr_class != gdb.SYMBOL_LOC_REGISTER: ++ sym = nsym ++ ++ stream.write (sym.print_name + "=") ++ try: ++ val = self.read_var (sym) ++ if val != None: ++ val = str (val) ++ # FIXME: would be nice to have a more precise exception here. ++ except RuntimeError as text: ++ val = text ++ if val == None: ++ stream.write ("???") ++ else: ++ stream.write (str (val)) ++ ++ def print_frame_locals (self, stream, func): ++ ++ try: ++ block = self.frame.block() ++ except RuntimeError: ++ block = None ++ ++ while block != None: ++ if block.is_global or block.is_static: ++ break ++ ++ for sym in block: ++ if sym.is_argument: ++ continue; ++ ++ self.write_symbol (stream, sym, block) ++ stream.write ('\n') ++ ++ def print_frame_args (self, stream, func): ++ ++ try: ++ block = self.frame.block() ++ except RuntimeError: ++ block = None ++ ++ while block != None: ++ if block.function != None: ++ break ++ block = block.superblock ++ ++ first = True ++ for sym in block: ++ if not sym.is_argument: ++ continue; ++ ++ if not first: ++ stream.write (", ") ++ ++ self.write_symbol (stream, sym, block) ++ first = False ++ ++ # FIXME: this should probably just be a method on gdb.Frame. ++ # But then we need stream wrappers. ++ def describe (self, stream, full): ++ if self.type () == gdb.DUMMY_FRAME: ++ stream.write (" \n") ++ elif self.type () == gdb.SIGTRAMP_FRAME: ++ stream.write (" \n") ++ else: ++ sal = self.find_sal () ++ pc = self.pc () ++ name = self.name () ++ if not name: ++ name = "??" ++ if pc != sal.pc or not sal.symtab: ++ stream.write (" 0x%08x in" % pc) ++ stream.write (" " + name + " (") ++ ++ func = self.function () ++ self.print_frame_args (stream, func) ++ ++ stream.write (")") ++ ++ if sal.symtab and sal.symtab.filename: ++ stream.write (" at " + sal.symtab.filename) ++ stream.write (":" + str (sal.line)) ++ ++ if not self.name () or (not sal.symtab or not sal.symtab.filename): ++ lib = gdb.solib_name (pc) ++ if lib: ++ stream.write (" from " + lib) ++ ++ stream.write ("\n") ++ ++ if full: ++ self.print_frame_locals (stream, func) ++ ++ def __getattr__ (self, name): ++ return getattr (self.frame, name) +Index: gdb-7.12.50.20170207/gdb/python/lib/gdb/backtrace.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/python/lib/gdb/backtrace.py 2017-02-26 21:10:31.419894983 +0100 +@@ -0,0 +1,42 @@ ++# Filtering backtrace. ++ ++# Copyright (C) 2008, 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 . ++ ++import gdb ++import itertools ++ ++# Our only exports. ++__all__ = ['push_frame_filter', 'create_frame_filter'] ++ ++old_frame_filter = None ++ ++def push_frame_filter (constructor): ++ """Register a new backtrace filter class with the 'backtrace' command. ++The filter will be passed an iterator as an argument. The iterator ++will return gdb.Frame-like objects. The filter should in turn act as ++an iterator returning such objects.""" ++ global old_frame_filter ++ if old_frame_filter == None: ++ old_frame_filter = constructor ++ else: ++ old_frame_filter = lambda iterator, filter = frame_filter: constructor (filter(iterator)) ++ ++def create_frame_filter (iter): ++ global old_frame_filter ++ if old_frame_filter is None: ++ return iter ++ return old_frame_filter (iter) ++ +Index: gdb-7.12.50.20170207/gdb/python/lib/gdb/command/backtrace.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.12.50.20170207/gdb/python/lib/gdb/command/backtrace.py 2017-02-26 21:10:31.419894983 +0100 +@@ -0,0 +1,106 @@ ++# New backtrace command. ++ ++# Copyright (C) 2008, 2009, 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 . ++ ++import gdb ++import gdb.backtrace ++import itertools ++from gdb.FrameIterator import FrameIterator ++from gdb.FrameWrapper import FrameWrapper ++import sys ++ ++class ReverseBacktraceParameter (gdb.Parameter): ++ """The new-backtrace command can show backtraces in 'reverse' order. ++This means that the innermost frame will be printed last. ++Note that reverse backtraces are more expensive to compute.""" ++ ++ set_doc = "Enable or disable reverse backtraces." ++ show_doc = "Show whether backtraces will be printed in reverse order." ++ ++ def __init__(self): ++ gdb.Parameter.__init__ (self, "reverse-backtrace", ++ gdb.COMMAND_STACK, gdb.PARAM_BOOLEAN) ++ # Default to compatibility with gdb. ++ self.value = False ++ ++class FilteringBacktrace (gdb.Command): ++ """Print backtrace of all stack frames, or innermost COUNT frames. ++With a negative argument, print outermost -COUNT frames. ++Use of the 'full' qualifier also prints the values of the local variables. ++Use of the 'raw' qualifier avoids any filtering by loadable modules. ++""" ++ ++ def __init__ (self): ++ # FIXME: this is not working quite well enough to replace ++ # "backtrace" yet. ++ gdb.Command.__init__ (self, "new-backtrace", gdb.COMMAND_STACK) ++ self.reverse = ReverseBacktraceParameter() ++ ++ def reverse_iter (self, iter): ++ result = [] ++ for item in iter: ++ result.append (item) ++ result.reverse() ++ return result ++ ++ def final_n (self, iter, x): ++ result = [] ++ for item in iter: ++ result.append (item) ++ return result[x:] ++ ++ def invoke (self, arg, from_tty): ++ i = 0 ++ count = 0 ++ filter = True ++ full = False ++ ++ for word in arg.split (" "): ++ if word == '': ++ continue ++ elif word == 'raw': ++ filter = False ++ elif word == 'full': ++ full = True ++ else: ++ count = int (word) ++ ++ # FIXME: provide option to start at selected frame ++ # However, should still number as if starting from newest ++ newest_frame = gdb.newest_frame() ++ iter = itertools.imap (FrameWrapper, ++ FrameIterator (newest_frame)) ++ if filter: ++ iter = gdb.backtrace.create_frame_filter (iter) ++ ++ # Now wrap in an iterator that numbers the frames. ++ iter = itertools.izip (itertools.count (0), iter) ++ ++ # Reverse if the user wanted that. ++ if self.reverse.value: ++ iter = self.reverse_iter (iter) ++ ++ # Extract sub-range user wants. ++ if count < 0: ++ iter = self.final_n (iter, count) ++ elif count > 0: ++ iter = itertools.islice (iter, 0, count) ++ ++ for pair in iter: ++ sys.stdout.write ("#%-2d" % pair[0]) ++ pair[1].describe (sys.stdout, full) ++ ++FilteringBacktrace() diff --git a/gdb-fortran-stride-intel-1of6.patch b/gdb-fortran-stride-intel-1of6.patch deleted file mode 100644 index f17c83a..0000000 --- a/gdb-fortran-stride-intel-1of6.patch +++ /dev/null @@ -1,611 +0,0 @@ -From: Christoph Weinmann -[PATCH 1/6] fortran: allow multi-dimensional subarrays -https://sourceware.org/ml/gdb-patches/2015-12/msg00007.html -Message-Id: <1448976075-11456-2-git-send-email-christoph.t.weinmann@intel.com> - -Add an argument count for subrange expressions in Fortran. -Based on the counted value calculate a new array with the -elements specified by the user. First parse the user input, -secondly copy the desired array values into the return -array, thirdly re-create the necessary ranges and bounds. - -1| program prog -2| integer :: ary(10,5) = (/ (i,i=1,10) (j, j=1,5) /) -3| end program prog - -(gdb) print ary(2:4,1:3) -old> Syntax error in expression near ':3' -new> $3 = ( ( 21, 31, 41) ( 22, 32, 42) ( 23, 33, 43) ) - -2013-11-25 Christoph Weinmann - - * eval.c (multi_f77_subscript): Remove function. - * eval.c (evaluate_subrange_expr): When evaluating - an array or string expression, call - value_f90_subarray. - * eval.c (value_f90_subarray): Add argument parsing - and compute result array based on user input. - * f-exp.y: Increment argument counter for every subrange - expression entered by the user. - * valops.c (value_slice): Call value_slice_1 with - additional default argument. - * valops.c (value_slice_1): Add functionality to - copy and return result values based on input. - * value.h: Add function definition. - - - -Signed-off-by: Christoph Weinmann ---- - gdb/eval.c | 309 ++++++++++++++++++++++++++++++++++++++++++++++------------ - gdb/f-exp.y | 2 + - gdb/valops.c | 157 ++++++++++++++++++++++++------ - gdb/value.h | 2 + - 4 files changed, 375 insertions(+), 95 deletions(-) - -diff --git a/gdb/eval.c b/gdb/eval.c -index 84e2e34..2ceccbc 100644 ---- a/gdb/eval.c -+++ b/gdb/eval.c -@@ -399,29 +399,253 @@ init_array_element (struct value *array, struct value *element, - return index; - } - -+/* Evaluates any operation on Fortran arrays or strings with at least -+ one user provided parameter. Expects the input ARRAY to be either -+ an array, or a string. Evaluates EXP by incrementing POS, and -+ writes the content from the elt stack into a local struct. NARGS -+ specifies number of literal or range arguments the user provided. -+ NARGS must be the same number as ARRAY has dimensions. */ -+ - static struct value * --value_f90_subarray (struct value *array, -- struct expression *exp, int *pos, enum noside noside) -+value_f90_subarray (struct value *array, struct expression *exp, -+ int *pos, int nargs, enum noside noside) - { -- int pc = (*pos) + 1; -+ int i, dim_count = 0; - LONGEST low_bound, high_bound; - struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array))); -- enum f90_range_type range_type -- = (enum f90_range_type) longest_to_int (exp->elts[pc].longconst); -- -- *pos += 3; -+ struct value *new_array = array; -+ struct type *array_type = check_typedef (value_type (new_array)); -+ struct type *temp_type; -+ -+ /* Local struct to hold user data for Fortran subarray dimensions. */ -+ struct subscript_store -+ { -+ /* For every dimension, we are either working on a range or an index -+ expression, so we store this info separately for later. */ -+ enum -+ { -+ SUBSCRIPT_RANGE, /* e.g. "(lowbound:highbound)" */ -+ SUBSCRIPT_INDEX /* e.g. "(literal)" */ -+ } kind; -+ -+ /* We also store either the lower and upper bound info, or the index -+ number. Before evaluation of the input values, we do not know if we are -+ actually working on a range of ranges, or an index in a range. So as a -+ first step we store all input in a union. The array calculation itself -+ deals with this later on. */ -+ union -+ { -+ struct subscript_range -+ { -+ enum f90_range_type f90_range_type; -+ LONGEST low, high; -+ } -+ range; -+ LONGEST number; -+ }; -+ } *subscript_array; -+ -+ /* Check if the number of arguments provided by the user matches -+ the number of dimension of the array. A string has only one -+ dimension. */ -+ if (nargs != calc_f77_array_dims (value_type (new_array))) -+ error (_("Wrong number of subscripts")); -+ -+ subscript_array = alloca (sizeof (*subscript_array) * nargs); -+ -+ /* Parse the user input into the SUBSCRIPT_ARRAY to store it. We need -+ to evaluate it first, as the input is from left-to-right. The -+ array is stored from right-to-left. So we have to use the user -+ input in reverse order. Later on, we need the input information to -+ re-calculate the output array. For multi-dimensional arrays, we -+ can be dealing with any possible combination of ranges and indices -+ for every dimension. */ -+ for (i = 0; i < nargs; i++) -+ { -+ struct subscript_store *index = &subscript_array[i]; - -- if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) -- low_bound = TYPE_LOW_BOUND (range); -- else -- low_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); -+ /* The user input is a range, with or without lower and upper bound. -+ E.g.: "p arry(2:5)", "p arry( :5)", "p arry( : )", etc. */ -+ if (exp->elts[*pos].opcode == OP_F90_RANGE) -+ { -+ int pc = (*pos) + 1; -+ struct subscript_range *range; -+ -+ index->kind = SUBSCRIPT_RANGE; -+ range = &index->range; -+ -+ *pos += 3; -+ range->f90_range_type = longest_to_int (exp->elts[pc].longconst); -+ -+ /* If a lower bound was provided by the user, the bit has been -+ set and we can assign the value from the elt stack. Same for -+ upper bound. */ -+ if ((range->f90_range_type == HIGH_BOUND_DEFAULT) -+ || range->f90_range_type == NONE_BOUND_DEFAULT) -+ range->low = value_as_long (evaluate_subexp (NULL_TYPE, exp, -+ pos, noside)); -+ if ((range->f90_range_type == LOW_BOUND_DEFAULT) -+ || range->f90_range_type == NONE_BOUND_DEFAULT) -+ range->high = value_as_long (evaluate_subexp (NULL_TYPE, exp, -+ pos, noside)); -+ } -+ /* User input is an index. E.g.: "p arry(5)". */ -+ else -+ { -+ struct value *val; - -- if (range_type == HIGH_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) -- high_bound = TYPE_HIGH_BOUND (range); -- else -- high_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); -+ index->kind = SUBSCRIPT_INDEX; -+ -+ /* Evaluate each subscript; it must be a legal integer in F77. This -+ ensures the validity of the provided index. */ -+ val = evaluate_subexp_with_coercion (exp, pos, noside); -+ index->number = value_as_long (val); -+ } -+ -+ } -+ -+ /* Traverse the array from right to left and evaluate each corresponding -+ user input. VALUE_SUBSCRIPT is called for every index, until a range -+ expression is evaluated. After a range expression has been evaluated, -+ every subsequent expression is also treated as a range. */ -+ for (i = nargs - 1; i >= 0; i--) -+ { -+ struct subscript_store *index = &subscript_array[i]; -+ struct type *index_type = TYPE_INDEX_TYPE (array_type); -+ -+ switch (index->kind) -+ { -+ case SUBSCRIPT_RANGE: -+ { -+ -+ /* When we hit the first range specified by the user, we must -+ treat any subsequent user entry as a range. We simply -+ increment DIM_COUNT which tells us how many times we are -+ calling VALUE_SLICE_1. */ -+ struct subscript_range *range = &index->range; -+ -+ /* If no lower bound was provided by the user, we take the -+ default boundary. Same for the high bound. */ -+ if ((range->f90_range_type == LOW_BOUND_DEFAULT) -+ || (range->f90_range_type == BOTH_BOUND_DEFAULT)) -+ range->low = TYPE_LOW_BOUND (index_type); -+ -+ if ((range->f90_range_type == HIGH_BOUND_DEFAULT) -+ || (range->f90_range_type == BOTH_BOUND_DEFAULT)) -+ range->high = TYPE_HIGH_BOUND (index_type); -+ -+ /* Both user provided low and high bound have to be inside the -+ array bounds. Throw an error if not. */ -+ if (range->low < TYPE_LOW_BOUND (index_type) -+ || range->low > TYPE_HIGH_BOUND (index_type) -+ || range->high < TYPE_LOW_BOUND (index_type) -+ || range->high > TYPE_HIGH_BOUND (index_type)) -+ error (_("provided bound(s) outside array bound(s)")); -+ -+ /* DIM_COUNT counts every user argument that is treated as a range. -+ This is necessary for expressions like 'print array(7, 8:9). -+ Here the first argument is a literal, but must be treated as a -+ range argument to allow the correct output representation. */ -+ dim_count++; -+ -+ new_array -+ = value_slice_1 (new_array, -+ longest_to_int (range->low), -+ longest_to_int (range->high - range->low + 1), -+ dim_count); -+ } -+ break; -+ -+ case SUBSCRIPT_INDEX: -+ { -+ /* DIM_COUNT only stays '0' when no range argument was processed -+ before, starting from the last dimension. This way we can -+ reduce the number of dimensions from the result array. -+ However, if a range has been processed before an index, we -+ treat the index like a range with equal low- and high bounds -+ to get the value offset right. */ -+ if (dim_count == 0) -+ new_array -+ = value_subscripted_rvalue (new_array, index->number, -+ f77_get_lowerbound (value_type -+ (new_array))); -+ else -+ { -+ /* Check for valid index input. */ -+ if (index->number < TYPE_LOW_BOUND (index_type) -+ || index->number > TYPE_HIGH_BOUND (index_type)) -+ error (_("error no such vector element")); -+ -+ dim_count++; -+ new_array = value_slice_1 (new_array, -+ longest_to_int (index->number), -+ 1, /* length is '1' element */ -+ dim_count); -+ } -+ -+ } -+ break; -+ } -+ } -+ -+ /* With DIM_COUNT > 1 we currently have a one dimensional array, but expect -+ an array of arrays, depending on how many ranges have been provided by -+ the user. So we need to rebuild the array dimensions for printing it -+ correctly. -+ Starting from right to left in the user input, after we hit the first -+ range argument every subsequent argument is also treated as a range. -+ E.g.: -+ "p ary(3, 7, 2:15)" in Fortran has only 1 dimension, but we calculated 3 -+ ranges. -+ "p ary(3, 7:12, 4)" in Fortran has only 1 dimension, but we calculated 2 -+ ranges. -+ "p ary(2:4, 5, 7)" in Fortran has only 1 dimension, and we calculated 1 -+ range. */ -+ if (dim_count > 1) -+ { -+ struct value *v = NULL; - -- return value_slice (array, low_bound, high_bound - low_bound + 1); -+ temp_type = TYPE_TARGET_TYPE (value_type (new_array)); -+ -+ /* Every SUBSCRIPT_RANGE in the user input signifies an actual range in -+ the output array. So we traverse the SUBSCRIPT_ARRAY again, looking -+ for a range entry. When we find one, we use the range info to create -+ an additional range_type to set the correct bounds and dimensions for -+ the output array. */ -+ for (i = 0; i < nargs; i++) -+ { -+ struct subscript_store *index = &subscript_array[i]; -+ -+ if (index->kind == SUBSCRIPT_RANGE) -+ { -+ struct type *range_type, *interim_array_type; -+ -+ range_type -+ = create_static_range_type (NULL, -+ temp_type, -+ 1, -+ index->range.high - index->range.low + 1); -+ -+ interim_array_type = create_array_type (NULL, -+ temp_type, -+ range_type); -+ -+ /* For some reason the type code of the contents is missing, so -+ reset it from the original array. */ -+ TYPE_CODE (interim_array_type) -+ = TYPE_CODE (value_type (new_array)); -+ -+ v = allocate_value (interim_array_type); -+ -+ temp_type = value_type (v); -+ } -+ -+ } -+ value_contents_copy (v, 0, new_array, 0, TYPE_LENGTH (temp_type)); -+ return v; -+ } -+ -+ return new_array; - } - - -@@ -1810,14 +2034,11 @@ evaluate_subexp_standard (struct type *expect_type, - switch (code) - { - case TYPE_CODE_ARRAY: -- if (exp->elts[*pos].opcode == OP_F90_RANGE) -- return value_f90_subarray (arg1, exp, pos, noside); -- else -- goto multi_f77_subscript; -+ return value_f90_subarray (arg1, exp, pos, nargs, noside); - - case TYPE_CODE_STRING: - if (exp->elts[*pos].opcode == OP_F90_RANGE) -- return value_f90_subarray (arg1, exp, pos, noside); -+ return value_f90_subarray (arg1, exp, pos, 1, noside); - else - { - arg2 = evaluate_subexp_with_coercion (exp, pos, noside); -@@ -2222,49 +2443,6 @@ evaluate_subexp_standard (struct type *expect_type, - } - return (arg1); - -- multi_f77_subscript: -- { -- LONGEST subscript_array[MAX_FORTRAN_DIMS]; -- int ndimensions = 1, i; -- struct value *array = arg1; -- -- if (nargs > MAX_FORTRAN_DIMS) -- error (_("Too many subscripts for F77 (%d Max)"), MAX_FORTRAN_DIMS); -- -- ndimensions = calc_f77_array_dims (type); -- -- if (nargs != ndimensions) -- error (_("Wrong number of subscripts")); -- -- gdb_assert (nargs > 0); -- -- /* Now that we know we have a legal array subscript expression -- let us actually find out where this element exists in the array. */ -- -- /* Take array indices left to right. */ -- for (i = 0; i < nargs; i++) -- { -- /* Evaluate each subscript; it must be a legal integer in F77. */ -- arg2 = evaluate_subexp_with_coercion (exp, pos, noside); -- -- /* Fill in the subscript array. */ -- -- subscript_array[i] = value_as_long (arg2); -- } -- -- /* Internal type of array is arranged right to left. */ -- for (i = nargs; i > 0; i--) -- { -- struct type *array_type = check_typedef (value_type (array)); -- LONGEST index = subscript_array[i - 1]; -- -- array = value_subscripted_rvalue (array, index, -- f77_get_lowerbound (array_type)); -- } -- -- return array; -- } -- - case BINOP_LOGICAL_AND: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - if (noside == EVAL_SKIP) -@@ -3121,6 +3299,9 @@ calc_f77_array_dims (struct type *array_type) - int ndimen = 1; - struct type *tmp_type; - -+ if (TYPE_CODE (array_type) == TYPE_CODE_STRING) -+ return 1; -+ - if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY)) - error (_("Can't get dimensions for a non-array type")); - -diff --git a/gdb/f-exp.y b/gdb/f-exp.y -index 56629dc..ab23df0 100644 ---- a/gdb/f-exp.y -+++ b/gdb/f-exp.y -@@ -308,6 +308,8 @@ arglist : subrange - - arglist : arglist ',' exp %prec ABOVE_COMMA - { arglist_len++; } -+ | arglist ',' subrange %prec ABOVE_COMMA -+ { arglist_len++; } - ; - - /* There are four sorts of subrange types in F90. */ -diff --git a/gdb/valops.c b/gdb/valops.c -index 5e5f685..f8d23fb 100644 ---- a/gdb/valops.c -+++ b/gdb/valops.c -@@ -3759,56 +3759,151 @@ value_of_this_silent (const struct language_defn *lang) - struct value * - value_slice (struct value *array, int lowbound, int length) - { -+ /* Pass unaltered arguments to VALUE_SLICE_1, plus a CALL_COUNT of '1' as we -+ are only considering the highest dimension, or we are working on a one -+ dimensional array. So we call VALUE_SLICE_1 exactly once. */ -+ return value_slice_1 (array, lowbound, length, 1); -+} -+ -+/* CALL_COUNT is used to determine if we are calling the function once, e.g. -+ we are working on the current dimension of ARRAY, or if we are calling -+ the function repeatedly. In the later case we need to take elements -+ from the TARGET_TYPE of ARRAY. -+ With a CALL_COUNT greater than 1 we calculate the offsets for every element -+ that should be in the result array. Then we fetch the contents and then -+ copy them into the result array. The result array will have one dimension -+ less than the input array, so later on we need to recreate the indices and -+ ranges in the calling function. */ -+ -+struct value * -+value_slice_1 (struct value *array, int lowbound, int length, int call_count) -+{ - struct type *slice_range_type, *slice_type, *range_type; -- LONGEST lowerbound, upperbound; -- struct value *slice; -- struct type *array_type; -+ struct type *array_type = check_typedef (value_type (array)); -+ struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); -+ unsigned int elt_size, elt_offs; -+ LONGEST elt_stride, ary_high_bound, ary_low_bound; -+ struct value *v; -+ int slice_range_size, i = 0, row_count = 1, elem_count = 1; - -- array_type = check_typedef (value_type (array)); -+ /* Check for legacy code if we are actually dealing with an array or -+ string. */ - if (TYPE_CODE (array_type) != TYPE_CODE_ARRAY - && TYPE_CODE (array_type) != TYPE_CODE_STRING) - error (_("cannot take slice of non-array")); - -- range_type = TYPE_INDEX_TYPE (array_type); -- if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0) -- error (_("slice from bad array or bitstring")); -+ ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (array_type)); -+ ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (array_type)); -+ -+ /* When we are working on a multi-dimensional array, we need to get the -+ attributes of the underlying type. */ -+ if (call_count > 1) -+ { -+ elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type)); -+ row_count = TYPE_LENGTH (array_type) -+ / TYPE_LENGTH (TYPE_TARGET_TYPE (array_type)); -+ } -+ -+ elem_count = length; -+ elt_size = TYPE_LENGTH (elt_type); -+ elt_offs = longest_to_int (lowbound - ary_low_bound); -+ elt_stride = TYPE_LENGTH (TYPE_INDEX_TYPE (array_type)); -+ -+ elt_offs *= elt_size; -+ -+ /* Check for valid user input. In case of Fortran this was already done -+ in the calling function. */ -+ if (call_count == 1 -+ && (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) -+ && elt_offs >= TYPE_LENGTH (array_type))) -+ error (_("no such vector element")); - -- if (lowbound < lowerbound || length < 0 -- || lowbound + length - 1 > upperbound) -- error (_("slice out of range")); -+ /* CALL_COUNT is 1 when we are dealing either with the highest dimension -+ of the array, or a one dimensional array. Set RANGE_TYPE accordingly. -+ In both cases we calculate how many rows/elements will be in the output -+ array by setting slice_range_size. */ -+ if (call_count == 1) -+ { -+ range_type = TYPE_INDEX_TYPE (array_type); -+ slice_range_size = elem_count; -+ -+ /* Check if the array bounds are valid. */ -+ if (get_discrete_bounds (range_type, &ary_low_bound, &ary_high_bound) < 0) -+ error (_("slice from bad array or bitstring")); -+ } -+ /* When CALL_COUNT is greater than 1, we are dealing with an array of arrays. -+ So we need to get the type below the current one and set the RANGE_TYPE -+ accordingly. */ -+ else -+ { -+ range_type = TYPE_INDEX_TYPE (TYPE_TARGET_TYPE (array_type)); -+ slice_range_size = (ary_low_bound + row_count - 1) * (elem_count); -+ ary_low_bound = TYPE_LOW_BOUND (range_type); -+ } - - /* FIXME-type-allocation: need a way to free this type when we are -- done with it. */ -- slice_range_type = create_static_range_type ((struct type *) NULL, -- TYPE_TARGET_TYPE (range_type), -- lowbound, -- lowbound + length - 1); -+ done with it. */ - -+ slice_range_type = create_static_range_type (NULL, TYPE_TARGET_TYPE (range_type), -+ ary_low_bound, slice_range_size); - { -- struct type *element_type = TYPE_TARGET_TYPE (array_type); -- LONGEST offset -- = (lowbound - lowerbound) * TYPE_LENGTH (check_typedef (element_type)); -+ struct type *element_type; -+ -+ /* When CALL_COUNT equals 1 we can use the legacy code for subarrays. */ -+ if (call_count == 1) -+ { -+ element_type = TYPE_TARGET_TYPE (array_type); - -- slice_type = create_array_type ((struct type *) NULL, -- element_type, -- slice_range_type); -- TYPE_CODE (slice_type) = TYPE_CODE (array_type); -+ slice_type = create_array_type (NULL, element_type, slice_range_type); -+ -+ TYPE_CODE (slice_type) = TYPE_CODE (array_type); -+ -+ if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) -+ v = allocate_value_lazy (slice_type); -+ else -+ { -+ v = allocate_value (slice_type); -+ value_contents_copy (v, -+ value_embedded_offset (v), -+ array, -+ value_embedded_offset (array) + elt_offs, -+ elt_size * longest_to_int (length)); -+ } - -- if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) -- slice = allocate_value_lazy (slice_type); -+ } -+ /* When CALL_COUNT is larger than 1 we are working on a range of ranges. -+ So we copy the relevant elements into the new array we return. */ - else - { -- slice = allocate_value (slice_type); -- value_contents_copy (slice, 0, array, offset, -- type_length_units (slice_type)); -+ LONGEST dst_offset = 0; -+ LONGEST src_row_length = TYPE_LENGTH (TYPE_TARGET_TYPE (array_type)); -+ -+ element_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (array_type)); -+ slice_type = create_array_type (NULL, element_type, slice_range_type); -+ -+ TYPE_CODE (slice_type) = TYPE_CODE (TYPE_TARGET_TYPE (array_type)); -+ -+ v = allocate_value (slice_type); -+ for (i = 0; i < longest_to_int (row_count); i++) -+ { -+ /* Fetches the contents of ARRAY and copies them into V. */ -+ value_contents_copy (v, -+ dst_offset, -+ array, -+ elt_offs, -+ elt_size * elem_count); -+ elt_offs += src_row_length; -+ dst_offset += elt_size * elem_count; -+ } - } - -- set_value_component_location (slice, array); -- VALUE_FRAME_ID (slice) = VALUE_FRAME_ID (array); -- set_value_offset (slice, value_offset (array) + offset); -+ set_value_component_location (v, array); -+ VALUE_REGNUM (v) = VALUE_REGNUM (array); -+ VALUE_FRAME_ID (v) = VALUE_FRAME_ID (array); -+ set_value_offset (v, value_offset (array) + elt_offs); - } - -- return slice; -+ return v; - } - - /* Create a value for a FORTRAN complex number. Currently most of the -diff --git a/gdb/value.h b/gdb/value.h -index eea0e59..05939c4 100644 ---- a/gdb/value.h -+++ b/gdb/value.h -@@ -1056,6 +1056,8 @@ extern struct value *varying_to_slice (struct value *); - - extern struct value *value_slice (struct value *, int, int); - -+extern struct value *value_slice_1 (struct value *, int, int, int); -+ - extern struct value *value_literal_complex (struct value *, struct value *, - struct type *); - --- -1.7.0.7 diff --git a/gdb-fortran-stride-intel-2of6.patch b/gdb-fortran-stride-intel-2of6.patch deleted file mode 100644 index 12f7515..0000000 --- a/gdb-fortran-stride-intel-2of6.patch +++ /dev/null @@ -1,45 +0,0 @@ -From: Christoph Weinmann -[PATCH 2/6] fortran: combine subarray and string computation -https://sourceware.org/ml/gdb-patches/2015-12/msg00010.html -Message-Id: <1448976075-11456-3-git-send-email-christoph.t.weinmann@intel.com> - -Strings only have one dimension, but the element computation is -identical to the subarray computation for ranges and indices. - -2013-11-26 Christoph Weinmann - - * eval.c (evaluate_subexp_standard): Call - value_f90_subarray for print expressions on array and - string types. - - - -Signed-off-by: Christoph Weinmann ---- - gdb/eval.c | 10 +--------- - 1 files changed, 1 insertions(+), 9 deletions(-) - -diff --git a/gdb/eval.c b/gdb/eval.c -index 2ceccbc..0c1b607 100644 ---- a/gdb/eval.c -+++ b/gdb/eval.c -@@ -2034,16 +2034,8 @@ evaluate_subexp_standard (struct type *expect_type, - switch (code) - { - case TYPE_CODE_ARRAY: -- return value_f90_subarray (arg1, exp, pos, nargs, noside); -- - case TYPE_CODE_STRING: -- if (exp->elts[*pos].opcode == OP_F90_RANGE) -- return value_f90_subarray (arg1, exp, pos, 1, noside); -- else -- { -- arg2 = evaluate_subexp_with_coercion (exp, pos, noside); -- return value_subscript (arg1, value_as_long (arg2)); -- } -+ return value_f90_subarray (arg1, exp, pos, nargs, noside); - - case TYPE_CODE_PTR: - case TYPE_CODE_FUNC: --- -1.7.0.7 diff --git a/gdb-fortran-stride-intel-3of6.patch b/gdb-fortran-stride-intel-3of6.patch deleted file mode 100644 index ebe3a87..0000000 --- a/gdb-fortran-stride-intel-3of6.patch +++ /dev/null @@ -1,162 +0,0 @@ -From: Christoph Weinmann -[PATCH 3/6] fortran: change subrange enum to bit field -https://sourceware.org/ml/gdb-patches/2015-12/msg00006.html -Message-Id: <1448976075-11456-4-git-send-email-christoph.t.weinmann@intel.com> - -Change Fortran subrange enum for subrange expressions to -represent a bitfield for easier manipulation. Consequently -also change occurences and evaluation of said enum. The -behaviour of GDB is unchanged. - -2013-11-27 Christoph Weinmann - - * eval.c (value_f90_subarray): Change evaluation of the - subarray boundaries. Set boundaries to be either user - provided (bit in f90_range_type was set) or take the - default value if the boundary was not provided by the user. - * f-exp.y (subrange): Change rules for subrange expressions - to write the relevant bit sequence onto the elt stack. - * f-lang.h (f90_range_type): Change the enum to use bit - values for each boundary, if set by the user. - * parse.c (operator_length_standard): In case of - OP_F90_RANGE change the calculation of the number of - arguments on the elt stack, depending on the number of - boundaries provided by the user. - - - -Signed-off-by: Christoph Weinmann ---- - gdb/eval.c | 14 ++++++-------- - gdb/f-exp.y | 11 ++++++----- - gdb/f-lang.h | 6 ++---- - gdb/parse.c | 21 ++++++++------------- - 4 files changed, 22 insertions(+), 30 deletions(-) - -diff --git a/gdb/eval.c b/gdb/eval.c -index 0c1b607..47ba602 100644 ---- a/gdb/eval.c -+++ b/gdb/eval.c -@@ -480,12 +480,12 @@ value_f90_subarray (struct value *array, struct expression *exp, - /* If a lower bound was provided by the user, the bit has been - set and we can assign the value from the elt stack. Same for - upper bound. */ -- if ((range->f90_range_type == HIGH_BOUND_DEFAULT) -- || range->f90_range_type == NONE_BOUND_DEFAULT) -+ if ((range->f90_range_type & SUBARRAY_LOW_BOUND) -+ == SUBARRAY_LOW_BOUND) - range->low = value_as_long (evaluate_subexp (NULL_TYPE, exp, - pos, noside)); -- if ((range->f90_range_type == LOW_BOUND_DEFAULT) -- || range->f90_range_type == NONE_BOUND_DEFAULT) -+ if ((range->f90_range_type & SUBARRAY_HIGH_BOUND) -+ == SUBARRAY_HIGH_BOUND) - range->high = value_as_long (evaluate_subexp (NULL_TYPE, exp, - pos, noside)); - } -@@ -526,12 +526,10 @@ value_f90_subarray (struct value *array, struct expression *exp, - - /* If no lower bound was provided by the user, we take the - default boundary. Same for the high bound. */ -- if ((range->f90_range_type == LOW_BOUND_DEFAULT) -- || (range->f90_range_type == BOTH_BOUND_DEFAULT)) -+ if ((range->f90_range_type & SUBARRAY_LOW_BOUND) == 0) - range->low = TYPE_LOW_BOUND (index_type); - -- if ((range->f90_range_type == HIGH_BOUND_DEFAULT) -- || (range->f90_range_type == BOTH_BOUND_DEFAULT)) -+ if ((range->f90_range_type & SUBARRAY_HIGH_BOUND) == 0) - range->high = TYPE_HIGH_BOUND (index_type); - - /* Both user provided low and high bound have to be inside the -diff --git a/gdb/f-exp.y b/gdb/f-exp.y -index ab23df0..1ff768c 100644 ---- a/gdb/f-exp.y -+++ b/gdb/f-exp.y -@@ -315,26 +315,27 @@ arglist : arglist ',' exp %prec ABOVE_COMMA - /* There are four sorts of subrange types in F90. */ - - subrange: exp ':' exp %prec ABOVE_COMMA -- { write_exp_elt_opcode (pstate, OP_F90_RANGE); -- write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT); -+ { write_exp_elt_opcode (pstate, OP_F90_RANGE); -+ write_exp_elt_longcst (pstate, -+ SUBARRAY_LOW_BOUND | SUBARRAY_HIGH_BOUND); - write_exp_elt_opcode (pstate, OP_F90_RANGE); } - ; - - subrange: exp ':' %prec ABOVE_COMMA - { write_exp_elt_opcode (pstate, OP_F90_RANGE); -- write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT); -+ write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND); - write_exp_elt_opcode (pstate, OP_F90_RANGE); } - ; - - subrange: ':' exp %prec ABOVE_COMMA - { write_exp_elt_opcode (pstate, OP_F90_RANGE); -- write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT); -+ write_exp_elt_longcst (pstate, SUBARRAY_HIGH_BOUND); - write_exp_elt_opcode (pstate, OP_F90_RANGE); } - ; - - subrange: ':' %prec ABOVE_COMMA - { write_exp_elt_opcode (pstate, OP_F90_RANGE); -- write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT); -+ write_exp_elt_longcst (pstate, 0); - write_exp_elt_opcode (pstate, OP_F90_RANGE); } - ; - -diff --git a/gdb/f-lang.h b/gdb/f-lang.h -index f7a14d7..20cf5bd 100644 ---- a/gdb/f-lang.h -+++ b/gdb/f-lang.h -@@ -44,10 +44,8 @@ extern void f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, - - enum f90_range_type - { -- BOTH_BOUND_DEFAULT, /* "(:)" */ -- LOW_BOUND_DEFAULT, /* "(:high)" */ -- HIGH_BOUND_DEFAULT, /* "(low:)" */ -- NONE_BOUND_DEFAULT /* "(low:high)" */ -+ SUBARRAY_LOW_BOUND = 0x1, /* "(low:)" */ -+ SUBARRAY_HIGH_BOUND = 0x2 /* "(:high)" */ - }; - - /* A common block. */ -diff --git a/gdb/parse.c b/gdb/parse.c -index a24c52a..7e45c05 100644 ---- a/gdb/parse.c -+++ b/gdb/parse.c -@@ -1006,22 +1006,17 @@ operator_length_standard (const struct expression *expr, int endpos, - - case OP_F90_RANGE: - oplen = 3; -+ args = 0; - range_type = (enum f90_range_type) - longest_to_int (expr->elts[endpos - 2].longconst); - -- switch (range_type) -- { -- case LOW_BOUND_DEFAULT: -- case HIGH_BOUND_DEFAULT: -- args = 1; -- break; -- case BOTH_BOUND_DEFAULT: -- args = 0; -- break; -- case NONE_BOUND_DEFAULT: -- args = 2; -- break; -- } -+ /* Increment the argument counter for each argument -+ provided by the user. */ -+ if ((range_type & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND) -+ args++; -+ -+ if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND) -+ args++; - - break; - --- -1.7.0.7 diff --git a/gdb-fortran-stride-intel-4of6.patch b/gdb-fortran-stride-intel-4of6.patch deleted file mode 100644 index 650236e..0000000 --- a/gdb-fortran-stride-intel-4of6.patch +++ /dev/null @@ -1,142 +0,0 @@ -From: Christoph Weinmann -[PATCH 4/6] fortran: enable parsing of stride parameter for subranges -https://sourceware.org/ml/gdb-patches/2015-12/msg00009.html -Message-Id: <1448976075-11456-5-git-send-email-christoph.t.weinmann@intel.com> - -Allow the user to provide a stride parameter for Fortran -subarrays. The stride parameter can be any integer except -'0'. The default stride value is '1'. - -2013-11-27 Christoph Weinmann - - * eval.c (value_f90_subarray): Add expression evaluation - for a stride parameter in a Fortran range expression. - * f-exp.y: Add yacc rules for writing info on the elt stack - when the user provided a stride argument. - * f-lang.h (F90_RANGE): Add field to enum to show when a - stride was provided by the user. - * parse.c (operator_length_standard): Check if a stride - value was provided, and increment argument counter - accordingly. - - - -Signed-off-by: Christoph Weinmann ---- - gdb/eval.c | 10 +++++++++- - gdb/f-exp.y | 33 +++++++++++++++++++++++++++++++-- - gdb/f-lang.h | 5 +++-- - gdb/parse.c | 3 +++ - 4 files changed, 46 insertions(+), 5 deletions(-) - -diff --git a/gdb/eval.c b/gdb/eval.c -index 47ba602..15b2ad4 100644 ---- a/gdb/eval.c -+++ b/gdb/eval.c -@@ -438,7 +438,7 @@ value_f90_subarray (struct value *array, struct expression *exp, - struct subscript_range - { - enum f90_range_type f90_range_type; -- LONGEST low, high; -+ LONGEST low, high, stride; - } - range; - LONGEST number; -@@ -488,6 +488,14 @@ value_f90_subarray (struct value *array, struct expression *exp, - == SUBARRAY_HIGH_BOUND) - range->high = value_as_long (evaluate_subexp (NULL_TYPE, exp, - pos, noside)); -+ -+ /* Assign the user's stride value if provided. */ -+ if ((range->f90_range_type & SUBARRAY_STRIDE) == SUBARRAY_STRIDE) -+ range->stride = value_as_long (evaluate_subexp (NULL_TYPE, exp, -+ pos, noside)); -+ /* Assign the default stride value '1'. */ -+ else -+ range->stride = 1; - } - /* User input is an index. E.g.: "p arry(5)". */ - else -diff --git a/gdb/f-exp.y b/gdb/f-exp.y -index 1ff768c..01480b0 100644 ---- a/gdb/f-exp.y -+++ b/gdb/f-exp.y -@@ -316,8 +316,8 @@ arglist : arglist ',' exp %prec ABOVE_COMMA - - subrange: exp ':' exp %prec ABOVE_COMMA - { write_exp_elt_opcode (pstate, OP_F90_RANGE); -- write_exp_elt_longcst (pstate, -- SUBARRAY_LOW_BOUND | SUBARRAY_HIGH_BOUND); -+ write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND -+ | SUBARRAY_HIGH_BOUND); - write_exp_elt_opcode (pstate, OP_F90_RANGE); } - ; - -@@ -339,6 +339,35 @@ subrange: ':' %prec ABOVE_COMMA - write_exp_elt_opcode (pstate, OP_F90_RANGE); } - ; - -+/* Each subrange type can have a stride argument. */ -+subrange: exp ':' exp ':' exp %prec ABOVE_COMMA -+ { write_exp_elt_opcode (pstate, OP_F90_RANGE); -+ write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND -+ | SUBARRAY_HIGH_BOUND -+ | SUBARRAY_STRIDE); -+ write_exp_elt_opcode (pstate, OP_F90_RANGE); } -+ ; -+ -+subrange: exp ':' ':' exp %prec ABOVE_COMMA -+ { write_exp_elt_opcode (pstate, OP_F90_RANGE); -+ write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND -+ | SUBARRAY_STRIDE); -+ write_exp_elt_opcode (pstate, OP_F90_RANGE); } -+ ; -+ -+subrange: ':' exp ':' exp %prec ABOVE_COMMA -+ { write_exp_elt_opcode (pstate, OP_F90_RANGE); -+ write_exp_elt_longcst (pstate, SUBARRAY_HIGH_BOUND -+ | SUBARRAY_STRIDE); -+ write_exp_elt_opcode (pstate, OP_F90_RANGE); } -+ ; -+ -+subrange: ':' ':' exp %prec ABOVE_COMMA -+ { write_exp_elt_opcode (pstate, OP_F90_RANGE); -+ write_exp_elt_longcst (pstate, SUBARRAY_STRIDE); -+ write_exp_elt_opcode (pstate, OP_F90_RANGE); } -+ ; -+ - complexnum: exp ',' exp - { } - ; -diff --git a/gdb/f-lang.h b/gdb/f-lang.h -index 20cf5bd..6cc0672 100644 ---- a/gdb/f-lang.h -+++ b/gdb/f-lang.h -@@ -44,8 +44,9 @@ extern void f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, - - enum f90_range_type - { -- SUBARRAY_LOW_BOUND = 0x1, /* "(low:)" */ -- SUBARRAY_HIGH_BOUND = 0x2 /* "(:high)" */ -+ SUBARRAY_LOW_BOUND = 0x1, /* "(low:)" or "(low::)" */ -+ SUBARRAY_HIGH_BOUND = 0x2, /* "(:high)" or "(:high:)" */ -+ SUBARRAY_STRIDE = 0x4 /* "(::stride)" */ - }; - - /* A common block. */ -diff --git a/gdb/parse.c b/gdb/parse.c -index 7e45c05..e67a426 100644 ---- a/gdb/parse.c -+++ b/gdb/parse.c -@@ -1018,6 +1018,9 @@ operator_length_standard (const struct expression *expr, int endpos, - if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND) - args++; - -+ if ((range_type & SUBARRAY_STRIDE) == SUBARRAY_STRIDE) -+ args++; -+ - break; - - default: --- -1.7.0.7 diff --git a/gdb-fortran-stride-intel-5of6.patch b/gdb-fortran-stride-intel-5of6.patch deleted file mode 100644 index 1ce5440..0000000 --- a/gdb-fortran-stride-intel-5of6.patch +++ /dev/null @@ -1,402 +0,0 @@ -From: Christoph Weinmann -[PATCH 5/6] fortran: calculate subarray with stride values. -https://sourceware.org/ml/gdb-patches/2015-12/msg00011.html -Message-Id: <1448976075-11456-6-git-send-email-christoph.t.weinmann@intel.com> - -Calculate elements of a subarray using a provided stride value -The stride value can be a positive or negative integer, but may -not be zero. If no stride is provided, use the default value -1 to print all elements inside the range. - -1| program prog -2| integer :: ary(10) = (/ (i, i=1, 10) /) -3| end program prog - -(gdb) print ary(1:10:2) -$3 = (1, 3, 5, 7, 9) - -2013-11-27 Christoph Weinmann - - * eval.c (value_f90_subarray): Add range size calculation - for stride based ranges, and evaluation of user stride - parameters. Add check for matching user input to array - bounds. - * valops.c (value_slice): Add call parameter with default - stride value for calling value_slice_1. - * valops.c (value_slice_1): Add function parameter for - stride length in the return subarray. Calculate array - elements based on stride value. - * value.h: Add stride parameter to declaration of - value_slice_1. - - - -Signed-off-by: Christoph Weinmann ---- - gdb/eval.c | 110 +++++++++++++++++++++++++++++++++++++++++++++------------ - gdb/valops.c | 85 ++++++++++++++++++++++++++++++++------------ - gdb/value.h | 2 +- - 3 files changed, 150 insertions(+), 47 deletions(-) - -diff --git a/gdb/eval.c b/gdb/eval.c -index 15b2ad4..b8cd080 100644 ---- a/gdb/eval.c -+++ b/gdb/eval.c -@@ -437,8 +437,8 @@ value_f90_subarray (struct value *array, struct expression *exp, - { - struct subscript_range - { -- enum f90_range_type f90_range_type; -- LONGEST low, high, stride; -+ enum f90_range_type f90_range_type; -+ LONGEST low, high, stride; - } - range; - LONGEST number; -@@ -475,7 +475,7 @@ value_f90_subarray (struct value *array, struct expression *exp, - range = &index->range; - - *pos += 3; -- range->f90_range_type = longest_to_int (exp->elts[pc].longconst); -+ range->f90_range_type = exp->elts[pc].longconst; - - /* If a lower bound was provided by the user, the bit has been - set and we can assign the value from the elt stack. Same for -@@ -484,6 +484,7 @@ value_f90_subarray (struct value *array, struct expression *exp, - == SUBARRAY_LOW_BOUND) - range->low = value_as_long (evaluate_subexp (NULL_TYPE, exp, - pos, noside)); -+ - if ((range->f90_range_type & SUBARRAY_HIGH_BOUND) - == SUBARRAY_HIGH_BOUND) - range->high = value_as_long (evaluate_subexp (NULL_TYPE, exp, -@@ -496,6 +497,10 @@ value_f90_subarray (struct value *array, struct expression *exp, - /* Assign the default stride value '1'. */ - else - range->stride = 1; -+ -+ /* Check the provided stride value is illegal, aka '0'. */ -+ if (range->stride == 0) -+ error (_("Stride must not be 0")); - } - /* User input is an index. E.g.: "p arry(5)". */ - else -@@ -512,10 +517,8 @@ value_f90_subarray (struct value *array, struct expression *exp, - - } - -- /* Traverse the array from right to left and evaluate each corresponding -- user input. VALUE_SUBSCRIPT is called for every index, until a range -- expression is evaluated. After a range expression has been evaluated, -- every subsequent expression is also treated as a range. */ -+ /* Traverse the array from right to left and set the high and low bounds -+ for later use. */ - for (i = nargs - 1; i >= 0; i--) - { - struct subscript_store *index = &subscript_array[i]; -@@ -548,6 +551,48 @@ value_f90_subarray (struct value *array, struct expression *exp, - || range->high > TYPE_HIGH_BOUND (index_type)) - error (_("provided bound(s) outside array bound(s)")); - -+ /* For a negative stride the lower boundary must be larger than the -+ upper boundary. -+ For a positive stride the lower boundary must be smaller than the -+ upper boundary. */ -+ if ((range->stride < 0 && range->low < range->high) -+ || (range->stride > 0 && range->low > range->high)) -+ error (_("Wrong value provided for stride and boundaries")); -+ -+ } -+ break; -+ -+ case SUBSCRIPT_INDEX: -+ break; -+ -+ } -+ -+ array_type = TYPE_TARGET_TYPE (array_type); -+ } -+ -+ /* Reset ARRAY_TYPE before slicing.*/ -+ array_type = check_typedef (value_type (new_array)); -+ -+ /* Traverse the array from right to left and evaluate each corresponding -+ user input. VALUE_SUBSCRIPT is called for every index, until a range -+ expression is evaluated. After a range expression has been evaluated, -+ every subsequent expression is also treated as a range. */ -+ for (i = nargs - 1; i >= 0; i--) -+ { -+ struct subscript_store *index = &subscript_array[i]; -+ struct type *index_type = TYPE_INDEX_TYPE (array_type); -+ -+ switch (index->kind) -+ { -+ case SUBSCRIPT_RANGE: -+ { -+ -+ /* When we hit the first range specified by the user, we must -+ treat any subsequent user entry as a range. We simply -+ increment DIM_COUNT which tells us how many times we are -+ calling VALUE_SLICE_1. */ -+ struct subscript_range *range = &index->range; -+ - /* DIM_COUNT counts every user argument that is treated as a range. - This is necessary for expressions like 'print array(7, 8:9). - Here the first argument is a literal, but must be treated as a -@@ -555,10 +600,9 @@ value_f90_subarray (struct value *array, struct expression *exp, - dim_count++; - - new_array -- = value_slice_1 (new_array, -- longest_to_int (range->low), -- longest_to_int (range->high - range->low + 1), -- dim_count); -+ = value_slice_1 (new_array, range->low, -+ range->high - range->low + 1, -+ range->stride, dim_count); - } - break; - -@@ -572,27 +616,38 @@ value_f90_subarray (struct value *array, struct expression *exp, - to get the value offset right. */ - if (dim_count == 0) - new_array -- = value_subscripted_rvalue (new_array, index->number, -+ = value_subscripted_rvalue (new_array, index->number, - f77_get_lowerbound (value_type - (new_array))); - else - { -- /* Check for valid index input. */ -+ dim_count++; -+ -+ /* We might end up here, because we have to treat the provided -+ index like a range. But now VALUE_SUBSCRIPTED_RVALUE -+ cannot do the range checks for us. So we have to make sure -+ ourselves that the user provided index is inside the -+ array bounds. Throw an error if not. */ - if (index->number < TYPE_LOW_BOUND (index_type) -- || index->number > TYPE_HIGH_BOUND (index_type)) -- error (_("error no such vector element")); -+ && index->number < TYPE_HIGH_BOUND (index_type)) -+ error (_("provided bound(s) outside array bound(s)")); -+ -+ if (index->number > TYPE_LOW_BOUND (index_type) -+ && index->number > TYPE_HIGH_BOUND (index_type)) -+ error (_("provided bound(s) outside array bound(s)")); - -- dim_count++; - new_array = value_slice_1 (new_array, -- longest_to_int (index->number), -- 1, /* length is '1' element */ -+ index->number, -+ 1, /* COUNT is '1' element */ -+ 1, /* STRIDE set to '1' */ - dim_count); - } - - } - break; - } -- } -+ array_type = TYPE_TARGET_TYPE (array_type); -+ } - - /* With DIM_COUNT > 1 we currently have a one dimensional array, but expect - an array of arrays, depending on how many ranges have been provided by -@@ -617,7 +672,9 @@ value_f90_subarray (struct value *array, struct expression *exp, - the output array. So we traverse the SUBSCRIPT_ARRAY again, looking - for a range entry. When we find one, we use the range info to create - an additional range_type to set the correct bounds and dimensions for -- the output array. */ -+ the output array. In addition, we may have a stride value that is not -+ '1', forcing us to adjust the number of elements in a range, according -+ to the stride value. */ - for (i = 0; i < nargs; i++) - { - struct subscript_store *index = &subscript_array[i]; -@@ -625,12 +682,19 @@ value_f90_subarray (struct value *array, struct expression *exp, - if (index->kind == SUBSCRIPT_RANGE) - { - struct type *range_type, *interim_array_type; -+ int new_length; -+ -+ /* The length of a sub-dimension with all elements between the -+ bounds plus the start element itself. It may be modified by -+ a user provided stride value. */ -+ new_length = index->range.high - index->range.low; -+ new_length /= index->range.stride; - - range_type - = create_static_range_type (NULL, -- temp_type, -- 1, -- index->range.high - index->range.low + 1); -+ temp_type, -+ index->range.low, -+ index->range.low + new_length); - - interim_array_type = create_array_type (NULL, - temp_type, -diff --git a/gdb/valops.c b/gdb/valops.c -index f8d23fb..6c9112f 100644 ---- a/gdb/valops.c -+++ b/gdb/valops.c -@@ -3759,10 +3759,13 @@ value_of_this_silent (const struct language_defn *lang) - struct value * - value_slice (struct value *array, int lowbound, int length) - { -- /* Pass unaltered arguments to VALUE_SLICE_1, plus a CALL_COUNT of '1' as we -- are only considering the highest dimension, or we are working on a one -- dimensional array. So we call VALUE_SLICE_1 exactly once. */ -- return value_slice_1 (array, lowbound, length, 1); -+ /* Pass unaltered arguments to VALUE_SLICE_1, plus a default stride -+ value of '1', which returns every element between LOWBOUND and -+ (LOWBOUND + LENGTH). We also provide a default CALL_COUNT of '1' -+ as we are only considering the highest dimension, or we are -+ working on a one dimensional array. So we call VALUE_SLICE_1 -+ exactly once. */ -+ return value_slice_1 (array, lowbound, length, 1, 1); - } - - /* CALL_COUNT is used to determine if we are calling the function once, e.g. -@@ -3776,7 +3779,8 @@ value_slice (struct value *array, int lowbound, int length) - ranges in the calling function. */ - - struct value * --value_slice_1 (struct value *array, int lowbound, int length, int call_count) -+value_slice_1 (struct value *array, int lowbound, int length, -+ int stride_length, int call_count) - { - struct type *slice_range_type, *slice_type, *range_type; - struct type *array_type = check_typedef (value_type (array)); -@@ -3799,14 +3803,24 @@ value_slice_1 (struct value *array, int lowbound, int length, int call_count) - attributes of the underlying type. */ - if (call_count > 1) - { -+ ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (elt_type)); -+ ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (elt_type)); - elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type)); - row_count = TYPE_LENGTH (array_type) - / TYPE_LENGTH (TYPE_TARGET_TYPE (array_type)); - } - -- elem_count = length; -+ /* With a stride of '1', the number of elements per result row is equal to -+ the LENGTH of the subarray. With non-default stride values, we skip -+ elements, but have to add the start element to the total number of -+ elements per row. */ -+ if (stride_length == 1) -+ elem_count = length; -+ else -+ elem_count = ((length - 1) / stride_length) + 1; -+ - elt_size = TYPE_LENGTH (elt_type); -- elt_offs = longest_to_int (lowbound - ary_low_bound); -+ elt_offs = lowbound - ary_low_bound; - elt_stride = TYPE_LENGTH (TYPE_INDEX_TYPE (array_type)); - - elt_offs *= elt_size; -@@ -3837,7 +3851,7 @@ value_slice_1 (struct value *array, int lowbound, int length, int call_count) - else - { - range_type = TYPE_INDEX_TYPE (TYPE_TARGET_TYPE (array_type)); -- slice_range_size = (ary_low_bound + row_count - 1) * (elem_count); -+ slice_range_size = ary_low_bound + (row_count * elem_count) - 1; - ary_low_bound = TYPE_LOW_BOUND (range_type); - } - -@@ -3849,8 +3863,9 @@ value_slice_1 (struct value *array, int lowbound, int length, int call_count) - { - struct type *element_type; - -- /* When CALL_COUNT equals 1 we can use the legacy code for subarrays. */ -- if (call_count == 1) -+ /* When both CALL_COUNT and STRIDE_LENGTH equal 1, we can use the legacy -+ code for subarrays. */ -+ if (call_count == 1 && stride_length == 1) - { - element_type = TYPE_TARGET_TYPE (array_type); - -@@ -3871,29 +3886,53 @@ value_slice_1 (struct value *array, int lowbound, int length, int call_count) - } - - } -- /* When CALL_COUNT is larger than 1 we are working on a range of ranges. -- So we copy the relevant elements into the new array we return. */ -+ /* With a CALL_COUNT or STRIDE_LENGTH are greater than 1 we are working -+ on a range of ranges. So we copy the relevant elements into the -+ new array we return. */ - else - { -+ int j, offs_store = elt_offs; - LONGEST dst_offset = 0; - LONGEST src_row_length = TYPE_LENGTH (TYPE_TARGET_TYPE (array_type)); - -- element_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (array_type)); -+ if (call_count == 1) -+ { -+ /* When CALL_COUNT is equal to 1 we are working on the current range -+ and use these elements directly. */ -+ element_type = TYPE_TARGET_TYPE (array_type); -+ } -+ else -+ { -+ /* Working on an array of arrays, the type of the elements is the type -+ of the subarrays' type. */ -+ element_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (array_type)); -+ } -+ - slice_type = create_array_type (NULL, element_type, slice_range_type); - -- TYPE_CODE (slice_type) = TYPE_CODE (TYPE_TARGET_TYPE (array_type)); -+ /* If we have a one dimensional array, we copy its TYPE_CODE. For a -+ multi dimensional array we copy the embedded type's TYPE_CODE. */ -+ if (call_count == 1) -+ TYPE_CODE (slice_type) = TYPE_CODE (array_type); -+ else -+ TYPE_CODE (slice_type) = TYPE_CODE (TYPE_TARGET_TYPE (array_type)); - - v = allocate_value (slice_type); -- for (i = 0; i < longest_to_int (row_count); i++) -+ -+ /* Iterate through the rows of the outer array and set the new offset -+ for each row. */ -+ for (i = 0; i < row_count; i++) - { -- /* Fetches the contents of ARRAY and copies them into V. */ -- value_contents_copy (v, -- dst_offset, -- array, -- elt_offs, -- elt_size * elem_count); -- elt_offs += src_row_length; -- dst_offset += elt_size * elem_count; -+ elt_offs = offs_store + i * src_row_length; -+ -+ /* Iterate through the elements in each row to copy only those. */ -+ for (j = 1; j <= elem_count; j++) -+ { -+ /* Fetches the contents of ARRAY and copies them into V. */ -+ value_contents_copy (v, dst_offset, array, elt_offs, elt_size); -+ elt_offs += elt_size * stride_length; -+ dst_offset += elt_size; -+ } - } - } - -diff --git a/gdb/value.h b/gdb/value.h -index 05939c4..d687468 100644 ---- a/gdb/value.h -+++ b/gdb/value.h -@@ -1056,7 +1056,7 @@ extern struct value *varying_to_slice (struct value *); - - extern struct value *value_slice (struct value *, int, int); - --extern struct value *value_slice_1 (struct value *, int, int, int); -+extern struct value *value_slice_1 (struct value *, int, int, int, int); - - extern struct value *value_literal_complex (struct value *, struct value *, - struct type *); --- -1.7.0.7 diff --git a/gdb-fortran-stride-intel-6of6-nokfail.patch b/gdb-fortran-stride-intel-6of6-nokfail.patch deleted file mode 100644 index 5b61de1..0000000 --- a/gdb-fortran-stride-intel-6of6-nokfail.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/subrange.exp-orig 2016-01-08 22:45:44.956842553 +0100 -+++ gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/subrange.exp 2016-01-08 23:26:05.078554629 +0100 -@@ -39,27 +39,16 @@ foreach var {a alloc ptr} { - set old_prefix $pf_prefix - lappend pf_prefix "$var:" - -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (2, 2:3)" { = \(22, 32\)} -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (2:3, 3)" { = \(32, 33\)} -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (1, 2:)" { = \(21, 31\)} -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (2, :2)" { = \(12, 22\)} -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (3, 2:2)" { = \(23\)} -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "ptype $var (3, 2:2)" " = $int4 \\(2:2\\)" -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (4, :)" { = \(14, 24, 34\)} -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (:, :)" { = \(\( *11, 12, 13, 14\) \( *21, 22, 23, 24\) \( *31, 32, 33, 34\) *\)} -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "ptype $var (:, :)" " = $int4 \\(4,3\\)" -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (:)" "Wrong number of subscripts" -- setup_kfail "*-*-*" "vlaregression/9999" - gdb_test "p $var (:, :, :)" "Wrong number of subscripts" - - set pf_prefix $old_prefix -@@ -68,5 +57,4 @@ foreach var {a alloc ptr} { - gdb_test_no_output {set $a=a} - delete_breakpoints - gdb_unload --setup_kfail "*-*-*" "vlaregression/9999" - gdb_test {p $a (3, 2:2)} { = \(23\)} diff --git a/gdb-fortran-stride-intel-6of6-testcasefix.patch b/gdb-fortran-stride-intel-6of6-testcasefix.patch deleted file mode 100644 index d67920b..0000000 --- a/gdb-fortran-stride-intel-6of6-testcasefix.patch +++ /dev/null @@ -1,52 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2016-01/msg00135.html -Subject: Re: [PATCH 0/6] fortran: multi-dimensional subarrays with strides - - ---vkogqOf2sHV7VnPd -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline - -On Thu, 03 Dec 2015 21:51:19 +0100, Jan Kratochvil wrote: -> Just I see - reproducible with FSF GDB trunk - one new: -> FAIL: gdb.fortran/static-arrays.exp: print ar3(:2,:2,:2) -> happening on x86_64 in -m32 target mode and on i686 native host. -> It PASSes in the most common case of native x86_64. Tested on Fedora 23. -> print ar3(:2,:2,:2)^M -> -$52 = (( ( 111, 211) ( 121, 221) ) ( ( 112, 212) ( 122, 222) ) )^M -> -(gdb) PASS: gdb.fortran/static-arrays.exp: print ar3(:2,:2,:2) -> +$52 = (( ( 1221, 211) ( 121, 221) ) ( ( 112, 212) ( 122, 222) ) )^M -> +(gdb) FAIL: gdb.fortran/static-arrays.exp: print ar3(:2,:2,:2) - -That was easier than I expected: - -gfortran -fcheck=bounds --> -At line 44 of file gdb.fortran/static-arrays.f90 -Fortran runtime error: Index '11' of dimension 1 of array 'ar4' above upper bound of 10 - -There is: - integer, dimension(10,-7:3, -15:-5) :: ar4 -+ - do i = 1, 11, 1 - - -Jan - ---vkogqOf2sHV7VnPd -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline; filename=1 - ---- gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/static-arrays.f90-orig 2016-01-08 19:19:18.421828196 +0100 -+++ gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/static-arrays.f90 2016-01-08 19:41:09.778142683 +0100 -@@ -38,7 +38,7 @@ subroutine sub - end do - end do - -- do i = 1, 11, 1 -+ do i = 1, 10, 1 - do j = -7, 3, 1 - do k = -15, -5, 1 - ar4(i,j,k) = i*100 + (j+8)*10 + (k+16) - ---vkogqOf2sHV7VnPd-- - diff --git a/gdb-fortran-stride-intel-6of6.patch b/gdb-fortran-stride-intel-6of6.patch deleted file mode 100644 index ba77c19..0000000 --- a/gdb-fortran-stride-intel-6of6.patch +++ /dev/null @@ -1,474 +0,0 @@ -From: Christoph Weinmann -[PATCH 6/6] fortran: test cases for subarray strides and slices -https://sourceware.org/ml/gdb-patches/2015-12/msg00012.html -Message-Id: <1448976075-11456-7-git-send-email-christoph.t.weinmann@intel.com> - -Add test cases for subarray creation with range, literal and -stride value permutations for one, two, and three dimensional -arrays. - -2013-12-04 Christoph Weinmann - -testsuite/gdb.fortran/ - * static-arrays.exp: New test. - * static-arrays.f90: New file. - - - -Signed-off-by: Christoph Weinmann ---- - gdb/testsuite/gdb.fortran/static-arrays.exp | 380 +++++++++++++++++++++++++++ - gdb/testsuite/gdb.fortran/static-arrays.f90 | 55 ++++ - 2 files changed, 435 insertions(+), 0 deletions(-) - create mode 100644 gdb/testsuite/gdb.fortran/static-arrays.exp - create mode 100644 gdb/testsuite/gdb.fortran/static-arrays.f90 - -diff --git a/gdb/testsuite/gdb.fortran/static-arrays.exp b/gdb/testsuite/gdb.fortran/static-arrays.exp -new file mode 100644 -index 0000000..077f6fb ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/static-arrays.exp -@@ -0,0 +1,380 @@ -+# Copyright 2015 Free Software Foundation, Inc. -+# -+# Contributed by Intel Corp. -+# -+# 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 . -+ -+standard_testfile static-arrays.f90 -+ -+if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}] } { -+ return -1 -+} -+ -+if ![runto MAIN__] then { -+ perror "couldn't run to breakpoint MAIN__" -+ continue -+} -+ -+gdb_breakpoint [gdb_get_line_number "BP1"] -+gdb_continue_to_breakpoint "BP1" ".*BP1.*" -+ -+# Tests subarrays of one dimensional arrays with subrange variations -+gdb_test "print ar1" "\\$\[0-9\]+ = \\(1, 2, 3, 4, 5, 6, 7, 8, 9\\)" \ -+ "print ar1." -+gdb_test "print ar1\(4:7\)" "\\$\[0-9\]+ = \\(4, 5, 6, 7\\)" \ -+ "print ar1\(4:7\)" -+gdb_test "print ar1\(8:\)" "\\$\[0-9\]+ = \\(8, 9\\).*" \ -+ "print ar1\(8:\)" -+gdb_test "print ar1\(:3\)" "\\$\[0-9\]+ = \\(1, 2, 3\\).*" \ -+ "print ar1\(:3\)" -+gdb_test "print ar1\(:\)" "\\$\[0-9\]+ = \\(1, 2, 3, 4, 5, 6, 7, 8, 9\\)" \ -+ "print ar1\(:\)" -+ -+# Check assignment -+gdb_test_no_output "set \$my_ary = ar1\(3:8\)" -+gdb_test "print \$my_ary" \ -+ "\\$\[0-9\]+ = \\(3, 4, 5, 6, 7, 8\\)" \ -+ "Assignment of subarray to variable" -+gdb_test_no_output "set ar1\(5\) = 42" -+ gdb_test "print ar1\(3:8\)" \ -+ "\\$\[0-9\]+ = \\(3, 4, 42, 6, 7, 8\\)" \ -+ "print ar1\(3:8\) after assignment" -+gdb_test "print \$my_ary" \ -+ "\\$\[0-9\]+ = \\(3, 4, 5, 6, 7, 8\\)" \ -+ "Assignment of subarray to variable after original array changed" -+ -+# Test for subarrays of one dimensional arrays with literals -+ gdb_test "print ar1\(3\)" "\\$\[0-9\]+ = 3" \ -+ "print ar1\(3\)" -+ -+# Tests for subranges of 2 dimensional arrays with subrange variations -+gdb_test "print ar2\(2:3, 3:4\)" \ -+ "\\$\[0-9\]+ = \\(\\( 23, 33\\) \\( 24, 34\\) \\)" \ -+ "print ar2\(2:3, 3:4\)." -+gdb_test "print ar2\(8:9,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \ -+ "print ar2\(8:9,8:\)" -+gdb_test "print ar2\(8:9,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 81, 91\\) \\( 82, 92\\) \\)" \ -+ "print ar2\(8:9,:2\)" -+ -+gdb_test "print ar2\(8:,8:9\)" \ -+ "\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \ -+ "print ar2\(8:,8:9\)" -+gdb_test "print ar2\(8:,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \ -+ "print ar2\(8:,8:\)" -+gdb_test "print ar2\(8:,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 81, 91\\) \\( 82, 92\\) \\)" \ -+ "print ar2\(8:,:2\)" -+ -+gdb_test "print ar2\(:2,2:3\)" \ -+ "\\$\[0-9\]+ = \\(\\( 12, 22\\) \\( 13, 23\\) \\)" \ -+ "print ar2\(:2,2:3\)" -+gdb_test "print ar2\(:2,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 18, 28\\) \\( 19, 29\\) \\)" \ -+ "print ar2\(:2,8:\)" -+gdb_test "print ar2\(:2,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 11, 21\\) \\( 12, 22\\) \\)" \ -+ "print ar2\(:2,:2\)" -+ -+# Test subranges of 2 dimensional arrays with literals and subrange variations -+gdb_test "print ar2\(7, 3:6\)" \ -+ "\\$\[0-9\]+ = \\(73, 74, 75, 76\\)" \ -+ "print ar2\(7, 3:6\)" -+gdb_test "print ar2\(7,8:\)" \ -+ "\\$\[0-9\]+ = \\(78, 79\\)" \ -+ "print ar2\(7,8:\)" -+gdb_test "print ar2\(7,:2\)" \ -+ "\\$\[0-9\]+ = \\(71, 72\\)" \ -+ "print ar2\(7,:2\)" -+ -+gdb_test "print ar2\(7:8,4\)" \ -+ "\\$\[0-9\]+ = \\(74, 84\\)" \ -+ "print ar2(7:8,4\)" -+gdb_test "print ar2\(8:,4\)" \ -+ "\\$\[0-9\]+ = \\(84, 94\\)" \ -+ "print ar2\(8:,4\)" -+gdb_test "print ar2\(:2,4\)" \ -+ "\\$\[0-9\]+ = \\(14, 24\\)" \ -+ "print ar2\(:2,4\)" -+gdb_test "print ar2\(3,4\)" \ -+ "\\$\[0-9\]+ = 34" \ -+ "print ar2\(3,4\)" -+ -+# Test subarrays of 3 dimensional arrays with literals and subrange variations -+gdb_test "print ar3\(2:4,3:4,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 237, 337, 437\\) \\( 247, 347, 447\\) \\) \\( \\( 238, 338, 438\\) \\( 248, 348, 448\\) \\) \\)" \ -+ "print ar3\(2:4,3:4,7:8\)" -+gdb_test "print ar3\(2:3,4:5,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 248, 348\\) \\( 258, 358\\) \\) \\( \\( 249, 349\\) \\( 259, 359\\) \\) \\)" \ -+ "print ar3\(2:3,4:5,8:\)" -+gdb_test "print ar3\(2:3,4:5,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 241, 341\\) \\( 251, 351\\) \\) \\( \\( 242, 342\\) \\( 252, 352\\) \\) \\)" \ -+ "print ar3\(2:3,4:5,:2\)" -+ -+gdb_test "print ar3\(2:3,8:,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 287, 387\\) \\( 297, 397\\) \\) \\( \\( 288, 388\\) \\( 298, 398\\) \\) \\)" \ -+ "print ar3\(2:3,8:,7:8\)" -+gdb_test "print ar3\(2:3,8:,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 288, 388\\) \\( 298, 398\\) \\) \\( \\( 289, 389\\) \\( 299, 399\\) \\) \\)" \ -+ "print ar3\(2:3,8:,8:\)" -+gdb_test "print ar3\(2:3,8:,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 281, 381\\) \\( 291, 391\\) \\) \\( \\( 282, 382\\) \\( 292, 392\\) \\) \\)" \ -+ "print ar3\(2:3,8:,:2\)" -+ -+gdb_test "print ar3\(2:3,:2,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 217, 317\\) \\( 227, 327\\) \\) \\( \\( 218, 318\\) \\( 228, 328\\) \\) \\)" \ -+ "print ar3\(2:3,:2,7:8\)" -+gdb_test "print ar3\(2:3,:2,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 218, 318\\) \\( 228, 328\\) \\) \\( \\( 219, 319\\) \\( 229, 329\\) \\) \\)" \ -+ "print ar3\(2:3,:2,8:\)" -+gdb_test "print ar3\(2:3,:2,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 211, 311\\) \\( 221, 321\\) \\) \\( \\( 212, 312\\) \\( 222, 322\\) \\) \\)" \ -+ "print ar3\(2:3,:2,:2\)" -+ -+gdb_test "print ar3\(8:,3:4,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 837, 937\\) \\( 847, 947\\) \\) \\( \\( 838, 938\\) \\( 848, 948\\) \\) \\)" \ -+ "print ar3\(8:,3:4,7:8\)" -+gdb_test "print ar3\(8:,4:5,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 848, 948\\) \\( 858, 958\\) \\) \\( \\( 849, 949\\) \\( 859, 959\\) \\) \\)" \ -+ "print ar3\(8:,4:5,8:\)" -+gdb_test "print ar3\(8:,4:5,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 841, 941\\) \\( 851, 951\\) \\) \\( \\( 842, 942\\) \\( 852, 952\\) \\) \\)" \ -+ "print ar3\(8:,4:5,:2\)" -+ -+gdb_test "print ar3\(8:,8:,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 887, 987\\) \\( 897, 997\\) \\) \\( \\( 888, 988\\) \\( 898, 998\\) \\) \\)" \ -+ "print ar3\(8:,8:,7:8\)" -+gdb_test "print ar3\(8:,8:,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 888, 988\\) \\( 898, 998\\) \\) \\( \\( 889, 989\\) \\( 899, 999\\) \\) \\)" \ -+ "print ar3\(8:,8:,8:\)" -+gdb_test "print ar3\(8:,8:,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 881, 981\\) \\( 891, 991\\) \\) \\( \\( 882, 982\\) \\( 892, 992\\) \\) \\)" \ -+ "print ar3\(8:,8:,:2\)" -+ -+gdb_test "print ar3\(8:,:2,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 817, 917\\) \\( 827, 927\\) \\) \\( \\( 818, 918\\) \\( 828, 928\\) \\) \\)" \ -+ "print ar3\(8:,:2,7:8\)" -+gdb_test "print ar3\(8:,:2,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 818, 918\\) \\( 828, 928\\) \\) \\( \\( 819, 919\\) \\( 829, 929\\) \\) \\)" \ -+ "print ar3\(8:,:2,8:\)" -+gdb_test "print ar3\(8:,:2,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 811, 911\\) \\( 821, 921\\) \\) \\( \\( 812, 912\\) \\( 822, 922\\) \\) \\)" \ -+ "print ar3\(8:,:2,:2\)" -+ -+ -+gdb_test "print ar3\(:2,3:4,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 137, 237\\) \\( 147, 247\\) \\) \\( \\( 138, 238\\) \\( 148, 248\\) \\) \\)" \ -+ "print ar3 \(:2,3:4,7:8\)." -+gdb_test "print ar3\(:2,3:4,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 138, 238\\) \\( 148, 248\\) \\) \\( \\( 139, 239\\) \\( 149, 249\\) \\) \\)" \ -+ "print ar3\(:2,3:4,8:\)" -+gdb_test "print ar3\(:2,3:4,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 131, 231\\) \\( 141, 241\\) \\) \\( \\( 132, 232\\) \\( 142, 242\\) \\) \\)" \ -+ "print ar3\(:2,3:4,:2\)" -+ -+gdb_test "print ar3\(:2,8:,7:8\)" "\\$\[0-9\]+ = \\(\\( \\( 187, 287\\) \\( 197, 297\\) \\) \\( \\( 188, 288\\) \\( 198, 298\\) \\) \\)" \ -+ "print ar3\(:2,8:,7:8\)" -+gdb_test "print ar3\(:2,8:,8:\)" "\\$\[0-9\]+ = \\(\\( \\( 188, 288\\) \\( 198, 298\\) \\) \\( \\( 189, 289\\) \\( 199, 299\\) \\) \\)" \ -+ "print ar3\(:2,8:,8:\)" -+gdb_test "print ar3\(:2,8:,:2\)" "\\$\[0-9\]+ = \\(\\( \\( 181, 281\\) \\( 191, 291\\) \\) \\( \\( 182, 282\\) \\( 192, 292\\) \\) \\)" \ -+ "print ar3\(:2,8:,:2\)" -+ -+gdb_test "print ar3\(:2,:2,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 117, 217\\) \\( 127, 227\\) \\) \\( \\( 118, 218\\) \\( 128, 228\\) \\) \\)" \ -+ "print ar3\(:2,:2,7:8\)" -+gdb_test "print ar3\(:2,:2,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 118, 218\\) \\( 128, 228\\) \\) \\( \\( 119, 219\\) \\( 129, 229\\) \\) \\)" \ -+ "print ar3\(:2,:2,8:\)" -+gdb_test "print ar3\(:2,:2,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 111, 211\\) \\( 121, 221\\) \\) \\( \\( 112, 212\\) \\( 122, 222\\) \\) \\)" \ -+ "print ar3\(:2,:2,:2\)" -+ -+ -+#Tests for subarrays of 3 dimensional arrays with literals and subranges -+gdb_test "print ar3\(3,3:4,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( 337, 347\\) \\( 338, 348\\) \\)" \ -+ "print ar3\(3,3:4,7:8\)" -+gdb_test "print ar3\(3,4:5,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 348, 358\\) \\( 349, 359\\) \\)" \ -+ "print ar3\(3,4:5,8:\)" -+gdb_test "print ar3\(3,4:5,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 341, 351\\) \\( 342, 352\\) \\)" \ -+ "print ar3\(3,4:5,:2\)" -+gdb_test "print ar3\(3,4:5,3\)" \ -+ "\\$\[0-9\]+ = \\(343, 353\\)" \ -+ "print ar3\(3,4:5,3\)" -+ -+gdb_test "print ar3\(2,8:,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( 287, 297\\) \\( 288, 298\\) \\)" \ -+ "print ar3\(2,8:,7:8\)" -+gdb_test "print ar3\(2,8:,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 288, 298\\) \\( 289, 299\\) \\)" \ -+ "print ar3\(2,8:,8:\)" -+gdb_test "print ar3\(2,8:,:2\)"\ -+ "\\$\[0-9\]+ = \\(\\( 281, 291\\) \\( 282, 292\\) \\)" \ -+ "print ar3\(2,8:,:2\)" -+gdb_test "print ar3\(2,8:,3\)" \ -+ "\\$\[0-9\]+ = \\(283, 293\\)" \ -+ "print ar3\(2,8:,3\)" -+ -+gdb_test "print ar3\(2,:2,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( 217, 227\\) \\( 218, 228\\) \\)" \ -+ "print ar3\(2,:2,7:8\)" -+gdb_test "print ar3\(2,:2,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 218, 228\\) \\( 219, 229\\) \\)" \ -+ "print ar3\(2,:2,8:\)" -+gdb_test "print ar3\(2,:2,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 211, 221\\) \\( 212, 222\\) \\)" \ -+ "print ar3\(2,:2,:2\)" -+gdb_test "print ar3\(2,:2,3\)" \ -+ "\\$\[0-9\]+ = \\(213, 223\\)" \ -+ "print ar3\(2,:2,3\)" -+ -+gdb_test "print ar3\(3,4,7:8\)" \ -+ "\\$\[0-9\]+ = \\(347, 348\\)" \ -+ "print ar3\(3,4,7:8\)" -+gdb_test "print ar3\(3,4,8:\)" \ -+ "\\$\[0-9\]+ = \\(348, 349\\)" \ -+i "print ar3\(3,4,8:\)" -+gdb_test "print ar3\(3,4,:2\)" \ -+ "\\$\[0-9\]+ = \\(341, 342\\)" \ -+ "print ar3\(3,4,:2\)" -+gdb_test "print ar3\(5,6,7\)" \ -+ "\\$\[0-9\]+ = 567" \ -+ "print ar3\(5,6,7\)" -+ -+gdb_test "print ar3\(3:4,6,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( 367, 467\\) \\( 368, 468\\) \\)" \ -+ "print ar3\(3:4,6,7:8\)" -+gdb_test "print ar3\(3:4,6,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 368, 468\\) \\( 369, 469\\) \\)" \ -+ "print ar3\(3:4,6,8:\)" -+gdb_test "print ar3\(3:4,6,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 361, 461\\) \\( 362, 462\\) \\)" \ -+ "print ar3\(3:4,6,:2\)" -+gdb_test "print ar3\(3:4,6,5\)" \ -+ "\\$\[0-9\]+ = \\(365, 465\\)" \ -+ "print ar3\(3:4,6,5\)" -+ -+gdb_test "print ar3\(8:,6,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( 867, 967\\) \\( 868, 968\\) \\)" \ -+ "print ar3\(8:,6,7:8\)" -+gdb_test "print ar3\(8:,6,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 868, 968\\) \\( 869, 969\\) \\)" \ -+ "print ar3\(8:,6,8:\)" -+gdb_test "print ar3\(8:,6,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 861, 961\\) \\( 862, 962\\) \\)" \ -+ "print ar3\(8:,6,:2\)" -+gdb_test "print ar3\(8:,6,5\)" \ -+ "\\$\[0-9\]+ = \\(865, 965\\)" \ -+ "print ar3\(8:,6,5\)" -+ -+gdb_test "print ar3\(:2,6,7:8\)" \ -+ "\\$\[0-9\]+ = \\(\\( 167, 267\\) \\( 168, 268\\) \\)" \ -+ "print ar3\(:2,6,7:8\)" -+gdb_test "print ar3\(:2,6,8:\)" \ -+ "\\$\[0-9\]+ = \\(\\( 168, 268\\) \\( 169, 269\\) \\)" \ -+ "print ar3\(:2,6,8:\)" -+gdb_test "print ar3\(:2,6,:2\)" \ -+ "\\$\[0-9\]+ = \\(\\( 161, 261\\) \\( 162, 262\\) \\)" \ -+ "print ar3\(:2,6,:2\)" -+gdb_test "print ar3\(:2,6,5\)" \ -+ "\\$\[0-9\]+ = \\(165, 265\\)" \ -+ "print ar3\(:2,6,5\)" -+ -+gdb_test "print ar3\(3:4,5:6,4\)" \ -+ "\\$\[0-9\]+ = \\(\\( 354, 454\\) \\( 364, 464\\) \\)" \ -+ "print ar2\(3:4,5:6,4\)" -+gdb_test "print ar3\(8:,5:6,4\)" \ -+ "\\$\[0-9\]+ = \\(\\( 854, 954\\) \\( 864, 964\\) \\)" \ -+ "print ar2\(8:,5:6,4\)" -+gdb_test "print ar3\(:2,5:6,4\)" \ -+ "\\$\[0-9\]+ = \\(\\( 154, 254\\) \\( 164, 264\\) \\)" \ -+ "print ar2\(:2,5:6,4\)" -+ -+# Stride > 1 -+gdb_test "print ar1\(2:6:2\)" \ -+ "\\$\[0-9\]+ = \\(2, 4, 6\\)" \ -+ "print ar1\(2:6:2\)" -+gdb_test "print ar2\(2:6:2,3:4\)" \ -+ "\\$\[0-9\]+ = \\(\\( 23, 43, 63\\) \\( 24, 44, 64\\) \\)" \ -+ "print ar2\(2:6:2,3:4\)" -+gdb_test "print ar2\(2:6:2,3\)" \ -+ "\\$\[0-9\]+ = \\(23, 43, 63\\)" \ -+ "print ar2\(2:6:2,3\)" -+gdb_test "print ar3\(2:6:2,3:5:2,4:7:3\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 234, 434, 634\\) \\( 254, 454, 654\\) \\) \\( \\( 237, 437, 637\\) \\( 257, 457, 657\\) \\) \\)" \ -+ "print ar3\(2:6:2,3:5:2,4:7:3\)" -+gdb_test "print ar3\(2:6:2,5,4:7:3\)" \ -+ "\\$\[0-9\]+ = \\(\\( 254, 454, 654\\) \\( 257, 457, 657\\) \\)" \ -+ "print ar3\(2:6:2,5,4:7:3\)" -+ -+# Stride < 0 -+gdb_test "print ar1\(8:2:-2\)" \ -+ "\\$\[0-9\]+ = \\(8, 6, 4, 2\\)" \ -+ "print ar1\(8:2:-2\)" -+gdb_test "print ar2\(8:2:-2,3:4\)" \ -+ "\\$\[0-9\]+ = \\(\\( 83, 63, 43, 23\\) \\( 84, 64, 44, 24\\) \\)" \ -+ "print ar2\(8:2:-2,3:4\)" -+gdb_test "print ar2\(2:6:2,3\)" \ -+ "\\$\[0-9\]+ = \\(23, 43, 63\\)" \ -+ "print ar2\(2:6:2,3\)" -+gdb_test "print ar3\(2:3,7:3:-4,4:7:3\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 274, 374\\) \\( 234, 334\\) \\) \\( \\( 277, 377\\) \\( 237, 337\\) \\) \\)" \ -+ "print ar3\(2:3,7:3:-4,4:7:3\)" -+gdb_test "print ar3\(2:6:2,5,7:4:-3\)" \ -+ "\\$\[0-9\]+ = \\(\\( 257, 457, 657\\) \\( 254, 454, 654\\) \\)" \ -+ "print ar3\(2:6:2,5,7:4:-3\)" -+ -+# Tests with negative and mixed indices -+gdb_test "p ar4\(2:4, -2:1, -15:-14\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 261, 361, 461\\) \\( 271, 371, 471\\) \\( 281, 381, 481\\) \\( 291, 391, 491\\) \\) \\( \\( 262, 362, 462\\) \\( 272, 372, 472\\) \\( 282, 382, 482\\) \\( 292, 392, 492\\) \\) \\)" \ -+ "print ar4(2:4, -2:1, -15:-14)" -+ -+gdb_test "p ar4\(7,-6:2:3,-7\)" \ -+ "\\$\[0-9\]+ = \\(729, 759, 789\\)" \ -+ "print ar4(7,-6:2:3,-7)" -+ -+gdb_test "p ar4\(9:2:-2, -6:2:3, -6:-15:-3\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 930, 730, 530, 330\\) \\( 960, 760, 560, 360\\) \\( 990, 790, 590, 390\\) \\) \\( \\( 927, 727, 527, 327\\) \\( 957, 757, 557, 357\\) \\( 987, 787, 587, 387\\) \\) \\( \\( 924, 724, 524, 324\\) \\( 954, 754, 554, 354\\) \\( 984, 784, 584, 384\\) \\) \\( \\( 921, 721, 521, 321\\) \\( 951, 751, 551, 351\\) \\( 981, 781, 581, 381\\) \\) \\)" \ -+ "print ar4(9:2:-2, -6:2:3, -6:-15:-3)" -+ -+gdb_test "p ar4\(:,:,:\)" \ -+ "\\$\[0-9\]+ = \\(\\( \\( 111, 211, 311, 411, 511, 611, 711, 811, .*" \ -+ "print ar4(:,:,:)" -+ -+# Provoke error messages for bad user input -+gdb_test "print ar1\(0:4\)" \ -+ "provided bound\\(s\\) outside array bound\\(s\\)" \ -+ "print ar1\(0:4\)" -+gdb_test "print ar1\(8:12\)" \ -+ "provided bound\\(s\\) outside array bound\\(s\\)" \ -+ "print ar1\(8:12\)" -+gdb_test "print ar1\(8:2:\)" \ -+ "A syntax error in expression, near `\\)'." \ -+ "print ar1\(8:2:\)" -+gdb_test "print ar1\(8:2:2\)" \ -+ "Wrong value provided for stride and boundaries" \ -+ "print ar1\(8:2:2\)" -+gdb_test "print ar1\(2:8:-2\)" \ -+ "Wrong value provided for stride and boundaries" \ -+ "print ar1\(2:8:-2\)" -+gdb_test "print ar1\(2:7:0\)" \ -+ "Stride must not be 0" \ -+ "print ar1\(2:7:0\)" -+gdb_test "print ar1\(3:7\) = 42" \ -+ "Invalid cast." \ -+ "Assignment of value to subarray" -diff --git a/gdb/testsuite/gdb.fortran/static-arrays.f90 b/gdb/testsuite/gdb.fortran/static-arrays.f90 -new file mode 100644 -index 0000000..af1a20c ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/static-arrays.f90 -@@ -0,0 +1,55 @@ -+! Copyright 2015 Free Software Foundation, Inc. -+! -+! Contributed by Intel Corp. -+! -+! 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 . -+ -+subroutine sub -+ integer, dimension(9) :: ar1 -+ integer, dimension(9,9) :: ar2 -+ integer, dimension(9,9,9) :: ar3 -+ integer, dimension(10,-7:3, -15:-5) :: ar4 -+ integer :: i,j,k -+ -+ ar1 = 1 -+ ar2 = 1 -+ ar3 = 1 -+ ar4 = 4 -+ -+ ! Resulting array ar3 looks like ((( 111, 112, 113, 114,...))) -+ do i = 1, 9, 1 -+ ar1(i) = i -+ do j = 1, 9, 1 -+ ar2(i,j) = i*10 + j -+ do k = 1, 9, 1 -+ ar3(i,j,k) = i*100 + j*10 + k -+ end do -+ end do -+ end do -+ -+ do i = 1, 11, 1 -+ do j = -7, 3, 1 -+ do k = -15, -5, 1 -+ ar4(i,j,k) = i*100 + (j+8)*10 + (k+16) -+ end do -+ end do -+ end do -+ -+ ar1(1) = 11 !BP1 -+ return -+end -+ -+program testprog -+ call sub -+end --- -1.7.0.7 diff --git a/gdb-glibc-strstr-workaround.patch b/gdb-glibc-strstr-workaround.patch index 3c0c042..d3418f3 100644 --- a/gdb-glibc-strstr-workaround.patch +++ b/gdb-glibc-strstr-workaround.patch @@ -60,7 +60,7 @@ Index: gdb-7.7.90.20140613/gdb/testsuite/gdb.base/gnu-ifunc-strstr-workaround.ex +set testfile "gnu-ifunc-strstr-workaround" +set executable ${testfile} +set srcfile start.c -+set binfile ${objdir}/${subdir}/${executable} ++set binfile [standard_output_file ${executable}] + +if [prepare_for_testing ${testfile}.exp $executable $srcfile] { + return -1 diff --git a/gdb-libexec-add-index.patch b/gdb-libexec-add-index.patch new file mode 100644 index 0000000..8ca579f --- /dev/null +++ b/gdb-libexec-add-index.patch @@ -0,0 +1,16 @@ +diff --git a/gdb/contrib/gdb-add-index.sh b/gdb/contrib/gdb-add-index.sh +index cca7153..73181ec 100755 +--- a/gdb/contrib/gdb-add-index.sh ++++ b/gdb/contrib/gdb-add-index.sh +@@ -21,6 +21,11 @@ + GDB=${GDB:=gdb} + OBJCOPY=${OBJCOPY:=objcopy} + ++GDB2=/usr/libexec/gdb ++if test -x $GDB2 && ! which $GDB &>/dev/null; then ++ GDB=$GDB2 ++fi ++ + myname="${0##*/}" + + if test $# != 1; then diff --git a/gdb-linux_perf-bundle.patch b/gdb-linux_perf-bundle.patch new file mode 100644 index 0000000..ead3758 --- /dev/null +++ b/gdb-linux_perf-bundle.patch @@ -0,0 +1,232 @@ +Index: gdb-7.11.90.20160904/gdb/nat/linux-btrace.h +=================================================================== +--- gdb-7.11.90.20160904.orig/gdb/nat/linux-btrace.h 2016-09-04 04:02:13.000000000 +0200 ++++ gdb-7.11.90.20160904/gdb/nat/linux-btrace.h 2016-09-04 20:11:47.375275492 +0200 +@@ -28,6 +28,177 @@ + # include + #endif + ++#ifdef PERF_ATTR_SIZE_VER5_BUNDLE ++#ifndef HAVE_LINUX_PERF_EVENT_H ++# error "PERF_ATTR_SIZE_VER5_BUNDLE && !HAVE_LINUX_PERF_EVENT_H" ++#endif ++#ifndef PERF_ATTR_SIZE_VER5 ++#define PERF_ATTR_SIZE_VER5 ++#define perf_event_mmap_page perf_event_mmap_page_bundle ++// kernel-headers-3.10.0-493.el7.x86_64/usr/include/linux/perf_event.h ++/* ++ * Structure of the page that can be mapped via mmap ++ */ ++struct perf_event_mmap_page { ++ __u32 version; /* version number of this structure */ ++ __u32 compat_version; /* lowest version this is compat with */ ++ ++ /* ++ * Bits needed to read the hw events in user-space. ++ * ++ * u32 seq, time_mult, time_shift, index, width; ++ * u64 count, enabled, running; ++ * u64 cyc, time_offset; ++ * s64 pmc = 0; ++ * ++ * do { ++ * seq = pc->lock; ++ * barrier() ++ * ++ * enabled = pc->time_enabled; ++ * running = pc->time_running; ++ * ++ * if (pc->cap_usr_time && enabled != running) { ++ * cyc = rdtsc(); ++ * time_offset = pc->time_offset; ++ * time_mult = pc->time_mult; ++ * time_shift = pc->time_shift; ++ * } ++ * ++ * index = pc->index; ++ * count = pc->offset; ++ * if (pc->cap_user_rdpmc && index) { ++ * width = pc->pmc_width; ++ * pmc = rdpmc(index - 1); ++ * } ++ * ++ * barrier(); ++ * } while (pc->lock != seq); ++ * ++ * NOTE: for obvious reason this only works on self-monitoring ++ * processes. ++ */ ++ __u32 lock; /* seqlock for synchronization */ ++ __u32 index; /* hardware event identifier */ ++ __s64 offset; /* add to hardware event value */ ++ __u64 time_enabled; /* time event active */ ++ __u64 time_running; /* time event on cpu */ ++ union { ++ __u64 capabilities; ++ struct { ++ __u64 cap_bit0 : 1, /* Always 0, deprecated, see commit 860f085b74e9 */ ++ cap_bit0_is_deprecated : 1, /* Always 1, signals that bit 0 is zero */ ++ ++ cap_user_rdpmc : 1, /* The RDPMC instruction can be used to read counts */ ++ cap_user_time : 1, /* The time_* fields are used */ ++ cap_user_time_zero : 1, /* The time_zero field is used */ ++ cap_____res : 59; ++ }; ++ }; ++ ++ /* ++ * If cap_user_rdpmc this field provides the bit-width of the value ++ * read using the rdpmc() or equivalent instruction. This can be used ++ * to sign extend the result like: ++ * ++ * pmc <<= 64 - width; ++ * pmc >>= 64 - width; // signed shift right ++ * count += pmc; ++ */ ++ __u16 pmc_width; ++ ++ /* ++ * If cap_usr_time the below fields can be used to compute the time ++ * delta since time_enabled (in ns) using rdtsc or similar. ++ * ++ * u64 quot, rem; ++ * u64 delta; ++ * ++ * quot = (cyc >> time_shift); ++ * rem = cyc & (((u64)1 << time_shift) - 1); ++ * delta = time_offset + quot * time_mult + ++ * ((rem * time_mult) >> time_shift); ++ * ++ * Where time_offset,time_mult,time_shift and cyc are read in the ++ * seqcount loop described above. This delta can then be added to ++ * enabled and possible running (if index), improving the scaling: ++ * ++ * enabled += delta; ++ * if (index) ++ * running += delta; ++ * ++ * quot = count / running; ++ * rem = count % running; ++ * count = quot * enabled + (rem * enabled) / running; ++ */ ++ __u16 time_shift; ++ __u32 time_mult; ++ __u64 time_offset; ++ /* ++ * If cap_usr_time_zero, the hardware clock (e.g. TSC) can be calculated ++ * from sample timestamps. ++ * ++ * time = timestamp - time_zero; ++ * quot = time / time_mult; ++ * rem = time % time_mult; ++ * cyc = (quot << time_shift) + (rem << time_shift) / time_mult; ++ * ++ * And vice versa: ++ * ++ * quot = cyc >> time_shift; ++ * rem = cyc & (((u64)1 << time_shift) - 1); ++ * timestamp = time_zero + quot * time_mult + ++ * ((rem * time_mult) >> time_shift); ++ */ ++ __u64 time_zero; ++ __u32 size; /* Header size up to __reserved[] fields. */ ++ ++ /* ++ * Hole for extension of the self monitor capabilities ++ */ ++ ++ __u8 __reserved[118*8+4]; /* align to 1k. */ ++ ++ /* ++ * Control data for the mmap() data buffer. ++ * ++ * User-space reading the @data_head value should issue an smp_rmb(), ++ * after reading this value. ++ * ++ * When the mapping is PROT_WRITE the @data_tail value should be ++ * written by userspace to reflect the last read data, after issueing ++ * an smp_mb() to separate the data read from the ->data_tail store. ++ * In this case the kernel will not over-write unread data. ++ * ++ * See perf_output_put_handle() for the data ordering. ++ * ++ * data_{offset,size} indicate the location and size of the perf record ++ * buffer within the mmapped area. ++ */ ++ __u64 data_head; /* head in the data section */ ++ __u64 data_tail; /* user-space written tail */ ++ __u64 data_offset; /* where the buffer starts */ ++ __u64 data_size; /* data buffer size */ ++ ++ /* ++ * AUX area is defined by aux_{offset,size} fields that should be set ++ * by the userspace, so that ++ * ++ * aux_offset >= data_offset + data_size ++ * ++ * prior to mmap()ing it. Size of the mmap()ed area should be aux_size. ++ * ++ * Ring buffer pointers aux_{head,tail} have the same semantics as ++ * data_{head,tail} and same ordering rules apply. ++ */ ++ __u64 aux_head; ++ __u64 aux_tail; ++ __u64 aux_offset; ++ __u64 aux_size; ++}; ++#endif // PERF_ATTR_SIZE_VER5 ++#endif // PERF_ATTR_SIZE_VER5_BUNDLE ++ + struct target_ops; + + #if HAVE_LINUX_PERF_EVENT_H +Index: gdb-7.11.90.20160904/gdb/configure +=================================================================== +--- gdb-7.11.90.20160904.orig/gdb/configure 2016-09-04 20:11:47.238274285 +0200 ++++ gdb-7.11.90.20160904/gdb/configure 2016-09-04 20:11:47.378275519 +0200 +@@ -10601,7 +10601,7 @@ + + #include + #ifndef PERF_ATTR_SIZE_VER5 +-# error ++// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL + #endif + + _ACEOF +Index: gdb-7.11.90.20160904/gdb/configure.ac +=================================================================== +--- gdb-7.11.90.20160904.orig/gdb/configure.ac 2016-09-04 20:11:47.238274285 +0200 ++++ gdb-7.11.90.20160904/gdb/configure.ac 2016-09-04 20:11:47.379275528 +0200 +@@ -1461,7 +1461,7 @@ + AC_PREPROC_IFELSE(AC_LANG_SOURCE([[ + #include + #ifndef PERF_ATTR_SIZE_VER5 +-# error ++// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL + #endif + ]]), [perf_event=yes], [perf_event=no]) + if test "$perf_event" != yes; then +Index: gdb-7.11.90.20160904/gdb/gdb.c +=================================================================== +--- gdb-7.11.90.20160904.orig/gdb/gdb.c 2016-09-04 04:02:13.000000000 +0200 ++++ gdb-7.11.90.20160904/gdb/gdb.c 2016-09-04 20:12:28.018633552 +0200 +@@ -20,11 +20,19 @@ + #include "main.h" + #include "interps.h" + ++#ifdef PERF_ATTR_SIZE_VER5_BUNDLE ++extern "C" void __libipt_init(void); ++#endif ++ + int + main (int argc, char **argv) + { + struct captured_main_args args; + ++#ifdef PERF_ATTR_SIZE_VER5_BUNDLE ++ __libipt_init(); ++#endif ++ + memset (&args, 0, sizeof args); + args.argc = argc; + args.argv = argv; diff --git a/gdb-opcodes-clflushopt-test.patch b/gdb-opcodes-clflushopt-test.patch deleted file mode 100644 index 63c3031..0000000 --- a/gdb-opcodes-clflushopt-test.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- /dev/null 2016-01-16 21:50:55.732812229 +0100 -+++ gdb-7.6.1/gdb/testsuite/gdb.arch/amd64-clflushopt.exp 2016-01-16 22:49:19.950683918 +0100 -@@ -0,0 +1,25 @@ -+# Copyright 2016 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 . -+ -+if { ![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"] } then { -+ verbose "Skipping amd64 clflushopt test." -+ return -+} -+ -+if [prepare_for_testing amd64-clflushopt.exp amd64-clflushopt amd64-clflushopt.S [list debug "additional_flags=-nostdlib"]] { -+ return -1 -+} -+ -+gdb_test "disas _start" "Dump of assembler code for function _start:\r\n *0x\[0-9a-f\]+ <\[+\]0>:\tclflushopt \\(%edi\\)\r\nEnd of assembler dump\\." "clflushopt" ---- /dev/null 2016-01-16 21:50:55.732812229 +0100 -+++ gdb-7.6.1/gdb/testsuite/gdb.arch/amd64-clflushopt.S 2016-01-16 22:49:26.398725209 +0100 -@@ -0,0 +1,19 @@ -+/* Copyright 2016 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 . -+ -+ This file is part of the gdb testsuite. */ -+ -+_start: .globl _start -+ clflushopt (%edi) diff --git a/gdb-python-gil.patch b/gdb-python-gil.patch deleted file mode 100644 index 1e3b0b9..0000000 --- a/gdb-python-gil.patch +++ /dev/null @@ -1,231 +0,0 @@ -Index: gdb-7.9.50.20150520/gdb/doc/python.texi -=================================================================== ---- gdb-7.9.50.20150520.orig/gdb/doc/python.texi 2015-05-31 17:57:12.431593983 +0200 -+++ gdb-7.9.50.20150520/gdb/doc/python.texi 2015-05-31 17:57:14.654607708 +0200 -@@ -229,6 +229,14 @@ returned as a string. The default is @c - return value is @code{None}. If @var{to_string} is @code{True}, the - @value{GDBN} virtual terminal will be temporarily set to unlimited width - and height, and its pagination will be disabled; @pxref{Screen Size}. -+ -+The @var{release_gil} flag specifies whether @value{GDBN} ought to -+release the Python GIL before executing the command. This is useful -+in multi-threaded Python programs where by default the Python -+interpreter will acquire the GIL and lock other threads from -+executing. After the command has completed executing in @value{GDBN} -+the Python GIL is reacquired. This flag must be a boolean value. If -+omitted, it defaults to @code{False}. - @end defun - - @findex gdb.breakpoints -Index: gdb-7.9.50.20150520/gdb/python/python-internal.h -=================================================================== ---- gdb-7.9.50.20150520.orig/gdb/python/python-internal.h 2015-05-31 17:57:12.432593989 +0200 -+++ gdb-7.9.50.20150520/gdb/python/python-internal.h 2015-05-31 17:57:14.654607708 +0200 -@@ -142,6 +142,8 @@ typedef int Py_ssize_t; - #define PyGILState_Release(ARG) ((void)(ARG)) - #define PyEval_InitThreads() - #define PyThreadState_Swap(ARG) ((void)(ARG)) -+#define PyEval_SaveThread() ((void)(ARG)) -+#define PyEval_RestoreThread(ARG) ((void)(ARG)) - #define PyEval_ReleaseLock() - #endif - -Index: gdb-7.9.50.20150520/gdb/python/python.c -=================================================================== ---- gdb-7.9.50.20150520.orig/gdb/python/python.c 2015-05-31 17:57:14.656607720 +0200 -+++ gdb-7.9.50.20150520/gdb/python/python.c 2015-05-31 18:02:08.891424227 +0200 -@@ -627,13 +627,18 @@ execute_gdb_command (PyObject *self, PyO - { - const char *arg; - PyObject *from_tty_obj = NULL, *to_string_obj = NULL; -- int from_tty, to_string; -- static char *keywords[] = {"command", "from_tty", "to_string", NULL }; -+ PyObject *release_gil_obj = NULL; -+ int from_tty, to_string, release_gil; -+ static char *keywords[] = {"command", "from_tty", "to_string", -+ "release_gil", NULL }; - char *result = NULL; -+ /* Initialize it just to avoid a GCC false warning. */ -+ PyThreadState *state = NULL; - -- if (! PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!", keywords, &arg, -+ if (! PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!O!", keywords, &arg, - &PyBool_Type, &from_tty_obj, -- &PyBool_Type, &to_string_obj)) -+ &PyBool_Type, &to_string_obj, -+ &PyBool_Type, &release_gil_obj)) - return NULL; - - from_tty = 0; -@@ -654,12 +659,28 @@ execute_gdb_command (PyObject *self, PyO - to_string = cmp; - } - -+ release_gil = 0; -+ if (release_gil_obj) -+ { -+ int cmp = PyObject_IsTrue (release_gil_obj); -+ if (cmp < 0) -+ return NULL; -+ release_gil = cmp; -+ } -+ - TRY - { - /* Copy the argument text in case the command modifies it. */ - char *copy = xstrdup (arg); - struct cleanup *cleanup = make_cleanup (xfree, copy); - -+ /* In the case of long running GDB commands, allow the user to -+ release the Python GIL acquired by Python. Restore the GIL -+ after the command has completed before handing back to -+ Python. */ -+ if (release_gil) -+ state = PyEval_SaveThread(); -+ - make_cleanup_restore_integer (&interpreter_async); - interpreter_async = 0; - -@@ -672,11 +693,23 @@ execute_gdb_command (PyObject *self, PyO - execute_command (copy, from_tty); - } - -+ /* Reacquire the GIL if it was released earlier. */ -+ if (release_gil) -+ PyEval_RestoreThread (state); -+ - do_cleanups (cleanup); - } - CATCH (except, RETURN_MASK_ALL) - { -- GDB_PY_HANDLE_EXCEPTION (except); -+ if (except.reason < 0) -+ { -+ /* Reacquire the GIL if it was released earlier. */ -+ if (release_gil) -+ PyEval_RestoreThread (state); -+ -+ gdbpy_convert_exception (except); -+ return NULL; -+ } - } - END_CATCH - -Index: gdb-7.9.50.20150520/gdb/testsuite/gdb.python/py-gil-mthread.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.9.50.20150520/gdb/testsuite/gdb.python/py-gil-mthread.c 2015-05-31 17:57:14.656607720 +0200 -@@ -0,0 +1,12 @@ -+#include -+ -+int -+main (void) -+{ -+ int i; -+ for (i = 0; i < 10; i++) -+ { -+ sleep (1); /* break-here */ -+ printf ("Sleeping %d\n", i); -+ } -+} -Index: gdb-7.9.50.20150520/gdb/testsuite/gdb.python/py-gil-mthread.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.9.50.20150520/gdb/testsuite/gdb.python/py-gil-mthread.exp 2015-05-31 17:57:14.657607726 +0200 -@@ -0,0 +1,69 @@ -+# Copyright (C) 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 . -+ -+standard_testfile .c .py -+set executable $testfile -+ -+if { [prepare_for_testing $testfile.exp $executable $srcfile] } { -+ return -1 -+} -+ -+# Skip all tests if Python scripting is not enabled. -+if { [skip_python_tests] } { continue } -+ -+if ![runto_main] { -+ return -1 -+} -+ -+gdb_breakpoint $srcfile:[gdb_get_line_number "break-here"] temporary -+gdb_continue_to_breakpoint "break-here" ".* break-here .*" -+ -+set test "response" -+set timeout 60 -+set sleeping_last -1 -+set hello_last 0 -+set minimal 5 -+gdb_test_multiple "python execfile('$srcdir/$subdir/$srcfile2')" $test { -+ -re "Error: unable to start thread\r\n" { -+ fail $test -+ # Not $gdb_prompt-synced! -+ } -+ -re "Sleeping (\[0-9\]+)\r\n" { -+ set n $expect_out(1,string) -+ if { $sleeping_last + 1 != $n } { -+ fail $test -+ } else { -+ set sleeping_last $n -+ if { $sleeping_last >= $minimal && $hello_last >= $minimal } { -+ pass $test -+ } else { -+ exp_continue -+ } -+ } -+ } -+ -re "Hello \\( (\[0-9\]+) \\)\r\n" { -+ set n $expect_out(1,string) -+ if { $hello_last + 1 != $n } { -+ fail $test -+ } else { -+ set hello_last $n -+ if { $sleeping_last >= $minimal && $hello_last >= $minimal } { -+ pass $test -+ } else { -+ exp_continue -+ } -+ } -+ } -+} -Index: gdb-7.9.50.20150520/gdb/testsuite/gdb.python/py-gil-mthread.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.9.50.20150520/gdb/testsuite/gdb.python/py-gil-mthread.py 2015-05-31 17:57:14.657607726 +0200 -@@ -0,0 +1,22 @@ -+import thread -+import time -+import gdb -+ -+# Define a function for the thread -+def print_thread_hello(): -+ count = 0 -+ while count < 10: -+ time.sleep(1) -+ count += 1 -+ print "Hello (", count, ")" -+ -+# Create a threads a continue -+try: -+ thread.start_new_thread( print_thread_hello, ()) -+ gdb.execute ("continue", release_gil=True) -+ -+except: -+ print "Error: unable to start thread" -+ -+while 1: -+ pass diff --git a/gdb-readline62-ask-more-rh.patch b/gdb-readline62-ask-more-rh.patch index ae68946..463d9d3 100644 --- a/gdb-readline62-ask-more-rh.patch +++ b/gdb-readline62-ask-more-rh.patch @@ -1,17 +1,18 @@ -diff -dup -rup gdb-7.10.50.20160106-orig/gdb/event-top.c gdb-7.10.50.20160106/gdb/event-top.c ---- gdb-7.10.50.20160106-orig/gdb/event-top.c 2016-01-09 14:51:02.324243506 +0100 -+++ gdb-7.10.50.20160106/gdb/event-top.c 2016-01-09 14:51:33.029434121 +0100 -@@ -1033,6 +1033,13 @@ set_async_editing_command (char *args, i - void - gdb_setup_readline (void) +Index: gdb-7.11.50.20160630/gdb/event-top.c +=================================================================== +--- gdb-7.11.50.20160630.orig/gdb/event-top.c 2016-07-03 16:32:36.108342159 +0200 ++++ gdb-7.11.50.20160630/gdb/event-top.c 2016-07-03 16:32:59.787523733 +0200 +@@ -1252,6 +1252,13 @@ { + struct ui *ui = current_ui; + +#ifdef NEED_RL_STATE_FEDORA_GDB + /* 6.2 regression: no longed asks for --more-- + gdb.base/readline-ask.exp + https://bugzilla.redhat.com/show_bug.cgi?id=701131 */ + RL_SETSTATE (RL_STATE_FEDORA_GDB); -+ +#endif ++ /* This function is a noop for the sync case. The assumption is that the sync setup is ALL done in gdb_init, and we would only mess it up here. The sync stuff should really go away over diff --git a/gdb-rhbz1007614-memleak-infpy_read_memory-test.patch b/gdb-rhbz1007614-memleak-infpy_read_memory-test.patch new file mode 100644 index 0000000..d0aedd7 --- /dev/null +++ b/gdb-rhbz1007614-memleak-infpy_read_memory-test.patch @@ -0,0 +1,162 @@ +Original message by Tom Tromey: + + + Message-ID: <871uoc1va3.fsf@fleche.redhat.com> + +Comment from Sergio Durigan Junior: + + In order to correctly test this patch, I wrote a testcase based on Jan + Kratochvil's . The + testcase, which can be seen below, tests GDB in order to see if the + amount of memory being leaked is minimal, as requested in the bugzilla. + It is hard to define what "minimum" is, so I ran the testcase on all + supported RHEL architectures and came up with an average. + +commit cc0265cdda9dc7e8665e8bfcf5b4477489daf27c +Author: Tom Tromey +Date: Wed Mar 28 17:38:08 2012 +0000 + + * python/py-inferior.c (infpy_read_memory): Remove cleanups and + explicitly free 'buffer' on exit paths. Decref 'membuf_object' + before returning. + +Index: gdb-7.2/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.c +=================================================================== +--- /dev/null ++++ gdb-7.2/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.c +@@ -0,0 +1,27 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ 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 . */ ++ ++static struct x ++ { ++ char unsigned u[4096]; ++ } x, *px = &x; ++ ++int ++main (int argc, char *argv[]) ++{ ++ return 0; ++} +Index: gdb-7.2/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.exp +=================================================================== +--- /dev/null ++++ gdb-7.2/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.exp +@@ -0,0 +1,68 @@ ++# 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 . ++ ++set testfile py-gdb-rhbz1007614-memleak-infpy_read_memory ++set srcfile ${testfile}.c ++set binfile [standard_output_file ${testfile}] ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { ++ return -1 ++} ++ ++if { [skip_python_tests] } { continue } ++ ++set pid_of_gdb [exp_pid -i [board_info host fileid]] ++ ++proc memory_v_pages_get {} { ++ global pid_of_gdb ++ set fd [open "/proc/$pid_of_gdb/statm"] ++ gets $fd line ++ close $fd ++ # number of pages of virtual memory ++ scan $line "%d" drs ++ return $drs ++} ++ ++if { ![runto_main] } { ++ untested $testfile.exp ++ return -1 ++} ++ ++set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py] ++ ++gdb_test "source ${remote_python_file}" "" ++ ++gdb_test "hello-world" "" ++ ++set kbytes_before [memory_v_pages_get] ++verbose -log "kbytes_before = $kbytes_before" ++ ++gdb_test "hello-world" "" ++ ++set kbytes_after [memory_v_pages_get] ++verbose -log "kbytes_after = $kbytes_after" ++ ++set kbytes_diff [expr $kbytes_after - $kbytes_before] ++verbose -log "kbytes_diff = $kbytes_diff" ++ ++# The value "1000" was calculated by running a few GDB sessions with this ++# testcase, and seeing how much (in average) the memory consumption ++# increased after the "hello-world" command issued above. The average ++# was around 500 bytes, so I chose 1000 as a high estimate. ++if { $kbytes_diff > 1000 } { ++ fail "there is a memory leak on GDB (RHBZ 1007614)" ++} else { ++ pass "there is not a memory leak on GDB (RHBZ 1007614)" ++} +Index: gdb-7.2/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.py +=================================================================== +--- /dev/null ++++ gdb-7.2/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.py +@@ -0,0 +1,30 @@ ++# Copyright (C) 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 . ++ ++class HelloWorld (gdb.Command): ++ """Greet the whole world.""" ++ ++ def __init__ (self): ++ super (HelloWorld, self).__init__ ("hello-world", ++ gdb.COMMAND_OBSCURE) ++ ++ def invoke (self, arg, from_tty): ++ px = gdb.parse_and_eval("px") ++ core = gdb.inferiors()[0] ++ for i in range(256 * 1024): ++ chunk = core.read_memory(px, 4096) ++ print "Hello, World!" ++ ++HelloWorld () diff --git a/gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch b/gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch new file mode 100644 index 0000000..af7271a --- /dev/null +++ b/gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch @@ -0,0 +1,226 @@ +These testcases have been created by compiling glibc-2.17-78 on +RHEL-7.1 s390x/ppc64 boxes, and then taking the "select.o" file +present at $builddir/misc/select.o. + +Index: gdb-7.6.1/gdb/testsuite/gdb.arch/s390x-prologue-skip.exp +=================================================================== +--- /dev/null ++++ gdb-7.6.1/gdb/testsuite/gdb.arch/s390x-prologue-skip.exp +@@ -0,0 +1,34 @@ ++# Copyright 2015 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 . ++ ++if { ![istarget s390x-*linux-*] || ![is_lp64_target] } { ++ verbose "Skipping s390x-prologue-skip.exp" ++ return ++} ++ ++set testfile "s390x-prologue-skip" ++set uufile "${srcdir}/${subdir}/${testfile}.o.uu" ++set ofile "${srcdir}/${subdir}/${testfile}.o" ++ ++if { [catch "system \"uudecode -o ${ofile} ${uufile}\"" ] != 0 } { ++ untested "failed uudecode" ++ return -1 ++} ++ ++gdb_exit ++gdb_start ++gdb_load $ofile ++ ++gdb_test "break select" "Breakpoint $decimal at 0x48: file ../sysdeps/unix/syscall-template.S, line 81." "breakpoint on select" +Index: gdb-7.6.1/gdb/testsuite/gdb.arch/s390x-prologue-skip.o.uu +=================================================================== +--- /dev/null ++++ gdb-7.6.1/gdb/testsuite/gdb.arch/s390x-prologue-skip.o.uu +@@ -0,0 +1,64 @@ ++begin 644 s390x-prologue-skip.o.uu ++M?T5,1@("`0`````````````!`!8````!```````````````````````````` ++M``+```````!```````!``!(`#^LE\!``).O?\&@`)+D$`.^G^_]@X^#P```D ++MP.4`````N00``NLE\+``!`J.N00`TKD$`"#`Y0````"Y!``MZ]_Q"``$I_0` ++M"L`0`````+\/$`"G=/_7"HZG2?`!N2$`),"T``````?^````5@`"````.0$! ++M^PX-``$!`0$````!```!+BXO7-C86QL+71E;7!L ++M871E+E,``0`````)`@```````````]```0)F$P("``$!````CP`"``````@! ++M```````````````````````````N+B]S>7-D97!S+W5N:7@OE(``7@. ++M`1L,#Z`!````````&````!P`````````1`!,CP6.!HT'2`[``@```!`````X ++M`````````"```````"YS>6UT86(`+G-T``````````&````!`````&``````````@````````` ++M&````%<````!``````````````````````````````$"`````````),````` ++M```````````````!``````````````!2````!``````````````````````` ++M```````)^`````````!@````$`````@`````````"``````````8````8P`` ++M``$``````````````````````````````94`````````%``````````````` ++M``````$``````````````'8````!``````````````````````````````&P ++M`````````#`````````````````````0``````````````!Q````!``````` ++M```````````````````````*6``````````P````$`````L`````````"``` ++M```````8````B@````$``````````@```````````````````>`````````` ++M2`````````````````````@``````````````(4````$```````````````` ++M``````````````J(`````````#`````0````#0`````````(`````````!@` ++M```1`````P`````````````````````````````"*`````````"4```````` ++M`````````````0```````````````0````(````````````````````````` ++M````!T`````````!L````!$````*``````````@`````````&`````D````# ++M``````````````````````````````CP`````````(X````````````````` ++M```!`````````````````````````````````````````````````P```0`` ++M`````````````````````````P```P```````````````````````````P`` ++M!````````````````````````````P``"``````````````````````````` ++M`P``"@```````````````````````````P``!@`````````````````````` ++M`````P``"P```````````````````````````P``#0`````````````````` ++M`````````P``!0`````````````````````````!$``````````````````` ++M```````````;$``````````````````````````````V$@```0````````!( ++M`````````"`````_$`````````````````````````````!7$@```0`````` ++M``!6`````````!````!I$`````````````````````````````!Y(@```0`` ++M``````!(`````````"````"'(@```0````````!(`````````"``7U]L:6)C ++M7V5N86)L95]A. ++ ++if { ![istarget powerpc64-*linux-*] || ![is_lp64_target] } { ++ verbose "Skipping ppc64-prologue-skip.exp" ++ return ++} ++ ++set testfile "ppc64-prologue-skip" ++set uufile "${srcdir}/${subdir}/${testfile}.o.uu" ++set ofile "${srcdir}/${subdir}/${testfile}.o" ++ ++if { [catch "system \"uudecode -o ${ofile} ${uufile}\"" ] != 0 } { ++ untested "failed uudecode" ++ return -1 ++} ++ ++gdb_exit ++gdb_start ++gdb_load $ofile ++ ++gdb_test "break ___newselect_nocancel" "Breakpoint $decimal at 0xc: file ../sysdeps/unix/syscall-template.S, line 81." "breakpoint on ___newselect_nocancel" +Index: gdb-7.6.1/gdb/testsuite/gdb.arch/ppc64-prologue-skip.o.uu +=================================================================== +--- /dev/null ++++ gdb-7.6.1/gdb/testsuite/gdb.arch/ppc64-prologue-skip.o.uu +@@ -0,0 +1,70 @@ ++begin 644 ppc64-skip-prologue.o.uu ++M?T5,1@("`0`````````````!`!4````!```````````````````````````` ++M``-(``````!```````!``!0`$8%-B-`L"@``0,(`-#@``(Y$```"3.,`('P( ++M`J;X`0`0^"'_D4@```%@````Z`$`@#@A`'!\"`.F3H``(/@A_X%]*`*F^2$` ++MD/CA`-#XP0#(^*$`P/B!`+CX80"P2````6````#X80!PZ.$`T.C!`,CHH0#` ++MZ($`N.AA`+`X``".1````GP``";X80!X^`$`B.AA`'!(```!8````.DA`)#H ++M`0"(Z&$`>'TH`Z9\#_$@."$`@$SC`"!+__]@```````,($``````````O``( ++M7U]S96QE8W0```````````````````````````!6``(````Y!`'[#@T``0$! ++M`0````$```$N+B]S>7-D97!S+W5N:7@``'-Y"]S>7-C86QL+71E;7!L871E ++M+E,`+W)O;W0O9VQI8F,O9VQI8F,M,BXQ-RTW."YE;#$$!&PP!```` ++M`#`````8`````````+P`20YP$4%^1`X`009!0@Z``4(107Y2$49_20X`!D$& ++M1@``````+G-Y;71A8@`N`````````!(````$@````$`````````"``````````8```` ++M)@````$``````````P```````````````````1@````````````````````` ++M``````````$``````````````"P````(``````````,````````````````` ++M``$8```````````````````````````````!```````````````V`````0`` ++M```````#```````````````````!&``````````0```````````````````` ++M"```````````````,0````0`````````````````````````````"L`````` ++M````,````!(````%``````````@`````````&````#L````!```````````` ++M``````````````````$H```````````````````````````````!```````` ++M``````!0`````0`````````````````````````````!*`````````!:```` ++M`````````````````0``````````````2P````0````````````````````` ++M````````"O``````````&````!(````(``````````@`````````&````&$` ++M```!``````````````````````````````&"`````````),````````````` ++M```````!``````````````!<````!``````````````````````````````+ ++M"`````````!@````$@````H`````````"``````````8````;0````$````` ++M`````````````````````````A4`````````%`````````````````````$` ++M`````````````(`````!``````````````````````````````(P```````` ++M`#`````````````````````0``````````````![````!``````````````` ++M```````````````+:``````````P````$@````T`````````"``````````8 ++M````E`````$``````````@```````````````````F``````````2``````` ++M``````````````@``````````````(\````$```````````````````````` ++M``````N8`````````!@````2````#P`````````(`````````!@````1```` ++M`P`````````````````````````````"J`````````">```````````````` ++M`````0```````````````0````(`````````````````````````````"$@` ++M```````!L````!,````+``````````@`````````&`````D````#```````` ++M``````````````````````GX`````````'H````````````````````!```` ++M`````````````````````````````````````````````P```0`````````` ++M`````````````````P```P```````````````````````````P``!``````` ++M`````````````````````P``!0```````````````````````````P``"@`` ++M`````````````````````````P``#````````````````````````````P`` ++M"````````````````````````````P``#0`````````````````````````` ++M`P``#P```````````````````````````P``!P`````````````````````` ++M```!$@``!0```````````````````-@````*$@```0`````````,```````` ++M`#`````@$``````````````````````````````P$``````````````````` ++M``````````!*$`````````````````````````````!E(@``!0`````````` ++M`````````-@```!S(@``!0```````````````````-@`7U]S96QE8W0`7U]? ++M;F5W6YC8V%N8V5L`%]?;&EB8U]D:7-A8FQE7V%S>6YC8V%N8V5L`%]? ++M;&EB8U]S96QE8W0` s; + + basic_string bs; + ++class Other ++{ ++}; ++ ++Other ovar; ++ + int main() + { + return 0; +diff -dup -rup gdb-7.6.1/gdb/testsuite/gdb.python-orig/py-typeprint.exp gdb-7.6.1/gdb/testsuite/gdb.python/py-typeprint.exp +--- gdb-7.6.1/gdb/testsuite/gdb.python-orig/py-typeprint.exp 2013-01-01 07:41:26.000000000 +0100 ++++ gdb-7.6.1/gdb/testsuite/gdb.python/py-typeprint.exp 2016-06-27 22:58:13.846785208 +0200 +@@ -51,3 +51,7 @@ gdb_test_no_output "enable type-printer + gdb_test "whatis bs" "string" "whatis with enabled printer" + + gdb_test "whatis s" "templ" ++ ++gdb_test "info type-printers" "Type printers for \[^\r\n\]*/py-typeprint:\r\n *other\r\n.*" \ ++ "info type-printers for other" ++gdb_test "whatis ovar" "type = Another" +diff -dup -rup gdb-7.6.1/gdb/testsuite/gdb.python-orig/py-typeprint.py gdb-7.6.1/gdb/testsuite/gdb.python/py-typeprint.py +--- gdb-7.6.1/gdb/testsuite/gdb.python-orig/py-typeprint.py 2013-01-01 07:41:26.000000000 +0100 ++++ gdb-7.6.1/gdb/testsuite/gdb.python/py-typeprint.py 2016-06-27 22:57:58.169642479 +0200 +@@ -15,7 +15,7 @@ + + import gdb + +-class Recognizer(object): ++class StringRecognizer(object): + def __init__(self): + self.enabled = True + +@@ -30,6 +30,26 @@ class StringTypePrinter(object): + self.enabled = True + + def instantiate(self): +- return Recognizer() ++ return StringRecognizer() + + gdb.type_printers.append(StringTypePrinter()) ++ ++class OtherRecognizer(object): ++ def __init__(self): ++ self.enabled = True ++ ++ def recognize(self, type_obj): ++ if type_obj.tag == 'Other': ++ return 'Another' ++ return None ++ ++class OtherTypePrinter(object): ++ def __init__(self): ++ self.name = 'other' ++ self.enabled = True ++ ++ def instantiate(self): ++ return OtherRecognizer() ++ ++import gdb.types ++gdb.types.register_type_printer(gdb.objfiles()[0], OtherTypePrinter()) diff --git a/gdb-rhbz795424-bitpos-21of25.patch b/gdb-rhbz795424-bitpos-21of25.patch new file mode 100644 index 0000000..0fa7ead --- /dev/null +++ b/gdb-rhbz795424-bitpos-21of25.patch @@ -0,0 +1,217 @@ +http://sourceware.org/ml/gdb-patches/2012-09/msg00632.html +Subject: [PATCH 2/4] Add a check to ensure that a type may fit into host memory + + +--MP_/PnL6l3LUsXWpZ/olqawWlzb +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +Hi, + +This is part two of the bitpos expansion patch. This implements checks +in some places in the code to ensure that a type size in ULONGEST is +small enough to fit into host memory. Tested for regressions on x86_64 +Fedora 16. + +Regards, +Siddhesh + +--MP_/PnL6l3LUsXWpZ/olqawWlzb +Content-Type: text/plain +Content-Transfer-Encoding: quoted-printable +Content-Disposition: attachment; filename=ChangeLog-ensure_sizet + +gdb/ChangeLog + + * alpha-tdep.c (alpha_push_dummy_call) Check for underflow in + SP. + * cp-valprint (cp_print_value): Ensure BASECLASS fits into + size_t. + * dwarf2loc.c (read_pieced_value): Ensure that THIS_SIZE fits + into size_t. + (write_pieced_value): Likewise. + * findcmd.c (parse_find_args): Ensure PATTERN_BUF_SIZE fits into + size_t. + * p-valprint (pascal_object_print_value): Ensure BASECLASS fits + into size_t. + * utils.c (ulongest_fits_host_or_error): New function to find if + a ULONGEST number fits into size_t. + * utils.h: Declare ulongest_fits_host_or_error. + * valops.c (search_struct_method): Ensure BASECLASS fits into + size_t. + * value.c (allocate_value_lazy): Ensure TYPE fits into size_t. + (allocate_value_contents): Likewise. + (set_value_enclosing_type): Ensure NEW_ENCL_TYPE fits into + size_t. + * vax-tdep.c (vax_return_value): Ensure that TYPE fits into + size_t. + +--MP_/PnL6l3LUsXWpZ/olqawWlzb +Content-Type: text/x-patch +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; filename=bitpos-ensure-size_t.patch + +Index: gdb-7.10.90.20160211/gdb/alpha-tdep.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/alpha-tdep.c 2016-02-11 20:56:59.224850729 +0100 ++++ gdb-7.10.90.20160211/gdb/alpha-tdep.c 2016-02-11 20:57:05.385891225 +0100 +@@ -413,6 +413,13 @@ + accumulate_size = 0; + else + accumulate_size -= sizeof(arg_reg_buffer); ++ ++ /* Check for underflow. */ ++ if (sp - accumulate_size > sp) ++ error (_("Insufficient memory in GDB host for arguments, " ++ "need %s bytes, but less than %s bytes available."), ++ plongest (accumulate_size), plongest (CORE_ADDR_MAX - sp)); ++ + sp -= accumulate_size; + + /* Keep sp aligned to a multiple of 16 as the ABI requires. */ +Index: gdb-7.10.90.20160211/gdb/cp-valprint.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/cp-valprint.c 2016-02-11 20:56:59.224850729 +0100 ++++ gdb-7.10.90.20160211/gdb/cp-valprint.c 2016-02-11 20:57:05.385891225 +0100 +@@ -536,6 +536,8 @@ + gdb_byte *buf; + struct cleanup *back_to; + ++ ulongest_fits_host_or_error (TYPE_LENGTH (baseclass)); ++ + buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass)); + back_to = make_cleanup (xfree, buf); + +Index: gdb-7.10.90.20160211/gdb/dwarf2loc.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/dwarf2loc.c 2016-02-11 20:56:59.225850736 +0100 ++++ gdb-7.10.90.20160211/gdb/dwarf2loc.c 2016-02-11 20:57:05.386891231 +0100 +@@ -1744,6 +1744,8 @@ + + this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8; + source_offset = source_offset_bits / 8; ++ ulongest_fits_host_or_error (this_size); ++ + if (buffer_size < this_size) + { + buffer_size = this_size; +@@ -1926,6 +1928,7 @@ + } + else + { ++ ulongest_fits_host_or_error (this_size); + if (buffer_size < this_size) + { + buffer_size = this_size; +Index: gdb-7.10.90.20160211/gdb/findcmd.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/findcmd.c 2016-02-11 20:56:59.226850742 +0100 ++++ gdb-7.10.90.20160211/gdb/findcmd.c 2016-02-11 20:57:05.387891238 +0100 +@@ -184,6 +184,7 @@ + size_t current_offset = pattern_buf_end - pattern_buf; + + pattern_buf_size = pattern_buf_size_need * 2; ++ ulongest_fits_host_or_error (pattern_buf_size); + pattern_buf = (gdb_byte *) xrealloc (pattern_buf, pattern_buf_size); + pattern_buf_end = pattern_buf + current_offset; + } +Index: gdb-7.10.90.20160211/gdb/p-valprint.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/p-valprint.c 2016-02-11 20:56:59.226850742 +0100 ++++ gdb-7.10.90.20160211/gdb/p-valprint.c 2016-02-11 20:57:05.387891238 +0100 +@@ -769,6 +769,7 @@ + gdb_byte *buf; + struct cleanup *back_to; + ++ ulongest_fits_host_or_error (TYPE_LENGTH (baseclass)); + buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass)); + back_to = make_cleanup (xfree, buf); + +Index: gdb-7.10.90.20160211/gdb/utils.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/utils.c 2016-02-11 20:56:59.227850749 +0100 ++++ gdb-7.10.90.20160211/gdb/utils.c 2016-02-11 20:57:05.388891244 +0100 +@@ -2837,6 +2837,18 @@ + return addr; + } + ++/* Ensure that the input NUM is not larger than the maximum capacity of the ++ host system. We choose SIZE_MAX / 8 as a conservative estimate of the size ++ of a resource that a system may allocate. */ ++void ++ulongest_fits_host_or_error (ULONGEST num) ++{ ++ if (num > SIZE_MAX / 8) ++ error (_("Insufficient memory in host GDB for object of size %s bytes, " ++ "maximum allowed %s bytes."), pulongest (num), ++ pulongest (SIZE_MAX / 8)); ++} ++ + char * + gdb_realpath (const char *filename) + { +Index: gdb-7.10.90.20160211/gdb/valops.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/valops.c 2016-02-11 20:56:59.228850755 +0100 ++++ gdb-7.10.90.20160211/gdb/valops.c 2016-02-11 20:57:05.389891251 +0100 +@@ -2057,6 +2057,7 @@ + struct cleanup *back_to; + CORE_ADDR address; + ++ ulongest_fits_host_or_error (TYPE_LENGTH (baseclass)); + tmp = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass)); + back_to = make_cleanup (xfree, tmp); + address = value_address (*arg1p); +Index: gdb-7.10.90.20160211/gdb/value.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/value.c 2016-02-11 20:56:59.229850762 +0100 ++++ gdb-7.10.90.20160211/gdb/value.c 2016-02-11 20:58:35.095480877 +0100 +@@ -935,6 +935,7 @@ + description correctly. */ + check_typedef (type); + ++ ulongest_fits_host_or_error (TYPE_LENGTH (type)); + val = XCNEW (struct value); + val->contents = NULL; + val->next = all_values; +@@ -1034,6 +1035,8 @@ + static void + allocate_value_contents (struct value *val) + { ++ ulongest_fits_host_or_error (TYPE_LENGTH (val->enclosing_type)); ++ + if (!val->contents) + { + check_type_length_before_alloc (val->enclosing_type); +@@ -3090,6 +3093,7 @@ + if (TYPE_LENGTH (new_encl_type) > TYPE_LENGTH (value_enclosing_type (val))) + { + check_type_length_before_alloc (new_encl_type); ++ ulongest_fits_host_or_error (TYPE_LENGTH (new_encl_type)); + val->contents + = (gdb_byte *) xrealloc (val->contents, TYPE_LENGTH (new_encl_type)); + } +Index: gdb-7.10.90.20160211/gdb/vax-tdep.c +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/vax-tdep.c 2016-02-11 20:56:59.229850762 +0100 ++++ gdb-7.10.90.20160211/gdb/vax-tdep.c 2016-02-11 20:57:05.391891264 +0100 +@@ -219,6 +219,7 @@ + ULONGEST addr; + + regcache_raw_read_unsigned (regcache, VAX_R0_REGNUM, &addr); ++ ulongest_fits_host_or_error (TYPE_LENGTH (type)); + read_memory (addr, readbuf, len); + } + +Index: gdb-7.10.90.20160211/gdb/defs.h +=================================================================== +--- gdb-7.10.90.20160211.orig/gdb/defs.h 2016-02-11 20:56:59.229850762 +0100 ++++ gdb-7.10.90.20160211/gdb/defs.h 2016-02-11 20:57:05.391891264 +0100 +@@ -690,4 +690,6 @@ + + #include "utils.h" + ++extern void ulongest_fits_host_or_error (ULONGEST num); ++ + #endif /* #ifndef DEFS_H */ diff --git a/gdb-rhbz795424-bitpos-23of25.patch b/gdb-rhbz795424-bitpos-23of25.patch deleted file mode 100644 index 1f6d237..0000000 --- a/gdb-rhbz795424-bitpos-23of25.patch +++ /dev/null @@ -1,1293 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2012-09/msg00630.html -Subject: [PATCH 4/4] Bitpos expansion - tdep changes - - ---MP_/X_WjDOvz/B_fvlsrmCwRdxe -Content-Type: text/plain; charset=US-ASCII -Content-Transfer-Encoding: 7bit -Content-Disposition: inline - -Hi, - -This is the last part of the bitpos change. This patch does the same -thing that patch 1/4 does, except that it does so in the *-tdep files -wherever necessary. I separated these changes mainly because they are -related and can be reviewed independently. Tested on Fedora 16 x86_64. - -Regards, -Siddhesh - ---MP_/X_WjDOvz/B_fvlsrmCwRdxe -Content-Type: text/plain -Content-Transfer-Encoding: quoted-printable -Content-Disposition: attachment; filename=ChangeLog-tdep - -gdb/ChangeLog - - * alpha-tdep.c (alpha_push_dummy_call): Expand ACCUMULATE_SIZE, - REQUIRED_ARG_REGS, OFFSET, LEN, TLEN to ssize_t. - (struct alpha_arg): Expand members LEN, OFFSET to ssize_t. - * amd64-tdep.c (amd64_push_arguments): Expand NUM_ELEMENTS, - ELEMENT and LEN to LONGEST. - (amd64_return_value): Expand LEN to LONGEST. - * amd64-windows-tdep.c (amd64_windows_return_value): Expand LEN - to LONGEST. - * arm-tdep.c (arm_vfp_cprc_sub_candidate): Return LONGEST. - Expand COUNT, SUB_COUNT to LONGEST. - (arm_vfp_call_candidate): Expand C to LONGEST. - (arm_push_dummy_call): Expand LEN to LONGEST. - * avr-tdep.c (struct stack_item): Expand member LEN to ssize_t. - (push_stack_item): Expand parameter LEN to ssize_t. - (avr_push_dummy_call): Expand LAST_REGNUM, J, LEN to ssize_t. - * bfin-tdep.c (bfin_push_dummy_call): Expand TOTAL_LEN, - CONTAINER_LEN to ssize_t. - * cris-tdep.c (struct stack_item): Expand member LEN to ssize_t. - (push_stack_item): Expand parameter LEN to ssize_t. - (cris_push_dummy_call): Expand LEN, REG_DEMAND, I to ssize_t. - * h8300-tdep.c (h8300_push_dummy_call): Expand STACK_ALLOC, - STACK_OFFSET to LONGEST. Expand LEN, PADDED_LEN, OFFSET to - ssize_t. - * hppa-tdep.c (hppa64_push_dummy_call): Expand LEN to LONGEST. - (hppa64_return_value): Likewise. - * i386-darwin-tdep.c (i386_darwin_push_dummy_call): Expand - ARGS_SPACE to LONGEST. - * i386-tdep.c (i386_push_dummy_call): Expand ARG_SPACE, - ARG_SPACE_USED, LEN to LONGEST. - (i386_reg_struct_return_p): Expand LEN to LONGEST. - (i386_convert_register_p): Likewise. - (i386_register_to_value): Likewise. - (i386_value_to_register): Likewise. - * ia64-tdep.c (ia64_push_dummy_call): Expand ARGOFFSET, LEN, - NSLOTS, MEMSLOTS to LONGEST. - * iq2000-tdep.c (iq2000_push_dummy_call): Expand TYPELEN, - STACKSPACE to LONGEST. - * m32r-tdep.c (m32r_push_dummy_call): Expand LEN to LONGEST. - * m68k-tdep.c (m68k_reg_struct_return_p): Expand LEN to LONGEST. - (m68k_push_dummy_call): Expand LEN, CONTAINER_LEN, OFFSET to - LONGEST. - * m88k-tdep.c (m88k_store_arguments): Expand NUM_STACK_WORDS, - LEN, STACK_WORD to LONGEST. - * mep-tdep.c (push_large_arguments): Expand ARG_LEN to ULONGEST. - * microblaze-tdep.c (microblaze_store_return_value): Expand LEN to - LONGEST. - * mips-tdep.c (mips_xfer_register): Expand parameter BUF_OFFSET to - LONGEST. Use plongest to format print BUF_OFFSET. - (mips_eabi_push_dummy_call): Expand LEN to LONGEST. Use plongest - to format print LEN. - (mips_n32n64_fp_arg_chunk_p): Expand parameter OFFSET to LONGEST. - Expand POS to LONGEST. - (mips_n32n64_push_dummy_call): Expand LEN to LONGEST. - (mips_n32n64_return_value): Expand OFFSET to LONGEST. Use - plongest to format print OFFSET. - (mips_o32_push_dummy_call): Expand LEN to LONGEST. Use plongest - to format print LEN. - (mips_o64_push_dummy_call): Expand LEN, STACK_OFFSET to LONGEST. - Use plongest to format print LEN. - * mn10300-tdep.c (mn10300_push_dummy_call): Expand LEN to - LONGEST. - * mt-tdep.c (mt_push_dummy_call): Expand STACK_DEST, TYPELEN to - LONGEST. - * ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Expand - ARGSPACE, ARGOFFSET, STRUCTOFFSET, LEN, to LONGEST. - (ppc64_sysv_abi_push_dummy_call): Expand BYTE, LEN to ssize_t. - * rl78-tdep.c (rl78_push_dummy_call): Expand LEN, CONTAINER_LEN - to LONGEST. - * rs6000-aix-tdep.c (rs6000_push_dummy_call): Expand ARGBYTES, - LEN to LONGEST. - (ran_out_of_registers_for_arguments): Expand SPACE, JJ to - LONGEST. - * s390-linux-tdep.c (s390_value_from_register): Expand LEN to LONGEST. - (is_power_of_two): Expand parameter N to ULONGEST. - (s390_push_dummy_call): Expand LENGTH to ULONGEST. - * score-tdep.c (score_push_dummy_call): Expand ARGLEN to - LONGEST. - * sh-tdep.c (sh_use_struct_convention) Expand len to LONGEST. - (sh_justify_value_in_reg): Expand parameter LEN to LONGEST. - (sh_push_dummy_call_fpu): Expand LEN to LONGEST. Expand REG_SIZE - to ssize_t. - (sh_push_dummy_call_nofpu): Likewise. - * sh64-tdep.c (sh64_push_dummy_call): Expand STACK_OFFSET, - STACK_ALLOC, LEN to LONGEST. - * sparc-tdep.c (sparc32_store_arguments): Expand LEN to LONGEST. - * sparc64-tdep.c (sparc64_store_floating_fields): Expand - parameter BITPOS to LONGEST. Expand SUBPOS to LONGEST. - (sparc64_extract_floating_fields): Likewise. - (sparc64_store_arguments): Expand LEN to LONGEST. - * spu-tdep.c (spu_push_dummy_call): Expand N_REGS, LEN to LONGEST. - (spu_value_from_register): Expand LEN to LONGEST. - * tic6x-tdep.c (tic6x_push_dummy_call): Expand REFERENCES_OFFST, - LEN to LONGEST. Expand LEN to ssize_t. Use plongest to format - print LEN. - * tilegx-tdep.c (tilegx_push_dummy_call): Expand TYPELEN, - SLACKLEN, ALIGNLEN to LONGEST. - * v850-tdep.c (v850_push_dummy_call): Expand LEN to LONGEST. - * vax-tdep.c (vax_store_arguments): Expand COUNT, LEN to LONGEST. - (vax_return_value): Expand LEN to LONGEST. - * xstormy16-tdep.c (xstormy16_push_dummy_call): Expand J, TYPELEN - to LONGEST. - * xtensa-tdep.c (xtensa_store_return_value): Print LEN instead of - TYPE_LENGTH.. - (struct argument_info): Expoand member LENGTH to ssize_t. - (struct argument_info.u): Expand member OFFSET to ssize_t. - (xtensa_push_dummy_call): Expand SIZE, ONSTACK_SIZE to LONGEST. - Expand N to ssize_t. Use pulongest to format print TYPE_LENGTH. - ---MP_/X_WjDOvz/B_fvlsrmCwRdxe -Content-Type: text/x-patch -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; filename=bitpos-tdep.patch - -Index: gdb-7.10.50.20160106/gdb/alpha-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/alpha-tdep.c 2016-01-08 19:16:16.592813990 +0100 -+++ gdb-7.10.50.20160106/gdb/alpha-tdep.c 2016-01-08 19:16:20.308834717 +0100 -@@ -299,17 +299,17 @@ - { - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - int i; -- int accumulate_size = struct_return ? 8 : 0; -+ ssize_t accumulate_size = struct_return ? 8 : 0; - struct alpha_arg - { - const gdb_byte *contents; -- int len; -- int offset; -+ ssize_t len; -+ ssize_t offset; - }; - struct alpha_arg *alpha_args = XALLOCAVEC (struct alpha_arg, nargs); - struct alpha_arg *m_arg; - gdb_byte arg_reg_buffer[ALPHA_REGISTER_SIZE * ALPHA_NUM_ARG_REGS]; -- int required_arg_regs; -+ ssize_t required_arg_regs; - CORE_ADDR func_addr = find_function_addr (function, NULL); - - /* The ABI places the address of the called function in T12. */ -@@ -429,8 +429,8 @@ - for (i = nargs; m_arg--, --i >= 0;) - { - const gdb_byte *contents = m_arg->contents; -- int offset = m_arg->offset; -- int len = m_arg->len; -+ ssize_t offset = m_arg->offset; -+ ssize_t len = m_arg->len; - - /* Copy the bytes destined for registers into arg_reg_buffer. */ - if (offset < sizeof(arg_reg_buffer)) -@@ -442,7 +442,7 @@ - } - else - { -- int tlen = sizeof(arg_reg_buffer) - offset; -+ ssize_t tlen = sizeof(arg_reg_buffer) - offset; - memcpy (arg_reg_buffer + offset, contents, tlen); - offset += tlen; - contents += tlen; -Index: gdb-7.10.50.20160106/gdb/amd64-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/amd64-tdep.c 2016-01-08 19:16:16.594814001 +0100 -+++ gdb-7.10.50.20160106/gdb/amd64-tdep.c 2016-01-08 19:16:20.309834723 +0100 -@@ -699,7 +699,7 @@ - gdb_byte *readbuf, const gdb_byte *writebuf) - { - enum amd64_reg_class theclass[2]; -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - static int integer_regnum[] = { AMD64_RAX_REGNUM, AMD64_RDX_REGNUM }; - static int sse_regnum[] = { AMD64_XMM0_REGNUM, AMD64_XMM1_REGNUM }; - int integer_reg = 0; -@@ -850,8 +850,8 @@ - }; - struct value **stack_args = XALLOCAVEC (struct value *, nargs); - int num_stack_args = 0; -- int num_elements = 0; -- int element = 0; -+ LONGEST num_elements = 0; -+ LONGEST element = 0; - int integer_reg = 0; - int sse_reg = 0; - int i; -@@ -863,7 +863,7 @@ - for (i = 0; i < nargs; i++) - { - struct type *type = value_type (args[i]); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - enum amd64_reg_class theclass[2]; - int needed_integer_regs = 0; - int needed_sse_regs = 0; -Index: gdb-7.10.50.20160106/gdb/amd64-windows-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/amd64-windows-tdep.c 2016-01-08 19:16:16.595814006 +0100 -+++ gdb-7.10.50.20160106/gdb/amd64-windows-tdep.c 2016-01-08 19:16:20.310834728 +0100 -@@ -288,7 +288,7 @@ - struct type *type, struct regcache *regcache, - gdb_byte *readbuf, const gdb_byte *writebuf) - { -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - int regnum = -1; - - /* See if our value is returned through a register. If it is, then -Index: gdb-7.10.50.20160106/gdb/arm-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/arm-tdep.c 2016-01-08 19:16:16.603814051 +0100 -+++ gdb-7.10.50.20160106/gdb/arm-tdep.c 2016-01-08 19:17:05.737088107 +0100 -@@ -3340,7 +3340,7 @@ - array). Vector types are not currently supported, matching the - generic AAPCS support. */ - --static int -+static LONGEST - arm_vfp_cprc_sub_candidate (struct type *t, - enum arm_vfp_cprc_base_type *base_type) - { -@@ -3423,7 +3423,7 @@ - } - else - { -- int count; -+ LONGEST count; - unsigned unitlen; - - count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t), -@@ -3446,13 +3446,15 @@ - - case TYPE_CODE_STRUCT: - { -- int count = 0; -+ LONGEST count = 0; - unsigned unitlen; - int i; - for (i = 0; i < TYPE_NFIELDS (t); i++) - { -- int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), -- base_type); -+ LONGEST sub_count; -+ -+ sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), -+ base_type); - if (sub_count == -1) - return -1; - count += sub_count; -@@ -3472,13 +3474,15 @@ - - case TYPE_CODE_UNION: - { -- int count = 0; -+ LONGEST count = 0; - unsigned unitlen; - int i; - for (i = 0; i < TYPE_NFIELDS (t); i++) - { -- int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), -- base_type); -+ LONGEST sub_count; -+ -+ sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), -+ base_type); - if (sub_count == -1) - return -1; - count = (count > sub_count ? count : sub_count); -@@ -3514,7 +3518,7 @@ - int *count) - { - enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN; -- int c = arm_vfp_cprc_sub_candidate (t, &b); -+ LONGEST c = arm_vfp_cprc_sub_candidate (t, &b); - if (c <= 0 || c > 4) - return 0; - *base_type = b; -@@ -3595,7 +3599,7 @@ - - for (argnum = 0; argnum < nargs; argnum++) - { -- int len; -+ LONGEST len; - struct type *arg_type; - struct type *target_type; - enum type_code typecode; -Index: gdb-7.10.50.20160106/gdb/avr-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/avr-tdep.c 2016-01-08 19:16:16.604814057 +0100 -+++ gdb-7.10.50.20160106/gdb/avr-tdep.c 2016-01-08 19:16:20.314834750 +0100 -@@ -1196,13 +1196,13 @@ - - struct stack_item - { -- int len; -+ ssize_t len; - struct stack_item *prev; - gdb_byte *data; - }; - - static struct stack_item * --push_stack_item (struct stack_item *prev, const bfd_byte *contents, int len) -+push_stack_item (struct stack_item *prev, const bfd_byte *contents, ssize_t len) - { - struct stack_item *si; - si = XNEW (struct stack_item); -@@ -1291,12 +1291,12 @@ - - for (i = 0; i < nargs; i++) - { -- int last_regnum; -- int j; -+ ssize_t last_regnum; -+ ssize_t j; - struct value *arg = args[i]; - struct type *type = check_typedef (value_type (arg)); - const bfd_byte *contents = value_contents (arg); -- int len = TYPE_LENGTH (type); -+ ssize_t len = TYPE_LENGTH (type); - - /* Calculate the potential last register needed. */ - last_regnum = regnum - (len + (len & 1)); -Index: gdb-7.10.50.20160106/gdb/bfin-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/bfin-tdep.c 2016-01-08 19:16:16.605814062 +0100 -+++ gdb-7.10.50.20160106/gdb/bfin-tdep.c 2016-01-08 19:16:20.315834756 +0100 -@@ -504,7 +504,7 @@ - gdb_byte buf[4]; - int i; - long reg_r0, reg_r1, reg_r2; -- int total_len = 0; -+ ssize_t total_len = 0; - enum bfin_abi abi = bfin_abi (gdbarch); - CORE_ADDR func_addr = find_function_addr (function, NULL); - -@@ -528,7 +528,7 @@ - { - struct type *value_type = value_enclosing_type (args[i]); - struct type *arg_type = check_typedef (value_type); -- int container_len = (TYPE_LENGTH (value_type) + 3) & ~3; -+ ssize_t container_len = (TYPE_LENGTH (value_type) + 3) & ~3; - - sp -= container_len; - write_memory (sp, value_contents (args[i]), container_len); -Index: gdb-7.10.50.20160106/gdb/cris-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/cris-tdep.c 2016-01-08 19:16:16.606814068 +0100 -+++ gdb-7.10.50.20160106/gdb/cris-tdep.c 2016-01-08 19:16:20.316834762 +0100 -@@ -663,13 +663,13 @@ - - struct stack_item - { -- int len; -+ ssize_t len; - struct stack_item *prev; - gdb_byte *data; - }; - - static struct stack_item * --push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len) -+push_stack_item (struct stack_item *prev, const gdb_byte *contents, ssize_t len) - { - struct stack_item *si = XNEW (struct stack_item); - si->data = (gdb_byte *) xmalloc (len); -@@ -841,13 +841,13 @@ - - for (argnum = 0; argnum < nargs; argnum++) - { -- int len; -+ ssize_t len; - const gdb_byte *val; -- int reg_demand; -- int i; -+ ssize_t reg_demand; -+ ssize_t i; - -- len = TYPE_LENGTH (value_type (args[argnum])); - val = value_contents (args[argnum]); -+ len = TYPE_LENGTH (value_type (args[argnum])); - - /* How may registers worth of storage do we need for this argument? */ - reg_demand = (len / 4) + (len % 4 != 0 ? 1 : 0); -Index: gdb-7.10.50.20160106/gdb/h8300-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/h8300-tdep.c 2016-01-08 19:16:16.607814073 +0100 -+++ gdb-7.10.50.20160106/gdb/h8300-tdep.c 2016-01-08 19:16:20.316834762 +0100 -@@ -639,7 +639,7 @@ - int struct_return, CORE_ADDR struct_addr) - { - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); -- int stack_alloc = 0, stack_offset = 0; -+ LONGEST stack_alloc = 0, stack_offset = 0; - int wordsize = BINWORD (gdbarch); - int reg = E_ARG0_REGNUM; - int argument; -@@ -666,11 +666,11 @@ - { - struct cleanup *back_to; - struct type *type = value_type (args[argument]); -- int len = TYPE_LENGTH (type); -+ ssize_t len = TYPE_LENGTH (type); - char *contents = (char *) value_contents (args[argument]); - - /* Pad the argument appropriately. */ -- int padded_len = align_up (len, wordsize); -+ ssize_t padded_len = align_up (len, wordsize); - gdb_byte *padded = (gdb_byte *) xmalloc (padded_len); - back_to = make_cleanup (xfree, padded); - -@@ -699,7 +699,7 @@ - /* Heavens to Betsy --- it's really going in registers! - Note that on the h8/300s, there are gaps between the - registers in the register file. */ -- int offset; -+ ssize_t offset; - - for (offset = 0; offset < padded_len; offset += wordsize) - { -Index: gdb-7.10.50.20160106/gdb/hppa-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/hppa-tdep.c 2016-01-08 19:16:16.609814085 +0100 -+++ gdb-7.10.50.20160106/gdb/hppa-tdep.c 2016-01-08 19:16:20.317834767 +0100 -@@ -995,7 +995,7 @@ - { - struct value *arg = args[i]; - struct type *type = value_type (arg); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - const bfd_byte *valbuf; - bfd_byte fptrbuf[8]; - int regnum; -@@ -1190,7 +1190,7 @@ - struct type *type, struct regcache *regcache, - gdb_byte *readbuf, const gdb_byte *writebuf) - { -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - int regnum, offset; - - if (len > 16) -Index: gdb-7.10.50.20160106/gdb/i386-darwin-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/i386-darwin-tdep.c 2016-01-08 19:16:16.609814085 +0100 -+++ gdb-7.10.50.20160106/gdb/i386-darwin-tdep.c 2016-01-08 19:16:20.317834767 +0100 -@@ -163,7 +163,7 @@ - - for (write_pass = 0; write_pass < 2; write_pass++) - { -- int args_space = 0; -+ LONGEST args_space = 0; - int num_m128 = 0; - - if (struct_return) -Index: gdb-7.10.50.20160106/gdb/i386-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/i386-tdep.c 2016-01-08 19:16:16.615814118 +0100 -+++ gdb-7.10.50.20160106/gdb/i386-tdep.c 2016-01-08 19:16:20.319834778 +0100 -@@ -2663,7 +2663,7 @@ - gdb_byte buf[4]; - int i; - int write_pass; -- int args_space = 0; -+ LONGEST args_space = 0; - - /* Determine the total space required for arguments and struct - return address in a first pass (allowing for 16-byte-aligned -@@ -2671,7 +2671,7 @@ - - for (write_pass = 0; write_pass < 2; write_pass++) - { -- int args_space_used = 0; -+ LONGEST args_space_used = 0; - - if (struct_return) - { -@@ -2688,7 +2688,7 @@ - - for (i = 0; i < nargs; i++) - { -- int len = TYPE_LENGTH (value_enclosing_type (args[i])); -+ LONGEST len = TYPE_LENGTH (value_enclosing_type (args[i])); - - if (write_pass) - { -@@ -2895,7 +2895,7 @@ - { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - enum type_code code = TYPE_CODE (type); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - gdb_assert (code == TYPE_CODE_STRUCT - || code == TYPE_CODE_UNION -@@ -3641,7 +3641,7 @@ - i386_convert_register_p (struct gdbarch *gdbarch, - int regnum, struct type *type) - { -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - /* Values may be spread across multiple registers. Most debugging - formats aren't expressive enough to specify the locations, so -@@ -3674,7 +3674,7 @@ - int *optimizedp, int *unavailablep) - { - struct gdbarch *gdbarch = get_frame_arch (frame); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - if (i386_fp_regnum_p (gdbarch, regnum)) - return i387_register_to_value (frame, regnum, type, to, -@@ -3710,7 +3710,7 @@ - i386_value_to_register (struct frame_info *frame, int regnum, - struct type *type, const gdb_byte *from) - { -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - if (i386_fp_regnum_p (get_frame_arch (frame), regnum)) - { -Index: gdb-7.10.50.20160106/gdb/iq2000-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/iq2000-tdep.c 2016-01-08 19:16:16.616814124 +0100 -+++ gdb-7.10.50.20160106/gdb/iq2000-tdep.c 2016-01-08 19:16:20.320834784 +0100 -@@ -651,8 +651,9 @@ - const bfd_byte *val; - bfd_byte buf[4]; - struct type *type; -- int i, argreg, typelen, slacklen; -- int stackspace = 0; -+ int i, argreg, slacklen; -+ LONGEST typelen; -+ LONGEST stackspace = 0; - /* Used to copy struct arguments into the stack. */ - CORE_ADDR struct_ptr; - -Index: gdb-7.10.50.20160106/gdb/m32r-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/m32r-tdep.c 2016-01-08 19:16:16.616814124 +0100 -+++ gdb-7.10.50.20160106/gdb/m32r-tdep.c 2016-01-08 19:16:20.320834784 +0100 -@@ -687,7 +687,7 @@ - CORE_ADDR regval; - gdb_byte *val; - gdb_byte valbuf[MAX_REGISTER_SIZE]; -- int len; -+ LONGEST len; - - /* First force sp to a 4-byte alignment. */ - sp = sp & ~3; -Index: gdb-7.10.50.20160106/gdb/m68k-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/m68k-tdep.c 2016-01-08 19:16:16.617814129 +0100 -+++ gdb-7.10.50.20160106/gdb/m68k-tdep.c 2016-01-08 19:16:20.320834784 +0100 -@@ -382,7 +382,7 @@ - { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - enum type_code code = TYPE_CODE (type); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION - || code == TYPE_CODE_COMPLEX); -@@ -514,9 +514,9 @@ - for (i = nargs - 1; i >= 0; i--) - { - struct type *value_type = value_enclosing_type (args[i]); -- int len = TYPE_LENGTH (value_type); -- int container_len = (len + 3) & ~3; -- int offset; -+ LONGEST len = TYPE_LENGTH (value_type); -+ LONGEST container_len = (len + 3) & ~3; -+ LONGEST offset; - - /* Non-scalars bigger than 4 bytes are left aligned, others are - right aligned. */ -Index: gdb-7.10.50.20160106/gdb/m88k-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/m88k-tdep.c 2016-01-08 19:16:16.617814129 +0100 -+++ gdb-7.10.50.20160106/gdb/m88k-tdep.c 2016-01-08 19:16:20.321834790 +0100 -@@ -257,13 +257,13 @@ - { - struct gdbarch *gdbarch = get_regcache_arch (regcache); - int num_register_words = 0; -- int num_stack_words = 0; -+ LONGEST num_stack_words = 0; - int i; - - for (i = 0; i < nargs; i++) - { - struct type *type = value_type (args[i]); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - if (m88k_integral_or_pointer_p (type) && len < 4) - { -@@ -305,8 +305,8 @@ - { - const bfd_byte *valbuf = value_contents (args[i]); - struct type *type = value_type (args[i]); -- int len = TYPE_LENGTH (type); -- int stack_word = num_stack_words; -+ LONGEST len = TYPE_LENGTH (type); -+ LONGEST stack_word = num_stack_words; - - if (m88k_in_register_p (type)) - { -Index: gdb-7.10.50.20160106/gdb/mep-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/mep-tdep.c 2016-01-08 19:16:16.618814135 +0100 -+++ gdb-7.10.50.20160106/gdb/mep-tdep.c 2016-01-08 19:16:20.321834790 +0100 -@@ -2272,7 +2272,7 @@ - - for (i = 0; i < argc; i++) - { -- unsigned arg_len = TYPE_LENGTH (value_type (argv[i])); -+ ULONGEST arg_len = TYPE_LENGTH (value_type (argv[i])); - - if (arg_len > MEP_GPR_SIZE) - { -Index: gdb-7.10.50.20160106/gdb/mips-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/mips-tdep.c 2016-01-08 19:16:16.626814179 +0100 -+++ gdb-7.10.50.20160106/gdb/mips-tdep.c 2016-01-08 19:16:20.324834806 +0100 -@@ -455,7 +455,7 @@ - mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache, - int reg_num, int length, - enum bfd_endian endian, gdb_byte *in, -- const gdb_byte *out, int buf_offset) -+ const gdb_byte *out, LONGEST buf_offset) - { - int reg_offset = 0; - -@@ -478,8 +478,8 @@ - } - if (mips_debug) - fprintf_unfiltered (gdb_stderr, -- "xfer $%d, reg offset %d, buf offset %d, length %d, ", -- reg_num, reg_offset, buf_offset, length); -+ "xfer $%d, reg offset %d, buf offset %s, length %d, ", -+ reg_num, reg_offset, plongest (buf_offset), length); - if (mips_debug && out != NULL) - { - int i; -@@ -4554,13 +4554,13 @@ - gdb_byte valbuf[MAX_REGISTER_SIZE]; - struct value *arg = args[argnum]; - struct type *arg_type = check_typedef (value_type (arg)); -- int len = TYPE_LENGTH (arg_type); -+ LONGEST len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); - - if (mips_debug) - fprintf_unfiltered (gdb_stdlog, -- "mips_eabi_push_dummy_call: %d len=%d type=%d", -- argnum + 1, len, (int) typecode); -+ "mips_eabi_push_dummy_call: %d len=%s type=%d", -+ argnum + 1, plongest (len), (int) typecode); - - /* The EABI passes structures that do not fit in a register by - reference. */ -@@ -4829,7 +4829,7 @@ - - static int - mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type, -- int offset) -+ LONGEST offset) - { - int i; - -@@ -4844,7 +4844,7 @@ - - for (i = 0; i < TYPE_NFIELDS (arg_type); i++) - { -- int pos; -+ LONGEST pos; - struct type *field_type; - - /* We're only looking at normal fields. */ -@@ -4886,7 +4886,7 @@ - int argreg; - int float_argreg; - int argnum; -- int len = 0; -+ LONGEST len = 0; - int stack_offset = 0; - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - CORE_ADDR func_addr = find_function_addr (function, NULL); -@@ -5237,11 +5237,11 @@ - : MIPS_V0_REGNUM); - field < TYPE_NFIELDS (type); field++, regnum += 2) - { -- int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field]) -- / TARGET_CHAR_BIT); -+ LONGEST offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field]) -+ / TARGET_CHAR_BIT); - if (mips_debug) -- fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n", -- offset); -+ fprintf_unfiltered (gdb_stderr, "Return float struct+%s\n", -+ plongest (offset)); - if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16) - { - /* A 16-byte long double field goes in two consecutive -@@ -5283,8 +5283,8 @@ - if (offset + xfer > TYPE_LENGTH (type)) - xfer = TYPE_LENGTH (type) - offset; - if (mips_debug) -- fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n", -- offset, xfer, regnum); -+ fprintf_unfiltered (gdb_stderr, "Return struct+%s:%d in $%d\n", -+ plongest (offset), xfer, regnum); - mips_xfer_register (gdbarch, regcache, - gdbarch_num_regs (gdbarch) + regnum, - xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf, -@@ -5342,7 +5342,7 @@ - int argreg; - int float_argreg; - int argnum; -- int len = 0; -+ LONGEST len = 0; - int stack_offset = 0; - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - CORE_ADDR func_addr = find_function_addr (function, NULL); -@@ -5406,13 +5406,13 @@ - const gdb_byte *val; - struct value *arg = args[argnum]; - struct type *arg_type = check_typedef (value_type (arg)); -- int len = TYPE_LENGTH (arg_type); -+ LONGEST len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); - - if (mips_debug) - fprintf_unfiltered (gdb_stdlog, -- "mips_o32_push_dummy_call: %d len=%d type=%d", -- argnum + 1, len, (int) typecode); -+ "mips_o32_push_dummy_call: %d len=%s type=%d", -+ argnum + 1, plongest (len), (int) typecode); - - val = value_contents (arg); - -@@ -5870,8 +5870,8 @@ - int argreg; - int float_argreg; - int argnum; -- int len = 0; -- int stack_offset = 0; -+ LONGEST len = 0; -+ LONGEST stack_offset = 0; - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - CORE_ADDR func_addr = find_function_addr (function, NULL); - -@@ -5931,13 +5931,13 @@ - const gdb_byte *val; - struct value *arg = args[argnum]; - struct type *arg_type = check_typedef (value_type (arg)); -- int len = TYPE_LENGTH (arg_type); -+ LONGEST len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); - - if (mips_debug) - fprintf_unfiltered (gdb_stdlog, -- "mips_o64_push_dummy_call: %d len=%d type=%d", -- argnum + 1, len, (int) typecode); -+ "mips_o64_push_dummy_call: %d len=%s type=%d", -+ argnum + 1, plongest (len), (int) typecode); - - val = value_contents (arg); - -Index: gdb-7.10.50.20160106/gdb/mn10300-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/mn10300-tdep.c 2016-01-08 19:16:16.627814185 +0100 -+++ gdb-7.10.50.20160106/gdb/mn10300-tdep.c 2016-01-08 19:16:20.324834806 +0100 -@@ -1227,7 +1227,7 @@ - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - const int push_size = register_size (gdbarch, E_PC_REGNUM); - int regs_used; -- int len, arg_len; -+ LONGEST len, arg_len; - int stack_offset = 0; - int argnum; - const gdb_byte *val; -Index: gdb-7.10.50.20160106/gdb/mt-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/mt-tdep.c 2016-01-08 19:16:16.628814190 +0100 -+++ gdb-7.10.50.20160106/gdb/mt-tdep.c 2016-01-08 19:16:20.324834806 +0100 -@@ -781,9 +781,9 @@ - gdb_byte buf[MT_MAX_STRUCT_SIZE]; - int argreg = MT_1ST_ARGREG; - int split_param_len = 0; -- int stack_dest = sp; -+ LONGEST stack_dest = sp; - int slacklen; -- int typelen; -+ LONGEST typelen; - int i, j; - - /* First handle however many args we can fit into MT_1ST_ARGREG thru -Index: gdb-7.10.50.20160106/gdb/ppc-sysv-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/ppc-sysv-tdep.c 2016-01-08 19:16:16.629814196 +0100 -+++ gdb-7.10.50.20160106/gdb/ppc-sysv-tdep.c 2016-01-08 19:16:20.325834812 +0100 -@@ -66,7 +66,7 @@ - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - int opencl_abi = ppc_sysv_use_opencl_abi (value_type (function)); - ULONGEST saved_sp; -- int argspace = 0; /* 0 is an initial wrong guess. */ -+ LONGEST argspace = 0; /* 0 is an initial wrong guess. */ - int write_pass; - - gdb_assert (tdep->wordsize == 4); -@@ -97,9 +97,9 @@ - /* Next available vector register for vector arguments. */ - int vreg = 2; - /* Arguments start above the "LR save word" and "Back chain". */ -- int argoffset = 2 * tdep->wordsize; -+ LONGEST argoffset = 2 * tdep->wordsize; - /* Structures start after the arguments. */ -- int structoffset = argoffset + argspace; -+ LONGEST structoffset = argoffset + argspace; - - /* If the function is returning a `struct', then the first word - (which will be passed in r3) is used for struct return -@@ -118,7 +118,7 @@ - { - struct value *arg = args[argno]; - struct type *type = check_typedef (value_type (arg)); -- int len = TYPE_LENGTH (type); -+ ssize_t len = TYPE_LENGTH (type); - const bfd_byte *val = value_contents (arg); - - if (TYPE_CODE (type) == TYPE_CODE_FLT && len <= 8 -@@ -1283,11 +1283,11 @@ - - static void - ppc64_sysv_abi_push_val (struct gdbarch *gdbarch, -- const bfd_byte *val, int len, int align, -+ const bfd_byte *val, ssize_t len, int align, - struct ppc64_sysv_argpos *argpos) - { - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); -- int offset = 0; -+ ssize_t offset = 0; - - /* Enforce alignment of stack location, if requested. */ - if (align > tdep->wordsize) -Index: gdb-7.10.50.20160106/gdb/rl78-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/rl78-tdep.c 2016-01-08 19:16:16.629814196 +0100 -+++ gdb-7.10.50.20160106/gdb/rl78-tdep.c 2016-01-08 19:16:20.325834812 +0100 -@@ -1336,8 +1336,8 @@ - for (i = nargs - 1; i >= 0; i--) - { - struct type *value_type = value_enclosing_type (args[i]); -- int len = TYPE_LENGTH (value_type); -- int container_len = (len + 1) & ~1; -+ LONGEST len = TYPE_LENGTH (value_type); -+ LONGEST container_len = (len + 1) & ~1; - - sp -= container_len; - write_memory (rl78_make_data_address (sp), -Index: gdb-7.10.50.20160106/gdb/rs6000-aix-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/rs6000-aix-tdep.c 2016-01-08 19:16:16.630814202 +0100 -+++ gdb-7.10.50.20160106/gdb/rs6000-aix-tdep.c 2016-01-08 19:16:20.326834817 +0100 -@@ -186,9 +186,9 @@ - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - int ii; -- int len = 0; -+ LONGEST len = 0; - int argno; /* current argument number */ -- int argbytes; /* current argument byte */ -+ LONGEST argbytes; /* current argument byte */ - gdb_byte tmp_buffer[50]; - int f_argno = 0; /* current floating point argno */ - int wordsize = gdbarch_tdep (gdbarch)->wordsize; -@@ -321,7 +321,7 @@ - - if ((argno < nargs) || argbytes) - { -- int space = 0, jj; -+ LONGEST space = 0, jj; - - if (argbytes) - { -Index: gdb-7.10.50.20160106/gdb/s390-linux-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/s390-linux-tdep.c 2016-01-08 19:16:16.632814213 +0100 -+++ gdb-7.10.50.20160106/gdb/s390-linux-tdep.c 2016-01-08 19:16:20.328834829 +0100 -@@ -2981,7 +2981,7 @@ - /* Determine whether N is a power of two. */ - - static int --is_power_of_two (unsigned int n) -+is_power_of_two (ULONGEST n) - { - return n && ((n & (n - 1)) == 0); - } -@@ -3038,7 +3038,7 @@ - enum bfd_endian byte_order, int is_unnamed) - { - struct type *type = check_typedef (value_type (arg)); -- unsigned int length = TYPE_LENGTH (type); -+ ULONGEST length = TYPE_LENGTH (type); - int write_mode = as->regcache != NULL; - - if (s390_function_arg_float (type)) -Index: gdb-7.10.50.20160106/gdb/score-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/score-tdep.c 2016-01-08 19:16:16.633814218 +0100 -+++ gdb-7.10.50.20160106/gdb/score-tdep.c 2016-01-08 19:16:20.328834829 +0100 -@@ -514,7 +514,7 @@ - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - int argnum; - int argreg; -- int arglen = 0; -+ LONGEST arglen = 0; - CORE_ADDR stack_offset = 0; - CORE_ADDR addr = 0; - -Index: gdb-7.10.50.20160106/gdb/sh-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/sh-tdep.c 2016-01-08 19:16:16.635814230 +0100 -+++ gdb-7.10.50.20160106/gdb/sh-tdep.c 2016-01-08 19:16:20.329834834 +0100 -@@ -805,7 +805,7 @@ - static int - sh_use_struct_convention (int renesas_abi, struct type *type) - { -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - int nelem = TYPE_NFIELDS (type); - - /* The Renesas ABI returns aggregate types always on stack. */ -@@ -907,7 +907,7 @@ - - /* Helper function to justify value in register according to endianess. */ - static const gdb_byte * --sh_justify_value_in_reg (struct gdbarch *gdbarch, struct value *val, int len) -+sh_justify_value_in_reg (struct gdbarch *gdbarch, struct value *val, LONGEST len) - { - static gdb_byte valbuf[4]; - -@@ -1067,7 +1067,8 @@ - struct type *type; - CORE_ADDR regval; - const gdb_byte *val; -- int len, reg_size = 0; -+ LONGEST len; -+ int reg_size = 0; - int pass_on_stack = 0; - int treat_as_flt; - int last_reg_arg = INT_MAX; -@@ -1208,7 +1209,8 @@ - struct type *type; - CORE_ADDR regval; - const gdb_byte *val; -- int len, reg_size = 0; -+ LONGEST len; -+ int reg_size = 0; - int pass_on_stack = 0; - int last_reg_arg = INT_MAX; - -Index: gdb-7.10.50.20160106/gdb/sh64-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/sh64-tdep.c 2016-01-08 19:16:16.635814230 +0100 -+++ gdb-7.10.50.20160106/gdb/sh64-tdep.c 2016-01-08 19:16:20.329834834 +0100 -@@ -1056,7 +1056,7 @@ - CORE_ADDR struct_addr) - { - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); -- int stack_offset, stack_alloc; -+ LONGEST stack_offset, stack_alloc; - int int_argreg; - int float_argreg; - int double_argreg; -@@ -1067,7 +1067,7 @@ - CORE_ADDR regval; - const gdb_byte *val; - gdb_byte valbuf[8]; -- int len; -+ LONGEST len; - int argreg_size; - int fp_args[12]; - -Index: gdb-7.10.50.20160106/gdb/sparc-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/sparc-tdep.c 2016-01-08 19:16:16.636814235 +0100 -+++ gdb-7.10.50.20160106/gdb/sparc-tdep.c 2016-01-08 19:16:20.330834840 +0100 -@@ -525,7 +525,7 @@ - for (i = 0; i < nargs; i++) - { - struct type *type = value_type (args[i]); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - if (sparc_structure_or_union_p (type) - || (sparc_floating_p (type) && len == 16) -Index: gdb-7.10.50.20160106/gdb/sparc64-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/sparc64-tdep.c 2016-01-08 19:16:16.637814241 +0100 -+++ gdb-7.10.50.20160106/gdb/sparc64-tdep.c 2016-01-08 19:16:20.330834840 +0100 -@@ -636,7 +636,8 @@ - - static void - sparc64_store_floating_fields (struct regcache *regcache, struct type *type, -- const gdb_byte *valbuf, int element, int bitpos) -+ const gdb_byte *valbuf, int element, -+ LONGEST bitpos) - { - int len = TYPE_LENGTH (type); - -@@ -678,7 +679,7 @@ - for (i = 0; i < TYPE_NFIELDS (type); i++) - { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); -- int subpos = bitpos + TYPE_FIELD_BITPOS (type, i); -+ LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i); - - sparc64_store_floating_fields (regcache, subtype, valbuf, - element, subpos); -@@ -710,7 +711,7 @@ - - static void - sparc64_extract_floating_fields (struct regcache *regcache, struct type *type, -- gdb_byte *valbuf, int bitpos) -+ gdb_byte *valbuf, LONGEST bitpos) - { - if (sparc64_floating_p (type)) - { -@@ -747,7 +748,7 @@ - for (i = 0; i < TYPE_NFIELDS (type); i++) - { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); -- int subpos = bitpos + TYPE_FIELD_BITPOS (type, i); -+ LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i); - - sparc64_extract_floating_fields (regcache, subtype, valbuf, subpos); - } -@@ -780,7 +781,7 @@ - for (i = 0; i < nargs; i++) - { - struct type *type = value_type (args[i]); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - if (sparc64_structure_or_union_p (type) - || (sparc64_complex_floating_p (type) && len == 32)) -@@ -880,7 +881,7 @@ - { - const gdb_byte *valbuf = value_contents (args[i]); - struct type *type = value_type (args[i]); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - int regnum = -1; - gdb_byte buf[16]; - -Index: gdb-7.10.50.20160106/gdb/spu-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/spu-tdep.c 2016-01-08 19:16:16.638814246 +0100 -+++ gdb-7.10.50.20160106/gdb/spu-tdep.c 2016-01-08 19:16:20.331834845 +0100 -@@ -1429,7 +1429,7 @@ - struct value *arg = args[i]; - struct type *type = check_typedef (value_type (arg)); - const gdb_byte *contents = value_contents (arg); -- int n_regs = align_up (TYPE_LENGTH (type), 16) / 16; -+ LONGEST n_regs = align_up (TYPE_LENGTH (type), 16) / 16; - - /* If the argument doesn't wholly fit into registers, it and - all subsequent arguments go to the stack. */ -@@ -1461,7 +1461,7 @@ - { - struct value *arg = args[i]; - struct type *type = check_typedef (value_type (arg)); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - int preferred_slot; - - if (spu_scalar_value_p (type)) -Index: gdb-7.10.50.20160106/gdb/tic6x-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/tic6x-tdep.c 2016-01-08 19:16:16.639814252 +0100 -+++ gdb-7.10.50.20160106/gdb/tic6x-tdep.c 2016-01-08 19:16:20.332834851 +0100 -@@ -895,7 +895,7 @@ - int argreg = 0; - int argnum; - int stack_offset = 4; -- int references_offset = 4; -+ LONGEST references_offset = 4; - CORE_ADDR func_addr = find_function_addr (function, NULL); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - struct type *func_type = value_type (function); -@@ -929,7 +929,7 @@ - /* Now make space on the stack for the args. */ - for (argnum = 0; argnum < nargs; argnum++) - { -- int len = align_up (TYPE_LENGTH (value_type (args[argnum])), 4); -+ LONGEST len = align_up (TYPE_LENGTH (value_type (args[argnum])), 4); - if (argnum >= 10 - argreg) - references_offset += len; - stack_offset += len; -@@ -948,7 +948,7 @@ - const gdb_byte *val; - struct value *arg = args[argnum]; - struct type *arg_type = check_typedef (value_type (arg)); -- int len = TYPE_LENGTH (arg_type); -+ ssize_t len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); - - val = value_contents (arg); -@@ -1108,7 +1108,8 @@ - } - else - internal_error (__FILE__, __LINE__, -- _("unexpected length %d of arg %d"), len, argnum); -+ _("unexpected length %s of arg %d"), -+ plongest (len), argnum); - - addr = sp + stack_offset; - write_memory (addr, val, len); -Index: gdb-7.10.50.20160106/gdb/tilegx-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/tilegx-tdep.c 2016-01-08 19:16:16.640814257 +0100 -+++ gdb-7.10.50.20160106/gdb/tilegx-tdep.c 2016-01-08 19:16:20.332834851 +0100 -@@ -288,7 +288,7 @@ - CORE_ADDR stack_dest = sp; - int argreg = TILEGX_R0_REGNUM; - int i, j; -- int typelen, slacklen, alignlen; -+ LONGEST typelen, slacklen, alignlen; - static const gdb_byte four_zero_words[16] = { 0 }; - - /* If struct_return is 1, then the struct return address will -Index: gdb-7.10.50.20160106/gdb/v850-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/v850-tdep.c 2016-01-08 19:16:16.640814257 +0100 -+++ gdb-7.10.50.20160106/gdb/v850-tdep.c 2016-01-08 19:16:20.332834851 +0100 -@@ -1019,7 +1019,7 @@ - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - int argreg; - int argnum; -- int len = 0; -+ LONGEST len = 0; - int stack_offset; - - if (gdbarch_tdep (gdbarch)->abi == V850_ABI_RH850) -@@ -1047,7 +1047,7 @@ - in four registers available. Loop thru args from first to last. */ - for (argnum = 0; argnum < nargs; argnum++) - { -- int len; -+ LONGEST len; - gdb_byte *val; - gdb_byte valbuf[v850_reg_size]; - -Index: gdb-7.10.50.20160106/gdb/vax-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/vax-tdep.c 2016-01-08 19:16:16.641814263 +0100 -+++ gdb-7.10.50.20160106/gdb/vax-tdep.c 2016-01-08 19:16:20.333834856 +0100 -@@ -111,7 +111,7 @@ - struct gdbarch *gdbarch = get_regcache_arch (regcache); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - gdb_byte buf[4]; -- int count = 0; -+ LONGEST count = 0; - int i; - - /* We create an argument list on the stack, and make the argument -@@ -120,7 +120,7 @@ - /* Push arguments in reverse order. */ - for (i = nargs - 1; i >= 0; i--) - { -- int len = TYPE_LENGTH (value_enclosing_type (args[i])); -+ LONGEST len = TYPE_LENGTH (value_enclosing_type (args[i])); - - sp -= (len + 3) & ~3; - count += (len + 3) / 4; -Index: gdb-7.10.50.20160106/gdb/xstormy16-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/xstormy16-tdep.c 2016-01-08 19:16:16.641814263 +0100 -+++ gdb-7.10.50.20160106/gdb/xstormy16-tdep.c 2016-01-08 19:16:20.333834856 +0100 -@@ -233,8 +233,9 @@ - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - CORE_ADDR stack_dest = sp; - int argreg = E_1ST_ARG_REGNUM; -- int i, j; -- int typelen, slacklen; -+ int i, slacklen; -+ LONGEST j; -+ LONGEST typelen; - const gdb_byte *val; - gdb_byte buf[xstormy16_pc_size]; - -Index: gdb-7.10.50.20160106/gdb/xtensa-tdep.c -=================================================================== ---- gdb-7.10.50.20160106.orig/gdb/xtensa-tdep.c 2016-01-08 19:16:16.643814274 +0100 -+++ gdb-7.10.50.20160106/gdb/xtensa-tdep.c 2016-01-08 19:16:20.334834862 +0100 -@@ -1638,8 +1638,7 @@ - - if (len > (callsize > 8 ? 8 : 16)) - internal_error (__FILE__, __LINE__, -- _("unimplemented for this length: %d"), -- TYPE_LENGTH (type)); -+ _("unimplemented for this length: %d"), len); - areg = arreg_number (gdbarch, - gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb); - -@@ -1713,18 +1712,18 @@ - { - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - int i; -- int size, onstack_size; -+ LONGEST size, onstack_size; - gdb_byte *buf = (gdb_byte *) alloca (16); - CORE_ADDR ra, ps; - struct argument_info - { - const bfd_byte *contents; -- int length; -+ ssize_t length; - int onstack; /* onstack == 0 => in reg */ - int align; /* alignment */ - union - { -- int offset; /* stack offset if on stack. */ -+ ssize_t offset; /* stack offset if on stack. */ - int regno; /* regno if in register. */ - } u; - }; -@@ -1748,9 +1747,10 @@ - { - struct value *arg = args[i]; - struct type *arg_type = check_typedef (value_type (arg)); -- fprintf_unfiltered (gdb_stdlog, "%2d: %s %3d ", i, -- host_address_to_string (arg), -- TYPE_LENGTH (arg_type)); -+ const char *arg_type_len_s = pulongest (TYPE_LENGTH (arg_type)); -+ -+ fprintf_unfiltered (gdb_stdlog, "%2d: %s %s ", i, -+ host_address_to_string (arg), arg_type_len_s); - switch (TYPE_CODE (arg_type)) - { - case TYPE_CODE_INT: -@@ -1820,8 +1820,8 @@ - info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_long); - break; - } -- info->length = TYPE_LENGTH (arg_type); - info->contents = value_contents (arg); -+ info->length = TYPE_LENGTH (arg_type); - - /* Align size and onstack_size. */ - size = (size + info->align - 1) & ~(info->align - 1); -@@ -1866,7 +1866,7 @@ - - if (info->onstack) - { -- int n = info->length; -+ ssize_t n = info->length; - CORE_ADDR offset = sp + info->u.offset; - - /* Odd-sized structs are aligned to the lower side of a memory -@@ -1882,7 +1882,7 @@ - } - else - { -- int n = info->length; -+ ssize_t n = info->length; - const bfd_byte *cp = info->contents; - int r = info->u.regno; - diff --git a/gdb-rhbz795424-bitpos-25of25-test.patch b/gdb-rhbz795424-bitpos-25of25-test.patch deleted file mode 100644 index e406b99..0000000 --- a/gdb-rhbz795424-bitpos-25of25-test.patch +++ /dev/null @@ -1,627 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2012-10/msg00231.html -Subject: Re: [PATCH] Expand fortran array bounds sizes to LONGEST - -On Mon, 15 Oct 2012 15:25:55 +0200, Jan Kratochvil wrote: -> I have filed for it now: -> Invalid debug/ array bounds w/-fno-range-check and 32-bit target -> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54934 - -Therefore it looks as a valid gfortran FSF GCC HEAD bug so provided -a hand-patched .S file for i386; patched GDB PASSes with it. - - -Thanks, -Jan - - -2012-10-15 Siddhesh Poyarekar - Jan Kratochvil - - * gdb.fortran/array-bounds.exp: New test file. - * gdb.fortran/array-bounds.f: New test file. - * gdb.fortran/array-bounds.S: New test file. - ---- /dev/null 2012-09-26 15:32:16.098506310 +0200 -+++ gdb-7.2/gdb/testsuite/gdb.fortran/array-bounds.exp 2012-10-15 20:53:26.427072583 +0200 -@@ -0,0 +1,43 @@ -+# Copyright 2012 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 . -+ -+# This file is part of the gdb testsuite. It contains test to ensure that -+# array bounds accept LONGEST. -+ -+if { [skip_fortran_tests] } { return -1 } -+ -+set testfile "array-bounds" -+ -+if { [is_ilp32_target] && ([istarget "i\[34567\]86-*-linux*"] -+ || [istarget "x86_64-*-linux*"]) } { -+ set srcfile ${testfile}.S -+ set opts {nodebug f90} -+} else { -+ set srcfile ${testfile}.f -+ set opts {debug f90} -+} -+ -+if {[prepare_for_testing $testfile.exp $testfile $srcfile $opts]} { -+ print "compile failed" -+ return -1 -+} -+ -+if { ![runto MAIN__] } { -+ perror "Could not run to breakpoint `MAIN__'." -+ continue -+} -+ -+gdb_test "print &foo" {.*\(4294967296:4294967297\).*} -+gdb_test "print &bar" {.*\(-4294967297:-4294967296\).*} ---- /dev/null 2012-09-26 15:32:16.098506310 +0200 -+++ gdb-7.2/gdb/testsuite/gdb.fortran/array-bounds.f 2012-10-15 19:35:12.500254261 +0200 -@@ -0,0 +1,22 @@ -+c Copyright 2012 Free Software Foundation, Inc. -+ -+c This program is free software; you can redistribute it and/or modify -+c it under the terms of the GNU General Public License as published by -+c the Free Software Foundation; either version 3 of the License, or -+c (at your option) any later version. -+c -+c This program is distributed in the hope that it will be useful, -+c but WITHOUT ANY WARRANTY; without even the implied warranty of -+c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+c GNU General Public License for more details. -+c -+c You should have received a copy of the GNU General Public License -+c along with this program. If not, see . -+ -+ dimension foo(4294967296_8:4294967297_8) -+ dimension bar(-4294967297_8:-4294967296_8) -+ bar = 42 -+ foo=bar -+ stop -+ end -+ ---- /dev/null 2012-09-26 15:32:16.098506310 +0200 -+++ gdb-7.2/gdb/testsuite/gdb.fortran/array-bounds.S 2012-10-15 20:52:36.851118215 +0200 -@@ -0,0 +1,529 @@ -+/* Copyright 2012 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 . -+ -+ This file is part of the gdb testsuite. */ -+ -+ .file "array-bounds.f" -+ .text -+.Ltext0: -+ .type MAIN__, @function -+MAIN__: -+.LFB0: -+ .file 1 "gdb.fortran/array-bounds.f" -+ # gdb.fortran/array-bounds.f:16 -+ .loc 1 16 0 -+ .cfi_startproc -+# BLOCK 2 seq:0 -+# PRED: ENTRY (FALLTHRU) -+ pushl %ebp -+.LCFI0: -+ .cfi_def_cfa_offset 8 -+ .cfi_offset 5, -8 -+ movl %esp, %ebp -+.LCFI1: -+ .cfi_def_cfa_register 5 -+ subl $40, %esp -+.LBB2: -+# SUCC: 3 (FALLTHRU) -+ # gdb.fortran/array-bounds.f:18 -+ .loc 1 18 0 -+ movl $-1, %eax -+# BLOCK 3 seq:1 -+# PRED: 2 (FALLTHRU) 4 [100.0%] -+.L3: -+ # gdb.fortran/array-bounds.f:18 -+ .loc 1 18 0 is_stmt 0 discriminator 1 -+ testl %eax, %eax -+# SUCC: 5 4 (FALLTHRU) -+ jg .L2 -+# BLOCK 4 seq:2 -+# PRED: 3 (FALLTHRU) -+ # gdb.fortran/array-bounds.f:18 -+ .loc 1 18 0 discriminator 2 -+ leal 1(%eax), %ecx -+ movl .LC0, %edx -+ movl %edx, -16(%ebp,%ecx,4) -+ addl $1, %eax -+# SUCC: 3 [100.0%] -+ jmp .L3 -+# BLOCK 5 seq:3 -+# PRED: 3 -+.L2: -+.LBE2: -+ # gdb.fortran/array-bounds.f:19 -+ .loc 1 19 0 is_stmt 1 -+ movl -16(%ebp), %eax -+ movl -12(%ebp), %edx -+ movl %eax, -24(%ebp) -+ movl %edx, -20(%ebp) -+ # gdb.fortran/array-bounds.f:20 -+ .loc 1 20 0 -+ movl $0, 4(%esp) -+ movl $0, (%esp) -+# SUCC: -+ call _gfortran_stop_string -+ .cfi_endproc -+.LFE0: -+ .size MAIN__, .-MAIN__ -+ .globl main -+ .type main, @function -+main: -+.LFB1: -+ # gdb.fortran/array-bounds.f:21 -+ .loc 1 21 0 -+ .cfi_startproc -+# BLOCK 2 seq:0 -+# PRED: ENTRY (FALLTHRU) -+ pushl %ebp -+.LCFI2: -+ .cfi_def_cfa_offset 8 -+ .cfi_offset 5, -8 -+ movl %esp, %ebp -+.LCFI3: -+ .cfi_def_cfa_register 5 -+ andl $-16, %esp -+ subl $16, %esp -+ # gdb.fortran/array-bounds.f:21 -+ .loc 1 21 0 -+ movl 12(%ebp), %eax -+ movl %eax, 4(%esp) -+ movl 8(%ebp), %eax -+ movl %eax, (%esp) -+ call _gfortran_set_args -+ movl $options.1.1824, 4(%esp) -+ movl $7, (%esp) -+ call _gfortran_set_options -+ call MAIN__ -+ movl $0, %eax -+ leave -+.LCFI4: -+ .cfi_restore 5 -+ .cfi_def_cfa 4, 4 -+# SUCC: EXIT [100.0%] -+ ret -+ .cfi_endproc -+.LFE1: -+ .size main, .-main -+ .section .rodata -+ .align 4 -+ .type options.1.1824, @object -+ .size options.1.1824, 28 -+options.1.1824: -+ .long 68 -+ .long 1023 -+ .long 0 -+ .long 0 -+ .long 1 -+ .long 1 -+ .long 0 -+ .align 4 -+.LC0: -+ .long 1109917696 -+ .text -+.Letext0: -+ .section .debug_info,"",@progbits -+.Ldebug_info0: -+ .long 2f - 1f # Length of Compilation Unit Info -+1: -+ .value 0x2 # DWARF version number -+ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section -+ .byte 0x4 # Pointer Size (in bytes) -+dieb: .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit) -+ .long .LASF5 # DW_AT_producer: "GNU Fortran 4.8.0 20121015 (experimental) -ffixed-form -m32 -mtune=generic -march=x86-64 -g -gdwarf-2 -fintrinsic-modules-path .../gcchead-root/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/finclude" -+ .byte 0xe # DW_AT_language -+ .byte 0x2 # DW_AT_identifier_case -+ .long .LASF6 # DW_AT_name: "gdb.fortran/array-bounds.f" -+ .long .LASF7 # DW_AT_comp_dir: "" -+ .long .Ltext0 # DW_AT_low_pc -+ .long .Letext0 # DW_AT_high_pc -+ .long .Ldebug_line0 # DW_AT_stmt_list -+die26: .uleb128 0x2 # (DIE (0x26) DW_TAG_subprogram) -+ .long .LASF8 # DW_AT_name: "MAIN__" -+ .byte 0x1 # DW_AT_decl_file (gdb.fortran/array-bounds.f) -+ .byte 0x10 # DW_AT_decl_line -+ .long .LFB0 # DW_AT_low_pc -+ .long .LFE0 # DW_AT_high_pc -+ .long .LLST0 # DW_AT_frame_base -+ .byte 0x1 # DW_AT_GNU_all_tail_call_sites -+ .byte 0x1 # DW_AT_main_subprogram -+ .byte 0x2 # DW_AT_calling_convention -+ .long die66 - .Ldebug_info0 # DW_AT_sibling -+die40: .uleb128 0x3 # (DIE (0x40) DW_TAG_variable) -+ .ascii "bar\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.fortran/array-bounds.f) -+ .byte 0x11 # DW_AT_decl_line -+ .long die66 - .Ldebug_info0 # DW_AT_type -+ .byte 0x2 # DW_AT_location -+ .byte 0x91 # DW_OP_fbreg -+ .sleb128 -24 -+die4e: .uleb128 0x3 # (DIE (0x4e) DW_TAG_variable) -+ .ascii "foo\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.fortran/array-bounds.f) -+ .byte 0x10 # DW_AT_decl_line -+ .long die88 - .Ldebug_info0 # DW_AT_type -+ .byte 0x2 # DW_AT_location -+ .byte 0x91 # DW_OP_fbreg -+ .sleb128 -32 -+die5c: .uleb128 0x4 # (DIE (0x5c) DW_TAG_lexical_block) -+ .long .LBB2 # DW_AT_low_pc -+ .long .LBE2 # DW_AT_high_pc -+ .byte 0 # end of children of DIE 0x26 -+die66: .uleb128 0x5 # (DIE (0x66) DW_TAG_array_type) -+ .long die81 - .Ldebug_info0 # DW_AT_type -+ .long die7a - .Ldebug_info0 # DW_AT_sibling -+die6f: .uleb128 0x6 # (DIE (0x6f) DW_TAG_subrange_type) -+ .long die7a - .Ldebug_info0 # DW_AT_type -+#if 0 -+ .long 0xffffffff # DW_AT_lower_bound -+ .byte 0 # DW_AT_upper_bound -+#else -+ .quad 0xfffffffeffffffff # DW_AT_lower_bound -+ .quad 0xffffffff00000000 # DW_AT_upper_bound -+#endif -+ .byte 0 # end of children of DIE 0x66 -+die7a: .uleb128 0x7 # (DIE (0x7a) DW_TAG_base_type) -+#if 0 -+ .byte 0x4 # DW_AT_byte_size -+#else -+ .byte 0x8 # DW_AT_byte_size -+#endif -+ .byte 0x5 # DW_AT_encoding -+ .long .LASF0 # DW_AT_name: "integer(kind=4)" -+die81: .uleb128 0x7 # (DIE (0x81) DW_TAG_base_type) -+ .byte 0x4 # DW_AT_byte_size -+ .byte 0x4 # DW_AT_encoding -+ .long .LASF1 # DW_AT_name: "real(kind=4)" -+die88: .uleb128 0x5 # (DIE (0x88) DW_TAG_array_type) -+ .long die81 - .Ldebug_info0 # DW_AT_type -+ .long die99 - .Ldebug_info0 # DW_AT_sibling -+die91: .uleb128 0x8 # (DIE (0x91) DW_TAG_subrange_type) -+ .long die7a - .Ldebug_info0 # DW_AT_type -+#if 0 -+ .byte 0 # DW_AT_lower_bound -+ .byte 0x1 # DW_AT_upper_bound -+#else -+ .quad 0x100000000 # DW_AT_lower_bound -+ .quad 0x100000001 # DW_AT_upper_bound -+#endif -+ .byte 0 # end of children of DIE 0x88 -+die99: .uleb128 0x9 # (DIE (0x99) DW_TAG_subprogram) -+ .byte 0x1 # DW_AT_external -+ .long .LASF9 # DW_AT_name: "main" -+ .byte 0x1 # DW_AT_decl_file (gdb.fortran/array-bounds.f) -+ .byte 0x15 # DW_AT_decl_line -+ .long die7a - .Ldebug_info0 # DW_AT_type -+ .long .LFB1 # DW_AT_low_pc -+ .long .LFE1 # DW_AT_high_pc -+ .long .LLST1 # DW_AT_frame_base -+ .byte 0x1 # DW_AT_GNU_all_tail_call_sites -+ .long died4 - .Ldebug_info0 # DW_AT_sibling -+dieb6: .uleb128 0xa # (DIE (0xb6) DW_TAG_formal_parameter) -+ .long .LASF2 # DW_AT_name: "argc" -+ .byte 0x1 # DW_AT_decl_file (gdb.fortran/array-bounds.f) -+ .byte 0x15 # DW_AT_decl_line -+ .long died4 - .Ldebug_info0 # DW_AT_type -+ .byte 0x2 # DW_AT_location -+ .byte 0x91 # DW_OP_fbreg -+ .sleb128 0 -+diec4: .uleb128 0xa # (DIE (0xc4) DW_TAG_formal_parameter) -+ .long .LASF3 # DW_AT_name: "argv" -+ .byte 0x1 # DW_AT_decl_file (gdb.fortran/array-bounds.f) -+ .byte 0x15 # DW_AT_decl_line -+ .long died9 - .Ldebug_info0 # DW_AT_type -+ .byte 0x3 # DW_AT_location -+ .byte 0x91 # DW_OP_fbreg -+ .sleb128 4 -+ .byte 0x6 # DW_OP_deref -+ .byte 0 # end of children of DIE 0x99 -+died4: .uleb128 0xb # (DIE (0xd4) DW_TAG_const_type) -+ .long die7a - .Ldebug_info0 # DW_AT_type -+died9: .uleb128 0xc # (DIE (0xd9) DW_TAG_pointer_type) -+ .byte 0x4 # DW_AT_byte_size -+ .long diedf - .Ldebug_info0 # DW_AT_type -+diedf: .uleb128 0x7 # (DIE (0xdf) DW_TAG_base_type) -+ .byte 0x1 # DW_AT_byte_size -+ .byte 0x8 # DW_AT_encoding -+ .long .LASF4 # DW_AT_name: "character(kind=1)" -+ .byte 0 # end of children of DIE 0xb -+2: -+ .section .debug_abbrev,"",@progbits -+.Ldebug_abbrev0: -+ .uleb128 0x1 # (abbrev code) -+ .uleb128 0x11 # (TAG: DW_TAG_compile_unit) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x25 # (DW_AT_producer) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x13 # (DW_AT_language) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x42 # (DW_AT_identifier_case) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x1b # (DW_AT_comp_dir) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .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 0x1 # DW_children_yes -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x6 # (DW_FORM_data4) -+ .uleb128 0x2116 # (DW_AT_GNU_all_tail_call_sites) -+ .uleb128 0xc # (DW_FORM_flag) -+ .uleb128 0x6a # (DW_AT_main_subprogram) -+ .uleb128 0xc # (DW_FORM_flag) -+ .uleb128 0x36 # (DW_AT_calling_convention) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x1 # (DW_AT_sibling) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x3 # (abbrev code) -+ .uleb128 0x34 # (TAG: DW_TAG_variable) -+ .byte 0 # DW_children_no -+ .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 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0xa # (DW_FORM_block1) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x4 # (abbrev code) -+ .uleb128 0xb # (TAG: DW_TAG_lexical_block) -+ .byte 0 # DW_children_no -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x5 # (abbrev code) -+ .uleb128 0x1 # (TAG: DW_TAG_array_type) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x1 # (DW_AT_sibling) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x6 # (abbrev code) -+ .uleb128 0x21 # (TAG: DW_TAG_subrange_type) -+ .byte 0 # DW_children_no -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+#if 0 -+ .uleb128 0x22 # (DW_AT_lower_bound) -+ .uleb128 0x6 # (DW_FORM_data4) -+ .uleb128 0x2f # (DW_AT_upper_bound) -+ .uleb128 0xb # (DW_FORM_data1) -+#else -+ .uleb128 0x22 # (DW_AT_lower_bound) -+ .uleb128 0x7 # (DW_FORM_data8) -+ .uleb128 0x2f # (DW_AT_upper_bound) -+ .uleb128 0x7 # (DW_FORM_data8) -+#endif -+ .byte 0 -+ .byte 0 -+ .uleb128 0x7 # (abbrev code) -+ .uleb128 0x24 # (TAG: DW_TAG_base_type) -+ .byte 0 # DW_children_no -+ .uleb128 0xb # (DW_AT_byte_size) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3e # (DW_AT_encoding) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x8 # (abbrev code) -+ .uleb128 0x21 # (TAG: DW_TAG_subrange_type) -+ .byte 0 # DW_children_no -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+#if 0 -+ .uleb128 0x22 # (DW_AT_lower_bound) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x2f # (DW_AT_upper_bound) -+ .uleb128 0xb # (DW_FORM_data1) -+#else -+ .uleb128 0x22 # (DW_AT_lower_bound) -+ .uleb128 0x7 # (DW_FORM_data8) -+ .uleb128 0x2f # (DW_AT_upper_bound) -+ .uleb128 0x7 # (DW_FORM_data8) -+#endif -+ .byte 0 -+ .byte 0 -+ .uleb128 0x9 # (abbrev code) -+ .uleb128 0x2e # (TAG: DW_TAG_subprogram) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x3f # (DW_AT_external) -+ .uleb128 0xc # (DW_FORM_flag) -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x6 # (DW_FORM_data4) -+ .uleb128 0x2116 # (DW_AT_GNU_all_tail_call_sites) -+ .uleb128 0xc # (DW_FORM_flag) -+ .uleb128 0x1 # (DW_AT_sibling) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xa # (abbrev code) -+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) -+ .byte 0 # DW_children_no -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0xa # (DW_FORM_block1) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xb # (abbrev code) -+ .uleb128 0x26 # (TAG: DW_TAG_const_type) -+ .byte 0 # DW_children_no -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xc # (abbrev code) -+ .uleb128 0xf # (TAG: DW_TAG_pointer_type) -+ .byte 0 # DW_children_no -+ .uleb128 0xb # (DW_AT_byte_size) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .byte 0 -+ .section .debug_loc,"",@progbits -+.Ldebug_loc0: -+.LLST0: -+ .long .LFB0-.Ltext0 # Location list begin address (*.LLST0) -+ .long .LCFI0-.Ltext0 # Location list end address (*.LLST0) -+ .value 0x2 # Location expression size -+ .byte 0x74 # DW_OP_breg4 -+ .sleb128 4 -+ .long .LCFI0-.Ltext0 # Location list begin address (*.LLST0) -+ .long .LCFI1-.Ltext0 # Location list end address (*.LLST0) -+ .value 0x2 # Location expression size -+ .byte 0x74 # DW_OP_breg4 -+ .sleb128 8 -+ .long .LCFI1-.Ltext0 # Location list begin address (*.LLST0) -+ .long .LFE0-.Ltext0 # Location list end address (*.LLST0) -+ .value 0x2 # Location expression size -+ .byte 0x75 # DW_OP_breg5 -+ .sleb128 8 -+ .long 0 # Location list terminator begin (*.LLST0) -+ .long 0 # Location list terminator end (*.LLST0) -+.LLST1: -+ .long .LFB1-.Ltext0 # Location list begin address (*.LLST1) -+ .long .LCFI2-.Ltext0 # Location list end address (*.LLST1) -+ .value 0x2 # Location expression size -+ .byte 0x74 # DW_OP_breg4 -+ .sleb128 4 -+ .long .LCFI2-.Ltext0 # Location list begin address (*.LLST1) -+ .long .LCFI3-.Ltext0 # Location list end address (*.LLST1) -+ .value 0x2 # Location expression size -+ .byte 0x74 # DW_OP_breg4 -+ .sleb128 8 -+ .long .LCFI3-.Ltext0 # Location list begin address (*.LLST1) -+ .long .LCFI4-.Ltext0 # Location list end address (*.LLST1) -+ .value 0x2 # Location expression size -+ .byte 0x75 # DW_OP_breg5 -+ .sleb128 8 -+ .long .LCFI4-.Ltext0 # Location list begin address (*.LLST1) -+ .long .LFE1-.Ltext0 # Location list end address (*.LLST1) -+ .value 0x2 # Location expression size -+ .byte 0x74 # DW_OP_breg4 -+ .sleb128 4 -+ .long 0 # Location list terminator begin (*.LLST1) -+ .long 0 # Location list terminator end (*.LLST1) -+ .section .debug_aranges,"",@progbits -+ .long 0x1c # Length of Address Ranges Info -+ .value 0x2 # DWARF Version -+ .long .Ldebug_info0 # Offset of Compilation Unit Info -+ .byte 0x4 # Size of Address -+ .byte 0 # Size of Segment Descriptor -+ .value 0 # Pad to 8 byte boundary -+ .value 0 -+ .long .Ltext0 # Address -+ .long .Letext0-.Ltext0 # Length -+ .long 0 -+ .long 0 -+ .section .debug_line,"",@progbits -+.Ldebug_line0: -+ .section .debug_str,"MS",@progbits,1 -+.LASF4: -+ .string "character(kind=1)" -+.LASF5: -+ .string "GNU Fortran 4.8.0 20121015 (experimental) -ffixed-form -m32 -mtune=generic -march=x86-64 -g -gdwarf-2 -fintrinsic-modules-path .../gcchead-root/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/finclude" -+.LASF7: -+ .string "" -+.LASF0: -+#if 0 -+ .string "integer(kind=4)" -+#else -+ .string "integer(kind=8)" -+#endif -+.LASF9: -+ .string "main" -+.LASF8: -+ .string "MAIN__" -+.LASF6: -+ .string "gdb.fortran/array-bounds.f" -+.LASF2: -+ .string "argc" -+.LASF1: -+ .string "real(kind=4)" -+.LASF3: -+ .string "argv" -+ .ident "GCC: (GNU) 4.8.0 20121015 (experimental)" -+ .section .note.GNU-stack,"",@progbits - diff --git a/gdb-rhbz795424-bitpos-lazyvalue.patch b/gdb-rhbz795424-bitpos-lazyvalue.patch index 31978ec..5f427e7 100644 --- a/gdb-rhbz795424-bitpos-lazyvalue.patch +++ b/gdb-rhbz795424-bitpos-lazyvalue.patch @@ -1,19 +1,7 @@ -Index: gdb-7.10.50.20151022/gdb/value.c -=================================================================== ---- gdb-7.10.50.20151022.orig/gdb/value.c 2015-10-24 23:17:04.042143628 +0200 -+++ gdb-7.10.50.20151022/gdb/value.c 2015-10-24 23:17:27.687300689 +0200 -@@ -934,7 +934,6 @@ allocate_value_lazy (struct type *type) - description correctly. */ - check_typedef (type); - -- ulongest_fits_host_or_error (TYPE_LENGTH (type)); - val = XCNEW (struct value); - val->contents = NULL; - val->next = all_values; -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.exp +Index: gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.exp 2015-10-24 23:17:04.042143628 +0200 ++++ gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.exp 2016-07-03 15:00:57.617347850 +0200 @@ -0,0 +1,59 @@ +# This testcase is part of GDB, the GNU debugger. + @@ -45,8 +33,8 @@ Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.exp + +# Test 64-bit file first as it is not compiled so its compilation never fails. + -+set file64bitbz2uu ${srcdir}/${subdir}/${testfile}-64bit.bz2.uu -+set file64bit ${objdir}/${subdir}/${testfile}-64bit ++set file64bitbz2uu ${srcdir}/${subdir}/${testfile}.bz2.uu ++set file64bit [standard_output_file ${testfile}] + +if {[catch "system \"uudecode -o - ${file64bitbz2uu} | bzip2 -dc >${file64bit}\""] != 0} { + untested "failed uudecode or bzip2" @@ -60,7 +48,7 @@ Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.exp + +clean_restart ${file64bit} + -+#if { [prepare_for_testing ${testfile}.exp ${testfile}-64bit $srcfile2 {nodebug}] } { ++#if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile2 {nodebug}] } { +# return -1 +#} + @@ -74,10 +62,10 @@ Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.exp +} + +test "native" -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.c +Index: gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.c 2015-10-24 23:17:04.042143628 +0200 ++++ gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.c 2016-07-03 15:00:57.618347859 +0200 @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -107,10 +95,10 @@ Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.c +{ + return 0; +} -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.S +Index: gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.S =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.S 2015-10-24 23:17:04.042143628 +0200 ++++ gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.S 2016-07-03 15:00:57.618347859 +0200 @@ -0,0 +1,249 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -361,10 +349,10 @@ Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.S + .string "char" + .ident "GCC: (GNU) 4.7.3 20121109 (prerelease)" + .section .note.GNU-stack,"",@progbits -Index: gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.bz2.uu +Index: gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.bz2.uu =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.10.50.20151022/gdb/testsuite/gdb.base/longest-types-64bit.bz2.uu 2015-10-24 23:17:04.042143628 +0200 ++++ gdb-7.11.50.20160630/gdb/testsuite/gdb.base/longest-types-64bit.bz2.uu 2016-07-03 15:00:57.618347859 +0200 @@ -0,0 +1,67 @@ +begin 755 gdb.base/longest-types-64bit.bz2 +M0EIH.3%!62936<'N#OH`"G/________^______?_Y______//]7SQD5'^/_% diff --git a/gdb-tls-1of2.patch b/gdb-tls-1of2.patch new file mode 100644 index 0000000..ef0d416 --- /dev/null +++ b/gdb-tls-1of2.patch @@ -0,0 +1,47 @@ +http://sourceware.org/ml/gdb-patches/2016-10/msg00206.html +Subject: [patch+7.12.1 1/2] Code cleanup: write_exp_msymbol: +is_tls + + +--XMCwj5IQnwKtuyBG +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline + +Hi, + +no functionality change, for patch 2/2. + + +Jan + +--XMCwj5IQnwKtuyBG +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline; filename="tls1.patch" + +gdb/ChangeLog +2016-10-09 Jan Kratochvil + + * parse.c (write_exp_msymbol): New variable is_tls, use it. + +--- a/gdb/parse.c ++++ b/gdb/parse.c +@@ -484,6 +484,8 @@ write_exp_msymbol (struct parser_state *ps, + struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol); + enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol); + CORE_ADDR pc; ++ const int is_tls = (section != NULL ++ && section->the_bfd_section->flags & SEC_THREAD_LOCAL); + + /* The minimal symbol might point to a function descriptor; + resolve it to the actual code address instead. */ +@@ -520,7 +522,7 @@ write_exp_msymbol (struct parser_state *ps, + write_exp_elt_longcst (ps, (LONGEST) addr); + write_exp_elt_opcode (ps, OP_LONG); + +- if (section && section->the_bfd_section->flags & SEC_THREAD_LOCAL) ++ if (is_tls) + { + write_exp_elt_opcode (ps, UNOP_MEMVAL_TLS); + write_exp_elt_objfile (ps, objfile); + +--XMCwj5IQnwKtuyBG-- + diff --git a/gdb-tls-2of2.patch b/gdb-tls-2of2.patch new file mode 100644 index 0000000..3d97cb8 --- /dev/null +++ b/gdb-tls-2of2.patch @@ -0,0 +1,159 @@ +http://sourceware.org/ml/gdb-patches/2016-10/msg00207.html +Subject: [patch+7.12.1 2/2] Fix TLS (such as 'errno') regression + + +--3Pql8miugIZX0722 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline + +Hi, + +2273f0ac95a79ce29ef42025c63f90e82cf907d7 is the first bad commit +commit 2273f0ac95a79ce29ef42025c63f90e82cf907d7 +Author: Tom Tromey +Date: Tue Oct 15 13:28:57 2013 -0600 + change minsyms not to be relocated at read-time +[FYI v3 06/10] change minsyms not to be relocated at read-time +Message-Id: <1393441273-32268-7-git-send-email-tromey@redhat.com> +https://sourceware.org/ml/gdb-patches/2014-02/msg00798.html + +mv /usr/lib/debug /usr/lib/debug-x +echo 'int main(){}'|gcc -pthread -x c - +./gdb -q -ex start -ex 'set debug expr 1' -ex 'p errno' ./a.out + 0 UNOP_MEMVAL_TLS TLS type @0x35df7e0 (__thread /* "/lib64/libc.so.6" */ ) + 4 OP_LONG Type @0x35df850 (__CORE_ADDR), value 140737345728528 (0x7ffff77fb010) +Cannot access memory at address 0xffffef7c9698 +-> + 0 UNOP_MEMVAL_TLS TLS type @0x3ad9520 (__thread /* "/lib64/libc.so.6" */ ) + 4 OP_LONG Type @0x3ad9590 (__CORE_ADDR), value 16 (0x10) +$1 = 0 + +With glibc debuginfo, that is without: mv /usr/lib/debug /usr/lib/debug-x + 0 OP_VAR_VALUE Block @0x3b30e70, symbol @0x3b30d10 (errno) +$1 = 0 +So such case is unrelated to this patch and the regression is not visible with +glibc debuginfo installed. + +I guess all these issues will be solved by Gary Benson's Infinity. +But at least for older non-Infinity glibcs GDB should not regress. + +For the testcase it is important the variable is in objfile with non-zero base +address. glibc is a shared library for 'errno' but I found easier for the +testcase to use PIE instead of a shlib. For TLS variables in PT_EXEC the +regression obviously does not happen. + +It has been found by a more complete testcase present in Fedora, the fix there +also solves more cases where FSF GDB currently cannot resolve 'errno': + http://pkgs.fedoraproject.org/cgit/rpms/gdb.git/tree/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch + FAIL: gdb.dwarf2/dw2-errno2.exp: macros=N threads=Y: print errno for core + +No regressions on {x86_64,x86_64-m32,i686}-fedora26pre-linux-gnu. + +OK for check-in? + + +Thanks, +Jan + +--3Pql8miugIZX0722 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline; filename="tls1-2.patch" + +gdb/ChangeLog +2016-10-09 Jan Kratochvil + + * parse.c (write_exp_msymbol): Fix ADDR computation. + +gdb/testsuite/ChangeLog +2016-10-09 Jan Kratochvil + + * gdb.threads/tls-nodebug-pie.c: New file. + * gdb.threads/tls-nodebug-pie.exp: New file. + +--- a/gdb/parse.c ++++ b/gdb/parse.c +@@ -480,13 +480,17 @@ write_exp_msymbol (struct parser_state *ps, + struct objfile *objfile = bound_msym.objfile; + struct gdbarch *gdbarch = get_objfile_arch (objfile); + +- CORE_ADDR addr = BMSYMBOL_VALUE_ADDRESS (bound_msym); + struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol); + enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol); +- CORE_ADDR pc; ++ CORE_ADDR addr, pc; + const int is_tls = (section != NULL + && section->the_bfd_section->flags & SEC_THREAD_LOCAL); + ++ if (is_tls) ++ addr = MSYMBOL_VALUE_RAW_ADDRESS (bound_msym.minsym); ++ else ++ addr = BMSYMBOL_VALUE_ADDRESS (bound_msym); ++ + /* The minimal symbol might point to a function descriptor; + resolve it to the actual code address instead. */ + pc = gdbarch_convert_from_func_ptr_addr (gdbarch, addr, ¤t_target); +--- /dev/null ++++ b/gdb/testsuite/gdb.threads/tls-nodebug-pie.c +@@ -0,0 +1,27 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2016 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 . */ ++ ++#include ++ ++__thread int thread_local = 42; ++ ++int main(void) ++{ ++ /* Ensure we link against pthreads even with --as-needed. */ ++ pthread_testcancel(); ++ return 0; ++} +--- /dev/null ++++ b/gdb/testsuite/gdb.threads/tls-nodebug-pie.exp +@@ -0,0 +1,29 @@ ++# Copyright 2016 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 . ++ ++standard_testfile ++ ++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \ ++ [list "additional_flags=-fPIE -pie"]] != "" } { ++ return -1 ++} ++ ++clean_restart ${binfile} ++if ![runto_main] then { ++ return 0 ++} ++ ++# Formerly: Cannot access memory at address 0xd5554d5216fc ++gdb_test "p thread_local" " = 42" "thread local storage" + +--3Pql8miugIZX0722-- + diff --git a/gdb-vla-intel-logical-not.patch b/gdb-vla-intel-logical-not.patch deleted file mode 100644 index 0c51c84..0000000 --- a/gdb-vla-intel-logical-not.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./gdb/value.c-orig 2015-02-11 15:17:58.413241779 +0100 -+++ ./gdb/value.c 2015-02-11 15:19:42.068716949 +0100 -@@ -3074,7 +3074,7 @@ value_primitive_field (struct value *arg - } - - if (!TYPE_DATA_LOCATION (type) -- || !TYPE_DATA_LOCATION_KIND (type) == PROP_CONST) -+ || TYPE_DATA_LOCATION_KIND (type) != PROP_CONST) - v->offset = (value_offset (arg1) + offset - + value_embedded_offset (arg1)); - } diff --git a/gdb-vla-intel-stringbt-fix.patch b/gdb-vla-intel-stringbt-fix.patch deleted file mode 100644 index f6197f2..0000000 --- a/gdb-vla-intel-stringbt-fix.patch +++ /dev/null @@ -1,167 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2014-08/msg00025.html -Subject: [patch 1/2] Re: Crash regression(?) printing Fortran strings in bt [Re: [V2 00/23] Fortran dynamic array support] - - ---FCuugMFkClbJLl1L -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline - -On Fri, 01 Aug 2014 09:20:19 +0200, Keven Boell wrote: -> I just tried it on Fedora 20 i686. Applied the patch, you mentioned, on top of -> the Fortran VLA series and executed your dynamic-other-frame test. Everything -> is working fine here, I cannot reproduce the crash. - -I have it reproducible on Fedora 20 i686 with plain -CFLAGS=-g ./configure;make;cd gdb/testsuite;make site.exp;runtest gdb.fortran/dynamic-other-frame.exp - -Besides that I have updated the testcase with - gdb_test_no_output "set print frame-arguments all" -so that there is no longer needed the patch: - [patch] Display Fortran strings in backtraces - https://sourceware.org/ml/gdb-patches/2014-07/msg00709.html - -The fix below has no regressions for me. Unfortunately I do not see why you -cannot reproduce it. - - -Thanks, -Jan - ---FCuugMFkClbJLl1L -Content-Type: text/plain; charset=us-ascii -Content-Disposition: inline; filename="vlastringonly.patch" - -Index: gdb-7.9.50.20150520/gdb/gdbtypes.c -=================================================================== ---- gdb-7.9.50.20150520.orig/gdb/gdbtypes.c 2015-05-31 16:14:04.164533833 +0200 -+++ gdb-7.9.50.20150520/gdb/gdbtypes.c 2015-05-31 16:14:05.844545344 +0200 -@@ -1851,6 +1851,7 @@ is_dynamic_type_internal (struct type *t - } - - case TYPE_CODE_ARRAY: -+ case TYPE_CODE_STRING: - { - gdb_assert (TYPE_NFIELDS (type) == 1); - -@@ -2192,6 +2193,7 @@ resolve_dynamic_type_internal (struct ty - } - - case TYPE_CODE_ARRAY: -+ case TYPE_CODE_STRING: - resolved_type = resolve_dynamic_array (type, addr_stack); - break; - -Index: gdb-7.9.50.20150520/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.9.50.20150520/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 2015-05-31 16:14:05.844545344 +0200 -@@ -0,0 +1,24 @@ -+! Copyright 2010 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 2 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, write to the Free Software -+! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+! -+! Ihis file is the Fortran source file for dynamic.exp. -+! Original file written by Jakub Jelinek . -+! Modified for the GDB testcase by Jan Kratochvil . -+ -+subroutine bar -+ real :: dummy -+ dummy = 1 -+end subroutine bar -Index: gdb-7.9.50.20150520/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.9.50.20150520/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp 2015-05-31 16:14:05.845545351 +0200 -@@ -0,0 +1,39 @@ -+# Copyright 2010 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 2 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, write to the Free Software -+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+set testfile "dynamic-other-frame" -+set srcfile1 ${testfile}.f90 -+set srcfile2 ${testfile}-stub.f90 -+set objfile2 [standard_output_file ${testfile}-stub.o] -+set executable ${testfile} -+set binfile [standard_output_file ${executable}] -+ -+if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${objfile2}" object {f90}] != "" -+ || [gdb_compile "${srcdir}/${subdir}/${srcfile1} ${objfile2}" "${binfile}" executable {debug f90}] != "" } { -+ untested "Couldn't compile ${srcfile1} or ${srcfile2}" -+ return -1 -+} -+ -+clean_restart ${executable} -+ -+gdb_test_no_output "set print frame-arguments all" -+ -+if ![runto bar_] then { -+ perror "couldn't run to bar_" -+ continue -+} -+ -+gdb_test "bt" {foo \(string='hello'.*} -Index: gdb-7.9.50.20150520/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.9.50.20150520/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 2015-05-31 16:14:05.845545351 +0200 -@@ -0,0 +1,36 @@ -+! Copyright 2010 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 2 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, write to the Free Software -+! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+! -+! Ihis file is the Fortran source file for dynamic.exp. -+! Original file written by Jakub Jelinek . -+! Modified for the GDB testcase by Jan Kratochvil . -+ -+subroutine foo (string) -+ interface -+ subroutine bar -+ end subroutine -+ end interface -+ character string*(*) -+ call bar ! stop-here -+end subroutine foo -+program test -+ interface -+ subroutine foo (string) -+ character string*(*) -+ end subroutine -+ end interface -+ call foo ('hello') -+end diff --git a/gdb-vla-intel-tests.patch b/gdb-vla-intel-tests.patch new file mode 100644 index 0000000..427ec95 --- /dev/null +++ b/gdb-vla-intel-tests.patch @@ -0,0 +1,293 @@ +Index: gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-func.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-func.exp 2016-01-08 19:15:44.983637680 +0100 +@@ -0,0 +1,61 @@ ++# 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 . ++ ++standard_testfile ".f90" ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ ++ {debug f90 quiet}] } { ++ return -1 ++} ++ ++if ![runto MAIN__] then { ++ perror "couldn't run to breakpoint MAIN__" ++ continue ++} ++ ++# Check VLA passed to first Fortran function. ++gdb_breakpoint [gdb_get_line_number "func1-vla-passed"] ++gdb_continue_to_breakpoint "func1-vla-passed" ++gdb_test "print vla" " = \\( *\\( *22, *22, *22,\[()22, .\]*\\)" \ ++ "print vla (func1)" ++gdb_test "ptype vla" "type = integer\\\(kind=4\\\) \\\(10,10\\\)" \ ++ "ptype vla (func1)" ++ ++gdb_breakpoint [gdb_get_line_number "func1-vla-modified"] ++gdb_continue_to_breakpoint "func1-vla-modified" ++gdb_test "print vla(5,5)" " = 55" "print vla(5,5) (func1)" ++gdb_test "print vla(7,7)" " = 77" "print vla(5,5) (func1)" ++ ++# Check if the values are correct after returning from func1 ++gdb_breakpoint [gdb_get_line_number "func1-returned"] ++gdb_continue_to_breakpoint "func1-returned" ++gdb_test "print ret" " = .TRUE." "print ret after func1 returned" ++ ++# Check VLA passed to second Fortran function ++gdb_breakpoint [gdb_get_line_number "func2-vla-passed"] ++gdb_continue_to_breakpoint "func2-vla-passed" ++gdb_test "print vla" \ ++ " = \\\(44, 44, 44, 44, 44, 44, 44, 44, 44, 44\\\)" \ ++ "print vla (func2)" ++gdb_test "ptype vla" "type = integer\\\(kind=4\\\) \\\(10\\\)" \ ++ "ptype vla (func2)" ++ ++# Check if the returned VLA has the correct values and ptype. ++gdb_breakpoint [gdb_get_line_number "func2-returned"] ++gdb_continue_to_breakpoint "func2-returned" ++gdb_test "print vla3" " = \\\(1, 2, 44, 4, 44, 44, 44, 8, 44, 44\\\)" \ ++ "print vla3 (after func2)" ++gdb_test "ptype vla3" "type = integer\\\(kind=4\\\) \\\(10\\\)" \ ++ "ptype vla3 (after func2)" +Index: gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-func.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-func.f90 2016-01-08 19:15:44.983637680 +0100 +@@ -0,0 +1,71 @@ ++! 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 2 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, write to the Free Software ++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++logical function func1 (vla) ++ implicit none ++ integer, allocatable :: vla (:, :) ++ func1 = allocated(vla) ++ vla(5,5) = 55 ! func1-vla-passed ++ vla(7,7) = 77 ++ return ! func1-vla-modified ++end function func1 ++ ++function func2(vla) ++ implicit none ++ integer :: vla (:) ++ integer :: func2(size(vla)) ++ integer :: k ++ ++ vla(1) = 1 ! func2-vla-passed ++ vla(2) = 2 ++ vla(4) = 4 ++ vla(8) = 8 ++ ++ func2 = vla ++end function func2 ++ ++program vla_func ++ implicit none ++ interface ++ logical function func1 (vla) ++ integer, allocatable :: vla (:, :) ++ end function ++ end interface ++ interface ++ function func2 (vla) ++ integer :: vla (:) ++ integer func2(size(vla)) ++ end function ++ end interface ++ ++ logical :: ret ++ integer, allocatable :: vla1 (:, :) ++ integer, allocatable :: vla2 (:) ++ integer, allocatable :: vla3 (:) ++ ++ ret = .FALSE. ++ ++ allocate (vla1 (10,10)) ++ vla1(:,:) = 22 ++ ++ allocate (vla2 (10)) ++ vla2(:) = 44 ++ ++ ret = func1(vla1) ++ vla3 = func2(vla2) ! func1-returned ++ ++ ret = .TRUE. ! func2-returned ++end program vla_func +Index: gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-stringsold.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-stringsold.exp 2016-01-08 19:15:44.984637686 +0100 +@@ -0,0 +1,101 @@ ++# 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 . ++ ++standard_testfile ".f90" ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ ++ {debug f90 quiet}] } { ++ return -1 ++} ++ ++# check that all fortran standard datatypes will be ++# handled correctly when using as VLA's ++ ++if ![runto MAIN__] then { ++ perror "couldn't run to breakpoint MAIN__" ++ continue ++} ++ ++gdb_breakpoint [gdb_get_line_number "var_char-allocated-1"] ++gdb_continue_to_breakpoint "var_char-allocated-1" ++gdb_test "print var_char" \ ++ " = \\(PTR TO -> \\( character\\*10 \\)\\) ${hex}" \ ++ "print var_char after allocated first time" ++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*10 \\)" \ ++ "whatis var_char first time" ++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*10 \\)" \ ++ "ptype var_char first time" ++gdb_test "next" "\\d+.*var_char = 'foo'.*" \ ++ "next to allocation status of var_char" ++gdb_test "print l" " = .TRUE." "print allocation status first time" ++ ++gdb_breakpoint [gdb_get_line_number "var_char-filled-1"] ++gdb_continue_to_breakpoint "var_char-filled-1" ++gdb_test "print var_char" \ ++ " = \\(PTR TO -> \\( character\\*3 \\)\\) ${hex}" \ ++ "print var_char after filled first time" ++gdb_test "print *var_char" " = 'foo'" \ ++ "print *var_char after filled first time" ++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*3 \\)" \ ++ "whatis var_char after filled first time" ++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*3 \\)" \ ++ "ptype var_char after filled first time" ++gdb_test "print var_char(1)" " = 102 'f'" "print var_char(1)" ++gdb_test "print var_char(3)" " = 111 'o'" "print var_char(3)" ++ ++gdb_breakpoint [gdb_get_line_number "var_char-filled-2"] ++gdb_continue_to_breakpoint "var_char-filled-2" ++gdb_test "print var_char" \ ++ " = \\(PTR TO -> \\( character\\*6 \\)\\) ${hex}" \ ++ "print var_char after allocated second time" ++gdb_test "print *var_char" " = 'foobar'" \ ++ "print *var_char after allocated second time" ++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*6 \\)" \ ++ "whatis var_char second time" ++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*6 \\)" \ ++ "ptype var_char second time" ++ ++gdb_breakpoint [gdb_get_line_number "var_char-empty"] ++gdb_continue_to_breakpoint "var_char-empty" ++gdb_test "print var_char" \ ++ " = \\(PTR TO -> \\( character\\*0 \\)\\) ${hex}" \ ++ "print var_char after set empty" ++gdb_test "print *var_char" " = \"\"" "print *var_char after set empty" ++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*0 \\)" \ ++ "whatis var_char after set empty" ++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*0 \\)" \ ++ "ptype var_char after set empty" ++ ++gdb_breakpoint [gdb_get_line_number "var_char-allocated-3"] ++gdb_continue_to_breakpoint "var_char-allocated-3" ++gdb_test "print var_char" \ ++ " = \\(PTR TO -> \\( character\\*21 \\)\\) ${hex}" \ ++ "print var_char after allocated third time" ++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*21 \\)" \ ++ "whatis var_char after allocated third time" ++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*21 \\)" \ ++ "ptype var_char after allocated third time" ++ ++gdb_breakpoint [gdb_get_line_number "var_char_p-associated"] ++gdb_continue_to_breakpoint "var_char_p-associated" ++gdb_test "print var_char_p" \ ++ " = \\(PTR TO -> \\( character\\*7 \\)\\) ${hex}" \ ++ "print var_char_p after associated" ++gdb_test "print *var_char_p" " = 'johndoe'" \ ++ "print *var_char_ after associated" ++gdb_test "whatis var_char_p" "type = PTR TO -> \\( character\\*7 \\)" \ ++ "whatis var_char_p after associated" ++gdb_test "ptype var_char_p" "type = PTR TO -> \\( character\\*7 \\)" \ ++ "ptype var_char_p after associated" +Index: gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-stringsold.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.10.50.20160106/gdb/testsuite/gdb.fortran/vla-stringsold.f90 2016-01-08 19:15:44.984637686 +0100 +@@ -0,0 +1,40 @@ ++! 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 2 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, write to the Free Software ++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++program vla_strings ++ character(len=:), target, allocatable :: var_char ++ character(len=:), pointer :: var_char_p ++ logical :: l ++ ++ allocate(character(len=10) :: var_char) ++ l = allocated(var_char) ! var_char-allocated-1 ++ var_char = 'foo' ++ deallocate(var_char) ! var_char-filled-1 ++ l = allocated(var_char) ! var_char-deallocated ++ allocate(character(len=42) :: var_char) ++ l = allocated(var_char) ++ var_char = 'foobar' ++ var_char = '' ! var_char-filled-2 ++ var_char = 'bar' ! var_char-empty ++ deallocate(var_char) ++ allocate(character(len=21) :: var_char) ++ l = allocated(var_char) ! var_char-allocated-3 ++ var_char = 'johndoe' ++ var_char_p => var_char ++ l = associated(var_char_p) ! var_char_p-associated ++ var_char_p => null() ++ l = associated(var_char_p) ! var_char_p-not-associated ++end program vla_strings diff --git a/insight-7.10.50-buildid-locate-rpm.patch b/insight-7.10.50-buildid-locate-rpm.patch deleted file mode 100644 index 6686068..0000000 --- a/insight-7.10.50-buildid-locate-rpm.patch +++ /dev/null @@ -1,1311 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/build-id.c insight-7.10.50.20160208.new/gdb/build-id.c ---- insight-7.10.50.20160208.orig/gdb/build-id.c 2016-02-08 18:33:13.171800259 +0100 -+++ insight-7.10.50.20160208.new/gdb/build-id.c 2016-02-08 18:35:58.372318580 +0100 -@@ -35,6 +35,7 @@ - #include "elf/common.h" - #include "elf-bfd.h" - #include -+#include "elf/external.h" - - #define BUILD_ID_VERBOSE_NONE 0 - #define BUILD_ID_VERBOSE_FILENAMES 1 -@@ -665,8 +666,366 @@ build_id_to_filename (const struct bfd_b - return result; - } - -+#ifdef HAVE_LIBRPM -+ -+#include -+#include -+#include -+#include -+#ifdef DLOPEN_LIBRPM -+#include -+#endif -+ -+/* This MISSING_RPM_HASH tracker is used to collect all the missing rpm files -+ and avoid their duplicities during a single inferior run. */ -+ -+static struct htab *missing_rpm_hash; -+ -+/* This MISSING_RPM_LIST tracker is used to collect and print as a single line -+ all the rpms right before the nearest GDB prompt. It gets cleared after -+ each such print (it is questionable if we should clear it after the print). -+ */ -+ -+struct missing_rpm -+ { -+ struct missing_rpm *next; -+ char rpm[1]; -+ }; -+static struct missing_rpm *missing_rpm_list; -+static int missing_rpm_list_entries; -+ -+/* Returns the count of newly added rpms. */ -+ -+static int -+missing_rpm_enlist (const char *filename) -+{ -+ static int rpm_init_done = 0; -+ rpmts ts; -+ rpmdbMatchIterator mi; -+ int count = 0; -+ -+#ifdef DLOPEN_LIBRPM -+ /* Duplicate here the declarations to verify they match. The same sanity -+ check is present also in `configure.ac'. */ -+ extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); -+ static char *(*headerFormat_p) (Header h, const char * fmt, errmsg_t *errmsg); -+ extern int rpmReadConfigFiles(const char * file, const char * target); -+ static int (*rpmReadConfigFiles_p) (const char * file, const char * target); -+ extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); -+ static rpmdbMatchIterator (*rpmdbFreeIterator_p) (rpmdbMatchIterator mi); -+ extern Header rpmdbNextIterator(rpmdbMatchIterator mi); -+ static Header (*rpmdbNextIterator_p) (rpmdbMatchIterator mi); -+ extern rpmts rpmtsCreate(void); -+ static rpmts (*rpmtsCreate_p) (void); -+ extern rpmts rpmtsFree(rpmts ts); -+ static rpmts (*rpmtsFree_p) (rpmts ts); -+ extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, -+ const void * keyp, size_t keylen); -+ static rpmdbMatchIterator (*rpmtsInitIterator_p) (const rpmts ts, -+ rpmTag rpmtag, -+ const void *keyp, -+ size_t keylen); -+#else /* !DLOPEN_LIBRPM */ -+# define headerFormat_p headerFormat -+# define rpmReadConfigFiles_p rpmReadConfigFiles -+# define rpmdbFreeIterator_p rpmdbFreeIterator -+# define rpmdbNextIterator_p rpmdbNextIterator -+# define rpmtsCreate_p rpmtsCreate -+# define rpmtsFree_p rpmtsFree -+# define rpmtsInitIterator_p rpmtsInitIterator -+#endif /* !DLOPEN_LIBRPM */ -+ -+ gdb_assert (filename != NULL); -+ -+ if (strcmp (filename, BUILD_ID_MAIN_EXECUTABLE_FILENAME) == 0) -+ return 0; -+ -+ if (is_target_filename (filename)) -+ return 0; -+ -+ if (filename[0] != '/') -+ { -+ warning (_("Ignoring non-absolute filename: <%s>"), filename); -+ return 0; -+ } -+ -+ if (!rpm_init_done) -+ { -+ static int init_tried; -+ -+ /* Already failed the initialization before? */ -+ if (init_tried) -+ return 0; -+ init_tried = 1; -+ -+#ifdef DLOPEN_LIBRPM -+ { -+ void *h; -+ -+ h = dlopen (DLOPEN_LIBRPM, RTLD_LAZY); -+ if (!h) -+ { -+ warning (_("Unable to open \"%s\" (%s), " -+ "missing debuginfos notifications will not be displayed"), -+ DLOPEN_LIBRPM, dlerror ()); -+ return 0; -+ } -+ -+ if (!((headerFormat_p = dlsym (h, "headerFormat")) -+ && (rpmReadConfigFiles_p = dlsym (h, "rpmReadConfigFiles")) -+ && (rpmdbFreeIterator_p = dlsym (h, "rpmdbFreeIterator")) -+ && (rpmdbNextIterator_p = dlsym (h, "rpmdbNextIterator")) -+ && (rpmtsCreate_p = dlsym (h, "rpmtsCreate")) -+ && (rpmtsFree_p = dlsym (h, "rpmtsFree")) -+ && (rpmtsInitIterator_p = dlsym (h, "rpmtsInitIterator")))) -+ { -+ warning (_("Opened library \"%s\" is incompatible (%s), " -+ "missing debuginfos notifications will not be displayed"), -+ DLOPEN_LIBRPM, dlerror ()); -+ if (dlclose (h)) -+ warning (_("Error closing library \"%s\": %s\n"), DLOPEN_LIBRPM, -+ dlerror ()); -+ return 0; -+ } -+ } -+#endif /* DLOPEN_LIBRPM */ -+ -+ if (rpmReadConfigFiles_p (NULL, NULL) != 0) -+ { -+ warning (_("Error reading the rpm configuration files")); -+ return 0; -+ } -+ -+ rpm_init_done = 1; -+ } -+ -+ ts = rpmtsCreate_p (); -+ -+ mi = rpmtsInitIterator_p (ts, RPMTAG_BASENAMES, filename, 0); -+ if (mi != NULL) -+ { -+ for (;;) -+ { -+ Header h; -+ char *debuginfo, **slot, *s, *s2; -+ errmsg_t err; -+ size_t srcrpmlen = sizeof (".src.rpm") - 1; -+ size_t debuginfolen = sizeof ("-debuginfo") - 1; -+ rpmdbMatchIterator mi_debuginfo; -+ -+ h = rpmdbNextIterator_p (mi); -+ if (h == NULL) -+ break; -+ -+ /* Verify the debuginfo file is not already installed. */ -+ -+ debuginfo = headerFormat_p (h, "%{sourcerpm}-debuginfo.%{arch}", -+ &err); -+ if (!debuginfo) -+ { -+ warning (_("Error querying the rpm file `%s': %s"), filename, -+ err); -+ continue; -+ } -+ /* s = `.src.rpm-debuginfo.%{arch}' */ -+ s = strrchr (debuginfo, '-') - srcrpmlen; -+ s2 = NULL; -+ if (s > debuginfo && memcmp (s, ".src.rpm", srcrpmlen) == 0) -+ { -+ /* s2 = `-%{release}.src.rpm-debuginfo.%{arch}' */ -+ s2 = memrchr (debuginfo, '-', s - debuginfo); -+ } -+ if (s2) -+ { -+ /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */ -+ s2 = memrchr (debuginfo, '-', s2 - debuginfo); -+ } -+ if (!s2) -+ { -+ warning (_("Error querying the rpm file `%s': %s"), filename, -+ debuginfo); -+ xfree (debuginfo); -+ continue; -+ } -+ /* s = `.src.rpm-debuginfo.%{arch}' */ -+ /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */ -+ memmove (s2 + debuginfolen, s2, s - s2); -+ memcpy (s2, "-debuginfo", debuginfolen); -+ /* s = `XXXX.%{arch}' */ -+ /* strlen ("XXXX") == srcrpmlen + debuginfolen */ -+ /* s2 = `-debuginfo-%{version}-%{release}XX.%{arch}' */ -+ /* strlen ("XX") == srcrpmlen */ -+ memmove (s + debuginfolen, s + srcrpmlen + debuginfolen, -+ strlen (s + srcrpmlen + debuginfolen) + 1); -+ /* s = `-debuginfo-%{version}-%{release}.%{arch}' */ -+ -+ /* RPMDBI_PACKAGES requires keylen == sizeof (int). */ -+ /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel(). */ -+ mi_debuginfo = rpmtsInitIterator_p (ts, RPMDBI_LABEL, debuginfo, 0); -+ xfree (debuginfo); -+ if (mi_debuginfo) -+ { -+ rpmdbFreeIterator_p (mi_debuginfo); -+ count = 0; -+ break; -+ } -+ -+ /* The allocated memory gets utilized below for MISSING_RPM_HASH. */ -+ debuginfo = headerFormat_p (h, -+ "%{name}-%{version}-%{release}.%{arch}", -+ &err); -+ if (!debuginfo) -+ { -+ warning (_("Error querying the rpm file `%s': %s"), filename, -+ err); -+ continue; -+ } -+ -+ /* Base package name for `debuginfo-install'. We do not use the -+ `yum' command directly as the line -+ yum --enablerepo='*debug*' install NAME-debuginfo.ARCH -+ would be more complicated than just: -+ debuginfo-install NAME-VERSION-RELEASE.ARCH -+ Do not supply the rpm base name (derived from .src.rpm name) as -+ debuginfo-install is unable to install the debuginfo package if -+ the base name PKG binary rpm is not installed while for example -+ PKG-libs would be installed (RH Bug 467901). -+ FUTURE: After multiple debuginfo versions simultaneously installed -+ get supported the support for the VERSION-RELEASE tags handling -+ may need an update. */ -+ -+ if (missing_rpm_hash == NULL) -+ { -+ /* DEL_F is passed NULL as MISSING_RPM_LIST's HTAB_DELETE -+ should not deallocate the entries. */ -+ -+ missing_rpm_hash = htab_create_alloc (64, htab_hash_string, -+ (int (*) (const void *, const void *)) streq, -+ NULL, xcalloc, xfree); -+ } -+ slot = (char **) htab_find_slot (missing_rpm_hash, debuginfo, INSERT); -+ /* XCALLOC never returns NULL. */ -+ gdb_assert (slot != NULL); -+ if (*slot == NULL) -+ { -+ struct missing_rpm *missing_rpm; -+ -+ *slot = debuginfo; -+ -+ missing_rpm = xmalloc (sizeof (*missing_rpm) + strlen (debuginfo)); -+ strcpy (missing_rpm->rpm, debuginfo); -+ missing_rpm->next = missing_rpm_list; -+ missing_rpm_list = missing_rpm; -+ missing_rpm_list_entries++; -+ } -+ else -+ xfree (debuginfo); -+ count++; -+ } -+ -+ rpmdbFreeIterator_p (mi); -+ } -+ -+ rpmtsFree_p (ts); -+ -+ return count; -+} -+ -+static int -+missing_rpm_list_compar (const char *const *ap, const char *const *bp) -+{ -+ return strcoll (*ap, *bp); -+} -+ -+/* It returns a NULL-terminated array of strings needing to be FREEd. It may -+ also return only NULL. */ -+ -+static void -+missing_rpm_list_print (void) -+{ -+ char **array, **array_iter; -+ struct missing_rpm *list_iter; -+ struct cleanup *cleanups; -+ -+ if (missing_rpm_list_entries == 0) -+ return; -+ -+ array = xmalloc (sizeof (*array) * missing_rpm_list_entries); -+ cleanups = make_cleanup (xfree, array); -+ -+ array_iter = array; -+ for (list_iter = missing_rpm_list; list_iter != NULL; -+ list_iter = list_iter->next) -+ { -+ *array_iter++ = list_iter->rpm; -+ } -+ gdb_assert (array_iter == array + missing_rpm_list_entries); -+ -+ qsort (array, missing_rpm_list_entries, sizeof (*array), -+ (int (*) (const void *, const void *)) missing_rpm_list_compar); -+ -+ printf_unfiltered (_("Missing separate debuginfos, use: %s"), -+#ifdef DNF_DEBUGINFO_INSTALL -+ "dnf " -+#endif -+ "debuginfo-install"); -+ for (array_iter = array; array_iter < array + missing_rpm_list_entries; -+ array_iter++) -+ { -+ putchar_unfiltered (' '); -+ puts_unfiltered (*array_iter); -+ } -+ putchar_unfiltered ('\n'); -+ -+ while (missing_rpm_list != NULL) -+ { -+ list_iter = missing_rpm_list; -+ missing_rpm_list = list_iter->next; -+ xfree (list_iter); -+ } -+ missing_rpm_list_entries = 0; -+ -+ do_cleanups (cleanups); -+} -+ -+static void -+missing_rpm_change (void) -+{ -+ debug_flush_missing (); -+ -+ gdb_assert (missing_rpm_list == NULL); -+ if (missing_rpm_hash != NULL) -+ { -+ htab_delete (missing_rpm_hash); -+ missing_rpm_hash = NULL; -+ } -+} -+ -+enum missing_exec -+ { -+ /* Init state. EXEC_BFD also still could be NULL. */ -+ MISSING_EXEC_NOT_TRIED, -+ /* We saw a non-NULL EXEC_BFD but RPM has no info about it. */ -+ MISSING_EXEC_NOT_FOUND, -+ /* We found EXEC_BFD by RPM and we either have its symbols (either embedded -+ or separate) or the main executable's RPM is now contained in -+ MISSING_RPM_HASH. */ -+ MISSING_EXEC_ENLISTED -+ }; -+static enum missing_exec missing_exec = MISSING_EXEC_NOT_TRIED; -+ -+#endif /* HAVE_LIBRPM */ -+ -+void -+debug_flush_missing (void) -+{ -+#ifdef HAVE_LIBRPM -+ missing_rpm_list_print (); -+#endif -+} -+ - /* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages -- Try to install the hash file ... -+ yum --enablerepo='*debug*' install ... - avoidance. */ - - struct missing_filepair -@@ -720,11 +1079,17 @@ missing_filepair_change (void) - /* All their memory came just from missing_filepair_OBSTACK. */ - missing_filepair_hash = NULL; - } -+#ifdef HAVE_LIBRPM -+ missing_exec = MISSING_EXEC_NOT_TRIED; -+#endif - } - - static void - debug_print_executable_changed (void) - { -+#ifdef HAVE_LIBRPM -+ missing_rpm_change (); -+#endif - missing_filepair_change (); - } - -@@ -791,14 +1156,39 @@ debug_print_missing (const char *binary, - - *slot = missing_filepair; - -- /* We do not collect and flush these messages as each such message -- already requires its own separate lines. */ -+#ifdef HAVE_LIBRPM -+ if (missing_exec == MISSING_EXEC_NOT_TRIED) -+ { -+ char *execfilename; - -- fprintf_unfiltered (gdb_stdlog, -- _("Missing separate debuginfo for %s\n"), binary); -- if (debug != NULL) -- fprintf_unfiltered (gdb_stdlog, _("Try to install the hash file %s\n"), -- debug); -+ execfilename = get_exec_file (0); -+ if (execfilename != NULL) -+ { -+ if (missing_rpm_enlist (execfilename) == 0) -+ missing_exec = MISSING_EXEC_NOT_FOUND; -+ else -+ missing_exec = MISSING_EXEC_ENLISTED; -+ } -+ } -+ if (missing_exec != MISSING_EXEC_ENLISTED) -+ if ((binary[0] == 0 || missing_rpm_enlist (binary) == 0) -+ && (debug == NULL || missing_rpm_enlist (debug) == 0)) -+#endif /* HAVE_LIBRPM */ -+ { -+ /* We do not collect and flush these messages as each such message -+ already requires its own separate lines. */ -+ -+ fprintf_unfiltered (gdb_stdlog, -+ _("Missing separate debuginfo for %s\n"), binary); -+ if (debug != NULL) -+ fprintf_unfiltered (gdb_stdlog, _("Try: %s %s\n"), -+#ifdef DNF_DEBUGINFO_INSTALL -+ "dnf" -+#else -+ "yum" -+#endif -+ " --enablerepo='*debug*' install", debug); -+ } - } - - /* See build-id.h. */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/config.in insight-7.10.50.20160208.new/gdb/config.in ---- insight-7.10.50.20160208.orig/gdb/config.in 2016-01-20 11:01:21.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/config.in 2016-02-08 18:35:58.362318488 +0100 -@@ -33,6 +33,9 @@ - /* Define to BFD's default target vector. */ - #undef DEFAULT_BFD_VEC - -+/* librpm version specific library name to dlopen. */ -+#undef DLOPEN_LIBRPM -+ - /* Define to 1 if translation of program messages to the user's native - language is requested. */ - #undef ENABLE_NLS -@@ -258,6 +261,9 @@ - /* Define if Python 2.7 is being used. */ - #undef HAVE_LIBPYTHON2_7 - -+/* Define if librpm library is being used. */ -+#undef HAVE_LIBRPM -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_LIBUNWIND_IA64_H - -diff -Naurp insight-7.10.50.20160208.orig/gdb/configure insight-7.10.50.20160208.new/gdb/configure ---- insight-7.10.50.20160208.orig/gdb/configure 2016-02-08 16:06:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/configure 2016-02-08 18:42:39.379002823 +0100 -@@ -739,6 +739,11 @@ PKGVERSION - HAVE_NATIVE_GCORE_TARGET - TARGET_OBS - subdirs -+RPM_LIBS -+RPM_CFLAGS -+PKG_CONFIG_LIBDIR -+PKG_CONFIG_PATH -+PKG_CONFIG - GDB_DATADIR - DEBUGDIR - MAKEINFO_EXTRA_FLAGS -@@ -848,6 +853,7 @@ with_gdb_datadir - with_relocated_sources - with_auto_load_dir - with_auto_load_safe_path -+with_rpm - enable_targets - enable_64_bit_bfd - enable_gdbcli -@@ -904,6 +910,11 @@ CCC - CPP - MAKEINFO - MAKEINFOFLAGS -+PKG_CONFIG -+PKG_CONFIG_PATH -+PKG_CONFIG_LIBDIR -+RPM_CFLAGS -+RPM_LIBS - YACC - YFLAGS - XMKMF' -@@ -1575,6 +1586,8 @@ Optional Packages: - [--with-auto-load-dir] - --without-auto-load-safe-path - do not restrict auto-loaded files locations -+ --with-rpm query rpm database for missing debuginfos (yes/no, -+ def. auto=librpm.so) - --with-libunwind-ia64 use libunwind frame unwinding for ia64 targets - --with-curses use the curses library instead of the termcap - library -@@ -1629,6 +1642,13 @@ Some influential environment variables: - MAKEINFO Parent configure detects if it is of sufficient version. - MAKEINFOFLAGS - Parameters for MAKEINFO. -+ PKG_CONFIG path to pkg-config utility -+ PKG_CONFIG_PATH -+ directories to add to pkg-config's search path -+ PKG_CONFIG_LIBDIR -+ path overriding pkg-config's built-in search path -+ RPM_CFLAGS C compiler flags for RPM, overriding pkg-config -+ RPM_LIBS linker flags for RPM, overriding pkg-config - YACC The `Yet Another Compiler Compiler' implementation to use. - Defaults to the first program found out of: `bison -y', `byacc', - `yacc'. -@@ -5741,6 +5761,494 @@ _ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5 - $as_echo "$with_auto_load_safe_path" >&6; } - -+# Integration with rpm library to support missing debuginfo suggestions. -+# --without-rpm: Disable any rpm support. -+# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime. -+# Even with runtime missing `libname.so' GDB will still other run correctly. -+# Missing `libname.so' during ./configure will abort the configuration. -+# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific -+# minor version first such as `librpm-4.6.so' as minor version differences -+# mean API+ABI incompatibility. If the specific match versioned library name -+# could not be found still open dynamically at least `librpm.so'. -+# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try -+# to find librpm for compilation-time linking by pkg-config. GDB binary will -+# be probably linked with the version specific library (as `librpm-4.6.so'). -+# Failure to find librpm by pkg-config will abort the configuration. -+# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config -+# cannot find librpm use to the rpmless compilation (like `--without-rpm'). -+ -+ -+# Check whether --with-rpm was given. -+if test "${with_rpm+set}" = set; then : -+ withval=$with_rpm; -+else -+ with_rpm="auto" -+fi -+ -+ -+ -+ -+if test "x$with_rpm" != "xno"; then -+ if test "x$with_rpm" = "xyes"; then -+ LIBRPM="librpm.so" -+ RPM_REQUIRE=true -+ DLOPEN_REQUIRE=false -+ elif test "x$with_rpm" = "xauto"; then -+ LIBRPM="librpm.so" -+ RPM_REQUIRE=false -+ DLOPEN_REQUIRE=false -+ else -+ LIBRPM="$with_rpm" -+ RPM_REQUIRE=true -+ DLOPEN_REQUIRE=true -+ fi -+ LIBRPM_STRING='"'"$LIBRPM"'"' -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking specific librpm version" >&5 -+$as_echo_n "checking specific librpm version... " >&6; } -+ HAVE_DLOPEN_LIBRPM=false -+ save_LIBS="$LIBS" -+ LIBS="$LIBS -ldl" -+ if test "$cross_compiling" = yes; then : -+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -+as_fn_error "cannot run test program while cross compiling -+See \`config.log' for more details." "$LINENO" 5; } -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+#include -+#include -+#include -+ -+int -+main () -+{ -+ -+ void *h; -+ const char *const *rpmverp; -+ FILE *f; -+ -+ f = fopen ("conftest.out", "w"); -+ if (!f) -+ { -+ fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out", -+ strerror (errno)); -+ return 1; -+ } -+ h = dlopen ($LIBRPM_STRING, RTLD_LAZY); -+ if (!h) -+ { -+ fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ()); -+ return 1; -+ } -+ rpmverp = dlsym (h, "RPMVERSION"); -+ if (!rpmverp) -+ { -+ fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ()); -+ return 1; -+ } -+ fprintf (stderr, "RPMVERSION is: \""); -+ fprintf (stderr, "%s\"\n", *rpmverp); -+ -+ /* Try to find the specific librpm version only for "librpm.so" as we do -+ not know how to assemble the version string otherwise. */ -+ -+ if (strcmp ("librpm.so", $LIBRPM_STRING) != 0) -+ { -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ else -+ { -+ char *h2_name; -+ void *h2; -+ int major, minor; -+ -+ if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2) -+ { -+ fprintf (stderr, "Unable to parse RPMVERSION.\n"); -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ /* Avoid the square brackets by malloc. */ -+ h2_name = malloc (64); -+ sprintf (h2_name, "librpm-%d.%d.so", major, minor); -+ h2 = dlopen (h2_name, RTLD_LAZY); -+ if (!h2) -+ { -+ fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ()); -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ if (h2 != h) -+ { -+ fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n", -+ $LIBRPM_STRING, h2_name); -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ /* Found the valid .so name with a specific version. */ -+ fprintf (f, "%s\n", h2_name); -+ return 0; -+ } -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_run "$LINENO"; then : -+ -+ DLOPEN_LIBRPM="`cat conftest.out`" -+ if test "x$DLOPEN_LIBRPM" != "x"; then -+ HAVE_DLOPEN_LIBRPM=true -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLOPEN_LIBRPM" >&5 -+$as_echo "$DLOPEN_LIBRPM" >&6; } -+ fi -+ -+fi -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -+ conftest.$ac_objext conftest.beam conftest.$ac_ext -+fi -+ -+ rm -f conftest.out -+ -+ -+ -+ if $HAVE_DLOPEN_LIBRPM; then -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5 -+$as_echo_n "checking rpm library API compatibility... " >&6; } -+ # The compilation requires -Werror to verify anything. -+ save_CFLAGS="$CFLAGS" -+ CFLAGS="$CFLAGS -Werror" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+/* Duplicate here the declarations to verify they match "elfread.c". */ -+#include -+#include -+#include -+#include -+extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); -+extern int rpmReadConfigFiles(const char * file, const char * target); -+extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); -+extern Header rpmdbNextIterator(rpmdbMatchIterator mi); -+extern rpmts rpmtsCreate(void); -+extern rpmts rpmtsFree(rpmts ts); -+extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, -+ const void * keyp, size_t keylen); -+ -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ -+ LIBRPM_COMPAT=true -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+$as_echo "yes" >&6; } -+ -+else -+ -+ LIBRPM_COMPAT=false -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ CFLAGS="$save_CFLAGS" -+ -+ if ! $LIBRPM_COMPAT; then -+ HAVE_DLOPEN_LIBRPM=false -+ fi -+ fi -+ -+ if $HAVE_DLOPEN_LIBRPM; then -+ DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"' -+ -+cat >>confdefs.h <<_ACEOF -+#define DLOPEN_LIBRPM $DLOPEN_LIBRPM_STRING -+_ACEOF -+ -+ -+$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h -+ -+ else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ LIBS="$save_LIBS" -+ if $DLOPEN_REQUIRE; then -+ as_fn_error "Specific name $LIBRPM was requested but it could not be opened." "$LINENO" 5 -+ fi -+ -+ -+ -+ -+ -+ -+ -+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ case $PKG_CONFIG in -+ [\\/]* | ?:[\\/]*) -+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. -+ ;; -+ *) -+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+ ;; -+esac -+fi -+PKG_CONFIG=$ac_cv_path_PKG_CONFIG -+if test -n "$PKG_CONFIG"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -+$as_echo "$PKG_CONFIG" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ -+fi -+if test -z "$ac_cv_path_PKG_CONFIG"; then -+ ac_pt_PKG_CONFIG=$PKG_CONFIG -+ # Extract the first word of "pkg-config", so it can be a program name with args. -+set dummy pkg-config; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ case $ac_pt_PKG_CONFIG in -+ [\\/]* | ?:[\\/]*) -+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. -+ ;; -+ *) -+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+ ;; -+esac -+fi -+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -+if test -n "$ac_pt_PKG_CONFIG"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -+$as_echo "$ac_pt_PKG_CONFIG" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ if test "x$ac_pt_PKG_CONFIG" = x; then -+ PKG_CONFIG="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -+ac_tool_warned=yes ;; -+esac -+ PKG_CONFIG=$ac_pt_PKG_CONFIG -+ fi -+else -+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -+fi -+ -+fi -+if test -n "$PKG_CONFIG"; then -+ _pkg_min_version=0.9.0 -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } -+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+$as_echo "yes" >&6; } -+ else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ PKG_CONFIG="" -+ fi -+fi -+ -+pkg_failed=no -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RPM" >&5 -+$as_echo_n "checking for RPM... " >&6; } -+ -+if test -n "$RPM_CFLAGS"; then -+ pkg_cv_RPM_CFLAGS="$RPM_CFLAGS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ -+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5 -+ ($PKG_CONFIG --exists --print-errors "rpm") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -+ test $ac_status = 0; }; then -+ pkg_cv_RPM_CFLAGS=`$PKG_CONFIG --cflags "rpm" 2>/dev/null` -+ test "x$?" != "x0" && pkg_failed=yes -+else -+ pkg_failed=yes -+fi -+ else -+ pkg_failed=untried -+fi -+if test -n "$RPM_LIBS"; then -+ pkg_cv_RPM_LIBS="$RPM_LIBS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ -+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5 -+ ($PKG_CONFIG --exists --print-errors "rpm") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -+ test $ac_status = 0; }; then -+ pkg_cv_RPM_LIBS=`$PKG_CONFIG --libs "rpm" 2>/dev/null` -+ test "x$?" != "x0" && pkg_failed=yes -+else -+ pkg_failed=yes -+fi -+ else -+ pkg_failed=untried -+fi -+ -+ -+ -+if test $pkg_failed = yes; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ -+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then -+ _pkg_short_errors_supported=yes -+else -+ _pkg_short_errors_supported=no -+fi -+ if test $_pkg_short_errors_supported = yes; then -+ RPM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "rpm" 2>&1` -+ else -+ RPM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "rpm" 2>&1` -+ fi -+ # Put the nasty error message in config.log where it belongs -+ echo "$RPM_PKG_ERRORS" >&5 -+ -+ HAVE_LIBRPM=false -+elif test $pkg_failed = untried; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ HAVE_LIBRPM=false -+else -+ RPM_CFLAGS=$pkg_cv_RPM_CFLAGS -+ RPM_LIBS=$pkg_cv_RPM_LIBS -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+$as_echo "yes" >&6; } -+ HAVE_LIBRPM=true -+fi -+ -+ if $HAVE_LIBRPM; then -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5 -+$as_echo_n "checking rpm library API compatibility... " >&6; } -+ # The compilation requires -Werror to verify anything. -+ save_CFLAGS="$CFLAGS" -+ CFLAGS="$CFLAGS -Werror" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+/* Duplicate here the declarations to verify they match "elfread.c". */ -+#include -+#include -+#include -+#include -+extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); -+extern int rpmReadConfigFiles(const char * file, const char * target); -+extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); -+extern Header rpmdbNextIterator(rpmdbMatchIterator mi); -+extern rpmts rpmtsCreate(void); -+extern rpmts rpmtsFree(rpmts ts); -+extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, -+ const void * keyp, size_t keylen); -+ -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ -+ LIBRPM_COMPAT=true -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+$as_echo "yes" >&6; } -+ -+else -+ -+ LIBRPM_COMPAT=false -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ CFLAGS="$save_CFLAGS" -+ -+ if ! $LIBRPM_COMPAT; then -+ HAVE_LIBRPM=false -+ RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB" -+ fi -+ fi -+ -+ if $HAVE_LIBRPM; then -+ -+$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h -+ -+ CFLAGS="$CFLAGS $RPM_CFLAGS" -+ LIBS="$LIBS $RPM_LIBS" -+ else -+ if $RPM_REQUIRE; then -+ as_fn_error "$RPM_PKG_ERRORS" "$LINENO" 5 -+ else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $RPM_PKG_ERRORS" >&5 -+$as_echo "$as_me: WARNING: $RPM_PKG_ERRORS" >&2;} -+ fi -+ fi -+ fi -+fi -+ - - - subdirs="$subdirs testsuite" -diff -Naurp insight-7.10.50.20160208.orig/gdb/configure.ac insight-7.10.50.20160208.new/gdb/configure.ac ---- insight-7.10.50.20160208.orig/gdb/configure.ac 2016-02-08 18:33:13.040799055 +0100 -+++ insight-7.10.50.20160208.new/gdb/configure.ac 2016-02-08 18:35:58.370318562 +0100 -@@ -177,6 +177,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escap - [Directories safe to hold auto-loaded files.]) - AC_MSG_RESULT([$with_auto_load_safe_path]) - -+# Integration with rpm library to support missing debuginfo suggestions. -+# --without-rpm: Disable any rpm support. -+# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime. -+# Even with runtime missing `libname.so' GDB will still other run correctly. -+# Missing `libname.so' during ./configure will abort the configuration. -+# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific -+# minor version first such as `librpm-4.6.so' as minor version differences -+# mean API+ABI incompatibility. If the specific match versioned library name -+# could not be found still open dynamically at least `librpm.so'. -+# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try -+# to find librpm for compilation-time linking by pkg-config. GDB binary will -+# be probably linked with the version specific library (as `librpm-4.6.so'). -+# Failure to find librpm by pkg-config will abort the configuration. -+# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config -+# cannot find librpm use to the rpmless compilation (like `--without-rpm'). -+ -+AC_ARG_WITH([rpm], -+ [AS_HELP_STRING([--with-rpm], -+ [query rpm database for missing debuginfos (yes/no, def. auto=librpm.so)])], [], [with_rpm="auto"]) -+ -+m4_pattern_allow([^AC_MSG_ERROR$]) -+m4_pattern_allow([^AC_MSG_WARN$]) -+if test "x$with_rpm" != "xno"; then -+ if test "x$with_rpm" = "xyes"; then -+ LIBRPM="librpm.so" -+ RPM_REQUIRE=true -+ DLOPEN_REQUIRE=false -+ elif test "x$with_rpm" = "xauto"; then -+ LIBRPM="librpm.so" -+ RPM_REQUIRE=false -+ DLOPEN_REQUIRE=false -+ else -+ LIBRPM="$with_rpm" -+ RPM_REQUIRE=true -+ DLOPEN_REQUIRE=true -+ fi -+ LIBRPM_STRING='"'"$LIBRPM"'"' -+ -+ AC_MSG_CHECKING([specific librpm version]) -+ HAVE_DLOPEN_LIBRPM=false -+ save_LIBS="$LIBS" -+ LIBS="$LIBS -ldl" -+ AC_RUN_IFELSE(AC_LANG_PROGRAM([[ -+#include -+#include -+#include -+ ]], [[ -+ void *h; -+ const char *const *rpmverp; -+ FILE *f; -+ -+ f = fopen ("conftest.out", "w"); -+ if (!f) -+ { -+ fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out", -+ strerror (errno)); -+ return 1; -+ } -+ h = dlopen ($LIBRPM_STRING, RTLD_LAZY); -+ if (!h) -+ { -+ fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ()); -+ return 1; -+ } -+ rpmverp = dlsym (h, "RPMVERSION"); -+ if (!rpmverp) -+ { -+ fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ()); -+ return 1; -+ } -+ fprintf (stderr, "RPMVERSION is: \""); -+ fprintf (stderr, "%s\"\n", *rpmverp); -+ -+ /* Try to find the specific librpm version only for "librpm.so" as we do -+ not know how to assemble the version string otherwise. */ -+ -+ if (strcmp ("librpm.so", $LIBRPM_STRING) != 0) -+ { -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ else -+ { -+ char *h2_name; -+ void *h2; -+ int major, minor; -+ -+ if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2) -+ { -+ fprintf (stderr, "Unable to parse RPMVERSION.\n"); -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ /* Avoid the square brackets by malloc. */ -+ h2_name = malloc (64); -+ sprintf (h2_name, "librpm-%d.%d.so", major, minor); -+ h2 = dlopen (h2_name, RTLD_LAZY); -+ if (!h2) -+ { -+ fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ()); -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ if (h2 != h) -+ { -+ fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n", -+ $LIBRPM_STRING, h2_name); -+ fprintf (f, "%s\n", $LIBRPM_STRING); -+ return 0; -+ } -+ /* Found the valid .so name with a specific version. */ -+ fprintf (f, "%s\n", h2_name); -+ return 0; -+ } -+ ]]), [ -+ DLOPEN_LIBRPM="`cat conftest.out`" -+ if test "x$DLOPEN_LIBRPM" != "x"; then -+ HAVE_DLOPEN_LIBRPM=true -+ AC_MSG_RESULT($DLOPEN_LIBRPM) -+ fi -+ ]) -+ rm -f conftest.out -+ -+ m4_define([CHECK_LIBRPM_COMPAT], [ -+ AC_MSG_CHECKING([rpm library API compatibility]) -+ # The compilation requires -Werror to verify anything. -+ save_CFLAGS="$CFLAGS" -+ CFLAGS="$CFLAGS -Werror" -+ AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[ -+/* Duplicate here the declarations to verify they match "elfread.c". */ -+#include -+#include -+#include -+#include -+extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); -+extern int rpmReadConfigFiles(const char * file, const char * target); -+extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); -+extern Header rpmdbNextIterator(rpmdbMatchIterator mi); -+extern rpmts rpmtsCreate(void); -+extern rpmts rpmtsFree(rpmts ts); -+extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, -+ const void * keyp, size_t keylen); -+ ]]), [ -+ LIBRPM_COMPAT=true -+ AC_MSG_RESULT(yes) -+ ], [ -+ LIBRPM_COMPAT=false -+ AC_MSG_RESULT(no) -+ ]) -+ CFLAGS="$save_CFLAGS" -+ ]) -+ -+ if $HAVE_DLOPEN_LIBRPM; then -+ CHECK_LIBRPM_COMPAT -+ if ! $LIBRPM_COMPAT; then -+ HAVE_DLOPEN_LIBRPM=false -+ fi -+ fi -+ -+ if $HAVE_DLOPEN_LIBRPM; then -+ DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"' -+ AC_DEFINE_UNQUOTED(DLOPEN_LIBRPM, $DLOPEN_LIBRPM_STRING, [librpm version specific library name to dlopen.]) -+ AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.]) -+ else -+ AC_MSG_RESULT(no) -+ LIBS="$save_LIBS" -+ if $DLOPEN_REQUIRE; then -+ AC_MSG_ERROR([Specific name $LIBRPM was requested but it could not be opened.]) -+ fi -+ PKG_CHECK_MODULES(RPM, rpm, [HAVE_LIBRPM=true], [HAVE_LIBRPM=false]) -+ -+ if $HAVE_LIBRPM; then -+ CHECK_LIBRPM_COMPAT -+ if ! $LIBRPM_COMPAT; then -+ HAVE_LIBRPM=false -+ RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB" -+ fi -+ fi -+ -+ if $HAVE_LIBRPM; then -+ AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.]) -+ CFLAGS="$CFLAGS $RPM_CFLAGS" -+ LIBS="$LIBS $RPM_LIBS" -+ else -+ if $RPM_REQUIRE; then -+ AC_MSG_ERROR($RPM_PKG_ERRORS) -+ else -+ AC_MSG_WARN($RPM_PKG_ERRORS) -+ fi -+ fi -+ fi -+fi -+ - AC_CONFIG_SUBDIRS(testsuite) - - # Check whether to support alternative target configurations -diff -Naurp insight-7.10.50.20160208.orig/gdb/corelow.c insight-7.10.50.20160208.new/gdb/corelow.c ---- insight-7.10.50.20160208.orig/gdb/corelow.c 2016-02-08 18:33:13.152800084 +0100 -+++ insight-7.10.50.20160208.new/gdb/corelow.c 2016-02-08 18:35:58.371318571 +0100 -@@ -310,7 +310,7 @@ build_id_locate_exec (int from_tty) - symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED; - } - else -- debug_print_missing (_("the main executable file"), build_id_filename); -+ debug_print_missing (BUILD_ID_MAIN_EXECUTABLE_FILENAME, build_id_filename); - - do_cleanups (back_to); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/event-top.c insight-7.10.50.20160208.new/gdb/event-top.c ---- insight-7.10.50.20160208.orig/gdb/event-top.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/event-top.c 2016-02-08 18:35:58.356318433 +0100 -@@ -37,6 +37,7 @@ - #include "gdbcmd.h" /* for dont_repeat() */ - #include "annotate.h" - #include "maint.h" -+#include "symfile.h" - - /* readline include files. */ - #include "readline/readline.h" -@@ -180,6 +181,8 @@ rl_callback_read_char_wrapper (gdb_clien - void - cli_command_loop (void *data) - { -+ debug_flush_missing (); -+ - display_gdb_prompt (0); - - /* Now it's time to start the event loop. */ -@@ -298,6 +301,8 @@ display_gdb_prompt (const char *new_prom - /* Reset the nesting depth used when trace-commands is set. */ - reset_command_nest_depth (); - -+ debug_flush_missing (); -+ - old_chain = make_cleanup (free_current_contents, &actual_gdb_prompt); - - /* Do not call the python hook on an explicit prompt change as -diff -Naurp insight-7.10.50.20160208.orig/gdb/symfile.h insight-7.10.50.20160208.new/gdb/symfile.h ---- insight-7.10.50.20160208.orig/gdb/symfile.h 2016-02-08 18:33:13.166800213 +0100 -+++ insight-7.10.50.20160208.new/gdb/symfile.h 2016-02-08 18:35:58.357318442 +0100 -@@ -587,6 +587,8 @@ void map_symbol_filenames (symbol_filena - /* build-id support. */ - extern struct bfd_build_id *build_id_addr_get (CORE_ADDR addr); - extern void debug_print_missing (const char *binary, const char *debug); -+extern void debug_flush_missing (void); -+#define BUILD_ID_MAIN_EXECUTABLE_FILENAME _("the main executable file") - - /* From dwarf2read.c */ - -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/lib/gdb.exp insight-7.10.50.20160208.new/gdb/testsuite/lib/gdb.exp ---- insight-7.10.50.20160208.orig/gdb/testsuite/lib/gdb.exp 2016-02-08 18:33:13.168800231 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/lib/gdb.exp 2016-02-08 18:35:58.359318460 +0100 -@@ -1631,7 +1631,7 @@ proc default_gdb_start { } { - warning "Couldn't set the width to 0." - } - } -- # Turn off the missing warnings as the testsuite does not expect it. -+ # Turn off the missing RPMs warnings as the testsuite does not expect it. - send_gdb "set build-id-verbose 0\n" - gdb_expect 10 { - -re "$gdb_prompt $" { -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/lib/mi-support.exp insight-7.10.50.20160208.new/gdb/testsuite/lib/mi-support.exp ---- insight-7.10.50.20160208.orig/gdb/testsuite/lib/mi-support.exp 2016-02-08 18:33:13.169800241 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/lib/mi-support.exp 2016-02-08 18:35:58.360318469 +0100 -@@ -204,7 +204,7 @@ proc default_mi_gdb_start { args } { - warning "Couldn't set the width to 0." - } - } -- # Turn off the missing warnings as the testsuite does not expect it. -+ # Turn off the missing RPMs warnings as the testsuite does not expect it. - send_gdb "190-gdb-set build-id-verbose 0\n" - gdb_expect 10 { - -re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" { -diff -Naurp insight-7.10.50.20160208.orig/gdb/tui/tui-interp.c insight-7.10.50.20160208.new/gdb/tui/tui-interp.c ---- insight-7.10.50.20160208.orig/gdb/tui/tui-interp.c 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/tui/tui-interp.c 2016-02-08 18:35:58.360318469 +0100 -@@ -31,6 +31,7 @@ - #include "tui/tui-io.h" - #include "infrun.h" - #include "observer.h" -+#include "symfile.h" - - static struct ui_out *tui_ui_out (struct interp *self); - diff --git a/insight-7.10.50-bz541866-rwatch-before-run.patch b/insight-7.10.50-bz541866-rwatch-before-run.patch deleted file mode 100644 index 495573a..0000000 --- a/insight-7.10.50-bz541866-rwatch-before-run.patch +++ /dev/null @@ -1,146 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/config/i386/linux64.mh insight-7.10.50.20160208.new/gdb/config/i386/linux64.mh ---- insight-7.10.50.20160208.orig/gdb/config/i386/linux64.mh 2016-02-05 10:39:58.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/config/i386/linux64.mh 2016-02-08 19:00:28.418807647 +0100 -@@ -7,7 +7,7 @@ NATDEPFILES= inf-ptrace.o fork-child.o \ - linux-procfs.o linux-ptrace.o linux-btrace.o \ - linux-waitpid.o linux-personality.o x86-linux.o \ - x86-linux-dregs.o amd64-linux-siginfo.o linux-namespaces.o --NAT_FILE= config/nm-linux.h -+NAT_FILE= nm-linux.h - NAT_CDEPS = $(srcdir)/proc-service.list - - # The dynamically loaded libthread_db needs access to symbols in the -diff -Naurp insight-7.10.50.20160208.orig/gdb/config/i386/linux.mh insight-7.10.50.20160208.new/gdb/config/i386/linux.mh ---- insight-7.10.50.20160208.orig/gdb/config/i386/linux.mh 2015-06-12 12:13:59.000000000 +0200 -+++ insight-7.10.50.20160208.new/gdb/config/i386/linux.mh 2016-02-08 18:58:51.864922889 +0100 -@@ -1,6 +1,6 @@ - # Host: Intel 386 running GNU/Linux. - --NAT_FILE= config/nm-linux.h -+NAT_FILE= nm-linux.h - NATDEPFILES= inf-ptrace.o fork-child.o \ - x86-nat.o x86-dregs.o i386-linux-nat.o x86-linux-nat.o \ - proc-service.o linux-thread-db.o \ -diff -Naurp insight-7.10.50.20160208.orig/gdb/config/i386/nm-linux64.h insight-7.10.50.20160208.new/gdb/config/i386/nm-linux64.h ---- insight-7.10.50.20160208.orig/gdb/config/i386/nm-linux64.h 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/config/i386/nm-linux64.h 2016-02-08 18:58:51.864922889 +0100 -@@ -0,0 +1,28 @@ -+/* Native support for GNU/Linux amd64. -+ -+ Copyright 2010 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 . */ -+ -+#ifndef NM_LINUX64_H -+#define NM_LINUX64_H -+ -+#include "config/nm-linux.h" -+ -+/* Red Hat backward compatibility with gdb-6.8. */ -+#define target_can_use_hardware_watchpoint(type, cnt, ot) 1 -+ -+#endif /* NM_LINUX64_H */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/config/i386/nm-linux.h insight-7.10.50.20160208.new/gdb/config/i386/nm-linux.h ---- insight-7.10.50.20160208.orig/gdb/config/i386/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/config/i386/nm-linux.h 2016-02-08 18:58:51.864922889 +0100 -@@ -0,0 +1,28 @@ -+/* Native support for GNU/Linux i386. -+ -+ Copyright 2010 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 . */ -+ -+#ifndef NM_LINUX_H -+#define NM_LINUX_H -+ -+#include "config/nm-linux.h" -+ -+/* Red Hat backward compatibility with gdb-6.8. */ -+#define target_can_use_hardware_watchpoint(type, cnt, ot) 1 -+ -+#endif /* NM_LINUX64_H */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/target.h insight-7.10.50.20160208.new/gdb/target.h ---- insight-7.10.50.20160208.orig/gdb/target.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/target.h 2016-02-08 18:58:51.865922898 +0100 -@@ -1924,9 +1924,11 @@ extern const char *target_thread_name (s - CNT is the number of such watchpoints used so far, including this - one. OTHERTYPE is who knows what... */ - -+#ifndef target_can_use_hardware_watchpoint - #define target_can_use_hardware_watchpoint(TYPE,CNT,OTHERTYPE) \ - (*current_target.to_can_use_hw_breakpoint) (¤t_target, \ - TYPE, CNT, OTHERTYPE) -+#endif - - /* Returns the number of debug registers needed to watch the given - memory region, or zero if not supported. */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp insight-7.10.50.20160208.new/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp ---- insight-7.10.50.20160208.orig/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp 2016-02-08 18:58:51.866922908 +0100 -@@ -0,0 +1,40 @@ -+# Copyright 2009, 2010 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 . -+ -+# Arch not supporting hw watchpoints does not imply no_hardware_watchpoints set. -+if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] -+ && ![istarget "ia64-*-*"]) -+ || [target_info exists gdb,no_hardware_watchpoints]} then { -+ verbose "Skipping watchpoint-hw-before-run test." -+ return -+} -+ -+set test watchpoint-hw-before-run -+set srcfile watchpoint-hw-hit-once.c -+if { [prepare_for_testing ${test}.exp ${test} ${srcfile}] } { -+ return -1 -+} -+ -+gdb_test "rwatch watchee" "ardware read watchpoint 1: watchee" -+ -+# `runto_main' or `runto main' would delete the watchpoint created above. -+ -+if { [gdb_start_cmd] < 0 } { -+ untested start -+ return -1 -+} -+gdb_test "" "main .* at .*" "start" -+ -+gdb_test "continue" "Continuing.\r\n\r\nHardware read watchpoint \[0-9\]+: watchee\r\n\r\nValue = 0\r\n.*" diff --git a/insight-7.10.50-fedora-libncursesw.patch b/insight-7.10.50-fedora-libncursesw.patch deleted file mode 100644 index a425898..0000000 --- a/insight-7.10.50-fedora-libncursesw.patch +++ /dev/null @@ -1,60 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/configure insight-7.10.50.20160208.new/gdb/configure ---- insight-7.10.50.20160208.orig/gdb/configure 2016-02-09 14:01:22.752911853 +0100 -+++ insight-7.10.50.20160208.new/gdb/configure 2016-02-09 14:02:08.180341010 +0100 -@@ -8546,6 +8546,7 @@ if test x"$prefer_curses" = xyes; then - # search /usr/local/include, if ncurses is installed in /usr/local. A - # default installation of ncurses on alpha*-dec-osf* will lead to such - # a situation. -+ # Fedora: Force libncursesw over libncurses to match the includes. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing waddstr" >&5 - $as_echo_n "checking for library containing waddstr... " >&6; } - if ${ac_cv_search_waddstr+:} false; then : -@@ -8570,7 +8571,7 @@ return waddstr (); - return 0; - } - _ACEOF --for ac_lib in '' ncurses cursesX curses; do -+for ac_lib in '' ncursesw; do - if test -z "$ac_lib"; then - ac_res="none required" - else -@@ -8644,6 +8645,7 @@ case $host_os in - esac - - # These are the libraries checked by Readline. -+# Fedora: Force libncursesw over libncurses to match the includes. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5 - $as_echo_n "checking for library containing tgetent... " >&6; } - if ${ac_cv_search_tgetent+:} false; then : -@@ -8668,7 +8670,7 @@ return tgetent (); - return 0; - } - _ACEOF --for ac_lib in '' termcap tinfo curses ncurses; do -+for ac_lib in '' termcap tinfo ncursesw; do - if test -z "$ac_lib"; then - ac_res="none required" - else -diff -Naurp insight-7.10.50.20160208.orig/gdb/configure.ac insight-7.10.50.20160208.new/gdb/configure.ac ---- insight-7.10.50.20160208.orig/gdb/configure.ac 2016-02-09 14:01:22.753911862 +0100 -+++ insight-7.10.50.20160208.new/gdb/configure.ac 2016-02-09 14:02:08.182341028 +0100 -@@ -771,7 +771,8 @@ if test x"$prefer_curses" = xyes; then - # search /usr/local/include, if ncurses is installed in /usr/local. A - # default installation of ncurses on alpha*-dec-osf* will lead to such - # a situation. -- AC_SEARCH_LIBS(waddstr, [ncurses cursesX curses]) -+ # Fedora: Force libncursesw over libncurses to match the includes. -+ AC_SEARCH_LIBS(waddstr, [ncursesw]) - - if test "$ac_cv_search_waddstr" != no; then - curses_found=yes -@@ -813,7 +814,8 @@ case $host_os in - esac - - # These are the libraries checked by Readline. --AC_SEARCH_LIBS(tgetent, [termcap tinfo curses ncurses]) -+# Fedora: Force libncursesw over libncurses to match the includes. -+AC_SEARCH_LIBS(tgetent, [termcap tinfo ncursesw]) - - if test "$ac_cv_search_tgetent" = no; then - CONFIG_OBS="$CONFIG_OBS stub-termcap.o" diff --git a/insight-7.10.50-rhbz795424-bitpos-20of25.patch b/insight-7.10.50-rhbz795424-bitpos-20of25.patch deleted file mode 100644 index d2ec0a8..0000000 --- a/insight-7.10.50-rhbz795424-bitpos-20of25.patch +++ /dev/null @@ -1,3949 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/aarch64-linux-nat.c insight-7.10.50.20160208.new/gdb/aarch64-linux-nat.c ---- insight-7.10.50.20160208.orig/gdb/aarch64-linux-nat.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/aarch64-linux-nat.c 2016-02-09 14:35:03.822311254 +0100 -@@ -736,7 +736,7 @@ aarch64_linux_remove_watchpoint (struct - - static int - aarch64_linux_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - return aarch64_linux_region_ok_for_watchpoint (addr, len); - } -diff -Naurp insight-7.10.50.20160208.orig/gdb/ada-lang.c insight-7.10.50.20160208.new/gdb/ada-lang.c ---- insight-7.10.50.20160208.orig/gdb/ada-lang.c 2016-02-01 11:04:35.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ada-lang.c 2016-02-09 14:35:03.827311300 +0100 -@@ -75,7 +75,7 @@ static struct type *desc_bounds_type (st - - static struct value *desc_bounds (struct value *); - --static int fat_pntr_bounds_bitpos (struct type *); -+static LONGEST fat_pntr_bounds_bitpos (struct type *); - - static int fat_pntr_bounds_bitsize (struct type *); - -@@ -83,13 +83,13 @@ static struct type *desc_data_target_typ - - static struct value *desc_data (struct value *); - --static int fat_pntr_data_bitpos (struct type *); -+static LONGEST fat_pntr_data_bitpos (struct type *); - - static int fat_pntr_data_bitsize (struct type *); - - static struct value *desc_one_bound (struct value *, int, int); - --static int desc_bound_bitpos (struct type *, int, int); -+static LONGEST desc_bound_bitpos (struct type *, int, int); - - static int desc_bound_bitsize (struct type *, int, int); - -@@ -172,7 +172,7 @@ static struct type *static_unwrap_type ( - - static struct value *unwrap_value (struct value *); - --static struct type *constrained_packed_array_type (struct type *, long *); -+static struct type *constrained_packed_array_type (struct type *, LONGEST *); - - static struct type *decode_constrained_packed_array_type (struct type *); - -@@ -187,7 +187,8 @@ static int ada_is_unconstrained_packed_a - static struct value *value_subscript_packed (struct value *, int, - struct value **); - --static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int); -+static void move_bits (gdb_byte *, int, const gdb_byte *, LONGEST, LONGEST, -+ int); - - static struct value *coerce_unspec_val_to_type (struct value *, - struct type *); -@@ -215,14 +216,14 @@ static struct value *value_val_atr (stru - static struct symbol *standard_lookup (const char *, const struct block *, - domain_enum); - --static struct value *ada_search_struct_field (const char *, struct value *, int, -+static struct value *ada_search_struct_field (const char *, struct value *, LONGEST, - struct type *); - --static struct value *ada_value_primitive_field (struct value *, int, int, -+static struct value *ada_value_primitive_field (struct value *, LONGEST, int, - struct type *); - --static int find_struct_field (const char *, struct type *, int, -- struct type **, int *, int *, int *, int *); -+static int find_struct_field (const char *, struct type *, LONGEST, -+ struct type **, LONGEST *, int *, int *, int *); - - static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR, - struct value *); -@@ -236,7 +237,7 @@ static int ada_is_direct_array_type (str - static void ada_language_arch_info (struct gdbarch *, - struct language_arch_info *); - --static struct value *ada_index_struct_field (int, struct value *, int, -+static struct value *ada_index_struct_field (LONGEST, struct value *, LONGEST, - struct type *); - - static struct value *assign_aggregate (struct value *, struct value *, -@@ -700,7 +701,7 @@ coerce_unspec_val_to_type (struct value - } - - static const gdb_byte * --cond_offset_host (const gdb_byte *valaddr, long offset) -+cond_offset_host (const gdb_byte *valaddr, LONGEST offset) - { - if (valaddr == NULL) - return NULL; -@@ -709,7 +710,7 @@ cond_offset_host (const gdb_byte *valadd - } - - static CORE_ADDR --cond_offset_target (CORE_ADDR address, long offset) -+cond_offset_target (CORE_ADDR address, LONGEST offset) - { - if (address == 0) - return 0; -@@ -1717,7 +1718,7 @@ desc_bounds (struct value *arr) - /* If TYPE is the type of an array-descriptor (fat pointer), the bit - position of the field containing the address of the bounds data. */ - --static int -+static LONGEST - fat_pntr_bounds_bitpos (struct type *type) - { - return TYPE_FIELD_BITPOS (desc_base_type (type), 1); -@@ -1783,7 +1784,7 @@ desc_data (struct value *arr) - /* If TYPE is the type of an array-descriptor (fat pointer), the bit - position of the field containing the address of the data. */ - --static int -+static LONGEST - fat_pntr_data_bitpos (struct type *type) - { - return TYPE_FIELD_BITPOS (desc_base_type (type), 0); -@@ -1818,7 +1819,7 @@ desc_one_bound (struct value *bounds, in - of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper - bound, if WHICH is 1. The first bound is I=1. */ - --static int -+static LONGEST - desc_bound_bitpos (struct type *type, int i, int which) - { - return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2); -@@ -2008,7 +2009,7 @@ ada_type_of_array (struct value *arr, in - zero, and does not need to be recomputed. */ - if (lo < hi) - { -- int array_bitsize = -+ LONGEST array_bitsize = - (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0); - - TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8; -@@ -2168,7 +2169,7 @@ decode_packed_array_bitsize (struct type - the length is arbitrary. */ - - static struct type * --constrained_packed_array_type (struct type *type, long *elt_bits) -+constrained_packed_array_type (struct type *type, LONGEST *elt_bits) - { - struct type *new_elt_type; - struct type *new_type; -@@ -2222,7 +2223,7 @@ decode_constrained_packed_array_type (st - char *name; - const char *tail; - struct type *shadow_type; -- long bits; -+ LONGEST bits; - - if (!raw_name) - raw_name = ada_type_name (desc_base_type (type)); -@@ -2293,7 +2294,8 @@ decode_constrained_packed_array (struct - array with no wrapper. In order to interpret the value through - the (left-justified) packed array type we just built, we must - first left-justify it. */ -- int bit_size, bit_pos; -+ int bit_size; -+ LONGEST bit_pos; - ULONGEST mod; - - mod = ada_modulus (value_type (arr)) - 1; -@@ -2521,7 +2523,7 @@ ada_unpack_from_contents (const gdb_byte - - struct value * - ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr, -- long offset, int bit_offset, int bit_size, -+ LONGEST offset, int bit_offset, int bit_size, - struct type *type) - { - struct value *v; -@@ -2594,7 +2596,7 @@ ada_value_primitive_packed_val (struct v - - if (obj != NULL) - { -- long new_offset = offset; -+ LONGEST new_offset = offset; - - set_value_component_location (v, obj); - set_value_bitpos (v, bit_offset + value_bitpos (obj)); -@@ -2642,7 +2644,7 @@ ada_value_primitive_packed_val (struct v - not overlap. */ - static void - move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source, -- int src_offset, int n, int bits_big_endian_p) -+ LONGEST src_offset, LONGEST n, int bits_big_endian_p) - { - unsigned int accum, mask; - int accum_bits, chunk_size; -@@ -2732,7 +2734,7 @@ ada_value_assign (struct value *toval, s - { - int len = (value_bitpos (toval) - + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT; -- int from_size; -+ LONGEST from_size; - gdb_byte *buffer = (gdb_byte *) alloca (len); - struct value *val; - CORE_ADDR to_addr = value_address (toval); -@@ -2783,7 +2785,7 @@ value_assign_to_component (struct value - (LONGEST) (value_address (component) - value_address (container)); - int bit_offset_in_container = - value_bitpos (component) - value_bitpos (container); -- int bits; -+ LONGEST bits; - - val = value_cast (value_type (component), val); - -@@ -4441,7 +4443,7 @@ ensure_lval (struct value *val) - if (VALUE_LVAL (val) == not_lval - || VALUE_LVAL (val) == lval_internalvar) - { -- int len = TYPE_LENGTH (ada_check_typedef (value_type (val))); -+ LONGEST len = TYPE_LENGTH (ada_check_typedef (value_type (val))); - const CORE_ADDR addr = - value_as_long (value_allocate_space_in_inferior (len)); - -@@ -4525,7 +4527,7 @@ static CORE_ADDR - value_pointer (struct value *value, struct type *type) - { - struct gdbarch *gdbarch = get_type_arch (type); -- unsigned len = TYPE_LENGTH (type); -+ ULONGEST len = TYPE_LENGTH (type); - gdb_byte *buf = (gdb_byte *) alloca (len); - CORE_ADDR addr; - -@@ -6760,7 +6762,7 @@ value_tag_from_contents_and_address (str - const gdb_byte *valaddr, - CORE_ADDR address) - { -- int tag_byte_offset; -+ LONGEST tag_byte_offset; - struct type *tag_type; - - if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset, -@@ -7241,7 +7243,7 @@ ada_in_variant (LONGEST val, struct type - only in that it can handle packed values of arbitrary type. */ - - static struct value * --ada_value_primitive_field (struct value *arg1, int offset, int fieldno, -+ada_value_primitive_field (struct value *arg1, LONGEST offset, int fieldno, - struct type *arg_type) - { - struct type *type; -@@ -7253,7 +7255,7 @@ ada_value_primitive_field (struct value - - if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0) - { -- int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno); -+ LONGEST bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno); - int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno); - - return ada_value_primitive_packed_val (arg1, value_contents (arg1), -@@ -7280,9 +7282,9 @@ ada_value_primitive_field (struct value - Returns 1 if found, 0 otherwise. */ - - static int --find_struct_field (const char *name, struct type *type, int offset, -+find_struct_field (const char *name, struct type *type, LONGEST offset, - struct type **field_type_p, -- int *byte_offset_p, int *bit_offset_p, int *bit_size_p, -+ LONGEST *byte_offset_p, int *bit_offset_p, int *bit_size_p, - int *index_p) - { - int i; -@@ -7300,8 +7302,8 @@ find_struct_field (const char *name, str - - for (i = 0; i < TYPE_NFIELDS (type); i += 1) - { -- int bit_pos = TYPE_FIELD_BITPOS (type, i); -- int fld_offset = offset + bit_pos / 8; -+ LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i); -+ LONGEST fld_offset = offset + bit_pos / 8; - const char *t_field_name = TYPE_FIELD_NAME (type, i); - - if (t_field_name == NULL) -@@ -7371,7 +7373,7 @@ num_visible_fields (struct type *type) - Searches recursively through wrapper fields (e.g., '_parent'). */ - - static struct value * --ada_search_struct_field (const char *name, struct value *arg, int offset, -+ada_search_struct_field (const char *name, struct value *arg, LONGEST offset, - struct type *type) - { - int i; -@@ -7404,7 +7406,7 @@ ada_search_struct_field (const char *nam - int j; - struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, - i)); -- int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; -+ LONGEST var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; - - for (j = 0; j < TYPE_NFIELDS (field_type); j += 1) - { -@@ -7422,8 +7424,8 @@ ada_search_struct_field (const char *nam - return NULL; - } - --static struct value *ada_index_struct_field_1 (int *, struct value *, -- int, struct type *); -+static struct value *ada_index_struct_field_1 (LONGEST *, struct value *, -+ LONGEST, struct type *); - - - /* Return field #INDEX in ARG, where the index is that returned by -@@ -7432,7 +7434,7 @@ static struct value *ada_index_struct_fi - * If found, return value, else return NULL. */ - - static struct value * --ada_index_struct_field (int index, struct value *arg, int offset, -+ada_index_struct_field (LONGEST index, struct value *arg, LONGEST offset, - struct type *type) - { - return ada_index_struct_field_1 (&index, arg, offset, type); -@@ -7444,7 +7446,7 @@ ada_index_struct_field (int index, struc - * *INDEX_P. */ - - static struct value * --ada_index_struct_field_1 (int *index_p, struct value *arg, int offset, -+ada_index_struct_field_1 (LONGEST *index_p, struct value *arg, LONGEST offset, - struct type *type) - { - int i; -@@ -7534,7 +7536,8 @@ ada_value_struct_elt (struct value *arg, - v = ada_search_struct_field (name, arg, 0, t); - else - { -- int bit_offset, bit_size, byte_offset; -+ int bit_offset, bit_size; -+ LONGEST byte_offset; - struct type *field_type; - CORE_ADDR address; - -@@ -7851,8 +7854,8 @@ ada_coerce_ref (struct value *val0) - /* Return OFF rounded upward if necessary to a multiple of - ALIGNMENT (a power of 2). */ - --static unsigned int --align_value (unsigned int off, unsigned int alignment) -+static ULONGEST -+align_value (ULONGEST off, ULONGEST alignment) - { - return (off + alignment - 1) & ~(alignment - 1); - } -@@ -8246,10 +8249,9 @@ ada_template_to_fixed_record_type_1 (str - struct value *mark = value_mark (); - struct value *dval; - struct type *rtype; -- int nfields, bit_len; -+ int nfields; - int variant_field; -- long off; -- int fld_bit_len; -+ LONGEST off, bit_len, fld_bit_len; - int f; - - /* Compute the number of fields in this record type that are going -@@ -8327,7 +8329,7 @@ ada_template_to_fixed_record_type_1 (str - that follow this one. */ - if (ada_is_aligner_type (field_type)) - { -- long field_offset = TYPE_FIELD_BITPOS (field_type, f); -+ LONGEST field_offset = TYPE_FIELD_BITPOS (field_type, f); - - field_valaddr = cond_offset_host (field_valaddr, field_offset); - field_address = cond_offset_target (field_address, field_offset); -@@ -8463,11 +8465,11 @@ ada_template_to_fixed_record_type_1 (str - if (TYPE_LENGTH (type) <= 0) - { - if (TYPE_NAME (rtype)) -- warning (_("Invalid type size for `%s' detected: %d."), -- TYPE_NAME (rtype), TYPE_LENGTH (type)); -+ warning (_("Invalid type size for `%s' detected: %s."), -+ TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type))); - else -- warning (_("Invalid type size for detected: %d."), -- TYPE_LENGTH (type)); -+ warning (_("Invalid type size for detected: %s."), -+ pulongest (TYPE_LENGTH (type))); - } - else - { -@@ -8934,7 +8936,8 @@ to_fixed_array_type (struct type *type0, - type was a regular (non-packed) array type. As a result, the - bitsize of the array elements needs to be set again, and the array - length needs to be recomputed based on that bitsize. */ -- int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result)); -+ LONGEST len = (TYPE_LENGTH (result) -+ / TYPE_LENGTH (TYPE_TARGET_TYPE (result))); - int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0); - - TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0); -diff -Naurp insight-7.10.50.20160208.orig/gdb/ada-lang.h insight-7.10.50.20160208.new/gdb/ada-lang.h ---- insight-7.10.50.20160208.orig/gdb/ada-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ada-lang.h 2016-02-09 14:35:03.828311310 +0100 -@@ -168,7 +168,7 @@ extern void ada_print_type (struct type - extern void ada_print_typedef (struct type *type, struct symbol *new_symbol, - struct ui_file *stream); - --extern void ada_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, -+extern void ada_val_print (struct type *, const gdb_byte *, LONGEST, CORE_ADDR, - struct ui_file *, int, - const struct value *, - const struct value_print_options *); -@@ -183,7 +183,7 @@ extern void ada_emit_char (int, struct t - extern void ada_printchar (int, struct type *, struct ui_file *); - - extern void ada_printstr (struct ui_file *, struct type *, const gdb_byte *, -- unsigned int, const char *, int, -+ ULONGEST, const char *, int, - const struct value_print_options *); - - struct value *ada_convert_actual (struct value *actual, -@@ -255,7 +255,7 @@ extern int ada_is_constrained_packed_arr - - extern struct value *ada_value_primitive_packed_val (struct value *, - const gdb_byte *, -- long, int, int, -+ LONGEST, int, int, - struct type *); - - extern struct type *ada_coerce_to_simple_array_type (struct type *); -diff -Naurp insight-7.10.50.20160208.orig/gdb/ada-typeprint.c insight-7.10.50.20160208.new/gdb/ada-typeprint.c ---- insight-7.10.50.20160208.orig/gdb/ada-typeprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ada-typeprint.c 2016-02-09 14:35:03.829311319 +0100 -@@ -891,8 +891,8 @@ ada_print_type (struct type *type0, cons - const char *name = ada_type_name (type); - - if (!ada_is_range_type_name (name)) -- fprintf_filtered (stream, _("<%d-byte integer>"), -- TYPE_LENGTH (type)); -+ fprintf_filtered (stream, _("<%s-byte integer>"), -+ pulongest (TYPE_LENGTH (type))); - else - { - fprintf_filtered (stream, "range "); -@@ -913,7 +913,8 @@ ada_print_type (struct type *type0, cons - } - break; - case TYPE_CODE_FLT: -- fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type)); -+ fprintf_filtered (stream, _("<%s-byte float>"), -+ pulongest (TYPE_LENGTH (type))); - break; - case TYPE_CODE_ENUM: - if (show < 0) -diff -Naurp insight-7.10.50.20160208.orig/gdb/ada-valprint.c insight-7.10.50.20160208.new/gdb/ada-valprint.c ---- insight-7.10.50.20160208.orig/gdb/ada-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ada-valprint.c 2016-02-09 14:35:03.830311328 +0100 -@@ -33,11 +33,11 @@ - #include "objfiles.h" - - static int print_field_values (struct type *, const gdb_byte *, -- int, -+ LONGEST, - struct ui_file *, int, - const struct value *, - const struct value_print_options *, -- int, struct type *, int, -+ int, struct type *, LONGEST, - const struct language_defn *); - - -@@ -279,7 +279,7 @@ ada_emit_char (int c, struct type *type, - of a character. */ - - static int --char_at (const gdb_byte *string, int i, int type_len, -+char_at (const gdb_byte *string, LONGEST i, int type_len, - enum bfd_endian byte_order) - { - if (type_len == 1) -@@ -441,11 +441,11 @@ ada_print_scalar (struct type *type, LON - - static void - printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string, -- unsigned int length, int force_ellipses, int type_len, -+ ULONGEST length, int force_ellipses, int type_len, - const struct value_print_options *options) - { - enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (elttype)); -- unsigned int i; -+ ULONGEST i; - unsigned int things_printed = 0; - int in_quotes = 0; - int need_comma = 0; -@@ -460,9 +460,9 @@ printstr (struct ui_file *stream, struct - { - /* Position of the character we are examining - to see whether it is repeated. */ -- unsigned int rep1; -+ ULONGEST rep1; - /* Number of repetitions we have detected so far. */ -- unsigned int reps; -+ ULONGEST reps; - - QUIT; - -@@ -493,7 +493,8 @@ printstr (struct ui_file *stream, struct - ada_emit_char (char_at (string, i, type_len, byte_order), - elttype, stream, '\'', type_len); - fputs_filtered ("'", stream); -- fprintf_filtered (stream, _(" "), reps); -+ fprintf_filtered (stream, _(" "), -+ pulongest (reps)); - i = rep1 - 1; - things_printed += options->repeat_count_threshold; - need_comma = 1; -@@ -521,7 +522,7 @@ printstr (struct ui_file *stream, struct - - void - ada_printstr (struct ui_file *stream, struct type *type, -- const gdb_byte *string, unsigned int length, -+ const gdb_byte *string, ULONGEST length, - const char *encoding, int force_ellipses, - const struct value_print_options *options) - { -@@ -531,12 +532,12 @@ ada_printstr (struct ui_file *stream, st - - static int - print_variant_part (struct type *type, int field_num, -- const gdb_byte *valaddr, int offset, -+ const gdb_byte *valaddr, LONGEST offset, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, - int comma_needed, -- struct type *outer_type, int outer_offset, -+ struct type *outer_type, LONGEST outer_offset, - const struct language_defn *language) - { - struct type *var_type = TYPE_FIELD_TYPE (type, field_num); -@@ -572,11 +573,11 @@ print_variant_part (struct type *type, i - - static int - print_field_values (struct type *type, const gdb_byte *valaddr, -- int offset, struct ui_file *stream, int recurse, -+ LONGEST offset, struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, - int comma_needed, -- struct type *outer_type, int outer_offset, -+ struct type *outer_type, LONGEST outer_offset, - const struct language_defn *language) - { - int i, len; -@@ -643,7 +644,7 @@ print_field_values (struct type *type, c - } - else - { -- int bit_pos = TYPE_FIELD_BITPOS (type, i); -+ LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i); - int bit_size = TYPE_FIELD_BITSIZE (type, i); - struct value_print_options opts; - -@@ -689,8 +690,8 @@ ada_val_print_string (struct type *type, - { - enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); - struct type *elttype = TYPE_TARGET_TYPE (type); -- unsigned int eltlen; -- unsigned int len; -+ ULONGEST eltlen; -+ ULONGEST len; - - /* We know that ELTTYPE cannot possibly be null, because we assume - that we're called only when TYPE is a string-like type. -@@ -709,7 +710,7 @@ ada_val_print_string (struct type *type, - elements up to it. */ - if (options->stop_print_at_null) - { -- int temp_len; -+ LONGEST temp_len; - - /* Look for a NULL char. */ - for (temp_len = 0; -@@ -1074,7 +1075,7 @@ ada_val_print_ref (struct type *type, co - - static void - ada_val_print_1 (struct type *type, const gdb_byte *valaddr, -- int offset, CORE_ADDR address, -+ LONGEST offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *original_value, - const struct value_print_options *options, -@@ -1157,7 +1158,7 @@ ada_val_print_1 (struct type *type, cons - - void - ada_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options) -diff -Naurp insight-7.10.50.20160208.orig/gdb/annotate.c insight-7.10.50.20160208.new/gdb/annotate.c ---- insight-7.10.50.20160208.orig/gdb/annotate.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/annotate.c 2016-02-09 14:35:03.830311328 +0100 -@@ -542,21 +542,21 @@ annotate_frame_end (void) - } - - void --annotate_array_section_begin (int idx, struct type *elttype) -+annotate_array_section_begin (LONGEST idx, struct type *elttype) - { - if (annotation_level == 2) - { -- printf_filtered (("\n\032\032array-section-begin %d "), idx); -+ printf_filtered (("\n\032\032array-section-begin %s "), plongest (idx)); - print_value_flags (elttype); - printf_filtered (("\n")); - } - } - - void --annotate_elt_rep (unsigned int repcount) -+annotate_elt_rep (ULONGEST repcount) - { - if (annotation_level == 2) -- printf_filtered (("\n\032\032elt-rep %u\n"), repcount); -+ printf_filtered (("\n\032\032elt-rep %s\n"), pulongest (repcount)); - } - - void -diff -Naurp insight-7.10.50.20160208.orig/gdb/annotate.h insight-7.10.50.20160208.new/gdb/annotate.h ---- insight-7.10.50.20160208.orig/gdb/annotate.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/annotate.h 2016-02-09 14:35:03.830311328 +0100 -@@ -92,8 +92,8 @@ extern void annotate_frame_source_end (v - extern void annotate_frame_where (void); - extern void annotate_frame_end (void); - --extern void annotate_array_section_begin (int, struct type *); --extern void annotate_elt_rep (unsigned int); -+extern void annotate_array_section_begin (LONGEST, struct type *); -+extern void annotate_elt_rep (ULONGEST); - extern void annotate_elt_rep_end (void); - extern void annotate_elt (void); - extern void annotate_array_section_end (void); -diff -Naurp insight-7.10.50.20160208.orig/gdb/arm-linux-nat.c insight-7.10.50.20160208.new/gdb/arm-linux-nat.c ---- insight-7.10.50.20160208.orig/gdb/arm-linux-nat.c 2016-01-25 11:55:56.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/arm-linux-nat.c 2016-02-09 14:35:03.831311337 +0100 -@@ -1063,7 +1063,7 @@ arm_linux_remove_hw_breakpoint (struct t - ADDR? */ - static int - arm_linux_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - const struct arm_linux_hwbp_cap *cap = arm_linux_get_hwbp_cap (); - CORE_ADDR max_wp_length, aligned_addr; -diff -Naurp insight-7.10.50.20160208.orig/gdb/ax-gdb.c insight-7.10.50.20160208.new/gdb/ax-gdb.c ---- insight-7.10.50.20160208.orig/gdb/ax-gdb.c 2016-01-25 11:55:56.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ax-gdb.c 2016-02-09 14:35:03.832311347 +0100 -@@ -83,12 +83,12 @@ static void gen_traced_pop (struct gdbar - static void gen_sign_extend (struct agent_expr *, struct type *); - static void gen_extend (struct agent_expr *, struct type *); - static void gen_fetch (struct agent_expr *, struct type *); --static void gen_left_shift (struct agent_expr *, int); -+static void gen_left_shift (struct agent_expr *, LONGEST); - - - static void gen_frame_args_address (struct gdbarch *, struct agent_expr *); - static void gen_frame_locals_address (struct gdbarch *, struct agent_expr *); --static void gen_offset (struct agent_expr *ax, int offset); -+static void gen_offset (struct agent_expr *ax, LONGEST offset); - static void gen_sym_offset (struct agent_expr *, struct symbol *); - static void gen_var_ref (struct gdbarch *, struct agent_expr *ax, - struct axs_value *value, struct symbol *var); -@@ -136,15 +136,16 @@ static void gen_deref (struct agent_expr - static void gen_address_of (struct agent_expr *, struct axs_value *); - static void gen_bitfield_ref (struct expression *exp, struct agent_expr *ax, - struct axs_value *value, -- struct type *type, int start, int end); -+ struct type *type, LONGEST start, LONGEST end); - static void gen_primitive_field (struct expression *exp, - struct agent_expr *ax, - struct axs_value *value, -- int offset, int fieldno, struct type *type); -+ LONGEST offset, int fieldno, -+ struct type *type); - static int gen_struct_ref_recursive (struct expression *exp, - struct agent_expr *ax, - struct axs_value *value, -- char *field, int offset, -+ char *field, LONGEST offset, - struct type *type); - static void gen_struct_ref (struct expression *exp, struct agent_expr *ax, - struct axs_value *value, -@@ -538,7 +539,7 @@ gen_fetch (struct agent_expr *ax, struct - right shift it by -DISTANCE bits if DISTANCE < 0. This generates - unsigned (logical) right shifts. */ - static void --gen_left_shift (struct agent_expr *ax, int distance) -+gen_left_shift (struct agent_expr *ax, LONGEST distance) - { - if (distance > 0) - { -@@ -592,7 +593,7 @@ gen_frame_locals_address (struct gdbarch - programming in ML, it would be clearer why these are the same - thing. */ - static void --gen_offset (struct agent_expr *ax, int offset) -+gen_offset (struct agent_expr *ax, LONGEST offset) - { - /* It would suffice to simply push the offset and add it, but this - makes it easier to read positive and negative offsets in the -@@ -1248,7 +1249,7 @@ gen_address_of (struct agent_expr *ax, s - static void - gen_bitfield_ref (struct expression *exp, struct agent_expr *ax, - struct axs_value *value, struct type *type, -- int start, int end) -+ LONGEST start, LONGEST end) - { - /* Note that ops[i] fetches 8 << i bits. */ - static enum agent_op ops[] -@@ -1283,13 +1284,13 @@ gen_bitfield_ref (struct expression *exp - - /* The first and one-after-last bits in the field, but rounded down - and up to byte boundaries. */ -- int bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT; -- int bound_end = (((end + TARGET_CHAR_BIT - 1) -- / TARGET_CHAR_BIT) -- * TARGET_CHAR_BIT); -+ LONGEST bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT; -+ LONGEST bound_end = (((end + TARGET_CHAR_BIT - 1) -+ / TARGET_CHAR_BIT) -+ * TARGET_CHAR_BIT); - - /* current bit offset within the structure */ -- int offset; -+ LONGEST offset; - - /* The index in ops of the opcode we're considering. */ - int op; -@@ -1408,7 +1409,7 @@ gen_bitfield_ref (struct expression *exp - static void - gen_primitive_field (struct expression *exp, - struct agent_expr *ax, struct axs_value *value, -- int offset, int fieldno, struct type *type) -+ LONGEST offset, int fieldno, struct type *type) - { - /* Is this a bitfield? */ - if (TYPE_FIELD_PACKED (type, fieldno)) -@@ -1433,7 +1434,7 @@ gen_primitive_field (struct expression * - static int - gen_struct_ref_recursive (struct expression *exp, struct agent_expr *ax, - struct axs_value *value, -- char *field, int offset, struct type *type) -+ char *field, LONGEST offset, struct type *type) - { - int i, rslt; - int nbases = TYPE_N_BASECLASSES (type); -diff -Naurp insight-7.10.50.20160208.orig/gdb/ax-general.c insight-7.10.50.20160208.new/gdb/ax-general.c ---- insight-7.10.50.20160208.orig/gdb/ax-general.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ax-general.c 2016-02-09 14:35:03.833311356 +0100 -@@ -199,7 +199,7 @@ ax_zero_ext (struct agent_expr *x, int n - - /* Append a trace_quick instruction to EXPR, to record N bytes. */ - void --ax_trace_quick (struct agent_expr *x, int n) -+ax_trace_quick (struct agent_expr *x, LONGEST n) - { - /* N must fit in a byte. */ - if (n < 0 || n > 255) -diff -Naurp insight-7.10.50.20160208.orig/gdb/ax.h insight-7.10.50.20160208.new/gdb/ax.h ---- insight-7.10.50.20160208.orig/gdb/ax.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ax.h 2016-02-09 14:35:03.833311356 +0100 -@@ -210,7 +210,7 @@ extern void ax_ext (struct agent_expr *E - extern void ax_zero_ext (struct agent_expr *EXPR, int N); - - /* Append a trace_quick instruction to EXPR, to record N bytes. */ --extern void ax_trace_quick (struct agent_expr *EXPR, int N); -+extern void ax_trace_quick (struct agent_expr *EXPR, LONGEST N); - - /* Append a goto op to EXPR. OP is the actual op (must be aop_goto or - aop_if_goto). We assume we don't know the target offset yet, -diff -Naurp insight-7.10.50.20160208.orig/gdb/breakpoint.c insight-7.10.50.20160208.new/gdb/breakpoint.c ---- insight-7.10.50.20160208.orig/gdb/breakpoint.c 2016-02-09 14:33:17.183317610 +0100 -+++ insight-7.10.50.20160208.new/gdb/breakpoint.c 2016-02-09 14:35:03.837311393 +0100 -@@ -2244,9 +2244,9 @@ should_be_inserted (struct bp_location * - { - fprintf_unfiltered (gdb_stdlog, - "infrun: stepping past non-steppable watchpoint. " -- "skipping watchpoint at %s:%d\n", -+ "skipping watchpoint at %s:%s\n", - paddress (bl->gdbarch, bl->address), -- bl->length); -+ plongest (bl->length)); - } - return 0; - } -@@ -7145,7 +7145,7 @@ breakpoint_address_match (struct address - - static int - breakpoint_address_match_range (struct address_space *aspace1, CORE_ADDR addr1, -- int len1, struct address_space *aspace2, -+ LONGEST len1, struct address_space *aspace2, - CORE_ADDR addr2) - { - return ((gdbarch_has_global_breakpoints (target_gdbarch ()) -@@ -11502,7 +11502,7 @@ can_use_hardware_watchpoint (struct valu - && TYPE_CODE (vtype) != TYPE_CODE_ARRAY)) - { - CORE_ADDR vaddr = value_address (v); -- int len; -+ LONGEST len; - int num_regs; - - len = (target_exact_watchpoints -diff -Naurp insight-7.10.50.20160208.orig/gdb/breakpoint.h insight-7.10.50.20160208.new/gdb/breakpoint.h ---- insight-7.10.50.20160208.orig/gdb/breakpoint.h 2016-02-09 14:33:16.973315663 +0100 -+++ insight-7.10.50.20160208.new/gdb/breakpoint.h 2016-02-09 14:35:03.839311412 +0100 -@@ -237,7 +237,7 @@ struct bp_target_info - - /* If this is a ranged breakpoint, then this field contains the - length of the range that will be watched for execution. */ -- int length; -+ LONGEST length; - - /* If the breakpoint lives in memory and reading that memory would - give back the breakpoint, instead of the original contents, then -@@ -413,7 +413,7 @@ struct bp_location - /* For hardware watchpoints, the size of the memory region being - watched. For hardware ranged breakpoints, the size of the - breakpoint range. */ -- int length; -+ LONGEST length; - - /* Type of hardware watchpoint. */ - enum target_hw_bp_type watchpoint_type; -diff -Naurp insight-7.10.50.20160208.orig/gdb/c-lang.c insight-7.10.50.20160208.new/gdb/c-lang.c ---- insight-7.10.50.20160208.orig/gdb/c-lang.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/c-lang.c 2016-02-09 14:35:03.839311412 +0100 -@@ -186,7 +186,7 @@ c_printchar (int c, struct type *type, s - - void - c_printstr (struct ui_file *stream, struct type *type, -- const gdb_byte *string, unsigned int length, -+ const gdb_byte *string, ULONGEST length, - const char *user_encoding, int force_ellipses, - const struct value_print_options *options) - { -@@ -675,7 +675,7 @@ evaluate_subexp_c (struct type *expect_t - } - else - { -- int i; -+ LONGEST i; - - /* Write the terminating character. */ - for (i = 0; i < TYPE_LENGTH (type); ++i) -@@ -684,7 +684,7 @@ evaluate_subexp_c (struct type *expect_t - if (satisfy_expected) - { - LONGEST low_bound, high_bound; -- int element_size = TYPE_LENGTH (type); -+ LONGEST element_size = TYPE_LENGTH (type); - - if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type), - &low_bound, &high_bound) < 0) -diff -Naurp insight-7.10.50.20160208.orig/gdb/c-lang.h insight-7.10.50.20160208.new/gdb/c-lang.h ---- insight-7.10.50.20160208.orig/gdb/c-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/c-lang.h 2016-02-09 14:35:03.840311421 +0100 -@@ -77,7 +77,7 @@ extern void c_print_typedef (struct type - struct ui_file *); - - extern void c_val_print (struct type *, const gdb_byte *, -- int, CORE_ADDR, -+ LONGEST, CORE_ADDR, - struct ui_file *, int, - const struct value *, - const struct value_print_options *); -@@ -97,7 +97,7 @@ extern void c_printchar (int, struct typ - extern void c_printstr (struct ui_file * stream, - struct type *elttype, - const gdb_byte *string, -- unsigned int length, -+ ULONGEST length, - const char *user_encoding, - int force_ellipses, - const struct value_print_options *options); -@@ -123,14 +123,14 @@ extern void cp_print_class_member (const - struct ui_file *, char *); - - extern void cp_print_value_fields (struct type *, struct type *, -- const gdb_byte *, int, CORE_ADDR, -+ const gdb_byte *, LONGEST, CORE_ADDR, - struct ui_file *, int, - const struct value *, - const struct value_print_options *, - struct type **, int); - - extern void cp_print_value_fields_rtti (struct type *, -- const gdb_byte *, int, CORE_ADDR, -+ const gdb_byte *, LONGEST, CORE_ADDR, - struct ui_file *, int, - const struct value *, - const struct value_print_options *, -diff -Naurp insight-7.10.50.20160208.orig/gdb/compile/compile-c-support.c insight-7.10.50.20160208.new/gdb/compile/compile-c-support.c ---- insight-7.10.50.20160208.orig/gdb/compile/compile-c-support.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/compile/compile-c-support.c 2016-02-09 14:35:03.840311421 +0100 -@@ -299,11 +299,11 @@ generate_register_struct (struct ui_file - - default: - fprintf_unfiltered (stream, -- " unsigned char %s[%d]" -+ " unsigned char %s[%s]" - " __attribute__((__aligned__(" - "__BIGGEST_ALIGNMENT__)))", - regname, -- TYPE_LENGTH (regtype)); -+ pulongest (TYPE_LENGTH (regtype))); - } - fputs_unfiltered (";\n", stream); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/cp-abi.c insight-7.10.50.20160208.new/gdb/cp-abi.c ---- insight-7.10.50.20160208.orig/gdb/cp-abi.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/cp-abi.c 2016-02-09 14:35:03.841311430 +0100 -@@ -64,12 +64,12 @@ is_operator_name (const char *name) - return (*current_cp_abi.is_operator_name) (name); - } - --int -+LONGEST - baseclass_offset (struct type *type, int index, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - const struct value *val) - { -- int res = 0; -+ LONGEST res = 0; - - gdb_assert (current_cp_abi.baseclass_offset != NULL); - -@@ -96,7 +96,7 @@ baseclass_offset (struct type *type, int - struct value * - value_virtual_fn_field (struct value **arg1p, - struct fn_field *f, int j, -- struct type *type, int offset) -+ struct type *type, LONGEST offset) - { - if ((current_cp_abi.virtual_fn_field) == NULL) - return NULL; -@@ -106,7 +106,7 @@ value_virtual_fn_field (struct value **a - - struct type * - value_rtti_type (struct value *v, int *full, -- int *top, int *using_enc) -+ LONGEST *top, int *using_enc) - { - struct type *ret = NULL; - -diff -Naurp insight-7.10.50.20160208.orig/gdb/cp-abi.h insight-7.10.50.20160208.new/gdb/cp-abi.h ---- insight-7.10.50.20160208.orig/gdb/cp-abi.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/cp-abi.h 2016-02-09 14:35:03.841311430 +0100 -@@ -108,7 +108,7 @@ extern struct value *value_virtual_fn_fi - struct fn_field *f, - int j, - struct type *type, -- int offset); -+ LONGEST offset); - - - /* Try to find the run-time type of VALUE, using C++ run-time type -@@ -135,7 +135,7 @@ extern struct value *value_virtual_fn_fi - FULL, TOP, and USING_ENC can each be zero, in which case we don't - provide the corresponding piece of information. */ - extern struct type *value_rtti_type (struct value *value, -- int *full, int *top, -+ int *full, LONGEST *top, - int *using_enc); - - /* Compute the offset of the baseclass which is the INDEXth baseclass -@@ -144,11 +144,11 @@ extern struct type *value_rtti_type (str - contents of VAL. The result is the offset of the baseclass value - relative to (the address of)(ARG) + OFFSET. */ - --extern int baseclass_offset (struct type *type, -- int index, const gdb_byte *valaddr, -- int embedded_offset, -- CORE_ADDR address, -- const struct value *val); -+extern LONGEST baseclass_offset (struct type *type, -+ int index, const gdb_byte *valaddr, -+ LONGEST embedded_offset, -+ CORE_ADDR address, -+ const struct value *val); - - /* Describe the target of a pointer to method. CONTENTS is the byte - pattern representing the pointer to method. TYPE is the pointer to -@@ -227,12 +227,13 @@ struct cp_abi_ops - struct value *(*virtual_fn_field) (struct value **arg1p, - struct fn_field * f, - int j, struct type * type, -- int offset); -+ LONGEST offset); - struct type *(*rtti_type) (struct value *v, int *full, -- int *top, int *using_enc); -- int (*baseclass_offset) (struct type *type, int index, -- const bfd_byte *valaddr, int embedded_offset, -- CORE_ADDR address, const struct value *val); -+ LONGEST *top, int *using_enc); -+ LONGEST (*baseclass_offset) (struct type *type, int index, -+ const bfd_byte *valaddr, -+ LONGEST embedded_offset, CORE_ADDR address, -+ const struct value *val); - void (*print_method_ptr) (const gdb_byte *contents, - struct type *type, - struct ui_file *stream); -diff -Naurp insight-7.10.50.20160208.orig/gdb/cp-valprint.c insight-7.10.50.20160208.new/gdb/cp-valprint.c ---- insight-7.10.50.20160208.orig/gdb/cp-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/cp-valprint.c 2016-02-09 14:35:03.842311440 +0100 -@@ -80,7 +80,7 @@ static void cp_print_static_field (struc - const struct value_print_options *); - - static void cp_print_value (struct type *, struct type *, -- const gdb_byte *, int, -+ const gdb_byte *, LONGEST, - CORE_ADDR, struct ui_file *, - int, const struct value *, - const struct value_print_options *, -@@ -154,7 +154,7 @@ cp_is_vtbl_member (struct type *type) - - void - cp_print_value_fields (struct type *type, struct type *real_type, -- const gdb_byte *valaddr, int offset, -+ const gdb_byte *valaddr, LONGEST offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, const struct value *val, - const struct value_print_options *options, -@@ -334,7 +334,7 @@ cp_print_value_fields (struct type *type - } - else if (i == vptr_fieldno && type == vptr_basetype) - { -- int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; -+ LONGEST i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; - struct type *i_type = TYPE_FIELD_TYPE (type, i); - - if (valprint_check_validity (stream, i_type, i_offset, val)) -@@ -417,7 +417,7 @@ cp_print_value_fields (struct type *type - - void - cp_print_value_fields_rtti (struct type *type, -- const gdb_byte *valaddr, int offset, -+ const gdb_byte *valaddr, LONGEST offset, - CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, -@@ -434,7 +434,8 @@ cp_print_value_fields_rtti (struct type - TARGET_CHAR_BIT * TYPE_LENGTH (type))) - { - struct value *value; -- int full, top, using_enc; -+ int full, using_enc; -+ LONGEST top; - - /* Ugh, we have to convert back to a value here. */ - value = value_from_contents_and_address (type, valaddr + offset, -@@ -459,7 +460,7 @@ cp_print_value_fields_rtti (struct type - - static void - cp_print_value (struct type *type, struct type *real_type, -- const gdb_byte *valaddr, int offset, -+ const gdb_byte *valaddr, LONGEST offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, const struct value *val, - const struct value_print_options *options, -@@ -469,7 +470,7 @@ cp_print_value (struct type *type, struc - = (struct type **) obstack_next_free (&dont_print_vb_obstack); - struct obstack tmp_obstack = dont_print_vb_obstack; - int i, n_baseclasses = TYPE_N_BASECLASSES (type); -- int thisoffset; -+ LONGEST thisoffset; - struct type *thistype; - - if (dont_print_vb == 0) -@@ -483,7 +484,7 @@ cp_print_value (struct type *type, struc - - for (i = 0; i < n_baseclasses; i++) - { -- int boffset = 0; -+ LONGEST boffset = 0; - int skip = 0; - struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i)); - const char *basename = TYPE_NAME (baseclass); -diff -Naurp insight-7.10.50.20160208.orig/gdb/c-valprint.c insight-7.10.50.20160208.new/gdb/c-valprint.c ---- insight-7.10.50.20160208.orig/gdb/c-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/c-valprint.c 2016-02-09 14:35:03.842311440 +0100 -@@ -242,7 +242,7 @@ c_val_print_array (struct type *type, co - if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0) - { - LONGEST low_bound, high_bound; -- int eltlen, len; -+ LONGEST eltlen, len; - struct gdbarch *gdbarch = get_type_arch (type); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - unsigned int i = 0; /* Number of characters printed. */ -@@ -316,8 +316,8 @@ c_val_print_array (struct type *type, co - if (cp_is_vtbl_ptr_type (elttype)) - { - i = 1; -- fprintf_filtered (stream, _("%d vtable entries"), -- len - 1); -+ fprintf_filtered (stream, _("%s vtable entries"), -+ plongest (len - 1)); - } - else - { -@@ -394,7 +394,7 @@ c_val_print_struct (struct type *type, c - -fvtable_thunks. (Otherwise, look under - TYPE_CODE_PTR.) */ - struct gdbarch *gdbarch = get_type_arch (type); -- int offset = (embedded_offset -+ LONGEST offset = (embedded_offset - + TYPE_FIELD_BITPOS (type, - VTBL_FNADDR_OFFSET) / 8); - struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET); -@@ -493,7 +493,7 @@ c_val_print_memberptr (struct type *type - - void - c_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *original_value, - const struct value_print_options *options) -@@ -565,7 +565,8 @@ c_value_print (struct value *val, struct - const struct value_print_options *options) - { - struct type *type, *real_type, *val_type; -- int full, top, using_enc; -+ int full, using_enc; -+ LONGEST top; - struct value_print_options opts = *options; - - opts.deref_ref = 1; -diff -Naurp insight-7.10.50.20160208.orig/gdb/d-lang.h insight-7.10.50.20160208.new/gdb/d-lang.h ---- insight-7.10.50.20160208.orig/gdb/d-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/d-lang.h 2016-02-09 14:35:03.842311440 +0100 -@@ -81,7 +81,7 @@ extern struct block_symbol d_lookup_nest - /* Defined in d-valprint.c */ - - extern void d_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options); -diff -Naurp insight-7.10.50.20160208.orig/gdb/doublest.c insight-7.10.50.20160208.new/gdb/doublest.c ---- insight-7.10.50.20160208.orig/gdb/doublest.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/doublest.c 2016-02-09 14:35:03.843311449 +0100 -@@ -765,7 +765,7 @@ floatformat_from_doublest (const struct - but not passed on by GDB. This should be fixed. */ - - static const struct floatformat * --floatformat_from_length (struct gdbarch *gdbarch, int len) -+floatformat_from_length (struct gdbarch *gdbarch, LONGEST len) - { - const struct floatformat *format; - -@@ -793,8 +793,8 @@ floatformat_from_length (struct gdbarch - else - format = NULL; - if (format == NULL) -- error (_("Unrecognized %d-bit floating-point type."), -- len * TARGET_CHAR_BIT); -+ error (_("Unrecognized %s-bit floating-point type."), -+ plongest (len * TARGET_CHAR_BIT)); - return format; - } - -diff -Naurp insight-7.10.50.20160208.orig/gdb/d-valprint.c insight-7.10.50.20160208.new/gdb/d-valprint.c ---- insight-7.10.50.20160208.orig/gdb/d-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/d-valprint.c 2016-02-09 14:35:03.843311449 +0100 -@@ -29,7 +29,7 @@ - - static int - dynamic_array_type (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options) -@@ -73,9 +73,9 @@ dynamic_array_type (struct type *type, c - - /* Implements the la_val_print routine for language D. */ - void --d_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, -- CORE_ADDR address, struct ui_file *stream, int recurse, -- const struct value *val, -+d_val_print (struct type *type, const gdb_byte *valaddr, -+ LONGEST embedded_offset, CORE_ADDR address, -+ struct ui_file *stream, int recurse, const struct value *val, - const struct value_print_options *options) - { - int ret; -diff -Naurp insight-7.10.50.20160208.orig/gdb/dwarf2loc.c insight-7.10.50.20160208.new/gdb/dwarf2loc.c ---- insight-7.10.50.20160208.orig/gdb/dwarf2loc.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/dwarf2loc.c 2016-02-09 14:35:03.845311468 +0100 -@@ -1632,19 +1632,19 @@ insert_bits (unsigned int datum, - BITS_BIG_ENDIAN is taken directly from gdbarch. */ - - static void --copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits, -- const gdb_byte *source, unsigned int source_offset_bits, -- unsigned int bit_count, -+copy_bitwise (gdb_byte *dest, ULONGEST dest_offset_bits, -+ const gdb_byte *source, ULONGEST source_offset, -+ ULONGEST bit_count, - int bits_big_endian) - { -- unsigned int dest_avail; -+ unsigned int dest_avail, source_offset_bits; - int datum; - - /* Reduce everything to byte-size pieces. */ - dest += dest_offset_bits / 8; - dest_offset_bits %= 8; -- source += source_offset_bits / 8; -- source_offset_bits %= 8; -+ source += source_offset / 8; -+ source_offset_bits = source_offset % 8; - - dest_avail = 8 - dest_offset_bits % 8; - -@@ -1682,13 +1682,13 @@ static void - read_pieced_value (struct value *v) - { - int i; -- long offset = 0; -+ LONGEST offset = 0; - ULONGEST bits_to_skip; - gdb_byte *contents; - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (v); - struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v)); -- size_t type_len; -+ ULONGEST type_len; - size_t buffer_size = 0; - gdb_byte *buffer = NULL; - struct cleanup *cleanup; -@@ -1715,8 +1715,8 @@ read_pieced_value (struct value *v) - for (i = 0; i < c->n_pieces && offset < type_len; i++) - { - struct dwarf_expr_piece *p = &c->pieces[i]; -- size_t this_size, this_size_bits; -- long dest_offset_bits, source_offset_bits, source_offset; -+ ULONGEST this_size, this_size_bits; -+ LONGEST dest_offset_bits, source_offset_bits, source_offset; - const gdb_byte *intermediate_buffer; - - /* Compute size, source, and destination offsets for copying, in -@@ -1856,13 +1856,13 @@ static void - write_pieced_value (struct value *to, struct value *from) - { - int i; -- long offset = 0; -+ LONGEST offset = 0; - ULONGEST bits_to_skip; - const gdb_byte *contents; - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (to); - struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to)); -- size_t type_len; -+ ULONGEST type_len; - size_t buffer_size = 0; - gdb_byte *buffer = NULL; - struct cleanup *cleanup; -@@ -1890,8 +1890,8 @@ write_pieced_value (struct value *to, st - for (i = 0; i < c->n_pieces && offset < type_len; i++) - { - struct dwarf_expr_piece *p = &c->pieces[i]; -- size_t this_size_bits, this_size; -- long dest_offset_bits, source_offset_bits, dest_offset, source_offset; -+ ULONGEST this_size_bits, this_size; -+ LONGEST dest_offset_bits, source_offset_bits, dest_offset, source_offset; - int need_bitwise; - const gdb_byte *source_buffer; - -@@ -2010,8 +2010,8 @@ write_pieced_value (struct value *to, st - a synthetic pointer. */ - - static int --check_pieced_synthetic_pointer (const struct value *value, int bit_offset, -- int bit_length) -+check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset, -+ LONGEST bit_length) - { - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (value); -@@ -2024,7 +2024,7 @@ check_pieced_synthetic_pointer (const st - for (i = 0; i < c->n_pieces && bit_length > 0; i++) - { - struct dwarf_expr_piece *p = &c->pieces[i]; -- size_t this_size_bits = p->size; -+ ULONGEST this_size_bits = p->size; - - if (bit_offset > 0) - { -@@ -2066,9 +2066,10 @@ indirect_pieced_value (struct value *val - struct type *type; - struct frame_info *frame; - struct dwarf2_locexpr_baton baton; -- int i, bit_offset, bit_length; -+ int i; -+ LONGEST bit_length; - struct dwarf_expr_piece *piece = NULL; -- LONGEST byte_offset; -+ LONGEST byte_offset, bit_offset; - enum bfd_endian byte_order; - - type = check_typedef (value_type (value)); -@@ -2083,7 +2084,7 @@ indirect_pieced_value (struct value *val - for (i = 0; i < c->n_pieces && bit_length > 0; i++) - { - struct dwarf_expr_piece *p = &c->pieces[i]; -- size_t this_size_bits = p->size; -+ ULONGEST this_size_bits = p->size; - - if (bit_offset > 0) - { -@@ -2379,7 +2380,7 @@ dwarf2_evaluate_loc_desc_full (struct ty - struct value *value = dwarf_expr_fetch (ctx, 0); - gdb_byte *contents; - const gdb_byte *val_bytes; -- size_t n = TYPE_LENGTH (value_type (value)); -+ ULONGEST n = TYPE_LENGTH (value_type (value)); - - if (byte_offset + TYPE_LENGTH (type) > n) - invalid_synthetic_pointer (); -diff -Naurp insight-7.10.50.20160208.orig/gdb/dwarf2read.c insight-7.10.50.20160208.new/gdb/dwarf2read.c ---- insight-7.10.50.20160208.orig/gdb/dwarf2read.c 2016-02-09 14:33:17.277318482 +0100 -+++ insight-7.10.50.20160208.new/gdb/dwarf2read.c 2016-02-09 14:35:03.850311514 +0100 -@@ -1915,12 +1915,12 @@ dwarf2_complex_location_expr_complaint ( - } - - static void --dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2, -- int arg3) -+dwarf2_const_value_length_mismatch_complaint (const char *arg1, LONGEST arg2, -+ LONGEST arg3) - { - complaint (&symfile_complaints, -- _("const value length mismatch for '%s', got %d, expected %d"), -- arg1, arg2, arg3); -+ _("const value length mismatch for '%s', got %s, expected %s"), -+ arg1, plongest (arg2), plongest (arg3)); - } - - static void -@@ -12553,8 +12553,8 @@ dwarf2_add_field (struct field_info *fip - object, and then subtract off the number of bits of - the field itself. The result is the bit offset of - the LSB of the field. */ -- int anonymous_size; -- int bit_offset = DW_UNSND (attr); -+ LONGEST anonymous_size; -+ LONGEST bit_offset = DW_UNSND (attr); - - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr) -diff -Naurp insight-7.10.50.20160208.orig/gdb/eval.c insight-7.10.50.20160208.new/gdb/eval.c ---- insight-7.10.50.20160208.orig/gdb/eval.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/eval.c 2016-02-09 14:35:03.852311533 +0100 -@@ -317,7 +317,8 @@ evaluate_struct_tuple (struct value *str - while (--nargs >= 0) - { - struct value *val = NULL; -- int bitpos, bitsize; -+ LONGEST bitpos; -+ int bitsize; - bfd_byte *addr; - - fieldno++; -@@ -378,7 +379,7 @@ init_array_element (struct value *array, - enum noside noside, LONGEST low_bound, LONGEST high_bound) - { - LONGEST index; -- int element_size = TYPE_LENGTH (value_type (element)); -+ LONGEST element_size = TYPE_LENGTH (value_type (element)); - - if (exp->elts[*pos].opcode == BINOP_COMMA) - { -@@ -526,11 +527,11 @@ binop_promote (const struct language_def - /* FIXME: Also mixed integral/booleans, with result an integer. */ - { - const struct builtin_type *builtin = builtin_type (gdbarch); -- unsigned int promoted_len1 = TYPE_LENGTH (type1); -- unsigned int promoted_len2 = TYPE_LENGTH (type2); -+ ULONGEST promoted_len1 = TYPE_LENGTH (type1); -+ ULONGEST promoted_len2 = TYPE_LENGTH (type2); - int is_unsigned1 = TYPE_UNSIGNED (type1); - int is_unsigned2 = TYPE_UNSIGNED (type2); -- unsigned int result_len; -+ ULONGEST result_len; - int unsigned_operation; - - /* Determine type length and signedness after promotion for -@@ -712,7 +713,7 @@ evaluate_subexp_standard (struct type *e - struct value **argvec; - int code; - int ix; -- long mem_offset; -+ LONGEST mem_offset; - struct type **arg_types; - int save_pos1; - struct symbol *function = NULL; -@@ -891,7 +892,7 @@ evaluate_subexp_standard (struct type *e - struct type *range_type = TYPE_INDEX_TYPE (type); - struct type *element_type = TYPE_TARGET_TYPE (type); - struct value *array = allocate_value (expect_type); -- int element_size = TYPE_LENGTH (check_typedef (element_type)); -+ LONGEST element_size = TYPE_LENGTH (check_typedef (element_type)); - LONGEST low_bound, high_bound, index; - - if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) -@@ -1900,7 +1901,8 @@ evaluate_subexp_standard (struct type *e - { - struct type *type = value_type (arg1); - struct type *real_type; -- int full, top, using_enc; -+ int full, using_enc; -+ LONGEST top; - struct value_print_options opts; - - get_user_print_options (&opts); -diff -Naurp insight-7.10.50.20160208.orig/gdb/extension-priv.h insight-7.10.50.20160208.new/gdb/extension-priv.h ---- insight-7.10.50.20160208.orig/gdb/extension-priv.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/extension-priv.h 2016-02-09 14:35:03.852311533 +0100 -@@ -181,7 +181,7 @@ struct extension_language_ops - enum ext_lang_rc (*apply_val_pretty_printer) - (const struct extension_language_defn *, - struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, const struct value_print_options *options, - const struct language_defn *language); -diff -Naurp insight-7.10.50.20160208.orig/gdb/findvar.c insight-7.10.50.20160208.new/gdb/findvar.c ---- insight-7.10.50.20160208.orig/gdb/findvar.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/findvar.c 2016-02-09 14:35:03.853311542 +0100 -@@ -801,7 +801,7 @@ struct value * - default_value_from_register (struct gdbarch *gdbarch, struct type *type, - int regnum, struct frame_id frame_id) - { -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - struct value *value = allocate_value (type); - - VALUE_LVAL (value) = lval_register; -@@ -834,10 +834,10 @@ void - read_frame_register_value (struct value *value, struct frame_info *frame) - { - struct gdbarch *gdbarch = get_frame_arch (frame); -- int offset = 0; -- int reg_offset = value_offset (value); -+ LONGEST offset = 0; -+ LONGEST reg_offset = value_offset (value); - int regnum = VALUE_REGNUM (value); -- int len = type_length_units (check_typedef (value_type (value))); -+ LONGEST len = type_length_units (check_typedef (value_type (value))); - - gdb_assert (VALUE_LVAL (value) == lval_register); - -@@ -852,7 +852,7 @@ read_frame_register_value (struct value - while (len > 0) - { - struct value *regval = get_frame_register_value (frame, regnum); -- int reg_len = type_length_units (value_type (regval)) - reg_offset; -+ LONGEST reg_len = type_length_units (value_type (regval)) - reg_offset; - - /* If the register length is larger than the number of bytes - remaining to copy, then only copy the appropriate bytes. */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-lang.c insight-7.10.50.20160208.new/gdb/f-lang.c ---- insight-7.10.50.20160208.orig/gdb/f-lang.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-lang.c 2016-02-09 14:35:03.853311542 +0100 -@@ -103,7 +103,7 @@ f_printchar (int c, struct type *type, s - - static void - f_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, -- unsigned int length, const char *encoding, int force_ellipses, -+ ULONGEST length, const char *encoding, int force_ellipses, - const struct value_print_options *options) - { - const char *type_encoding = f_get_encoding (type); -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-lang.h insight-7.10.50.20160208.new/gdb/f-lang.h ---- insight-7.10.50.20160208.orig/gdb/f-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-lang.h 2016-02-09 14:35:03.853311542 +0100 -@@ -30,7 +30,7 @@ extern void f_error (char *); /* Defined - extern void f_print_type (struct type *, const char *, struct ui_file *, int, - int, const struct type_print_options *); - --extern void f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, -+extern void f_val_print (struct type *, const gdb_byte *, LONGEST, CORE_ADDR, - struct ui_file *, int, - const struct value *, - const struct value_print_options *); -diff -Naurp insight-7.10.50.20160208.orig/gdb/frame.c insight-7.10.50.20160208.new/gdb/frame.c ---- insight-7.10.50.20160208.orig/gdb/frame.c 2016-01-15 12:47:11.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/frame.c 2016-02-09 14:35:03.854311551 +0100 -@@ -1272,7 +1272,7 @@ deprecated_frame_register_read (struct f - - int - get_frame_register_bytes (struct frame_info *frame, int regnum, -- CORE_ADDR offset, int len, gdb_byte *myaddr, -+ CORE_ADDR offset, LONGEST len, gdb_byte *myaddr, - int *optimizedp, int *unavailablep) - { - struct gdbarch *gdbarch = get_frame_arch (frame); -@@ -1301,7 +1301,7 @@ get_frame_register_bytes (struct frame_i - } - if (len > maxsize) - error (_("Bad debug information detected: " -- "Attempt to read %d bytes from registers."), len); -+ "Attempt to read %s bytes from registers."), plongest (len)); - - /* Copy the data. */ - while (len > 0) -diff -Naurp insight-7.10.50.20160208.orig/gdb/frame.h insight-7.10.50.20160208.new/gdb/frame.h ---- insight-7.10.50.20160208.orig/gdb/frame.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/frame.h 2016-02-09 14:35:03.855311561 +0100 -@@ -585,7 +585,7 @@ extern void put_frame_register (struct f - contents are optimized out or unavailable, set *OPTIMIZEDP, - *UNAVAILABLEP accordingly. */ - extern int get_frame_register_bytes (struct frame_info *frame, int regnum, -- CORE_ADDR offset, int len, -+ CORE_ADDR offset, LONGEST len, - gdb_byte *myaddr, - int *optimizedp, int *unavailablep); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-valprint.c insight-7.10.50.20160208.new/gdb/f-valprint.c ---- insight-7.10.50.20160208.orig/gdb/f-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-valprint.c 2016-02-09 14:35:03.855311561 +0100 -@@ -40,7 +40,7 @@ static void f77_create_arrayprint_offset - struct ui_file *); - static void f77_get_dynamic_length_of_aggregate (struct type *); - --int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2]; -+LONGEST f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2]; - - /* Array which holds offsets to be applied to get a row's elements - for a given array. Array also holds the size of each subarray. */ -@@ -84,8 +84,8 @@ f77_get_upperbound (struct type *type) - static void - f77_get_dynamic_length_of_aggregate (struct type *type) - { -- int upper_bound = -1; -- int lower_bound = 1; -+ LONGEST upper_bound = -1; -+ LONGEST lower_bound = 1; - - /* Recursively go all the way down into a possibly multi-dimensional - F77 array and get the bounds. For simple arrays, this is pretty -@@ -158,13 +158,13 @@ f77_create_arrayprint_offset_tbl (struct - static void - f77_print_array_1 (int nss, int ndimensions, struct type *type, - const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, - int *elts) - { -- int i; -+ LONGEST i; - - if (nss != ndimensions) - { -@@ -209,7 +209,7 @@ f77_print_array_1 (int nss, int ndimensi - - static void - f77_print_array (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, -+ LONGEST embedded_offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, - const struct value *val, -@@ -252,8 +252,9 @@ static const struct generic_val_print_de - function; they are identical. */ - - void --f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, -- CORE_ADDR address, struct ui_file *stream, int recurse, -+f_val_print (struct type *type, const gdb_byte *valaddr, -+ LONGEST embedded_offset, CORE_ADDR address, -+ struct ui_file *stream, int recurse, - const struct value *original_value, - const struct value_print_options *options) - { -diff -Naurp insight-7.10.50.20160208.orig/gdb/gdbtypes.c insight-7.10.50.20160208.new/gdb/gdbtypes.c ---- insight-7.10.50.20160208.orig/gdb/gdbtypes.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/gdbtypes.c 2016-02-09 14:35:03.856311570 +0100 -@@ -2653,7 +2653,7 @@ allocate_gnat_aux_type (struct type *typ - least as long as OBJFILE. */ - - struct type * --init_type (enum type_code code, int length, int flags, -+init_type (enum type_code code, LONGEST length, int flags, - const char *name, struct objfile *objfile) - { - struct type *type; -@@ -2893,8 +2893,8 @@ is_public_ancestor (struct type *base, s - - static int - is_unique_ancestor_worker (struct type *base, struct type *dclass, -- int *offset, -- const gdb_byte *valaddr, int embedded_offset, -+ LONGEST *offset, -+ const gdb_byte *valaddr, LONGEST embedded_offset, - CORE_ADDR address, struct value *val) - { - int i, count = 0; -@@ -2905,7 +2905,7 @@ is_unique_ancestor_worker (struct type * - for (i = 0; i < TYPE_N_BASECLASSES (dclass) && count < 2; ++i) - { - struct type *iter; -- int this_offset; -+ LONGEST this_offset; - - iter = check_typedef (TYPE_BASECLASS (dclass, i)); - -@@ -2946,7 +2946,7 @@ is_unique_ancestor_worker (struct type * - int - is_unique_ancestor (struct type *base, struct value *val) - { -- int offset = -1; -+ LONGEST offset = -1; - - return is_unique_ancestor_worker (base, value_type (val), &offset, - value_contents_for_printing (val), -@@ -4134,7 +4134,7 @@ recursive_dump_type (struct type *type, - break; - } - puts_filtered ("\n"); -- printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type)); -+ printfi_filtered (spaces, "length %s\n", pulongest (TYPE_LENGTH (type))); - if (TYPE_OBJFILE_OWNED (type)) - { - printfi_filtered (spaces, "objfile "); -@@ -4262,8 +4262,8 @@ recursive_dump_type (struct type *type, - idx, plongest (TYPE_FIELD_ENUMVAL (type, idx))); - else - printfi_filtered (spaces + 2, -- "[%d] bitpos %d bitsize %d type ", -- idx, TYPE_FIELD_BITPOS (type, idx), -+ "[%d] bitpos %s bitsize %d type ", -+ idx, plongest (TYPE_FIELD_BITPOS (type, idx)), - TYPE_FIELD_BITSIZE (type, idx)); - gdb_print_host_address (TYPE_FIELD_TYPE (type, idx), gdb_stdout); - printf_filtered (" name '%s' (", -@@ -4594,7 +4594,7 @@ copy_type (const struct type *type) - - struct type * - arch_type (struct gdbarch *gdbarch, -- enum type_code code, int length, char *name) -+ enum type_code code, LONGEST length, char *name) - { - struct type *type; - -diff -Naurp insight-7.10.50.20160208.orig/gdb/gdbtypes.h insight-7.10.50.20160208.new/gdb/gdbtypes.h ---- insight-7.10.50.20160208.orig/gdb/gdbtypes.h 2016-02-09 14:33:16.962315561 +0100 -+++ insight-7.10.50.20160208.new/gdb/gdbtypes.h 2016-02-09 14:35:03.857311579 +0100 -@@ -512,7 +512,7 @@ union field_location - gdbarch_bits_big_endian=0 targets, it is the bit offset to - the LSB. */ - -- int bitpos; -+ LONGEST bitpos; - - /* * Enum value. */ - LONGEST enumval; -@@ -806,7 +806,7 @@ struct type - type_length_units function should be used in order to get the length - expressed in target addressable memory units. */ - -- unsigned int length; -+ ULONGEST length; - - /* * Core type, shared by a group of qualified types. */ - -@@ -1677,11 +1677,12 @@ extern unsigned int type_length_units (s - - /* * Helper function to construct objfile-owned types. */ - --extern struct type *init_type (enum type_code, int, int, const char *, -+extern struct type *init_type (enum type_code, LONGEST, int, const char *, - struct objfile *); - - /* Helper functions to construct architecture-owned types. */ --extern struct type *arch_type (struct gdbarch *, enum type_code, int, char *); -+extern struct type *arch_type (struct gdbarch *, enum type_code, LONGEST, -+ char *); - extern struct type *arch_integer_type (struct gdbarch *, int, int, char *); - extern struct type *arch_character_type (struct gdbarch *, int, int, char *); - extern struct type *arch_boolean_type (struct gdbarch *, int, int, char *); -diff -Naurp insight-7.10.50.20160208.orig/gdb/gnu-v2-abi.c insight-7.10.50.20160208.new/gdb/gnu-v2-abi.c ---- insight-7.10.50.20160208.orig/gdb/gnu-v2-abi.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/gnu-v2-abi.c 2016-02-09 14:35:03.858311588 +0100 -@@ -82,7 +82,7 @@ gnuv2_is_operator_name (const char *name - TYPE is the type in which F is located. */ - static struct value * - gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j, -- struct type * type, int offset) -+ struct type *type, LONGEST offset) - { - struct value *arg1 = *arg1p; - struct type *type1 = check_typedef (value_type (arg1)); -@@ -183,7 +183,8 @@ gnuv2_virtual_fn_field (struct value **a - - - static struct type * --gnuv2_value_rtti_type (struct value *v, int *full, int *top, int *using_enc) -+gnuv2_value_rtti_type (struct value *v, int *full, LONGEST *top, -+ int *using_enc) - { - struct type *known_type; - struct type *rtti_type; -@@ -338,9 +339,9 @@ vb_match (struct type *type, int index, - target). The result is the offset of the baseclass value relative - to (the address of)(ARG) + OFFSET. */ - --static int -+static LONGEST - gnuv2_baseclass_offset (struct type *type, int index, -- const bfd_byte *valaddr, int embedded_offset, -+ const bfd_byte *valaddr, LONGEST embedded_offset, - CORE_ADDR address, const struct value *val) - { - struct type *basetype = TYPE_BASECLASS (type, index); -@@ -358,8 +359,8 @@ gnuv2_baseclass_offset (struct type *typ - if (vb_match (type, i, basetype)) - { - struct type *field_type; -- int field_offset; -- int field_length; -+ LONGEST field_offset; -+ LONGEST field_length; - CORE_ADDR addr; - - field_type = check_typedef (TYPE_FIELD_TYPE (type, i)); -@@ -383,7 +384,7 @@ gnuv2_baseclass_offset (struct type *typ - /* Don't go through baseclass_offset, as that wraps - exceptions, thus, inner exceptions would be wrapped more - than once. */ -- int boffset = -+ LONGEST boffset = - gnuv2_baseclass_offset (type, i, valaddr, - embedded_offset, address, val); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/gnu-v3-abi.c insight-7.10.50.20160208.new/gdb/gnu-v3-abi.c ---- insight-7.10.50.20160208.orig/gdb/gnu-v3-abi.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/gnu-v3-abi.c 2016-02-09 14:35:03.858311588 +0100 -@@ -108,7 +108,7 @@ build_gdb_vtable_type (struct gdbarch *a - { - struct type *t; - struct field *field_list, *field; -- int offset; -+ LONGEST offset; - - struct type *void_ptr_type - = builtin_type (arch)->builtin_data_ptr; -@@ -184,7 +184,7 @@ vtable_ptrdiff_type (struct gdbarch *gdb - /* Return the offset from the start of the imaginary `struct - gdb_gnu_v3_abi_vtable' object to the vtable's "address point" - (i.e., where objects' virtual table pointers point). */ --static int -+static LONGEST - vtable_address_point_offset (struct gdbarch *gdbarch) - { - struct type *vtable_type -@@ -286,7 +286,7 @@ gnuv3_get_vtable (struct gdbarch *gdbarc - - static struct type * - gnuv3_rtti_type (struct value *value, -- int *full_p, int *top_p, int *using_enc_p) -+ int *full_p, LONGEST *top_p, int *using_enc_p) - { - struct gdbarch *gdbarch; - struct type *values_type = check_typedef (value_type (value)); -@@ -411,7 +411,7 @@ gnuv3_get_virtual_fn (struct gdbarch *gd - static struct value * - gnuv3_virtual_fn_field (struct value **value_p, - struct fn_field *f, int j, -- struct type *vfn_base, int offset) -+ struct type *vfn_base, LONGEST offset) - { - struct type *values_type = check_typedef (value_type (*value_p)); - struct gdbarch *gdbarch; -@@ -441,16 +441,16 @@ gnuv3_virtual_fn_field (struct value **v - - -1 is returned on error. */ - --static int -+static LONGEST - gnuv3_baseclass_offset (struct type *type, int index, -- const bfd_byte *valaddr, int embedded_offset, -+ const bfd_byte *valaddr, LONGEST embedded_offset, - CORE_ADDR address, const struct value *val) - { - struct gdbarch *gdbarch; - struct type *ptr_type; - struct value *vtable; - struct value *vbase_array; -- long int cur_base_offset, base_offset; -+ LONGEST cur_base_offset, base_offset; - - /* Determine architecture. */ - gdbarch = get_type_arch (type); -@@ -474,7 +474,7 @@ gnuv3_baseclass_offset (struct type *typ - cur_base_offset = cur_base_offset + vtable_address_point_offset (gdbarch); - if ((- cur_base_offset) % TYPE_LENGTH (ptr_type) != 0) - error (_("Misaligned vbase offset.")); -- cur_base_offset = cur_base_offset / ((int) TYPE_LENGTH (ptr_type)); -+ cur_base_offset = cur_base_offset / ((LONGEST) TYPE_LENGTH (ptr_type)); - - vtable = gnuv3_get_vtable (gdbarch, type, address + embedded_offset); - gdb_assert (vtable != NULL); -@@ -518,7 +518,7 @@ gnuv3_find_method_in (struct type *domai - we're out of luck. */ - for (i = 0; i < TYPE_N_BASECLASSES (domain); i++) - { -- int pos; -+ LONGEST pos; - struct type *basetype; - - if (BASETYPE_VIA_VIRTUAL (domain, i)) -diff -Naurp insight-7.10.50.20160208.orig/gdb/go-lang.h insight-7.10.50.20160208.new/gdb/go-lang.h ---- insight-7.10.50.20160208.orig/gdb/go-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/go-lang.h 2016-02-09 14:35:03.859311598 +0100 -@@ -85,7 +85,7 @@ extern void go_print_type (struct type * - /* Defined in go-valprint.c. */ - - extern void go_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options); -diff -Naurp insight-7.10.50.20160208.orig/gdb/go-valprint.c insight-7.10.50.20160208.new/gdb/go-valprint.c ---- insight-7.10.50.20160208.orig/gdb/go-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/go-valprint.c 2016-02-09 14:35:03.859311598 +0100 -@@ -37,7 +37,7 @@ - - static void - print_go_string (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options) -@@ -86,9 +86,9 @@ print_go_string (struct type *type, cons - /* Implements the la_val_print routine for language Go. */ - - void --go_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, -- CORE_ADDR address, struct ui_file *stream, int recurse, -- const struct value *val, -+go_val_print (struct type *type, const gdb_byte *valaddr, -+ LONGEST embedded_offset, CORE_ADDR address, -+ struct ui_file *stream, int recurse, const struct value *val, - const struct value_print_options *options) - { - type = check_typedef (type); -diff -Naurp insight-7.10.50.20160208.orig/gdb/guile/guile-internal.h insight-7.10.50.20160208.new/gdb/guile/guile-internal.h ---- insight-7.10.50.20160208.orig/gdb/guile/guile-internal.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/guile/guile-internal.h 2016-02-09 14:35:03.859311598 +0100 -@@ -606,7 +606,7 @@ extern void gdbscm_preserve_values - extern enum ext_lang_rc gdbscm_apply_val_pretty_printer - (const struct extension_language_defn *, - struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -diff -Naurp insight-7.10.50.20160208.orig/gdb/guile/scm-pretty-print.c insight-7.10.50.20160208.new/gdb/guile/scm-pretty-print.c ---- insight-7.10.50.20160208.orig/gdb/guile/scm-pretty-print.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/guile/scm-pretty-print.c 2016-02-09 14:35:03.860311607 +0100 -@@ -958,7 +958,7 @@ ppscm_print_children (SCM printer, enum - enum ext_lang_rc - gdbscm_apply_val_pretty_printer (const struct extension_language_defn *extlang, - struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -diff -Naurp insight-7.10.50.20160208.orig/gdb/jv-lang.c insight-7.10.50.20160208.new/gdb/jv-lang.c ---- insight-7.10.50.20160208.orig/gdb/jv-lang.c 2016-02-09 14:33:16.964315579 +0100 -+++ insight-7.10.50.20160208.new/gdb/jv-lang.c 2016-02-09 14:35:03.860311607 +0100 -@@ -440,7 +440,7 @@ java_link_class_type (struct gdbarch *gd - for (i = TYPE_N_BASECLASSES (type); i < nfields; i++) - { - int accflags; -- int boffset; -+ LONGEST boffset; - - if (fields == NULL) - { -@@ -890,7 +890,7 @@ java_printchar (int c, struct type *type - static void - java_printstr (struct ui_file *stream, struct type *type, - const gdb_byte *string, -- unsigned int length, const char *encoding, int force_ellipses, -+ ULONGEST length, const char *encoding, int force_ellipses, - const struct value_print_options *options) - { - const char *type_encoding = java_get_encoding (type); -diff -Naurp insight-7.10.50.20160208.orig/gdb/jv-lang.h insight-7.10.50.20160208.new/gdb/jv-lang.h ---- insight-7.10.50.20160208.orig/gdb/jv-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/jv-lang.h 2016-02-09 14:35:03.861311616 +0100 -@@ -43,8 +43,8 @@ struct builtin_java_type - - extern const struct builtin_java_type *builtin_java_type (struct gdbarch *); - --extern void java_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, -- struct ui_file *, int, -+extern void java_val_print (struct type *, const gdb_byte *, LONGEST, -+ CORE_ADDR, struct ui_file *, int, - const struct value *, - const struct value_print_options *); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/jv-valprint.c insight-7.10.50.20160208.new/gdb/jv-valprint.c ---- insight-7.10.50.20160208.orig/gdb/jv-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/jv-valprint.c 2016-02-09 14:35:03.861311616 +0100 -@@ -266,7 +266,7 @@ java_value_print (struct value *val, str - - static void - java_print_value_fields (struct type *type, const gdb_byte *valaddr, -- int offset, -+ LONGEST offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, - const struct value *val, -@@ -454,7 +454,7 @@ java_print_value_fields (struct type *ty - - void - java_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options) -diff -Naurp insight-7.10.50.20160208.orig/gdb/language.c insight-7.10.50.20160208.new/gdb/language.c ---- insight-7.10.50.20160208.orig/gdb/language.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/language.c 2016-02-09 14:35:03.862311626 +0100 -@@ -739,7 +739,7 @@ unk_lang_printchar (int c, struct type * - - static void - unk_lang_printstr (struct ui_file *stream, struct type *type, -- const gdb_byte *string, unsigned int length, -+ const gdb_byte *string, ULONGEST length, - const char *encoding, int force_ellipses, - const struct value_print_options *options) - { -@@ -758,7 +758,7 @@ unk_lang_print_type (struct type *type, - - static void - unk_lang_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options) -diff -Naurp insight-7.10.50.20160208.orig/gdb/language.h insight-7.10.50.20160208.new/gdb/language.h ---- insight-7.10.50.20160208.orig/gdb/language.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/language.h 2016-02-09 14:35:03.862311626 +0100 -@@ -189,7 +189,7 @@ struct language_defn - struct ui_file * stream); - - void (*la_printstr) (struct ui_file * stream, struct type *elttype, -- const gdb_byte *string, unsigned int length, -+ const gdb_byte *string, ULONGEST length, - const char *encoding, int force_ellipses, - const struct value_print_options *); - -@@ -231,7 +231,7 @@ struct language_defn - - void (*la_val_print) (struct type *type, - const gdb_byte *contents, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options); -diff -Naurp insight-7.10.50.20160208.orig/gdb/m2-lang.c insight-7.10.50.20160208.new/gdb/m2-lang.c ---- insight-7.10.50.20160208.orig/gdb/m2-lang.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/m2-lang.c 2016-02-09 14:35:03.862311626 +0100 -@@ -104,10 +104,10 @@ m2_printchar (int c, struct type *type, - - static void - m2_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, -- unsigned int length, const char *encoding, int force_ellipses, -+ ULONGEST length, const char *encoding, int force_ellipses, - const struct value_print_options *options) - { -- unsigned int i; -+ ULONGEST i; - unsigned int things_printed = 0; - int in_quotes = 0; - int need_comma = 0; -@@ -122,9 +122,9 @@ m2_printstr (struct ui_file *stream, str - { - /* Position of the character we are examining - to see whether it is repeated. */ -- unsigned int rep1; -+ ULONGEST rep1; - /* Number of repetitions we have detected so far. */ -- unsigned int reps; -+ ULONGEST reps; - - QUIT; - -@@ -150,7 +150,7 @@ m2_printstr (struct ui_file *stream, str - in_quotes = 0; - } - m2_printchar (string[i], type, stream); -- fprintf_filtered (stream, " ", reps); -+ fprintf_filtered (stream, " ", pulongest (reps)); - i = rep1 - 1; - things_printed += options->repeat_count_threshold; - need_comma = 1; -diff -Naurp insight-7.10.50.20160208.orig/gdb/m2-lang.h insight-7.10.50.20160208.new/gdb/m2-lang.h ---- insight-7.10.50.20160208.orig/gdb/m2-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/m2-lang.h 2016-02-09 14:35:03.863311635 +0100 -@@ -34,7 +34,7 @@ extern void m2_print_typedef (struct typ - extern int m2_is_long_set (struct type *type); - extern int m2_is_unbounded_array (struct type *type); - --extern void m2_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, -+extern void m2_val_print (struct type *, const gdb_byte *, LONGEST, CORE_ADDR, - struct ui_file *, int, - const struct value *, - const struct value_print_options *); -diff -Naurp insight-7.10.50.20160208.orig/gdb/m2-typeprint.c insight-7.10.50.20160208.new/gdb/m2-typeprint.c ---- insight-7.10.50.20160208.orig/gdb/m2-typeprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/m2-typeprint.c 2016-02-09 14:35:03.863311635 +0100 -@@ -234,9 +234,12 @@ static void m2_array (struct type *type, - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1); - } - else -- fprintf_filtered (stream, "%d", -- (TYPE_LENGTH (type) -- / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))); -+ { -+ ULONGEST val = (TYPE_LENGTH (type) -+ / TYPE_LENGTH (TYPE_TARGET_TYPE (type))); -+ -+ fprintf_filtered (stream, "%s", pulongest (val)); -+ } - } - fprintf_filtered (stream, "] OF "); - m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); -diff -Naurp insight-7.10.50.20160208.orig/gdb/m2-valprint.c insight-7.10.50.20160208.new/gdb/m2-valprint.c ---- insight-7.10.50.20160208.orig/gdb/m2-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/m2-valprint.c 2016-02-09 14:35:03.863311635 +0100 -@@ -35,7 +35,7 @@ static int print_unpacked_pointer (struc - struct ui_file *stream); - static void - m2_print_array_contents (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -@@ -67,7 +67,7 @@ get_long_set_bounds (struct type *type, - - static void - m2_print_long_set (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream) - { - int empty_set = 1; -@@ -158,7 +158,7 @@ m2_print_long_set (struct type *type, co - - static void - m2_print_unbounded_array (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value_print_options *options) - { -@@ -262,7 +262,7 @@ print_variable_at_address (struct type * - - static void - m2_print_array_contents (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -@@ -308,14 +308,15 @@ static const struct generic_val_print_de - function; they are identical. */ - - void --m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, -- CORE_ADDR address, struct ui_file *stream, int recurse, -+m2_val_print (struct type *type, const gdb_byte *valaddr, -+ LONGEST embedded_offset, CORE_ADDR address, -+ struct ui_file *stream, int recurse, - const struct value *original_value, - const struct value_print_options *options) - { - struct gdbarch *gdbarch = get_type_arch (type); -- unsigned int i = 0; /* Number of characters printed. */ -- unsigned len; -+ ULONGEST i = 0; /* Number of characters printed. */ -+ ULONGEST len; - struct type *elttype; - CORE_ADDR addr; - -@@ -340,7 +341,7 @@ m2_val_print (struct type *type, const g - elements up to it. */ - if (options->stop_print_at_null) - { -- unsigned int temp_len; -+ ULONGEST temp_len; - - /* Look for a NULL char. */ - for (temp_len = 0; -diff -Naurp insight-7.10.50.20160208.orig/gdb/memrange.c insight-7.10.50.20160208.new/gdb/memrange.c ---- insight-7.10.50.20160208.orig/gdb/memrange.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/memrange.c 2016-02-09 14:35:03.864311644 +0100 -@@ -21,8 +21,8 @@ - #include "memrange.h" - - int --mem_ranges_overlap (CORE_ADDR start1, int len1, -- CORE_ADDR start2, int len2) -+mem_ranges_overlap (CORE_ADDR start1, LONGEST len1, -+ CORE_ADDR start2, LONGEST len2) - { - ULONGEST h, l; - -diff -Naurp insight-7.10.50.20160208.orig/gdb/memrange.h insight-7.10.50.20160208.new/gdb/memrange.h ---- insight-7.10.50.20160208.orig/gdb/memrange.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/memrange.h 2016-02-09 14:35:03.864311644 +0100 -@@ -30,7 +30,7 @@ struct mem_range - CORE_ADDR start; - - /* Length of the range. */ -- int length; -+ LONGEST length; - }; - - typedef struct mem_range mem_range_s; -@@ -40,8 +40,8 @@ DEF_VEC_O(mem_range_s); - /* Returns true if the ranges defined by [start1, start1+len1) and - [start2, start2+len2) overlap. */ - --extern int mem_ranges_overlap (CORE_ADDR start1, int len1, -- CORE_ADDR start2, int len2); -+extern int mem_ranges_overlap (CORE_ADDR start1, LONGEST len1, -+ CORE_ADDR start2, LONGEST len2); - - /* Returns true if ADDR is in RANGE. */ - -diff -Naurp insight-7.10.50.20160208.orig/gdb/mips-linux-nat.c insight-7.10.50.20160208.new/gdb/mips-linux-nat.c ---- insight-7.10.50.20160208.orig/gdb/mips-linux-nat.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/mips-linux-nat.c 2016-02-09 14:35:03.864311644 +0100 -@@ -587,7 +587,7 @@ mips_linux_stopped_data_address (struct - - static int - mips_linux_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - struct pt_watch_regs dummy_regs; - int i; -diff -Naurp insight-7.10.50.20160208.orig/gdb/nat/x86-dregs.c insight-7.10.50.20160208.new/gdb/nat/x86-dregs.c ---- insight-7.10.50.20160208.orig/gdb/nat/x86-dregs.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/nat/x86-dregs.c 2016-02-09 14:35:03.865311654 +0100 -@@ -384,7 +384,7 @@ x86_remove_aligned_watchpoint (struct x8 - - static int - x86_handle_nonaligned_watchpoint (struct x86_debug_reg_state *state, -- x86_wp_op_t what, CORE_ADDR addr, int len, -+ x86_wp_op_t what, CORE_ADDR addr, LONGEST len, - enum target_hw_bp_type type) - { - int retval = 0; -@@ -552,7 +552,7 @@ x86_dr_remove_watchpoint (struct x86_deb - - int - x86_dr_region_ok_for_watchpoint (struct x86_debug_reg_state *state, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - int nregs; - -diff -Naurp insight-7.10.50.20160208.orig/gdb/nat/x86-dregs.h insight-7.10.50.20160208.new/gdb/nat/x86-dregs.h ---- insight-7.10.50.20160208.orig/gdb/nat/x86-dregs.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/nat/x86-dregs.h 2016-02-09 14:35:03.865311654 +0100 -@@ -116,7 +116,7 @@ extern int x86_dr_remove_watchpoint (str - /* Return non-zero if we can watch a memory region that starts at - address ADDR and whose length is LEN bytes. */ - extern int x86_dr_region_ok_for_watchpoint (struct x86_debug_reg_state *state, -- CORE_ADDR addr, int len); -+ CORE_ADDR addr, LONGEST len); - - /* If the inferior has some break/watchpoint that triggered, set the - address associated with that break/watchpoint and return true. -diff -Naurp insight-7.10.50.20160208.orig/gdb/opencl-lang.c insight-7.10.50.20160208.new/gdb/opencl-lang.c ---- insight-7.10.50.20160208.orig/gdb/opencl-lang.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/opencl-lang.c 2016-02-09 14:35:03.866311663 +0100 -@@ -78,11 +78,11 @@ builtin_opencl_type (struct gdbarch *gdb - - static struct type * - lookup_opencl_vector_type (struct gdbarch *gdbarch, enum type_code code, -- unsigned int el_length, unsigned int flag_unsigned, -+ ULONGEST el_length, unsigned int flag_unsigned, - int n) - { - int i; -- unsigned int length; -+ ULONGEST length; - struct type *type = NULL; - struct type **types = builtin_opencl_type (gdbarch); - -@@ -172,9 +172,9 @@ lval_func_read (struct value *v) - struct lval_closure *c = (struct lval_closure *) value_computed_closure (v); - struct type *type = check_typedef (value_type (v)); - struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val))); -- int offset = value_offset (v); -- int elsize = TYPE_LENGTH (eltype); -- int n, i, j = 0; -+ LONGEST offset = value_offset (v); -+ LONGEST elsize = TYPE_LENGTH (eltype); -+ LONGEST n, i, j = 0; - LONGEST lowb = 0; - LONGEST highb = 0; - -@@ -201,9 +201,9 @@ lval_func_write (struct value *v, struct - struct lval_closure *c = (struct lval_closure *) value_computed_closure (v); - struct type *type = check_typedef (value_type (v)); - struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val))); -- int offset = value_offset (v); -- int elsize = TYPE_LENGTH (eltype); -- int n, i, j = 0; -+ LONGEST offset = value_offset (v); -+ LONGEST elsize = TYPE_LENGTH (eltype); -+ LONGEST n, i, j = 0; - LONGEST lowb = 0; - LONGEST highb = 0; - -@@ -243,17 +243,17 @@ lval_func_write (struct value *v, struct - - static int - lval_func_check_synthetic_pointer (const struct value *v, -- int offset, int length) -+ LONGEST offset, LONGEST length) - { - struct lval_closure *c = (struct lval_closure *) value_computed_closure (v); - /* Size of the target type in bits. */ -- int elsize = -+ LONGEST elsize = - TYPE_LENGTH (TYPE_TARGET_TYPE (check_typedef (value_type (c->val)))) * 8; -- int startrest = offset % elsize; -- int start = offset / elsize; -- int endrest = (offset + length) % elsize; -- int end = (offset + length) / elsize; -- int i; -+ LONGEST startrest = offset % elsize; -+ LONGEST start = offset / elsize; -+ LONGEST endrest = (offset + length) % elsize; -+ LONGEST end = (offset + length) / elsize; -+ LONGEST i; - - if (endrest) - end++; -@@ -263,8 +263,8 @@ lval_func_check_synthetic_pointer (const - - for (i = start; i < end; i++) - { -- int comp_offset = (i == start) ? startrest : 0; -- int comp_length = (i == end) ? endrest : elsize; -+ LONGEST comp_offset = (i == start) ? startrest : 0; -+ LONGEST comp_length = (i == end) ? endrest : elsize; - - if (!value_bits_synthetic_pointer (c->val, - c->indices[i] * elsize + comp_offset, -diff -Naurp insight-7.10.50.20160208.orig/gdb/p-lang.c insight-7.10.50.20160208.new/gdb/p-lang.c ---- insight-7.10.50.20160208.orig/gdb/p-lang.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/p-lang.c 2016-02-09 14:35:03.866311663 +0100 -@@ -95,8 +95,8 @@ pascal_main_name (void) - are not multiple of TARGET_CHAR_BIT then the results are wrong - but this does not happen for Free Pascal nor for GPC. */ - int --is_pascal_string_type (struct type *type,int *length_pos, -- int *length_size, int *string_pos, -+is_pascal_string_type (struct type *type, LONGEST *length_pos, -+ LONGEST *length_size, LONGEST *string_pos, - struct type **char_type, - const char **arrayname) - { -@@ -216,12 +216,12 @@ pascal_printchar (int c, struct type *ty - - void - pascal_printstr (struct ui_file *stream, struct type *type, -- const gdb_byte *string, unsigned int length, -+ const gdb_byte *string, ULONGEST length, - const char *encoding, int force_ellipses, - const struct value_print_options *options) - { - enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); -- unsigned int i; -+ ULONGEST i; - unsigned int things_printed = 0; - int in_quotes = 0; - int need_comma = 0; -@@ -249,9 +249,9 @@ pascal_printstr (struct ui_file *stream, - { - /* Position of the character we are examining - to see whether it is repeated. */ -- unsigned int rep1; -+ ULONGEST rep1; - /* Number of repetitions we have detected so far. */ -- unsigned int reps; -+ ULONGEST reps; - unsigned long int current_char; - - QUIT; -@@ -283,7 +283,7 @@ pascal_printstr (struct ui_file *stream, - in_quotes = 0; - } - pascal_printchar (current_char, type, stream); -- fprintf_filtered (stream, " ", reps); -+ fprintf_filtered (stream, " ", pulongest (reps)); - i = rep1 - 1; - things_printed += options->repeat_count_threshold; - need_comma = 1; -diff -Naurp insight-7.10.50.20160208.orig/gdb/p-lang.h insight-7.10.50.20160208.new/gdb/p-lang.h ---- insight-7.10.50.20160208.orig/gdb/p-lang.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/p-lang.h 2016-02-09 14:35:03.866311663 +0100 -@@ -36,7 +36,7 @@ extern void pascal_print_type (struct ty - extern void pascal_print_typedef (struct type *, struct symbol *, - struct ui_file *); - --extern void pascal_val_print (struct type *, const gdb_byte *, int, -+extern void pascal_val_print (struct type *, const gdb_byte *, LONGEST, - CORE_ADDR, struct ui_file *, int, - const struct value *, - const struct value_print_options *); -@@ -50,13 +50,13 @@ extern void pascal_type_print_method_arg - /* These are in p-lang.c: */ - - extern int -- is_pascal_string_type (struct type *, int *, int *, int *, -+ is_pascal_string_type (struct type *, LONGEST *, LONGEST *, LONGEST *, - struct type **, const char **); - - extern void pascal_printchar (int, struct type *, struct ui_file *); - - extern void pascal_printstr (struct ui_file *, struct type *, const gdb_byte *, -- unsigned int, const char *, int, -+ ULONGEST, const char *, int, - const struct value_print_options *); - - extern struct type **const (pascal_builtin_types[]); -@@ -72,7 +72,7 @@ extern void - const struct type_print_options *); - - extern void pascal_object_print_value_fields (struct type *, const gdb_byte *, -- int, -+ LONGEST, - CORE_ADDR, struct ui_file *, - int, - const struct value *, -diff -Naurp insight-7.10.50.20160208.orig/gdb/ppc-linux-nat.c insight-7.10.50.20160208.new/gdb/ppc-linux-nat.c ---- insight-7.10.50.20160208.orig/gdb/ppc-linux-nat.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/ppc-linux-nat.c 2016-02-09 14:35:03.867311672 +0100 -@@ -1449,7 +1449,7 @@ ppc_linux_can_use_hw_breakpoint (struct - - static int - ppc_linux_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - /* Handle sub-8-byte quantities. */ - if (len <= 0) -diff -Naurp insight-7.10.50.20160208.orig/gdb/printcmd.c insight-7.10.50.20160208.new/gdb/printcmd.c ---- insight-7.10.50.20160208.orig/gdb/printcmd.c 2016-02-09 14:33:17.007315978 +0100 -+++ insight-7.10.50.20160208.new/gdb/printcmd.c 2016-02-09 14:35:03.868311681 +0100 -@@ -274,7 +274,7 @@ print_formatted (struct value *val, int - struct ui_file *stream) - { - struct type *type = check_typedef (value_type (val)); -- int len = TYPE_LENGTH (type); -+ LONGEST len = TYPE_LENGTH (type); - - if (VALUE_LVAL (val) == lval_memory) - next_address = value_address (val) + len; -@@ -352,7 +352,7 @@ print_scalar_formatted (const gdb_byte * - { - struct gdbarch *gdbarch = get_type_arch (type); - LONGEST val_long = 0; -- unsigned int len = TYPE_LENGTH (type); -+ ULONGEST len = TYPE_LENGTH (type); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - - /* String printing should go through val_print_scalar_formatted. */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/procfs.c insight-7.10.50.20160208.new/gdb/procfs.c ---- insight-7.10.50.20160208.orig/gdb/procfs.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/procfs.c 2016-02-09 14:35:03.869311691 +0100 -@@ -4863,7 +4863,7 @@ procfs_remove_watchpoint (struct target_ - - static int - procfs_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - /* The man page for proc(4) on Solaris 2.6 and up says that the - system can support "thousands" of hardware watchpoints, but gives -diff -Naurp insight-7.10.50.20160208.orig/gdb/p-valprint.c insight-7.10.50.20160208.new/gdb/p-valprint.c ---- insight-7.10.50.20160208.orig/gdb/p-valprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/p-valprint.c 2016-02-09 14:35:03.870311700 +0100 -@@ -57,7 +57,7 @@ static const struct generic_val_print_de - - void - pascal_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *original_value, - const struct value_print_options *options) -@@ -68,8 +68,8 @@ pascal_val_print (struct type *type, con - unsigned len; - LONGEST low_bound, high_bound; - struct type *elttype; -- unsigned eltlen; -- int length_pos, length_size, string_pos; -+ ULONGEST eltlen; -+ LONGEST length_pos, length_size, string_pos; - struct type *char_type; - CORE_ADDR addr; - int want_space = 0; -@@ -467,7 +467,7 @@ static void pascal_object_print_static_f - const struct value_print_options *); - - static void pascal_object_print_value (struct type *, const gdb_byte *, -- int, -+ LONGEST, - CORE_ADDR, struct ui_file *, int, - const struct value *, - const struct value_print_options *, -@@ -526,7 +526,7 @@ pascal_object_is_vtbl_member (struct typ - - void - pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, -- int offset, -+ LONGEST offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, - const struct value *val, -@@ -698,7 +698,7 @@ pascal_object_print_value_fields (struct - - static void - pascal_object_print_value (struct type *type, const gdb_byte *valaddr, -- int offset, -+ LONGEST offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, - const struct value *val, -@@ -721,11 +721,11 @@ pascal_object_print_value (struct type * - - for (i = 0; i < n_baseclasses; i++) - { -- int boffset = 0; -+ LONGEST boffset = 0; - struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i)); - const char *basename = type_name_no_tag (baseclass); - const gdb_byte *base_valaddr = NULL; -- int thisoffset; -+ LONGEST thisoffset; - int skip = 0; - - if (BASETYPE_VIA_VIRTUAL (type, i)) -diff -Naurp insight-7.10.50.20160208.orig/gdb/python/py-prettyprint.c insight-7.10.50.20160208.new/gdb/python/py-prettyprint.c ---- insight-7.10.50.20160208.orig/gdb/python/py-prettyprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/python/py-prettyprint.c 2016-02-09 14:35:03.870311700 +0100 -@@ -703,7 +703,7 @@ print_children (PyObject *printer, const - enum ext_lang_rc - gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, - struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -diff -Naurp insight-7.10.50.20160208.orig/gdb/python/python-internal.h insight-7.10.50.20160208.new/gdb/python/python-internal.h ---- insight-7.10.50.20160208.orig/gdb/python/python-internal.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/python/python-internal.h 2016-02-09 14:35:03.871311709 +0100 -@@ -316,7 +316,7 @@ extern int gdbpy_auto_load_enabled (cons - extern enum ext_lang_rc gdbpy_apply_val_pretty_printer - (const struct extension_language_defn *, - struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -diff -Naurp insight-7.10.50.20160208.orig/gdb/regcache.c insight-7.10.50.20160208.new/gdb/regcache.c ---- insight-7.10.50.20160208.orig/gdb/regcache.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/regcache.c 2016-02-09 14:35:03.871311709 +0100 -@@ -958,7 +958,7 @@ typedef void (regcache_write_ftype) (str - - static enum register_status - regcache_xfer_part (struct regcache *regcache, int regnum, -- int offset, int len, void *in, const void *out, -+ LONGEST offset, LONGEST len, void *in, const void *out, - enum register_status (*read) (struct regcache *regcache, - int regnum, - gdb_byte *buf), -@@ -1002,7 +1002,7 @@ regcache_xfer_part (struct regcache *reg - - enum register_status - regcache_raw_read_part (struct regcache *regcache, int regnum, -- int offset, int len, gdb_byte *buf) -+ int offset, LONGEST len, gdb_byte *buf) - { - struct regcache_descr *descr = regcache->descr; - -@@ -1013,7 +1013,7 @@ regcache_raw_read_part (struct regcache - - void - regcache_raw_write_part (struct regcache *regcache, int regnum, -- int offset, int len, const gdb_byte *buf) -+ int offset, LONGEST len, const gdb_byte *buf) - { - struct regcache_descr *descr = regcache->descr; - -@@ -1024,7 +1024,7 @@ regcache_raw_write_part (struct regcache - - enum register_status - regcache_cooked_read_part (struct regcache *regcache, int regnum, -- int offset, int len, gdb_byte *buf) -+ LONGEST offset, LONGEST len, gdb_byte *buf) - { - struct regcache_descr *descr = regcache->descr; - -@@ -1035,7 +1035,7 @@ regcache_cooked_read_part (struct regcac - - void - regcache_cooked_write_part (struct regcache *regcache, int regnum, -- int offset, int len, const gdb_byte *buf) -+ LONGEST offset, LONGEST len, const gdb_byte *buf) - { - struct regcache_descr *descr = regcache->descr; - -diff -Naurp insight-7.10.50.20160208.orig/gdb/regcache.h insight-7.10.50.20160208.new/gdb/regcache.h ---- insight-7.10.50.20160208.orig/gdb/regcache.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/regcache.h 2016-02-09 14:35:03.872311719 +0100 -@@ -72,9 +72,9 @@ extern void regcache_raw_write_unsigned - - extern enum register_status - regcache_raw_read_part (struct regcache *regcache, int regnum, -- int offset, int len, gdb_byte *buf); -+ int offset, LONGEST len, gdb_byte *buf); - void regcache_raw_write_part (struct regcache *regcache, int regnum, -- int offset, int len, const gdb_byte *buf); -+ int offset, LONGEST len, const gdb_byte *buf); - - void regcache_invalidate (struct regcache *regcache, int regnum); - -@@ -111,10 +111,11 @@ extern void regcache_cooked_write_unsign - write style operations. */ - - enum register_status regcache_cooked_read_part (struct regcache *regcache, -- int regnum, int offset, -- int len, gdb_byte *buf); -+ int regnum, LONGEST offset, -+ LONGEST len, gdb_byte *buf); - void regcache_cooked_write_part (struct regcache *regcache, int regnum, -- int offset, int len, const gdb_byte *buf); -+ LONGEST offset, LONGEST len, -+ const gdb_byte *buf); - - /* Special routines to read/write the PC. */ - -diff -Naurp insight-7.10.50.20160208.orig/gdb/remote.c insight-7.10.50.20160208.new/gdb/remote.c ---- insight-7.10.50.20160208.orig/gdb/remote.c 2016-02-05 10:39:58.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/remote.c 2016-02-09 14:35:03.874311737 +0100 -@@ -9506,7 +9506,7 @@ int remote_hw_breakpoint_limit = -1; - - static int - remote_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - if (remote_hw_watchpoint_length_limit == 0) - return 0; -diff -Naurp insight-7.10.50.20160208.orig/gdb/s390-linux-nat.c insight-7.10.50.20160208.new/gdb/s390-linux-nat.c ---- insight-7.10.50.20160208.orig/gdb/s390-linux-nat.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/s390-linux-nat.c 2016-02-09 14:35:03.875311747 +0100 -@@ -612,7 +612,7 @@ s390_can_use_hw_breakpoint (struct targe - - static int - s390_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int cnt) -+ CORE_ADDR addr, LONGEST cnt) - { - return 1; - } -diff -Naurp insight-7.10.50.20160208.orig/gdb/spu-multiarch.c insight-7.10.50.20160208.new/gdb/spu-multiarch.c ---- insight-7.10.50.20160208.orig/gdb/spu-multiarch.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/spu-multiarch.c 2016-02-09 14:35:03.875311747 +0100 -@@ -127,7 +127,7 @@ spu_thread_architecture (struct target_o - /* Override the to_region_ok_for_hw_watchpoint routine. */ - static int - spu_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - struct target_ops *ops_beneath = find_target_beneath (self); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/stack.c insight-7.10.50.20160208.new/gdb/stack.c ---- insight-7.10.50.20160208.orig/gdb/stack.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/stack.c 2016-02-09 14:35:03.876311756 +0100 -@@ -176,7 +176,7 @@ print_stack_frame (struct frame_info *fr - argument (not just the first nameless argument). */ - - static void --print_frame_nameless_args (struct frame_info *frame, long start, int num, -+print_frame_nameless_args (struct frame_info *frame, LONGEST start, int num, - int first, struct ui_file *stream) - { - struct gdbarch *gdbarch = get_frame_arch (frame); -@@ -539,7 +539,7 @@ print_frame_args (struct symbol *func, s - /* Offset of next stack argument beyond the one we have seen that is - at the highest offset, or -1 if we haven't come to a stack - argument yet. */ -- long highest_offset = -1; -+ LONGEST highest_offset = -1; - /* Number of ints of arguments that we have printed so far. */ - int args_printed = 0; - struct cleanup *old_chain; -@@ -573,8 +573,8 @@ print_frame_args (struct symbol *func, s - case LOC_ARG: - case LOC_REF_ARG: - { -- long current_offset = SYMBOL_VALUE (sym); -- int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym)); -+ LONGEST current_offset = SYMBOL_VALUE (sym); -+ LONGEST arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym)); - - /* Compute address of next argument by adding the size of - this argument and rounding to an int boundary. */ -@@ -709,7 +709,7 @@ print_frame_args (struct symbol *func, s - enough about the stack to find them. */ - if (num != -1) - { -- long start; -+ LONGEST start; - - if (highest_offset == -1) - start = gdbarch_frame_args_skip (get_frame_arch (frame)); -diff -Naurp insight-7.10.50.20160208.orig/gdb/symmisc.c insight-7.10.50.20160208.new/gdb/symmisc.c ---- insight-7.10.50.20160208.orig/gdb/symmisc.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/symmisc.c 2016-02-09 14:35:03.876311756 +0100 -@@ -534,11 +534,11 @@ print_symbol (void *args) - - case LOC_CONST_BYTES: - { -- unsigned i; -+ ULONGEST i; - struct type *type = check_typedef (SYMBOL_TYPE (symbol)); - -- fprintf_filtered (outfile, "const %u hex bytes:", -- TYPE_LENGTH (type)); -+ fprintf_filtered (outfile, "const %s hex bytes:", -+ pulongest (TYPE_LENGTH (type))); - for (i = 0; i < TYPE_LENGTH (type); i++) - fprintf_filtered (outfile, " %02x", - (unsigned) SYMBOL_VALUE_BYTES (symbol)[i]); -diff -Naurp insight-7.10.50.20160208.orig/gdb/target.c insight-7.10.50.20160208.new/gdb/target.c ---- insight-7.10.50.20160208.orig/gdb/target.c 2016-01-15 12:47:11.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/target.c 2016-02-09 14:35:03.877311765 +0100 -@@ -54,7 +54,7 @@ static int default_watchpoint_addr_withi - CORE_ADDR, CORE_ADDR, int); - - static int default_region_ok_for_hw_watchpoint (struct target_ops *, -- CORE_ADDR, int); -+ CORE_ADDR, LONGEST); - - static void default_rcmd (struct target_ops *, const char *, struct ui_file *); - -@@ -3157,7 +3157,7 @@ target_fileio_read_stralloc (struct infe - - static int - default_region_ok_for_hw_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - return (len <= gdbarch_ptr_bit (target_gdbarch ()) / TARGET_CHAR_BIT); - } -diff -Naurp insight-7.10.50.20160208.orig/gdb/target-delegates.c insight-7.10.50.20160208.new/gdb/target-delegates.c ---- insight-7.10.50.20160208.orig/gdb/target-delegates.c 2015-12-04 10:46:05.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/target-delegates.c 2016-02-09 14:35:03.878311775 +0100 -@@ -736,14 +736,14 @@ debug_watchpoint_addr_within_range (stru - } - - static int --delegate_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, int arg2) -+delegate_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, LONGEST arg2) - { - self = self->beneath; - return self->to_region_ok_for_hw_watchpoint (self, arg1, arg2); - } - - static int --debug_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, int arg2) -+debug_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, LONGEST arg2) - { - int result; - fprintf_unfiltered (gdb_stdlog, "-> %s->to_region_ok_for_hw_watchpoint (...)\n", debug_target.to_shortname); -@@ -753,7 +753,7 @@ debug_region_ok_for_hw_watchpoint (struc - fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_CORE_ADDR (arg1); - fputs_unfiltered (", ", gdb_stdlog); -- target_debug_print_int (arg2); -+ target_debug_print_LONGEST (arg2); - fputs_unfiltered (") = ", gdb_stdlog); - target_debug_print_int (result); - fputs_unfiltered ("\n", gdb_stdlog); -diff -Naurp insight-7.10.50.20160208.orig/gdb/target.h insight-7.10.50.20160208.new/gdb/target.h ---- insight-7.10.50.20160208.orig/gdb/target.h 2016-02-09 14:33:17.175317536 +0100 -+++ insight-7.10.50.20160208.new/gdb/target.h 2016-02-09 14:35:03.879311784 +0100 -@@ -551,7 +551,7 @@ struct target_ops - /* Documentation of this routine is provided with the corresponding - target_* macro. */ - int (*to_region_ok_for_hw_watchpoint) (struct target_ops *, -- CORE_ADDR, int) -+ CORE_ADDR, LONGEST) - TARGET_DEFAULT_FUNC (default_region_ok_for_hw_watchpoint); - - int (*to_can_accel_watchpoint_condition) (struct target_ops *, -diff -Naurp insight-7.10.50.20160208.orig/gdb/tracepoint.c insight-7.10.50.20160208.new/gdb/tracepoint.c ---- insight-7.10.50.20160208.orig/gdb/tracepoint.c 2016-01-20 11:01:21.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/tracepoint.c 2016-02-09 14:35:03.880311793 +0100 -@@ -930,13 +930,13 @@ add_register (struct collection_list *co - static void - add_memrange (struct collection_list *memranges, - int type, bfd_signed_vma base, -- unsigned long len) -+ ULONGEST len) - { - if (info_verbose) - { - printf_filtered ("(%d,", type); - printf_vma (base); -- printf_filtered (",%ld)\n", len); -+ printf_filtered (",%s)\n", pulongest (len)); - } - - /* type: memrange_absolute == memory, other n == basereg */ -@@ -966,7 +966,7 @@ collect_symbol (struct collection_list * - CORE_ADDR scope, - int trace_string) - { -- unsigned long len; -+ ULONGEST len; - unsigned int reg; - bfd_signed_vma offset; - int treat_as_expr = 0; -@@ -990,8 +990,8 @@ collect_symbol (struct collection_list * - char tmp[40]; - - sprintf_vma (tmp, offset); -- printf_filtered ("LOC_STATIC %s: collect %ld bytes at %s.\n", -- SYMBOL_PRINT_NAME (sym), len, -+ printf_filtered ("LOC_STATIC %s: collect %s bytes at %s.\n", -+ SYMBOL_PRINT_NAME (sym), pulongest (len), - tmp /* address */); - } - /* A struct may be a C++ class with static fields, go to general -@@ -1023,8 +1023,8 @@ collect_symbol (struct collection_list * - offset = frame_offset + SYMBOL_VALUE (sym); - if (info_verbose) - { -- printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset ", -- SYMBOL_PRINT_NAME (sym), len); -+ printf_filtered ("LOC_LOCAL %s: Collect %s bytes at offset ", -+ SYMBOL_PRINT_NAME (sym), pulongest (len)); - printf_vma (offset); - printf_filtered (" from frame ptr reg %d\n", reg); - } -@@ -1035,8 +1035,8 @@ collect_symbol (struct collection_list * - offset = 0; - if (info_verbose) - { -- printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset ", -- SYMBOL_PRINT_NAME (sym), len); -+ printf_filtered ("LOC_REGPARM_ADDR %s: Collect %s bytes at offset ", -+ SYMBOL_PRINT_NAME (sym), pulongest (len)); - printf_vma (offset); - printf_filtered (" from reg %d\n", reg); - } -@@ -1047,8 +1047,8 @@ collect_symbol (struct collection_list * - offset = frame_offset + SYMBOL_VALUE (sym); - if (info_verbose) - { -- printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset ", -- SYMBOL_PRINT_NAME (sym), len); -+ printf_filtered ("LOC_LOCAL %s: Collect %s bytes at offset ", -+ SYMBOL_PRINT_NAME (sym), pulongest (len)); - printf_vma (offset); - printf_filtered (" from frame ptr reg %d\n", reg); - } -@@ -2708,7 +2708,8 @@ scope_info (char *args, int from_tty) - const char *symname; - char *save_args = args; - struct block_iterator iter; -- int j, count = 0; -+ int count = 0; -+ LONGEST j; - struct gdbarch *gdbarch; - int regno; - struct event_location *location; -@@ -2852,8 +2853,11 @@ scope_info (char *args, int from_tty) - } - } - if (SYMBOL_TYPE (sym)) -- printf_filtered (", length %d.\n", -- TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym)))); -+ { -+ ULONGEST len = TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym))); -+ -+ printf_filtered (", length %s.\n", pulongest (len)); -+ } - } - if (BLOCK_FUNCTION (block)) - break; -diff -Naurp insight-7.10.50.20160208.orig/gdb/typeprint.c insight-7.10.50.20160208.new/gdb/typeprint.c ---- insight-7.10.50.20160208.orig/gdb/typeprint.c 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/typeprint.c 2016-02-09 14:35:03.880311793 +0100 -@@ -406,7 +406,7 @@ whatis_exp (char *exp, int show) - struct type *real_type = NULL; - struct type *type; - int full = 0; -- int top = -1; -+ LONGEST top = -1; - int using_enc = 0; - struct value_print_options opts; - struct type_print_options flags = default_ptype_flags; -diff -Naurp insight-7.10.50.20160208.orig/gdb/valarith.c insight-7.10.50.20160208.new/gdb/valarith.c ---- insight-7.10.50.20160208.orig/gdb/valarith.c 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/valarith.c 2016-02-09 14:36:17.308994644 +0100 -@@ -188,12 +188,12 @@ value_subscript (struct value *array, LO - to doubles, but no longer does. */ - - struct value * --value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound) -+value_subscripted_rvalue (struct value *array, LONGEST index, LONGEST lowerbound) - { - struct type *array_type = check_typedef (value_type (array)); - struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); -- unsigned int elt_size = type_length_units (elt_type); -- unsigned int elt_offs = elt_size * longest_to_int (index - lowerbound); -+ ULONGEST elt_size = type_length_units (elt_type); -+ ULONGEST elt_offs = elt_size * longest_to_int (index - lowerbound); - struct value *v; - - if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) -@@ -666,7 +666,7 @@ value_concat (struct value *arg1, struct - struct value *inval1; - struct value *inval2; - struct value *outval = NULL; -- int inval1len, inval2len; -+ ssize_t inval1len, inval2len; - int count, idx; - char *ptr; - char inchar; -@@ -1519,7 +1519,7 @@ value_binop (struct value *arg1, struct - int - value_logical_not (struct value *arg1) - { -- int len; -+ LONGEST len; - const gdb_byte *p; - struct type *type1; - -@@ -1550,11 +1550,11 @@ value_logical_not (struct value *arg1) - static int - value_strcmp (struct value *arg1, struct value *arg2) - { -- int len1 = TYPE_LENGTH (value_type (arg1)); -- int len2 = TYPE_LENGTH (value_type (arg2)); -+ LONGEST len1 = TYPE_LENGTH (value_type (arg1)); -+ LONGEST len2 = TYPE_LENGTH (value_type (arg2)); - const gdb_byte *s1 = value_contents (arg1); - const gdb_byte *s2 = value_contents (arg2); -- int i, len = len1 < len2 ? len1 : len2; -+ LONGEST i, len = len1 < len2 ? len1 : len2; - - for (i = 0; i < len; i++) - { -diff -Naurp insight-7.10.50.20160208.orig/gdb/valops.c insight-7.10.50.20160208.new/gdb/valops.c ---- insight-7.10.50.20160208.orig/gdb/valops.c 2016-02-09 14:33:17.112316952 +0100 -+++ insight-7.10.50.20160208.new/gdb/valops.c 2016-02-09 14:35:03.882311812 +0100 -@@ -51,7 +51,7 @@ static struct value *search_struct_field - - static struct value *search_struct_method (const char *, struct value **, - struct value **, -- int, int *, struct type *); -+ LONGEST, int *, struct type *); - - static int find_oload_champ_namespace (struct value **, int, - const char *, const char *, -@@ -79,7 +79,7 @@ oload_classification classify_oload_matc - int, int); - - static struct value *value_struct_elt_for_reference (struct type *, -- int, struct type *, -+ LONGEST, struct type *, - const char *, - struct type *, - int, enum noside); -@@ -96,9 +96,9 @@ static CORE_ADDR allocate_space_in_infer - static struct value *cast_into_complex (struct type *, struct value *); - - static void find_method_list (struct value **, const char *, -- int, struct type *, struct fn_field **, int *, -+ LONGEST, struct type *, struct fn_field **, int *, - VEC (xmethod_worker_ptr) **, -- struct type **, int *); -+ struct type **, LONGEST *); - - void _initialize_valops (void); - -@@ -183,7 +183,7 @@ find_function_in_inferior (const char *n - space. */ - - struct value * --value_allocate_space_in_inferior (int len) -+value_allocate_space_in_inferior (LONGEST len) - { - struct objfile *objf; - struct value *val = find_function_in_inferior ("malloc", &objf); -@@ -256,7 +256,8 @@ value_cast_structs (struct type *type, s - if (TYPE_NAME (t2) != NULL) - { - /* Try downcasting using the run-time type of the value. */ -- int full, top, using_enc; -+ int full, using_enc; -+ LONGEST top; - struct type *real_type; - - real_type = value_rtti_type (v2, &full, &top, &using_enc); -@@ -396,12 +397,12 @@ value_cast (struct type *type, struct va - if (code1 == TYPE_CODE_ARRAY) - { - struct type *element_type = TYPE_TARGET_TYPE (type); -- unsigned element_length = TYPE_LENGTH (check_typedef (element_type)); -+ ULONGEST element_length = TYPE_LENGTH (check_typedef (element_type)); - - if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) - { - struct type *range_type = TYPE_INDEX_TYPE (type); -- int val_length = TYPE_LENGTH (type2); -+ LONGEST val_length = TYPE_LENGTH (type2); - LONGEST low_bound, high_bound, new_length; - - if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) -@@ -635,7 +636,7 @@ value_reinterpret_cast (struct type *typ - static int - dynamic_cast_check_1 (struct type *desired_type, - const gdb_byte *valaddr, -- int embedded_offset, -+ LONGEST embedded_offset, - CORE_ADDR address, - struct value *val, - struct type *search_type, -@@ -647,8 +648,8 @@ dynamic_cast_check_1 (struct type *desir - - for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i) - { -- int offset = baseclass_offset (search_type, i, valaddr, embedded_offset, -- address, val); -+ LONGEST offset = baseclass_offset (search_type, i, valaddr, -+ embedded_offset, address, val); - - if (class_types_same_p (desired_type, TYPE_BASECLASS (search_type, i))) - { -@@ -682,7 +683,7 @@ dynamic_cast_check_1 (struct type *desir - static int - dynamic_cast_check_2 (struct type *desired_type, - const gdb_byte *valaddr, -- int embedded_offset, -+ LONGEST embedded_offset, - CORE_ADDR address, - struct value *val, - struct type *search_type, -@@ -692,7 +693,7 @@ dynamic_cast_check_2 (struct type *desir - - for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i) - { -- int offset; -+ LONGEST offset; - - if (! BASETYPE_VIA_PUBLIC (search_type, i)) - continue; -@@ -723,7 +724,8 @@ dynamic_cast_check_2 (struct type *desir - struct value * - value_dynamic_cast (struct type *type, struct value *arg) - { -- int full, top, using_enc; -+ int full, using_enc; -+ LONGEST top; - struct type *resolved_type = check_typedef (type); - struct type *arg_type = check_typedef (value_type (arg)); - struct type *class_type, *rtti_type; -@@ -954,7 +956,7 @@ value_at_lazy (struct type *type, CORE_A - } - - void --read_value_memory (struct value *val, int embedded_offset, -+read_value_memory (struct value *val, LONGEST embedded_offset, - int stack, CORE_ADDR memaddr, - gdb_byte *buffer, size_t length) - { -@@ -1057,7 +1059,7 @@ value_assign (struct value *toval, struc - { - const gdb_byte *dest_buffer; - CORE_ADDR changed_addr; -- int changed_len; -+ LONGEST changed_len; - gdb_byte buffer[sizeof (LONGEST)]; - - if (value_bitsize (toval)) -@@ -1126,7 +1128,7 @@ value_assign (struct value *toval, struc - if (value_bitsize (toval)) - { - struct value *parent = value_parent (toval); -- int offset = value_offset (parent) + value_offset (toval); -+ LONGEST offset = value_offset (parent) + value_offset (toval); - int changed_len; - gdb_byte buffer[sizeof (LONGEST)]; - int optim, unavail; -@@ -1590,7 +1592,7 @@ value_array (int lowbound, int highbound - { - int nelem; - int idx; -- unsigned int typelength; -+ ULONGEST typelength; - struct value *val; - struct type *arraytype; - -@@ -1766,7 +1768,7 @@ typecmp (int staticp, int varargs, int n - - static void - update_search_result (struct value **result_ptr, struct value *v, -- int *last_boffset, int boffset, -+ LONGEST *last_boffset, LONGEST boffset, - const char *name, struct type *type) - { - if (v != NULL) -@@ -1790,10 +1792,10 @@ update_search_result (struct value **res - lookup is ambiguous. */ - - static void --do_search_struct_field (const char *name, struct value *arg1, int offset, -+do_search_struct_field (const char *name, struct value *arg1, LONGEST offset, - struct type *type, int looking_for_baseclass, - struct value **result_ptr, -- int *last_boffset, -+ LONGEST *last_boffset, - struct type *outermost_type) - { - int i; -@@ -1840,7 +1842,7 @@ do_search_struct_field (const char *name - . */ - - struct value *v = NULL; -- int new_offset = offset; -+ LONGEST new_offset = offset; - - /* This is pretty gross. In G++, the offset in an - anonymous union is relative to the beginning of the -@@ -1879,7 +1881,7 @@ do_search_struct_field (const char *name - && (strcmp_iw (name, - TYPE_BASECLASS_NAME (type, - i)) == 0)); -- int boffset = value_embedded_offset (arg1) + offset; -+ LONGEST boffset = value_embedded_offset (arg1) + offset; - - if (BASETYPE_VIA_VIRTUAL (type, i)) - { -@@ -1955,7 +1957,7 @@ search_struct_field (const char *name, s - struct type *type, int looking_for_baseclass) - { - struct value *result = NULL; -- int boffset = 0; -+ LONGEST boffset = 0; - - do_search_struct_field (name, arg1, 0, type, looking_for_baseclass, - &result, &boffset, type); -@@ -1972,7 +1974,7 @@ search_struct_field (const char *name, s - - static struct value * - search_struct_method (const char *name, struct value **arg1p, -- struct value **args, int offset, -+ struct value **args, LONGEST offset, - int *static_memfuncp, struct type *type) - { - int i; -@@ -2036,8 +2038,8 @@ search_struct_method (const char *name, - - for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--) - { -- int base_offset; -- int this_offset; -+ LONGEST base_offset; -+ LONGEST this_offset; - - if (BASETYPE_VIA_VIRTUAL (type, i)) - { -@@ -2272,10 +2274,10 @@ value_struct_elt_bitpos (struct value ** - - static void - find_method_list (struct value **argp, const char *method, -- int offset, struct type *type, -+ LONGEST offset, struct type *type, - struct fn_field **fn_list, int *num_fns, - VEC (xmethod_worker_ptr) **xm_worker_vec, -- struct type **basetype, int *boffset) -+ struct type **basetype, LONGEST *boffset) - { - int i; - struct fn_field *f = NULL; -@@ -2332,7 +2334,7 @@ find_method_list (struct value **argp, c - extension methods. */ - for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--) - { -- int base_offset; -+ LONGEST base_offset; - - if (BASETYPE_VIA_VIRTUAL (type, i)) - { -@@ -2375,7 +2377,7 @@ value_find_oload_method_list (struct val - int offset, struct fn_field **fn_list, - int *num_fns, - VEC (xmethod_worker_ptr) **xm_worker_vec, -- struct type **basetype, int *boffset) -+ struct type **basetype, LONGEST *boffset) - { - struct type *t; - -@@ -2486,7 +2488,7 @@ find_overload_match (struct value **args - /* Number of overloaded instances being considered. */ - int num_fns = 0; - struct type *basetype = NULL; -- int boffset; -+ LONGEST boffset; - - struct cleanup *all_cleanups = make_cleanup (null_cleanup, NULL); - -@@ -3300,7 +3302,7 @@ compare_parameters (struct type *t1, str - the form "DOMAIN::NAME". */ - - static struct value * --value_struct_elt_for_reference (struct type *domain, int offset, -+value_struct_elt_for_reference (struct type *domain, LONGEST offset, - struct type *curtype, const char *name, - struct type *intype, - int want_address, -@@ -3334,7 +3336,7 @@ value_struct_elt_for_reference (struct t - if (want_address) - return value_from_longest - (lookup_memberptr_type (TYPE_FIELD_TYPE (t, i), domain), -- offset + (LONGEST) (TYPE_FIELD_BITPOS (t, i) >> 3)); -+ offset + (TYPE_FIELD_BITPOS (t, i) >> 3)); - else if (noside != EVAL_NORMAL) - return allocate_value (TYPE_FIELD_TYPE (t, i)); - else -@@ -3502,7 +3504,7 @@ value_struct_elt_for_reference (struct t - for (i = TYPE_N_BASECLASSES (t) - 1; i >= 0; i--) - { - struct value *v; -- int base_offset; -+ LONGEST base_offset; - - if (BASETYPE_VIA_VIRTUAL (t, i)) - base_offset = 0; -@@ -3583,7 +3585,7 @@ value_maybe_namespace_elt (const struct - - struct type * - value_rtti_indirect_type (struct value *v, int *full, -- int *top, int *using_enc) -+ LONGEST *top, int *using_enc) - { - struct value *target = NULL; - struct type *type, *real_type, *target_type; -@@ -3651,12 +3653,12 @@ value_rtti_indirect_type (struct value * - struct value * - value_full_object (struct value *argp, - struct type *rtype, -- int xfull, int xtop, -+ int xfull, LONGEST xtop, - int xusing_enc) - { - struct type *real_type; - int full = 0; -- int top = -1; -+ LONGEST top = -1; - int using_enc = 0; - struct value *new_val; - -diff -Naurp insight-7.10.50.20160208.orig/gdb/valprint.c insight-7.10.50.20160208.new/gdb/valprint.c ---- insight-7.10.50.20160208.orig/gdb/valprint.c 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/valprint.c 2016-02-09 14:35:03.882311812 +0100 -@@ -299,7 +299,7 @@ val_print_scalar_type_p (struct type *ty - int - valprint_check_validity (struct ui_file *stream, - struct type *type, -- int embedded_offset, -+ LONGEST embedded_offset, - const struct value *val) - { - type = check_typedef (type); -@@ -822,7 +822,7 @@ generic_val_print_complex (struct type * - - void - generic_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *original_value, - const struct value_print_options *options, -@@ -957,7 +957,7 @@ generic_val_print (struct type *type, co - RECURSE. */ - - void --val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, -+val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -@@ -1193,7 +1193,7 @@ val_print_type_code_flags (struct type * - - void - val_print_scalar_formatted (struct type *type, -- const gdb_byte *valaddr, int embedded_offset, -+ const gdb_byte *valaddr, LONGEST embedded_offset, - const struct value *val, - const struct value_print_options *options, - int size, -@@ -1738,7 +1738,7 @@ print_decimal_chars (struct ui_file *str - - void - print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr, -- unsigned len, enum bfd_endian byte_order) -+ ULONGEST len, enum bfd_endian byte_order) - { - const gdb_byte *p; - -@@ -1855,22 +1855,22 @@ maybe_print_array_index (struct type *in - - void - val_print_array_elements (struct type *type, -- const gdb_byte *valaddr, int embedded_offset, -+ const gdb_byte *valaddr, LONGEST embedded_offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, - const struct value *val, - const struct value_print_options *options, -- unsigned int i) -+ ULONGEST i) - { - unsigned int things_printed = 0; -- unsigned len; -+ ULONGEST len; - struct type *elttype, *index_type, *base_index_type; -- unsigned eltlen; -+ ULONGEST eltlen; - /* Position of the array element we are examining to see - whether it is repeated. */ -- unsigned int rep1; -+ ULONGEST rep1; - /* Number of repetitions we have detected so far. */ -- unsigned int reps; -+ ULONGEST reps; - LONGEST low_bound, high_bound; - LONGEST low_pos, high_pos; - -@@ -1960,7 +1960,7 @@ val_print_array_elements (struct type *t - address, stream, recurse + 1, val, options, - current_language); - annotate_elt_rep (reps); -- fprintf_filtered (stream, " ", reps); -+ fprintf_filtered (stream, " ", pulongest (reps)); - annotate_elt_rep_end (); - - i = rep1 - 1; -@@ -2616,7 +2616,7 @@ print_converted_chars_to_obstack (struct - - void - generic_printstr (struct ui_file *stream, struct type *type, -- const gdb_byte *string, unsigned int length, -+ const gdb_byte *string, ULONGEST length, - const char *encoding, int force_ellipses, - int quote_char, int c_style_terminator, - const struct value_print_options *options) -diff -Naurp insight-7.10.50.20160208.orig/gdb/valprint.h insight-7.10.50.20160208.new/gdb/valprint.h ---- insight-7.10.50.20160208.orig/gdb/valprint.h 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/valprint.h 2016-02-09 14:35:03.883311821 +0100 -@@ -115,11 +115,11 @@ extern void maybe_print_array_index (str - struct ui_file *stream, - const struct value_print_options *); - --extern void val_print_array_elements (struct type *, const gdb_byte *, int, -+extern void val_print_array_elements (struct type *, const gdb_byte *, LONGEST, - CORE_ADDR, struct ui_file *, int, - const struct value *, - const struct value_print_options *, -- unsigned int); -+ ULONGEST); - - extern void val_print_type_code_int (struct type *, const gdb_byte *, - struct ui_file *); -@@ -129,7 +129,7 @@ extern void val_print_type_code_flags (s - struct ui_file *stream); - - extern void val_print_scalar_formatted (struct type *, -- const gdb_byte *, int, -+ const gdb_byte *, LONGEST, - const struct value *, - const struct value_print_options *, - int, -@@ -145,7 +145,7 @@ extern void print_decimal_chars (struct - unsigned int, enum bfd_endian); - - extern void print_hex_chars (struct ui_file *, const gdb_byte *, -- unsigned int, enum bfd_endian); -+ ULONGEST, enum bfd_endian); - - extern void print_char_chars (struct ui_file *, struct type *, - const gdb_byte *, unsigned int, enum bfd_endian); -@@ -194,7 +194,7 @@ struct generic_val_print_decorations - - - extern void generic_val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *original_value, - const struct value_print_options *options, -@@ -204,7 +204,7 @@ extern void generic_emit_char (int c, st - int quoter, const char *encoding); - - extern void generic_printstr (struct ui_file *stream, struct type *type, -- const gdb_byte *string, unsigned int length, -+ const gdb_byte *string, ULONGEST length, - const char *encoding, int force_ellipses, - int quote_char, int c_style_terminator, - const struct value_print_options *options); -diff -Naurp insight-7.10.50.20160208.orig/gdb/value.c insight-7.10.50.20160208.new/gdb/value.c ---- insight-7.10.50.20160208.orig/gdb/value.c 2016-02-09 14:33:16.966315598 +0100 -+++ insight-7.10.50.20160208.new/gdb/value.c 2016-02-09 14:35:03.884311830 +0100 -@@ -65,10 +65,10 @@ struct internal_function - struct range - { - /* Lowest offset in the range. */ -- int offset; -+ LONGEST offset; - - /* Length of the range. */ -- int length; -+ LONGEST length; - }; - - typedef struct range range_s; -@@ -79,8 +79,8 @@ DEF_VEC_O(range_s); - [offset2, offset2+len2) overlap. */ - - static int --ranges_overlap (int offset1, int len1, -- int offset2, int len2) -+ranges_overlap (LONGEST offset1, LONGEST len1, -+ LONGEST offset2, LONGEST len2) - { - ULONGEST h, l; - -@@ -104,7 +104,7 @@ range_lessthan (const range_s *r1, const - OFFSET+LENGTH). */ - - static int --ranges_contain (VEC(range_s) *ranges, int offset, int length) -+ranges_contain (VEC(range_s) *ranges, LONGEST offset, LONGEST length) - { - range_s what; - int i; -@@ -239,7 +239,7 @@ struct value - the address. If lval == lval_register, this is a further offset from - location.address within the registers structure. Note also the member - embedded_offset below. */ -- int offset; -+ LONGEST offset; - - /* Only used for bitfields; number of bits contained in them. */ - int bitsize; -@@ -309,8 +309,8 @@ struct value - `type', and `embedded_offset' is zero, so everything works - normally. */ - struct type *enclosing_type; -- int embedded_offset; -- int pointed_to_offset; -+ LONGEST embedded_offset; -+ LONGEST pointed_to_offset; - - /* Values are stored in a chain, so that they can be deleted easily - over calls to the inferior. Values assigned to internal -@@ -349,7 +349,7 @@ get_value_arch (const struct value *valu - } - - int --value_bits_available (const struct value *value, int offset, int length) -+value_bits_available (const struct value *value, LONGEST offset, LONGEST length) - { - gdb_assert (!value->lazy); - -@@ -357,7 +357,8 @@ value_bits_available (const struct value - } - - int --value_bytes_available (const struct value *value, int offset, int length) -+value_bytes_available (const struct value *value, LONGEST offset, -+ LONGEST length) - { - return value_bits_available (value, - offset * TARGET_CHAR_BIT, -@@ -365,7 +366,8 @@ value_bytes_available (const struct valu - } - - int --value_bits_any_optimized_out (const struct value *value, int bit_offset, int bit_length) -+value_bits_any_optimized_out (const struct value *value, LONGEST bit_offset, -+ LONGEST bit_length) - { - gdb_assert (!value->lazy); - -@@ -427,7 +429,8 @@ value_entirely_optimized_out (struct val - OFFSET bits, and extending for the next LENGTH bits. */ - - static void --insert_into_bit_range_vector (VEC(range_s) **vectorp, int offset, int length) -+insert_into_bit_range_vector (VEC(range_s) **vectorp, LONGEST offset, -+ LONGEST length) - { - range_s newr; - int i; -@@ -598,7 +601,8 @@ mark_value_bits_unavailable (struct valu - } - - void --mark_value_bytes_unavailable (struct value *value, int offset, int length) -+mark_value_bytes_unavailable (struct value *value, LONGEST offset, -+ LONGEST length) - { - mark_value_bits_unavailable (value, - offset * TARGET_CHAR_BIT, -@@ -612,7 +616,7 @@ mark_value_bytes_unavailable (struct val - - static int - find_first_range_overlap (VEC(range_s) *ranges, int pos, -- int offset, int length) -+ LONGEST offset, LONGEST length) - { - range_s *r; - int i; -@@ -808,9 +812,9 @@ find_first_range_overlap_and_match (stru - Return true if the available bits match. */ - - static int --value_contents_bits_eq (const struct value *val1, int offset1, -- const struct value *val2, int offset2, -- int length) -+value_contents_bits_eq (const struct value *val1, LONGEST offset1, -+ const struct value *val2, LONGEST offset2, -+ LONGEST length) - { - /* Each array element corresponds to a ranges source (unavailable, - optimized out). '1' is for VAL1, '2' for VAL2. */ -@@ -870,9 +874,9 @@ value_contents_bits_eq (const struct val - } - - int --value_contents_eq (const struct value *val1, int offset1, -- const struct value *val2, int offset2, -- int length) -+value_contents_eq (const struct value *val1, LONGEST offset1, -+ const struct value *val2, LONGEST offset2, -+ LONGEST length) - { - return value_contents_bits_eq (val1, offset1 * TARGET_CHAR_BIT, - val2, offset2 * TARGET_CHAR_BIT, -@@ -1109,13 +1113,13 @@ deprecated_set_value_type (struct value - value->type = type; - } - --int -+LONGEST - value_offset (const struct value *value) - { - return value->offset; - } - void --set_value_offset (struct value *value, int offset) -+set_value_offset (struct value *value, LONGEST offset) - { - value->offset = offset; - } -@@ -1329,8 +1333,9 @@ value_ranges_copy_adjusted (struct value - DST_OFFSET+LENGTH) range are wholly available. */ - - void --value_contents_copy_raw (struct value *dst, int dst_offset, -- struct value *src, int src_offset, int length) -+value_contents_copy_raw (struct value *dst, ssize_t dst_offset, -+ struct value *src, ssize_t src_offset, -+ ssize_t length) - { - range_s *r; - int src_bit_offset, dst_bit_offset, bit_length; -@@ -1377,8 +1382,8 @@ value_contents_copy_raw (struct value *d - DST_OFFSET+LENGTH) range are wholly available. */ - - void --value_contents_copy (struct value *dst, int dst_offset, -- struct value *src, int src_offset, int length) -+value_contents_copy (struct value *dst, ssize_t dst_offset, -+ struct value *src, ssize_t src_offset, ssize_t length) - { - if (src->lazy) - value_fetch_lazy (src); -@@ -1442,7 +1447,8 @@ value_optimized_out (struct value *value - the following LENGTH bytes. */ - - void --mark_value_bytes_optimized_out (struct value *value, int offset, int length) -+mark_value_bytes_optimized_out (struct value *value, LONGEST offset, -+ LONGEST length) - { - mark_value_bits_optimized_out (value, - offset * TARGET_CHAR_BIT, -@@ -1452,14 +1458,15 @@ mark_value_bytes_optimized_out (struct v - /* See value.h. */ - - void --mark_value_bits_optimized_out (struct value *value, int offset, int length) -+mark_value_bits_optimized_out (struct value *value, LONGEST offset, -+ LONGEST length) - { - insert_into_bit_range_vector (&value->optimized_out, offset, length); - } - - int - value_bits_synthetic_pointer (const struct value *value, -- int offset, int length) -+ LONGEST offset, LONGEST length) - { - if (value->lval != lval_computed - || !value->location.computed.funcs->check_synthetic_pointer) -@@ -1469,26 +1476,26 @@ value_bits_synthetic_pointer (const stru - length); - } - --int -+LONGEST - value_embedded_offset (struct value *value) - { - return value->embedded_offset; - } - - void --set_value_embedded_offset (struct value *value, int val) -+set_value_embedded_offset (struct value *value, LONGEST val) - { - value->embedded_offset = val; - } - --int -+LONGEST - value_pointed_to_offset (struct value *value) - { - return value->pointed_to_offset; - } - - void --set_value_pointed_to_offset (struct value *value, int val) -+set_value_pointed_to_offset (struct value *value, LONGEST val) - { - value->pointed_to_offset = val; - } -@@ -2348,7 +2355,7 @@ get_internalvar_function (struct interna - } - - void --set_internalvar_component (struct internalvar *var, int offset, int bitpos, -+set_internalvar_component (struct internalvar *var, LONGEST offset, int bitpos, - int bitsize, struct value *newval) - { - gdb_byte *addr; -@@ -3076,7 +3083,7 @@ set_value_enclosing_type (struct value * - FIELDNO says which field. */ - - struct value * --value_primitive_field (struct value *arg1, int offset, -+value_primitive_field (struct value *arg1, LONGEST offset, - int fieldno, struct type *arg_type) - { - struct value *v; -@@ -3128,7 +3135,7 @@ value_primitive_field (struct value *arg - /* This field is actually a base subobject, so preserve the - entire object's contents for later references to virtual - bases, etc. */ -- int boffset; -+ LONGEST boffset; - - /* Lazy register values with offsets are not supported. */ - if (VALUE_LVAL (arg1) == lval_register && value_lazy (arg1)) -@@ -3206,7 +3213,7 @@ value_field (struct value *arg1, int fie - struct value * - value_fn_field (struct value **arg1p, struct fn_field *f, - int j, struct type *type, -- int offset) -+ LONGEST offset) - { - struct value *v; - struct type *ftype = TYPE_FN_FIELD_TYPE (f, j); -@@ -3276,14 +3283,14 @@ value_fn_field (struct value **arg1p, st - - static LONGEST - unpack_bits_as_long (struct type *field_type, const gdb_byte *valaddr, -- int bitpos, int bitsize) -+ LONGEST bitpos, int bitsize) - { - enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (field_type)); - ULONGEST val; - ULONGEST valmask; - int lsbcount; - int bytes_read; -- int read_offset; -+ LONGEST read_offset; - - /* Read the minimum number of bytes required; there may not be - enough bytes to read an entire ULONGEST. */ -@@ -3332,7 +3339,7 @@ unpack_bits_as_long (struct type *field_ - - int - unpack_value_field_as_long (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, int fieldno, -+ LONGEST embedded_offset, int fieldno, - const struct value *val, LONGEST *result) - { - int bitpos = TYPE_FIELD_BITPOS (type, fieldno); -@@ -3376,7 +3383,7 @@ unpack_field_as_long (struct type *type, - void - unpack_value_bitfield (struct value *dest_val, - int bitpos, int bitsize, -- const gdb_byte *valaddr, int embedded_offset, -+ const gdb_byte *valaddr, LONGEST embedded_offset, - const struct value *val) - { - enum bfd_endian byte_order; -@@ -3414,7 +3421,7 @@ unpack_value_bitfield (struct value *des - struct value * - value_field_bitfield (struct type *type, int fieldno, - const gdb_byte *valaddr, -- int embedded_offset, const struct value *val) -+ LONGEST embedded_offset, const struct value *val) - { - int bitpos = TYPE_FIELD_BITPOS (type, fieldno); - int bitsize = TYPE_FIELD_BITSIZE (type, fieldno); -@@ -3435,12 +3442,12 @@ value_field_bitfield (struct type *type, - - void - modify_field (struct type *type, gdb_byte *addr, -- LONGEST fieldval, int bitpos, int bitsize) -+ LONGEST fieldval, LONGEST bitpos, int bitsize) - { - enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); - ULONGEST oword; - ULONGEST mask = (ULONGEST) -1 >> (8 * sizeof (ULONGEST) - bitsize); -- int bytesize; -+ LONGEST bytesize; - - /* Normalize BITPOS. */ - addr += bitpos / 8; -diff -Naurp insight-7.10.50.20160208.orig/gdb/value.h insight-7.10.50.20160208.new/gdb/value.h ---- insight-7.10.50.20160208.orig/gdb/value.h 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/value.h 2016-02-09 14:35:03.884311830 +0100 -@@ -135,8 +135,8 @@ extern void set_value_parent (struct val - within the registers structure. Note also the member - embedded_offset below. */ - --extern int value_offset (const struct value *); --extern void set_value_offset (struct value *, int offset); -+extern LONGEST value_offset (const struct value *); -+extern void set_value_offset (struct value *, LONGEST offset); - - /* The comment from "struct value" reads: ``Is it modifiable? Only - relevant if lval != not_lval.''. Shouldn't the value instead be -@@ -205,10 +205,10 @@ extern struct type *value_actual_type (s - int resolve_simple_types, - int *real_type_found); - --extern int value_pointed_to_offset (struct value *value); --extern void set_value_pointed_to_offset (struct value *value, int val); --extern int value_embedded_offset (struct value *value); --extern void set_value_embedded_offset (struct value *value, int val); -+extern LONGEST value_pointed_to_offset (struct value *value); -+extern void set_value_pointed_to_offset (struct value *value, LONGEST val); -+extern LONGEST value_embedded_offset (struct value *value); -+extern void set_value_embedded_offset (struct value *value, LONGEST val); - - /* For lval_computed values, this structure holds functions used to - retrieve and set the value (or portions of the value). -@@ -246,7 +246,7 @@ struct lval_funcs - /* If non-NULL, this is used to determine whether the indicated bits - of VALUE are a synthetic pointer. */ - int (*check_synthetic_pointer) (const struct value *value, -- int offset, int length); -+ LONGEST offset, LONGEST length); - - /* Return a duplicate of VALUE's closure, for use in a new value. - This may simply return the same closure, if VALUE's is -@@ -283,7 +283,7 @@ extern struct value *allocate_computed_v - Otherwise, return 1. */ - - extern int valprint_check_validity (struct ui_file *stream, struct type *type, -- int embedded_offset, -+ LONGEST embedded_offset, - const struct value *val); - - extern struct value *allocate_optimized_out_value (struct type *type); -@@ -377,7 +377,8 @@ extern int value_optimized_out (struct v - otherwise. */ - - extern int value_bits_any_optimized_out (const struct value *value, -- int bit_offset, int bit_length); -+ LONGEST bit_offset, -+ LONGEST bit_length); - - /* Like value_optimized_out, but return true iff the whole value is - optimized out. */ -@@ -387,13 +388,13 @@ extern int value_entirely_optimized_out - LENGTH bytes as optimized out. */ - - extern void mark_value_bytes_optimized_out (struct value *value, -- int offset, int length); -+ LONGEST offset, LONGEST length); - - /* Mark VALUE's content bits starting at OFFSET and extending for - LENGTH bits as optimized out. */ - - extern void mark_value_bits_optimized_out (struct value *value, -- int offset, int length); -+ LONGEST offset, LONGEST length); - - /* Set or return field indicating whether a variable is initialized or - not, based on debugging information supplied by the compiler. -@@ -476,7 +477,7 @@ extern struct value *coerce_array (struc - extending for LENGTH bits are a synthetic pointer. */ - - extern int value_bits_synthetic_pointer (const struct value *value, -- int offset, int length); -+ LONGEST offset, LONGEST length); - - /* Given a value, determine whether the contents bytes starting at - OFFSET and extending for LENGTH bytes are available. This returns -@@ -484,7 +485,7 @@ extern int value_bits_synthetic_pointer - byte is unavailable. */ - - extern int value_bytes_available (const struct value *value, -- int offset, int length); -+ LONGEST offset, LONGEST length); - - /* Given a value, determine whether the contents bits starting at - OFFSET and extending for LENGTH bits are available. This returns -@@ -492,7 +493,7 @@ extern int value_bytes_available (const - bit is unavailable. */ - - extern int value_bits_available (const struct value *value, -- int offset, int length); -+ LONGEST offset, LONGEST length); - - /* Like value_bytes_available, but return false if any byte in the - whole object is unavailable. */ -@@ -506,7 +507,7 @@ extern int value_entirely_unavailable (s - LENGTH bytes as unavailable. */ - - extern void mark_value_bytes_unavailable (struct value *value, -- int offset, int length); -+ LONGEST offset, LONGEST length); - - /* Mark VALUE's content bits starting at OFFSET and extending for - LENGTH bits as unavailable. */ -@@ -567,9 +568,9 @@ extern void mark_value_bits_unavailable - after the inferior is gone, it works with const values. Therefore, - this routine must not be called with lazy values. */ - --extern int value_contents_eq (const struct value *val1, int offset1, -- const struct value *val2, int offset2, -- int length); -+extern int value_contents_eq (const struct value *val1, LONGEST offset1, -+ const struct value *val2, LONGEST offset2, -+ LONGEST length); - - /* Read LENGTH addressable memory units starting at MEMADDR into BUFFER, - which is (or will be copied to) VAL's contents buffer offset by -@@ -578,7 +579,7 @@ extern int value_contents_eq (const stru - memory is likewise unavailable. STACK indicates whether the memory - is known to be stack memory. */ - --extern void read_value_memory (struct value *val, int embedded_offset, -+extern void read_value_memory (struct value *val, LONGEST embedded_offset, - int stack, CORE_ADDR memaddr, - gdb_byte *buffer, size_t length); - -@@ -614,17 +615,18 @@ extern LONGEST unpack_field_as_long (str - const gdb_byte *valaddr, - int fieldno); - extern int unpack_value_field_as_long (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, int fieldno, -+ LONGEST embedded_offset, int fieldno, - const struct value *val, LONGEST *result); - - extern void unpack_value_bitfield (struct value *dest_val, - int bitpos, int bitsize, -- const gdb_byte *valaddr, int embedded_offset, -+ const gdb_byte *valaddr, -+ LONGEST embedded_offset, - const struct value *val); - - extern struct value *value_field_bitfield (struct type *type, int fieldno, - const gdb_byte *valaddr, -- int embedded_offset, -+ LONGEST embedded_offset, - const struct value *val); - - extern void pack_long (gdb_byte *buf, struct type *type, LONGEST num); -@@ -683,12 +685,12 @@ extern struct value *default_read_var_va - - extern struct value *allocate_value (struct type *type); - extern struct value *allocate_value_lazy (struct type *type); --extern void value_contents_copy (struct value *dst, int dst_offset, -- struct value *src, int src_offset, -- int length); --extern void value_contents_copy_raw (struct value *dst, int dst_offset, -- struct value *src, int src_offset, -- int length); -+extern void value_contents_copy (struct value *dst, ssize_t dst_offset, -+ struct value *src, ssize_t src_offset, -+ ssize_t length); -+extern void value_contents_copy_raw (struct value *dst, ssize_t dst_offset, -+ struct value *src, ssize_t src_offset, -+ ssize_t length); - - extern struct value *allocate_repeat_value (struct type *type, int count); - -@@ -766,16 +768,16 @@ extern int find_overload_match (struct v - - extern struct value *value_field (struct value *arg1, int fieldno); - --extern struct value *value_primitive_field (struct value *arg1, int offset, -+extern struct value *value_primitive_field (struct value *arg1, LONGEST offset, - int fieldno, - struct type *arg_type); - - --extern struct type *value_rtti_indirect_type (struct value *, int *, int *, -+extern struct type *value_rtti_indirect_type (struct value *, int *, LONGEST *, - int *); - - extern struct value *value_full_object (struct value *, struct type *, int, -- int, int); -+ LONGEST, int); - - extern struct value *value_cast_pointers (struct type *, struct value *, int); - -@@ -870,7 +872,7 @@ extern void set_internalvar_string (stru - extern void clear_internalvar (struct internalvar *var); - - extern void set_internalvar_component (struct internalvar *var, -- int offset, -+ LONGEST offset, - int bitpos, int bitsize, - struct value *newvalue); - -@@ -951,7 +953,7 @@ extern struct value *value_x_unop (struc - enum noside noside); - - extern struct value *value_fn_field (struct value **arg1p, struct fn_field *f, -- int j, struct type *type, int offset); -+ int j, struct type *type, LONGEST offset); - - extern int binop_types_user_defined_p (enum exp_opcode op, - struct type *type1, -@@ -979,7 +981,8 @@ extern void release_value_or_incref (str - extern int record_latest_value (struct value *val); - - extern void modify_field (struct type *type, gdb_byte *addr, -- LONGEST fieldval, int bitpos, int bitsize); -+ LONGEST fieldval, LONGEST bitpos, -+ int bitsize); - - extern void type_print (struct type *type, const char *varstring, - struct ui_file *stream, int show); -@@ -1009,7 +1012,7 @@ extern void value_print_array_elements ( - extern struct value *value_release_to_mark (struct value *mark); - - extern void val_print (struct type *type, const gdb_byte *valaddr, -- int embedded_offset, CORE_ADDR address, -+ LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options, -@@ -1062,10 +1065,11 @@ extern struct value *value_literal_compl - extern struct value *find_function_in_inferior (const char *, - struct objfile **); - --extern struct value *value_allocate_space_in_inferior (int); -+extern struct value *value_allocate_space_in_inferior (LONGEST); - - extern struct value *value_subscripted_rvalue (struct value *array, -- LONGEST index, int lowerbound); -+ LONGEST index, -+ LONGEST lowerbound); - - /* User function handler. */ - -diff -Naurp insight-7.10.50.20160208.orig/gdb/x86-nat.c insight-7.10.50.20160208.new/gdb/x86-nat.c ---- insight-7.10.50.20160208.orig/gdb/x86-nat.c 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/x86-nat.c 2016-02-09 14:35:03.885311840 +0100 -@@ -174,7 +174,7 @@ x86_remove_watchpoint (struct target_ops - - static int - x86_region_ok_for_watchpoint (struct target_ops *self, -- CORE_ADDR addr, int len) -+ CORE_ADDR addr, LONGEST len) - { - struct x86_debug_reg_state *state - = x86_debug_reg_state (ptid_get_pid (inferior_ptid)); diff --git a/insight-7.10.50-rhbz795424-bitpos-21of25.patch b/insight-7.10.50-rhbz795424-bitpos-21of25.patch deleted file mode 100644 index 9cb8e90..0000000 --- a/insight-7.10.50-rhbz795424-bitpos-21of25.patch +++ /dev/null @@ -1,153 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/alpha-tdep.c insight-7.10.50.20160208.new/gdb/alpha-tdep.c ---- insight-7.10.50.20160208.orig/gdb/alpha-tdep.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/alpha-tdep.c 2016-02-09 13:05:19.609102114 +0100 -@@ -413,6 +413,13 @@ alpha_push_dummy_call (struct gdbarch *g - accumulate_size = 0; - else - accumulate_size -= sizeof(arg_reg_buffer); -+ -+ /* Check for underflow. */ -+ if (sp - accumulate_size > sp) -+ error (_("Insufficient memory in GDB host for arguments, " -+ "need %s bytes, but less than %s bytes available."), -+ plongest (accumulate_size), plongest (CORE_ADDR_MAX - sp)); -+ - sp -= accumulate_size; - - /* Keep sp aligned to a multiple of 16 as the ABI requires. */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/cp-valprint.c insight-7.10.50.20160208.new/gdb/cp-valprint.c ---- insight-7.10.50.20160208.orig/gdb/cp-valprint.c 2016-02-09 13:04:07.487372951 +0100 -+++ insight-7.10.50.20160208.new/gdb/cp-valprint.c 2016-02-09 13:05:19.609102114 +0100 -@@ -536,6 +536,8 @@ cp_print_value (struct type *type, struc - gdb_byte *buf; - struct cleanup *back_to; - -+ ulongest_fits_host_or_error (TYPE_LENGTH (baseclass)); -+ - buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass)); - back_to = make_cleanup (xfree, buf); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/defs.h insight-7.10.50.20160208.new/gdb/defs.h ---- insight-7.10.50.20160208.orig/gdb/defs.h 2016-02-09 13:04:07.307371351 +0100 -+++ insight-7.10.50.20160208.new/gdb/defs.h 2016-02-09 13:05:19.614102160 +0100 -@@ -693,4 +693,6 @@ enum block_enum - - #include "utils.h" - -+extern void ulongest_fits_host_or_error (ULONGEST num); -+ - #endif /* #ifndef DEFS_H */ -diff -Naurp insight-7.10.50.20160208.orig/gdb/dwarf2loc.c insight-7.10.50.20160208.new/gdb/dwarf2loc.c ---- insight-7.10.50.20160208.orig/gdb/dwarf2loc.c 2016-02-09 13:04:07.490372978 +0100 -+++ insight-7.10.50.20160208.new/gdb/dwarf2loc.c 2016-02-09 13:05:19.610102123 +0100 -@@ -1744,6 +1744,8 @@ read_pieced_value (struct value *v) - - this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8; - source_offset = source_offset_bits / 8; -+ ulongest_fits_host_or_error (this_size); -+ - if (buffer_size < this_size) - { - buffer_size = this_size; -@@ -1926,6 +1928,7 @@ write_pieced_value (struct value *to, st - } - else - { -+ ulongest_fits_host_or_error (this_size); - if (buffer_size < this_size) - { - buffer_size = this_size; -diff -Naurp insight-7.10.50.20160208.orig/gdb/findcmd.c insight-7.10.50.20160208.new/gdb/findcmd.c ---- insight-7.10.50.20160208.orig/gdb/findcmd.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/findcmd.c 2016-02-09 13:05:19.610102123 +0100 -@@ -184,6 +184,7 @@ parse_find_args (char *args, ULONGEST *m - size_t current_offset = pattern_buf_end - pattern_buf; - - pattern_buf_size = pattern_buf_size_need * 2; -+ ulongest_fits_host_or_error (pattern_buf_size); - pattern_buf = (gdb_byte *) xrealloc (pattern_buf, pattern_buf_size); - pattern_buf_end = pattern_buf + current_offset; - } -diff -Naurp insight-7.10.50.20160208.orig/gdb/p-valprint.c insight-7.10.50.20160208.new/gdb/p-valprint.c ---- insight-7.10.50.20160208.orig/gdb/p-valprint.c 2016-02-09 13:04:07.516373209 +0100 -+++ insight-7.10.50.20160208.new/gdb/p-valprint.c 2016-02-09 13:05:19.610102123 +0100 -@@ -769,6 +769,7 @@ pascal_object_print_value (struct type * - gdb_byte *buf; - struct cleanup *back_to; - -+ ulongest_fits_host_or_error (TYPE_LENGTH (baseclass)); - buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass)); - back_to = make_cleanup (xfree, buf); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/utils.c insight-7.10.50.20160208.new/gdb/utils.c ---- insight-7.10.50.20160208.orig/gdb/utils.c 2016-02-09 13:04:07.408372249 +0100 -+++ insight-7.10.50.20160208.new/gdb/utils.c 2016-02-09 13:05:19.611102132 +0100 -@@ -2844,6 +2844,18 @@ string_to_core_addr (const char *my_stri - return addr; - } - -+/* Ensure that the input NUM is not larger than the maximum capacity of the -+ host system. We choose SIZE_MAX / 8 as a conservative estimate of the size -+ of a resource that a system may allocate. */ -+void -+ulongest_fits_host_or_error (ULONGEST num) -+{ -+ if (num > SIZE_MAX / 8) -+ error (_("Insufficient memory in host GDB for object of size %s bytes, " -+ "maximum allowed %s bytes."), pulongest (num), -+ pulongest (SIZE_MAX / 8)); -+} -+ - char * - gdb_realpath (const char *filename) - { -diff -Naurp insight-7.10.50.20160208.orig/gdb/valops.c insight-7.10.50.20160208.new/gdb/valops.c ---- insight-7.10.50.20160208.orig/gdb/valops.c 2016-02-09 13:04:07.529373324 +0100 -+++ insight-7.10.50.20160208.new/gdb/valops.c 2016-02-09 13:05:19.612102142 +0100 -@@ -2057,6 +2057,7 @@ search_struct_method (const char *name, - struct cleanup *back_to; - CORE_ADDR address; - -+ ulongest_fits_host_or_error (TYPE_LENGTH (baseclass)); - tmp = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass)); - back_to = make_cleanup (xfree, tmp); - address = value_address (*arg1p); -diff -Naurp insight-7.10.50.20160208.orig/gdb/value.c insight-7.10.50.20160208.new/gdb/value.c ---- insight-7.10.50.20160208.orig/gdb/value.c 2016-02-09 13:04:07.531373342 +0100 -+++ insight-7.10.50.20160208.new/gdb/value.c 2016-02-09 13:11:41.976669946 +0100 -@@ -934,6 +934,7 @@ allocate_value_lazy (struct type *type) - description correctly. */ - check_typedef (type); - -+ ulongest_fits_host_or_error (TYPE_LENGTH (type)); - val = XCNEW (struct value); - val->contents = NULL; - val->next = all_values; -@@ -1033,6 +1034,8 @@ check_type_length_before_alloc (const st - static void - allocate_value_contents (struct value *val) - { -+ ulongest_fits_host_or_error (TYPE_LENGTH (val->enclosing_type)); -+ - if (!val->contents) - { - check_type_length_before_alloc (val->enclosing_type); -@@ -3070,6 +3073,7 @@ set_value_enclosing_type (struct value * - if (TYPE_LENGTH (new_encl_type) > TYPE_LENGTH (value_enclosing_type (val))) - { - check_type_length_before_alloc (new_encl_type); -+ ulongest_fits_host_or_error (TYPE_LENGTH (new_encl_type)); - val->contents - = (gdb_byte *) xrealloc (val->contents, TYPE_LENGTH (new_encl_type)); - } -diff -Naurp insight-7.10.50.20160208.orig/gdb/vax-tdep.c insight-7.10.50.20160208.new/gdb/vax-tdep.c ---- insight-7.10.50.20160208.orig/gdb/vax-tdep.c 2016-01-12 11:43:19.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/vax-tdep.c 2016-02-09 13:05:19.613102151 +0100 -@@ -219,6 +219,7 @@ vax_return_value (struct gdbarch *gdbarc - ULONGEST addr; - - regcache_raw_read_unsigned (regcache, VAX_R0_REGNUM, &addr); -+ ulongest_fits_host_or_error (TYPE_LENGTH (type)); - read_memory (addr, readbuf, len); - } - diff --git a/insight-7.10.50-rhbz795424-bitpos-25of25.patch b/insight-7.10.50-rhbz795424-bitpos-25of25.patch deleted file mode 100644 index dbe3394..0000000 --- a/insight-7.10.50-rhbz795424-bitpos-25of25.patch +++ /dev/null @@ -1,84 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-lang.h insight-7.10.50.20160208.new/gdb/f-lang.h ---- insight-7.10.50.20160208.orig/gdb/f-lang.h 2016-02-09 13:16:17.173240238 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-lang.h 2016-02-09 13:17:09.559724525 +0100 -@@ -62,9 +62,9 @@ struct common_block - struct symbol *contents[1]; - }; - --extern int f77_get_upperbound (struct type *); -+extern LONGEST f77_get_upperbound (struct type *); - --extern int f77_get_lowerbound (struct type *); -+extern LONGEST f77_get_lowerbound (struct type *); - - extern void f77_get_dynamic_array_length (struct type *); - -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-typeprint.c insight-7.10.50.20160208.new/gdb/f-typeprint.c ---- insight-7.10.50.20160208.orig/gdb/f-typeprint.c 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-typeprint.c 2016-02-09 13:17:09.596724871 +0100 -@@ -159,7 +159,7 @@ f_type_print_varspec_suffix (struct type - int show, int passed_a_ptr, int demangled_args, - int arrayprint_recurse_level) - { -- int upper_bound, lower_bound; -+ LONGEST upper_bound, lower_bound; - - /* No static variables are permitted as an error call may occur during - execution of this function. */ -@@ -192,7 +192,7 @@ f_type_print_varspec_suffix (struct type - - lower_bound = f77_get_lowerbound (type); - if (lower_bound != 1) /* Not the default. */ -- fprintf_filtered (stream, "%d:", lower_bound); -+ fprintf_filtered (stream, "%s:", plongest (lower_bound)); - - /* Make sure that, if we have an assumed size array, we - print out a warning and print the upperbound as '*'. */ -@@ -202,7 +202,7 @@ f_type_print_varspec_suffix (struct type - else - { - upper_bound = f77_get_upperbound (type); -- fprintf_filtered (stream, "%d", upper_bound); -+ fprintf_filtered (stream, "%s", plongest (upper_bound)); - } - - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY) -@@ -271,7 +271,7 @@ void - f_type_print_base (struct type *type, struct ui_file *stream, int show, - int level) - { -- int upper_bound; -+ LONGEST upper_bound; - int index; - - QUIT; -@@ -353,7 +353,7 @@ f_type_print_base (struct type *type, st - else - { - upper_bound = f77_get_upperbound (type); -- fprintf_filtered (stream, "character*%d", upper_bound); -+ fprintf_filtered (stream, "character*%s", plongest (upper_bound)); - } - break; - -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-valprint.c insight-7.10.50.20160208.new/gdb/f-valprint.c ---- insight-7.10.50.20160208.orig/gdb/f-valprint.c 2016-02-09 13:16:17.175240256 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-valprint.c 2016-02-09 13:17:09.598724889 +0100 -@@ -54,7 +54,7 @@ LONGEST f77_array_offset_tbl[MAX_FORTRAN - - #define F77_DIM_OFFSET(n) (f77_array_offset_tbl[n][0]) - --int -+LONGEST - f77_get_lowerbound (struct type *type) - { - if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type)) -@@ -63,7 +63,7 @@ f77_get_lowerbound (struct type *type) - return TYPE_ARRAY_LOWER_BOUND_VALUE (type); - } - --int -+LONGEST - f77_get_upperbound (struct type *type) - { - if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) diff --git a/insight-7.10.50-vla-intel-04of23-fix.patch b/insight-7.10.50-vla-intel-04of23-fix.patch deleted file mode 100644 index b27173e..0000000 --- a/insight-7.10.50-vla-intel-04of23-fix.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/valarith.c insight-7.10.50.20160208.new/gdb/valarith.c ---- insight-7.10.50.20160208.orig/gdb/valarith.c 2016-02-09 13:49:51.955645068 +0100 -+++ insight-7.10.50.20160208.new/gdb/valarith.c 2016-02-09 13:52:49.285313457 +0100 -@@ -193,10 +193,17 @@ value_subscripted_rvalue (struct value * - struct type *array_type = check_typedef (value_type (array)); - struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); - ULONGEST elt_size = type_length_units (elt_type); -- ULONGEST elt_offs = longest_to_int (index - lowerbound); -+ ULONGEST elt_offs; - LONGEST elt_stride = TYPE_BYTE_STRIDE (TYPE_INDEX_TYPE (array_type)); - struct value *v; - -+ if (TYPE_NOT_ASSOCIATED (array_type)) -+ error (_("no such vector element (vector not associated)")); -+ if (TYPE_NOT_ALLOCATED (array_type)) -+ error (_("no such vector element (vector not allocated)")); -+ -+ elt_offs = longest_to_int (index - lowerbound); -+ - if (elt_stride > 0) - elt_offs *= elt_stride; - else if (elt_stride < 0) -@@ -210,14 +217,7 @@ value_subscripted_rvalue (struct value * - - if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) - && elt_offs >= type_length_units (array_type))) -- { -- if (type_not_associated (array_type)) -- error (_("no such vector element (vector not associated)")); -- else if (type_not_allocated (array_type)) -- error (_("no such vector element (vector not allocated)")); -- else -- error (_("no such vector element")); -- } -+ error (_("no such vector element")); - - if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) - v = allocate_value_lazy (elt_type); diff --git a/insight-7.10.50-vla-intel.patch b/insight-7.10.50-vla-intel.patch deleted file mode 100644 index 2719815..0000000 --- a/insight-7.10.50-vla-intel.patch +++ /dev/null @@ -1,1453 +0,0 @@ -diff -Naurp insight-7.10.50.20160208.orig/gdb/c-valprint.c insight-7.10.50.20160208.new/gdb/c-valprint.c ---- insight-7.10.50.20160208.orig/gdb/c-valprint.c 2016-02-09 13:29:11.988205821 +0100 -+++ insight-7.10.50.20160208.new/gdb/c-valprint.c 2016-02-09 13:30:19.556837551 +0100 -@@ -643,7 +643,16 @@ c_value_print (struct value *val, struct - { - /* normal case */ - fprintf_filtered (stream, "("); -- type_print (value_type (val), "", stream, -1); -+ if (is_dynamic_type (TYPE_TARGET_TYPE (type))) -+ { -+ struct value *v; -+ -+ v = value_ind (val); -+ v = value_addr (v); -+ type_print (value_type (v), "", stream, -1); -+ } -+ else -+ type_print (value_type (val), "", stream, -1); - fprintf_filtered (stream, ") "); - } - } -diff -Naurp insight-7.10.50.20160208.orig/gdb/dwarf2loc.c insight-7.10.50.20160208.new/gdb/dwarf2loc.c ---- insight-7.10.50.20160208.orig/gdb/dwarf2loc.c 2016-02-09 13:29:12.038206289 +0100 -+++ insight-7.10.50.20160208.new/gdb/dwarf2loc.c 2016-02-09 13:30:19.581837785 +0100 -@@ -2372,6 +2372,11 @@ dwarf2_evaluate_loc_desc_full (struct ty - address = value_as_address (value_from_pointer (ptr_type, address)); - - do_cleanups (value_chain); -+ -+ /* Select right frame to correctly evaluate VLA's during a backtrace. */ -+ if (is_dynamic_type (type)) -+ select_frame (frame); -+ - retval = value_at_lazy (type, address + byte_offset); - if (in_stack_memory) - set_value_stack (retval, 1); -@@ -2664,6 +2669,19 @@ dwarf2_compile_property_to_c (struct ui_ - data, data + size, per_cu); - } - -+/* See dwarf2loc.h. */ -+ -+int -+dwarf2_address_data_valid (const struct type *type) -+{ -+ if (TYPE_NOT_ASSOCIATED (type)) -+ return 0; -+ -+ if (TYPE_NOT_ALLOCATED (type)) -+ return 0; -+ -+ return 1; -+} - - /* Helper functions and baton for dwarf2_loc_desc_needs_frame. */ - -diff -Naurp insight-7.10.50.20160208.orig/gdb/dwarf2loc.h insight-7.10.50.20160208.new/gdb/dwarf2loc.h ---- insight-7.10.50.20160208.orig/gdb/dwarf2loc.h 2016-01-12 11:43:18.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/dwarf2loc.h 2016-02-09 13:30:19.558837570 +0100 -@@ -138,6 +138,11 @@ int dwarf2_evaluate_property (const stru - struct property_addr_info *addr_stack, - CORE_ADDR *value); - -+/* Checks if a dwarf location definition is valid. -+ Returns 1 if valid; 0 otherwise. */ -+ -+extern int dwarf2_address_data_valid (const struct type *type); -+ - /* A helper for the compiler interface that compiles a single dynamic - property to C code. - -diff -Naurp insight-7.10.50.20160208.orig/gdb/dwarf2read.c insight-7.10.50.20160208.new/gdb/dwarf2read.c ---- insight-7.10.50.20160208.orig/gdb/dwarf2read.c 2016-02-09 13:29:12.127207121 +0100 -+++ insight-7.10.50.20160208.new/gdb/dwarf2read.c 2016-02-09 13:30:19.565837635 +0100 -@@ -1746,7 +1746,9 @@ static void read_signatured_type (struct - - static int attr_to_dynamic_prop (const struct attribute *attr, - struct die_info *die, struct dwarf2_cu *cu, -- struct dynamic_prop *prop); -+ struct dynamic_prop *prop, -+ const gdb_byte *additional_data, -+ int additional_data_size); - - /* memory allocation interface */ - -@@ -11442,7 +11444,7 @@ read_func_scope (struct die_info *die, s - { - newobj->static_link - = XOBNEW (&objfile->objfile_obstack, struct dynamic_prop); -- attr_to_dynamic_prop (attr, die, cu, newobj->static_link); -+ attr_to_dynamic_prop (attr, die, cu, newobj->static_link, NULL, 0); - } - - cu->list_in_scope = &local_symbols; -@@ -14493,29 +14495,92 @@ read_tag_string_type (struct die_info *d - struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct type *type, *range_type, *index_type, *char_type; - struct attribute *attr; -- unsigned int length; -+ unsigned int length = UINT_MAX; - -+ index_type = objfile_type (objfile)->builtin_int; -+ range_type = create_static_range_type (NULL, index_type, 1, length); -+ -+ /* If DW_AT_string_length is defined, the length is stored at some location -+ * in memory. */ - attr = dwarf2_attr (die, DW_AT_string_length, cu); - if (attr) - { -- length = DW_UNSND (attr); -+ if (attr_form_is_block (attr)) -+ { -+ struct attribute *byte_size, *bit_size; -+ struct dynamic_prop high; -+ -+ byte_size = dwarf2_attr (die, DW_AT_byte_size, cu); -+ bit_size = dwarf2_attr (die, DW_AT_bit_size, cu); -+ -+ /* DW_AT_byte_size should never occur together in combination with -+ DW_AT_string_length. */ -+ if ((byte_size == NULL && bit_size != NULL) || -+ (byte_size != NULL && bit_size == NULL)) -+ complaint (&symfile_complaints, _("DW_AT_byte_size AND " -+ "DW_AT_bit_size found together at the same time.")); -+ -+ /* If DW_AT_string_length AND DW_AT_byte_size exist together, it -+ describes the number of bytes that should be read from the length -+ memory location. */ -+ if (byte_size != NULL && bit_size == NULL) -+ { -+ /* Build new dwarf2_locexpr_baton structure with additions to the -+ data attribute, to reflect DWARF specialities to get address -+ sizes. */ -+ const gdb_byte append_ops[] = { -+ /* DW_OP_deref_size: size of an address on the target machine -+ (bytes), where the size will be specified by the next -+ operand. */ -+ DW_OP_deref_size, -+ /* Operand for DW_OP_deref_size. */ -+ DW_UNSND (byte_size) }; -+ -+ if (!attr_to_dynamic_prop (attr, die, cu, &high, -+ append_ops, ARRAY_SIZE (append_ops))) -+ complaint (&symfile_complaints, -+ _("Could not parse DW_AT_byte_size")); -+ } -+ else if (bit_size != NULL && byte_size == NULL) -+ complaint (&symfile_complaints, _("DW_AT_string_length AND " -+ "DW_AT_bit_size found but not supported yet.")); -+ /* If DW_AT_string_length WITHOUT DW_AT_byte_size exist, the default -+ is the address size of the target machine. */ -+ else -+ { -+ const gdb_byte append_ops[] = { DW_OP_deref }; -+ -+ if (!attr_to_dynamic_prop (attr, die, cu, &high, append_ops, -+ ARRAY_SIZE (append_ops))) -+ complaint (&symfile_complaints, -+ _("Could not parse DW_AT_string_length")); -+ } -+ -+ TYPE_RANGE_DATA (range_type)->high = high; -+ } -+ else -+ { -+ TYPE_HIGH_BOUND (range_type) = DW_UNSND (attr); -+ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST; -+ } - } - else - { -- /* Check for the DW_AT_byte_size attribute. */ -+ /* Check for the DW_AT_byte_size attribute, which represents the length -+ in this case. */ - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr) - { -- length = DW_UNSND (attr); -+ TYPE_HIGH_BOUND (range_type) = DW_UNSND (attr); -+ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST; - } - else - { -- length = 1; -+ TYPE_HIGH_BOUND (range_type) = 1; -+ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST; - } - } - -- index_type = objfile_type (objfile)->builtin_int; -- range_type = create_static_range_type (NULL, index_type, 1, length); - char_type = language_string_char_type (cu->language_defn, gdbarch); - type = create_string_type (NULL, char_type, range_type); - -@@ -14838,13 +14903,15 @@ read_base_type (struct die_info *die, st - return set_die_type (die, type, cu); - } - -+ - /* Parse dwarf attribute if it's a block, reference or constant and put the - resulting value of the attribute into struct bound_prop. - Returns 1 if ATTR could be resolved into PROP, 0 otherwise. */ - - static int - attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die, -- struct dwarf2_cu *cu, struct dynamic_prop *prop) -+ struct dwarf2_cu *cu, struct dynamic_prop *prop, -+ const gdb_byte *additional_data, int additional_data_size) - { - struct dwarf2_property_baton *baton; - struct obstack *obstack = &cu->objfile->objfile_obstack; -@@ -14857,8 +14924,25 @@ attr_to_dynamic_prop (const struct attri - baton = XOBNEW (obstack, struct dwarf2_property_baton); - baton->referenced_type = NULL; - baton->locexpr.per_cu = cu->per_cu; -- baton->locexpr.size = DW_BLOCK (attr)->size; -- baton->locexpr.data = DW_BLOCK (attr)->data; -+ -+ if (additional_data != NULL && additional_data_size > 0) -+ { -+ gdb_byte *data; -+ -+ data = obstack_alloc (&cu->objfile->objfile_obstack, -+ DW_BLOCK (attr)->size + additional_data_size); -+ memcpy (data, DW_BLOCK (attr)->data, DW_BLOCK (attr)->size); -+ memcpy (data + DW_BLOCK (attr)->size, -+ additional_data, additional_data_size); -+ -+ baton->locexpr.data = data; -+ baton->locexpr.size = DW_BLOCK (attr)->size + additional_data_size; -+ } -+ else -+ { -+ baton->locexpr.data = DW_BLOCK (attr)->data; -+ baton->locexpr.size = DW_BLOCK (attr)->size; -+ } - prop->data.baton = baton; - prop->kind = PROP_LOCEXPR; - gdb_assert (prop->data.baton != NULL); -@@ -14894,8 +14978,28 @@ attr_to_dynamic_prop (const struct attri - baton = XOBNEW (obstack, struct dwarf2_property_baton); - baton->referenced_type = die_type (target_die, target_cu); - baton->locexpr.per_cu = cu->per_cu; -- baton->locexpr.size = DW_BLOCK (target_attr)->size; -- baton->locexpr.data = DW_BLOCK (target_attr)->data; -+ -+ if (additional_data != NULL && additional_data_size > 0) -+ { -+ gdb_byte *data; -+ -+ data = obstack_alloc (&cu->objfile->objfile_obstack, -+ DW_BLOCK (target_attr)->size + additional_data_size); -+ memcpy (data, DW_BLOCK (target_attr)->data, -+ DW_BLOCK (target_attr)->size); -+ memcpy (data + DW_BLOCK (target_attr)->size, -+ additional_data, additional_data_size); -+ -+ baton->locexpr.data = data; -+ baton->locexpr.size = (DW_BLOCK (target_attr)->size -+ + additional_data_size); -+ } -+ else -+ { -+ baton->locexpr.data = DW_BLOCK (target_attr)->data; -+ baton->locexpr.size = DW_BLOCK (target_attr)->size; -+ } -+ - prop->data.baton = baton; - prop->kind = PROP_LOCEXPR; - gdb_assert (prop->data.baton != NULL); -@@ -14949,7 +15053,7 @@ read_subrange_type (struct die_info *die - struct type *base_type, *orig_base_type; - struct type *range_type; - struct attribute *attr; -- struct dynamic_prop low, high; -+ struct dynamic_prop low, high, stride; - int low_default_is_valid; - int high_bound_is_count = 0; - const char *name; -@@ -14969,7 +15073,9 @@ read_subrange_type (struct die_info *die - - low.kind = PROP_CONST; - high.kind = PROP_CONST; -+ stride.kind = PROP_CONST; - high.data.const_val = 0; -+ stride.data.const_val = 0; - - /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow - omitting DW_AT_lower_bound. */ -@@ -15002,19 +15108,26 @@ read_subrange_type (struct die_info *die - break; - } - -+ attr = dwarf2_attr (die, DW_AT_byte_stride, cu); -+ if (attr) -+ if (!attr_to_dynamic_prop (attr, die, cu, &stride, NULL, 0)) -+ complaint (&symfile_complaints, _("Missing DW_AT_byte_stride " -+ "- DIE at 0x%x [in module %s]"), -+ die->offset.sect_off, objfile_name (cu->objfile)); -+ - attr = dwarf2_attr (die, DW_AT_lower_bound, cu); - if (attr) -- attr_to_dynamic_prop (attr, die, cu, &low); -+ attr_to_dynamic_prop (attr, die, cu, &low, NULL, 0); - else if (!low_default_is_valid) - complaint (&symfile_complaints, _("Missing DW_AT_lower_bound " - "- DIE at 0x%x [in module %s]"), - die->offset.sect_off, objfile_name (cu->objfile)); - - attr = dwarf2_attr (die, DW_AT_upper_bound, cu); -- if (!attr_to_dynamic_prop (attr, die, cu, &high)) -+ if (!attr_to_dynamic_prop (attr, die, cu, &high, NULL, 0)) - { - attr = dwarf2_attr (die, DW_AT_count, cu); -- if (attr_to_dynamic_prop (attr, die, cu, &high)) -+ if (attr_to_dynamic_prop (attr, die, cu, &high, NULL, 0)) - { - /* If bounds are constant do the final calculation here. */ - if (low.kind == PROP_CONST && high.kind == PROP_CONST) -@@ -15078,7 +15191,7 @@ read_subrange_type (struct die_info *die - && !TYPE_UNSIGNED (base_type) && (high.data.const_val & negative_mask)) - high.data.const_val |= negative_mask; - -- range_type = create_range_type (NULL, orig_base_type, &low, &high); -+ range_type = create_range_type (NULL, orig_base_type, &low, &high, &stride); - - if (high_bound_is_count) - TYPE_RANGE_DATA (range_type)->flag_upper_bound_is_count = 1; -@@ -22403,7 +22516,7 @@ set_die_type (struct die_info *die, stru - attr = dwarf2_attr (die, DW_AT_allocated, cu); - if (attr_form_is_block (attr)) - { -- if (attr_to_dynamic_prop (attr, die, cu, &prop)) -+ if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0)) - add_dyn_prop (DYN_PROP_ALLOCATED, prop, type, objfile); - } - else if (attr != NULL) -@@ -22418,7 +22531,7 @@ set_die_type (struct die_info *die, stru - attr = dwarf2_attr (die, DW_AT_associated, cu); - if (attr_form_is_block (attr)) - { -- if (attr_to_dynamic_prop (attr, die, cu, &prop)) -+ if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0)) - add_dyn_prop (DYN_PROP_ASSOCIATED, prop, type, objfile); - } - else if (attr != NULL) -@@ -22431,7 +22544,7 @@ set_die_type (struct die_info *die, stru - - /* Read DW_AT_data_location and set in type. */ - attr = dwarf2_attr (die, DW_AT_data_location, cu); -- if (attr_to_dynamic_prop (attr, die, cu, &prop)) -+ if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0)) - add_dyn_prop (DYN_PROP_DATA_LOCATION, prop, type, objfile); - - if (dwarf2_per_objfile->die_type_hash == NULL) -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-typeprint.c insight-7.10.50.20160208.new/gdb/f-typeprint.c ---- insight-7.10.50.20160208.orig/gdb/f-typeprint.c 2016-02-09 13:29:12.108206943 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-typeprint.c 2016-02-09 13:30:19.567837654 +0100 -@@ -31,6 +31,7 @@ - #include "target.h" - #include "f-lang.h" - #include "typeprint.h" -+#include "valprint.h" - - #if 0 /* Currently unused. */ - static void f_type_print_args (struct type *, struct ui_file *); -@@ -64,6 +65,17 @@ f_print_type (struct type *type, const c - { - val_print_not_allocated (stream); - return; -+ } -+ -+ if (TYPE_NOT_ASSOCIATED (type)) -+ { -+ val_print_not_associated (stream); -+ return; -+ } -+ if (TYPE_NOT_ALLOCATED (type)) -+ { -+ val_print_not_allocated (stream); -+ return; - } - - f_type_print_base (type, stream, show, level); -diff -Naurp insight-7.10.50.20160208.orig/gdb/f-valprint.c insight-7.10.50.20160208.new/gdb/f-valprint.c ---- insight-7.10.50.20160208.orig/gdb/f-valprint.c 2016-02-09 13:29:12.108206943 +0100 -+++ insight-7.10.50.20160208.new/gdb/f-valprint.c 2016-02-09 13:39:02.647690307 +0100 -@@ -36,8 +36,6 @@ - - extern void _initialize_f_valprint (void); - static void info_common_command (char *, int); --static void f77_create_arrayprint_offset_tbl (struct type *, -- struct ui_file *); - static void f77_get_dynamic_length_of_aggregate (struct type *); - - LONGEST f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2]; -@@ -45,15 +43,6 @@ LONGEST f77_array_offset_tbl[MAX_FORTRAN - /* Array which holds offsets to be applied to get a row's elements - for a given array. Array also holds the size of each subarray. */ - --/* The following macro gives us the size of the nth dimension, Where -- n is 1 based. */ -- --#define F77_DIM_SIZE(n) (f77_array_offset_tbl[n][1]) -- --/* The following gives us the offset for row n where n is 1-based. */ -- --#define F77_DIM_OFFSET(n) (f77_array_offset_tbl[n][0]) -- - LONGEST - f77_get_lowerbound (struct type *type) - { -@@ -111,47 +100,6 @@ f77_get_dynamic_length_of_aggregate (str - * TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type))); - } - --/* Function that sets up the array offset,size table for the array -- type "type". */ -- --static void --f77_create_arrayprint_offset_tbl (struct type *type, struct ui_file *stream) --{ -- struct type *tmp_type; -- int eltlen; -- int ndimen = 1; -- int upper, lower; -- -- tmp_type = type; -- -- while (TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY) -- { -- upper = f77_get_upperbound (tmp_type); -- lower = f77_get_lowerbound (tmp_type); -- -- F77_DIM_SIZE (ndimen) = upper - lower + 1; -- -- tmp_type = TYPE_TARGET_TYPE (tmp_type); -- ndimen++; -- } -- -- /* Now we multiply eltlen by all the offsets, so that later we -- can print out array elements correctly. Up till now we -- know an offset to apply to get the item but we also -- have to know how much to add to get to the next item. */ -- -- ndimen--; -- eltlen = TYPE_LENGTH (tmp_type); -- F77_DIM_OFFSET (ndimen) = eltlen; -- while (--ndimen > 0) -- { -- eltlen *= F77_DIM_SIZE (ndimen + 1); -- F77_DIM_OFFSET (ndimen) = eltlen; -- } --} -- -- -- - /* Actual function which prints out F77 arrays, Valaddr == address in - the superior. Address == the address in the inferior. */ - -@@ -164,41 +112,62 @@ f77_print_array_1 (int nss, int ndimensi - const struct value_print_options *options, - int *elts) - { -+ struct type *range_type = TYPE_INDEX_TYPE (check_typedef (type)); -+ CORE_ADDR addr = address + embedded_offset; -+ LONGEST lowerbound, upperbound; - LONGEST i; - -+ get_discrete_bounds (range_type, &lowerbound, &upperbound); -+ - if (nss != ndimensions) - { -- for (i = 0; -- (i < F77_DIM_SIZE (nss) && (*elts) < options->print_max); -+ size_t dim_size; -+ size_t offs = 0; -+ LONGEST byte_stride = abs (TYPE_BYTE_STRIDE (range_type)); -+ -+ if (byte_stride) -+ dim_size = byte_stride; -+ else -+ dim_size = TYPE_LENGTH (TYPE_TARGET_TYPE (type)); -+ -+ for (i = lowerbound; -+ (i < upperbound + 1 && (*elts) < options->print_max); - i++) - { -+ struct value *subarray = value_from_contents_and_address -+ (TYPE_TARGET_TYPE (type), value_contents_for_printing_const (val) -+ + offs, addr + offs); -+ - fprintf_filtered (stream, "( "); -- f77_print_array_1 (nss + 1, ndimensions, TYPE_TARGET_TYPE (type), -- valaddr, -- embedded_offset + i * F77_DIM_OFFSET (nss), -- address, -- stream, recurse, val, options, elts); -+ f77_print_array_1 (nss + 1, ndimensions, value_type (subarray), -+ value_contents_for_printing (subarray), -+ value_embedded_offset (subarray), -+ value_address (subarray), -+ stream, recurse, subarray, options, elts); -+ offs += dim_size; - fprintf_filtered (stream, ") "); - } -- if (*elts >= options->print_max && i < F77_DIM_SIZE (nss)) -+ if (*elts >= options->print_max && i < upperbound) - fprintf_filtered (stream, "..."); - } - else - { -- for (i = 0; i < F77_DIM_SIZE (nss) && (*elts) < options->print_max; -+ for (i = lowerbound; i < upperbound + 1 && (*elts) < options->print_max; - i++, (*elts)++) - { -- val_print (TYPE_TARGET_TYPE (type), -- valaddr, -- embedded_offset + i * F77_DIM_OFFSET (ndimensions), -- address, stream, recurse, -- val, options, current_language); -+ struct value *elt = value_subscript ((struct value *)val, i); -+ -+ val_print (value_type (elt), -+ value_contents_for_printing (elt), -+ value_embedded_offset (elt), -+ value_address (elt), stream, recurse, -+ elt, options, current_language); - -- if (i != (F77_DIM_SIZE (nss) - 1)) -+ if (i != upperbound) - fprintf_filtered (stream, ", "); - - if ((*elts == options->print_max - 1) -- && (i != (F77_DIM_SIZE (nss) - 1))) -+ && (i != upperbound)) - fprintf_filtered (stream, "..."); - } - } -@@ -225,12 +194,6 @@ f77_print_array (struct type *type, cons - Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"), - ndimensions, MAX_FORTRAN_DIMS); - -- /* Since F77 arrays are stored column-major, we set up an -- offset table to get at the various row's elements. The -- offset table contains entries for both offset and subarray size. */ -- -- f77_create_arrayprint_offset_tbl (type, stream); -- - f77_print_array_1 (1, ndimensions, type, valaddr, embedded_offset, - address, stream, recurse, val, options, &elts); - } -@@ -376,12 +339,15 @@ f_val_print (struct type *type, const gd - fprintf_filtered (stream, "( "); - for (index = 0; index < TYPE_NFIELDS (type); index++) - { -- int offset = TYPE_FIELD_BITPOS (type, index) / 8; -+ struct value *field = value_field -+ ((struct value *)original_value, index); -+ -+ val_print (value_type (field), -+ value_contents_for_printing (field), -+ value_embedded_offset (field), -+ value_address (field), stream, recurse + 1, -+ field, options, current_language); - -- val_print (TYPE_FIELD_TYPE (type, index), valaddr, -- embedded_offset + offset, -- address, stream, recurse + 1, -- original_value, options, current_language); - if (index != TYPE_NFIELDS (type) - 1) - fputs_filtered (", ", stream); - } -diff -Naurp insight-7.10.50.20160208.orig/gdb/gdbtypes.c insight-7.10.50.20160208.new/gdb/gdbtypes.c ---- insight-7.10.50.20160208.orig/gdb/gdbtypes.c 2016-02-09 13:29:12.002205952 +0100 -+++ insight-7.10.50.20160208.new/gdb/gdbtypes.c 2016-02-09 13:30:19.570837682 +0100 -@@ -836,7 +836,8 @@ allocate_stub_method (struct type *type) - struct type * - create_range_type (struct type *result_type, struct type *index_type, - const struct dynamic_prop *low_bound, -- const struct dynamic_prop *high_bound) -+ const struct dynamic_prop *high_bound, -+ const struct dynamic_prop *stride) - { - if (result_type == NULL) - result_type = alloc_type_copy (index_type); -@@ -851,6 +852,7 @@ create_range_type (struct type *result_t - TYPE_ZALLOC (result_type, sizeof (struct range_bounds)); - TYPE_RANGE_DATA (result_type)->low = *low_bound; - TYPE_RANGE_DATA (result_type)->high = *high_bound; -+ TYPE_RANGE_DATA (result_type)->stride = *stride; - - if (low_bound->kind == PROP_CONST && low_bound->data.const_val >= 0) - TYPE_UNSIGNED (result_type) = 1; -@@ -879,7 +881,7 @@ struct type * - create_static_range_type (struct type *result_type, struct type *index_type, - LONGEST low_bound, LONGEST high_bound) - { -- struct dynamic_prop low, high; -+ struct dynamic_prop low, high, stride; - - low.kind = PROP_CONST; - low.data.const_val = low_bound; -@@ -887,7 +889,11 @@ create_static_range_type (struct type *r - high.kind = PROP_CONST; - high.data.const_val = high_bound; - -- result_type = create_range_type (result_type, index_type, &low, &high); -+ stride.kind = PROP_CONST; -+ stride.data.const_val = 0; -+ -+ result_type = create_range_type (result_type, index_type, -+ &low, &high, &stride); - - return result_type; - } -@@ -1084,16 +1090,21 @@ create_array_type_with_stride (struct ty - && (!type_not_associated (result_type) - && !type_not_allocated (result_type))) - { -- LONGEST low_bound, high_bound; -+ LONGEST low_bound, high_bound, byte_stride; - - if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) - low_bound = high_bound = 0; - element_type = check_typedef (element_type); -+ -+ byte_stride = abs (TYPE_BYTE_STRIDE (range_type)); -+ - /* Be careful when setting the array length. Ada arrays can be - empty arrays with the high_bound being smaller than the low_bound. - In such cases, the array length should be zero. */ - if (high_bound < low_bound) - TYPE_LENGTH (result_type) = 0; -+ else if (byte_stride > 0) -+ TYPE_LENGTH (result_type) = byte_stride * (high_bound - low_bound + 1); - else if (bit_stride > 0) - TYPE_LENGTH (result_type) = - (bit_stride * (high_bound - low_bound + 1) + 7) / 8; -@@ -1804,12 +1815,31 @@ stub_noname_complaint (void) - static int - is_dynamic_type_internal (struct type *type, int top_level) - { -+ int index; -+ -+ if (!type) -+ return 0; -+ - type = check_typedef (type); - - /* We only want to recognize references at the outermost level. */ - if (top_level && TYPE_CODE (type) == TYPE_CODE_REF) - type = check_typedef (TYPE_TARGET_TYPE (type)); - -+ if (TYPE_ASSOCIATED_PROP (type)) -+ return 1; -+ -+ if (TYPE_ALLOCATED_PROP (type)) -+ return 1; -+ -+ /* Scan field types in the Fortran case for nested dynamic types. -+ This will be done only for Fortran as in the C++ case an endless recursion -+ can occur in the area of classes. */ -+ if (current_language->la_language == language_fortran) -+ for (index = 0; index < TYPE_NFIELDS (type); index++) -+ if (is_dynamic_type (TYPE_FIELD_TYPE (type, index))) -+ return 1; -+ - /* Types that have a dynamic TYPE_DATA_LOCATION are considered - dynamic, even if the type itself is statically defined. - From a user's point of view, this may appear counter-intuitive; -@@ -1844,11 +1874,19 @@ is_dynamic_type_internal (struct type *t - { - gdb_assert (TYPE_NFIELDS (type) == 1); - -- /* The array is dynamic if either the bounds are dynamic, -- or the elements it contains have a dynamic contents. */ -+ /* The array is dynamic if either -+ - the bounds are dynamic, -+ - the elements it contains have a dynamic contents -+ - a data_locaton attribute was found. */ - if (is_dynamic_type_internal (TYPE_INDEX_TYPE (type), 0)) - return 1; -- return is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0); -+ else if (TYPE_DATA_LOCATION (type) != NULL -+ && (TYPE_DATA_LOCATION_KIND (type) == PROP_LOCEXPR -+ || TYPE_DATA_LOCATION_KIND (type) == PROP_LOCLIST)) -+ return 1; -+ else -+ return is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0); -+ break; - } - - case TYPE_CODE_STRUCT: -@@ -1861,6 +1899,18 @@ is_dynamic_type_internal (struct type *t - && is_dynamic_type_internal (TYPE_FIELD_TYPE (type, i), 0)) - return 1; - } -+ case TYPE_CODE_PTR: -+ { -+ if (TYPE_TARGET_TYPE (type) -+ && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRING -+ || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)) -+ return is_dynamic_type (check_typedef (TYPE_TARGET_TYPE (type))); -+ -+ return 0; -+ break; -+ } -+ default: -+ return 0; - break; - } - -@@ -1890,7 +1940,8 @@ resolve_dynamic_range (struct type *dyn_ - struct type *static_range_type, *static_target_type; - const struct dynamic_prop *prop; - const struct dwarf2_locexpr_baton *baton; -- struct dynamic_prop low_bound, high_bound; -+ struct dynamic_prop low_bound, high_bound, stride; -+ struct type *range_copy = copy_type (dyn_range_type); - - gdb_assert (TYPE_CODE (dyn_range_type) == TYPE_CODE_RANGE); - -@@ -1922,12 +1973,19 @@ resolve_dynamic_range (struct type *dyn_ - high_bound.data.const_val = 0; - } - -+ prop = &TYPE_RANGE_DATA (dyn_range_type)->stride; -+ if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) -+ { -+ stride.kind = PROP_CONST; -+ stride.data.const_val = value; -+ } -+ - static_target_type -- = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (dyn_range_type), -+ = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (range_copy), - addr_stack, 0); -- static_range_type = create_range_type (copy_type (dyn_range_type), -+ static_range_type = create_range_type (range_copy, - static_target_type, -- &low_bound, &high_bound); -+ &low_bound, &high_bound, &stride); - TYPE_RANGE_DATA (static_range_type)->flag_bound_evaluated = 1; - return static_range_type; - } -@@ -1946,7 +2004,8 @@ resolve_dynamic_array (struct type *type - struct type *ary_dim; - struct dynamic_prop *prop; - -- gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY); -+ gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY -+ || TYPE_CODE (type) == TYPE_CODE_STRING); - - type = copy_type (type); - -@@ -1971,13 +2030,18 @@ resolve_dynamic_array (struct type *type - - ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type)); - -- if (ary_dim != NULL && TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY) -+ if (ary_dim != NULL && (TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY -+ || TYPE_CODE (ary_dim) == TYPE_CODE_STRING)) - elt_type = resolve_dynamic_array (ary_dim, addr_stack); - else - elt_type = TYPE_TARGET_TYPE (type); - -- return create_array_type_with_stride (type, elt_type, range_type, -- TYPE_FIELD_BITSIZE (type, 0)); -+ if (TYPE_CODE (type) == TYPE_CODE_STRING -+ && TYPE_FIELD_BITSIZE (type, 0) == 0) -+ return create_string_type (type, elt_type, range_type); -+ else -+ return create_array_type_with_stride (type, elt_type, range_type, -+ TYPE_FIELD_BITSIZE (type, 0)); - } - - /* Resolve dynamic bounds of members of the union TYPE to static -diff -Naurp insight-7.10.50.20160208.orig/gdb/gdbtypes.h insight-7.10.50.20160208.new/gdb/gdbtypes.h ---- insight-7.10.50.20160208.orig/gdb/gdbtypes.h 2016-02-09 13:29:12.003205962 +0100 -+++ insight-7.10.50.20160208.new/gdb/gdbtypes.h 2016-02-09 13:30:19.571837691 +0100 -@@ -579,6 +579,10 @@ struct range_bounds - - struct dynamic_prop high; - -+ /* * Stride of range. */ -+ -+ struct dynamic_prop stride; -+ - /* True if HIGH range bound contains the number of elements in the - subrange. This affects how the final hight bound is computed. */ - -@@ -751,6 +755,18 @@ struct main_type - - /* * Contains all dynamic type properties. */ - struct dynamic_prop_list *dyn_prop_list; -+ -+ /* Structure for DW_AT_allocated. -+ The presence of this attribute indicates that the object of the type -+ can be allocated/deallocated. The value can be a dwarf expression, -+ reference, or a constant. */ -+ struct dynamic_prop *allocated; -+ -+ /* Structure for DW_AT_associated. -+ The presence of this attribute indicated that the object of the type -+ can be associated. The value can be a dwarf expression, -+ reference, or a constant. */ -+ struct dynamic_prop *associated; - }; - - /* * A ``struct type'' describes a particular instance of a type, with -@@ -1257,6 +1273,15 @@ extern void allocate_gnat_aux_type (stru - TYPE_RANGE_DATA(range_type)->high.kind - #define TYPE_LOW_BOUND_KIND(range_type) \ - TYPE_RANGE_DATA(range_type)->low.kind -+#define TYPE_BYTE_STRIDE(range_type) \ -+ TYPE_RANGE_DATA(range_type)->stride.data.const_val -+#define TYPE_BYTE_STRIDE_BLOCK(range_type) \ -+ TYPE_RANGE_DATA(range_type)->stride.data.locexpr -+#define TYPE_BYTE_STRIDE_LOCLIST(range_type) \ -+ TYPE_RANGE_DATA(range_type)->stride.data.loclist -+#define TYPE_BYTE_STRIDE_KIND(range_type) \ -+ TYPE_RANGE_DATA(range_type)->stride.kind -+ - - /* Property accessors for the type data location. */ - #define TYPE_DATA_LOCATION(thistype) \ -@@ -1268,6 +1293,18 @@ extern void allocate_gnat_aux_type (stru - #define TYPE_DATA_LOCATION_KIND(thistype) \ - TYPE_DATA_LOCATION (thistype)->kind - -+/* Allocated status of type object. If set to non-zero it means the object -+ is allocated. A zero value means it is not allocated. */ -+#define TYPE_NOT_ALLOCATED(t) (TYPE_ALLOCATED_PROP (t) \ -+ && TYPE_ALLOCATED_PROP (t)->kind == PROP_CONST \ -+ && !TYPE_ALLOCATED_PROP (t)->data.const_val) -+ -+/* Associated status of type object. If set to non-zero it means the object -+ is associated. A zero value means it is not associated. */ -+#define TYPE_NOT_ASSOCIATED(t) (TYPE_ASSOCIATED_PROP (t) \ -+ && TYPE_ASSOCIATED_PROP (t)->kind == PROP_CONST \ -+ && !TYPE_ASSOCIATED_PROP (t)->data.const_val) -+ - /* Property accessors for the type allocated/associated. */ - #define TYPE_ALLOCATED_PROP(thistype) \ - get_dyn_prop (DYN_PROP_ALLOCATED, thistype) -@@ -1291,6 +1328,9 @@ extern void allocate_gnat_aux_type (stru - TYPE_HIGH_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype)) - #define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \ - TYPE_LOW_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype)) -+#define TYPE_ARRAY_STRIDE_IS_UNDEFINED(arraytype) \ -+ (TYPE_BYTE_STRIDE(TYPE_INDEX_TYPE(arraytype)) == 0) -+ - - #define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \ - (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype)))) -@@ -1781,6 +1821,7 @@ extern struct type *create_array_type_wi - - extern struct type *create_range_type (struct type *, struct type *, - const struct dynamic_prop *, -+ const struct dynamic_prop *, - const struct dynamic_prop *); - - extern struct type *create_array_type (struct type *, struct type *, -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-func.exp insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-func.exp ---- insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-func.exp 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-func.exp 2016-02-09 13:30:19.573837710 +0100 -@@ -0,0 +1,61 @@ -+# 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 . -+ -+standard_testfile ".f90" -+ -+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ -+ {debug f90 quiet}] } { -+ return -1 -+} -+ -+if ![runto MAIN__] then { -+ perror "couldn't run to breakpoint MAIN__" -+ continue -+} -+ -+# Check VLA passed to first Fortran function. -+gdb_breakpoint [gdb_get_line_number "func1-vla-passed"] -+gdb_continue_to_breakpoint "func1-vla-passed" -+gdb_test "print vla" " = \\( *\\( *22, *22, *22,\[()22, .\]*\\)" \ -+ "print vla (func1)" -+gdb_test "ptype vla" "type = integer\\\(kind=4\\\) \\\(10,10\\\)" \ -+ "ptype vla (func1)" -+ -+gdb_breakpoint [gdb_get_line_number "func1-vla-modified"] -+gdb_continue_to_breakpoint "func1-vla-modified" -+gdb_test "print vla(5,5)" " = 55" "print vla(5,5) (func1)" -+gdb_test "print vla(7,7)" " = 77" "print vla(5,5) (func1)" -+ -+# Check if the values are correct after returning from func1 -+gdb_breakpoint [gdb_get_line_number "func1-returned"] -+gdb_continue_to_breakpoint "func1-returned" -+gdb_test "print ret" " = .TRUE." "print ret after func1 returned" -+ -+# Check VLA passed to second Fortran function -+gdb_breakpoint [gdb_get_line_number "func2-vla-passed"] -+gdb_continue_to_breakpoint "func2-vla-passed" -+gdb_test "print vla" \ -+ " = \\\(44, 44, 44, 44, 44, 44, 44, 44, 44, 44\\\)" \ -+ "print vla (func2)" -+gdb_test "ptype vla" "type = integer\\\(kind=4\\\) \\\(10\\\)" \ -+ "ptype vla (func2)" -+ -+# Check if the returned VLA has the correct values and ptype. -+gdb_breakpoint [gdb_get_line_number "func2-returned"] -+gdb_continue_to_breakpoint "func2-returned" -+gdb_test "print vla3" " = \\\(1, 2, 44, 4, 44, 44, 44, 8, 44, 44\\\)" \ -+ "print vla3 (after func2)" -+gdb_test "ptype vla3" "type = integer\\\(kind=4\\\) \\\(10\\\)" \ -+ "ptype vla3 (after func2)" -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-func.f90 insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-func.f90 ---- insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-func.f90 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-func.f90 2016-02-09 13:30:19.573837710 +0100 -@@ -0,0 +1,71 @@ -+! 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 2 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, write to the Free Software -+! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+logical function func1 (vla) -+ implicit none -+ integer, allocatable :: vla (:, :) -+ func1 = allocated(vla) -+ vla(5,5) = 55 ! func1-vla-passed -+ vla(7,7) = 77 -+ return ! func1-vla-modified -+end function func1 -+ -+function func2(vla) -+ implicit none -+ integer :: vla (:) -+ integer :: func2(size(vla)) -+ integer :: k -+ -+ vla(1) = 1 ! func2-vla-passed -+ vla(2) = 2 -+ vla(4) = 4 -+ vla(8) = 8 -+ -+ func2 = vla -+end function func2 -+ -+program vla_func -+ implicit none -+ interface -+ logical function func1 (vla) -+ integer :: vla (:, :) -+ end function -+ end interface -+ interface -+ function func2 (vla) -+ integer :: vla (:) -+ integer func2(size(vla)) -+ end function -+ end interface -+ -+ logical :: ret -+ integer, allocatable :: vla1 (:, :) -+ integer, allocatable :: vla2 (:) -+ integer, allocatable :: vla3 (:) -+ -+ ret = .FALSE. -+ -+ allocate (vla1 (10,10)) -+ vla1(:,:) = 22 -+ -+ allocate (vla2 (10)) -+ vla2(:) = 44 -+ -+ ret = func1(vla1) -+ vla3 = func2(vla2) ! func1-returned -+ -+ ret = .TRUE. ! func2-returned -+end program vla_func -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-stride.exp insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-stride.exp ---- insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-stride.exp 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-stride.exp 2016-02-09 13:30:19.573837710 +0100 -@@ -0,0 +1,44 @@ -+# 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 . -+ -+standard_testfile ".f90" -+ -+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ -+ {debug f90 quiet}] } { -+ return -1 -+} -+ -+if ![runto MAIN__] then { -+ perror "couldn't run to breakpoint MAIN__" -+ continue -+} -+ -+gdb_breakpoint [gdb_get_line_number "re-reverse-elements"] -+gdb_continue_to_breakpoint "re-reverse-elements" -+gdb_test "print pvla" " = \\\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10\\\)" \ -+ "print re-reverse-elements" -+gdb_test "print pvla(1)" " = 1" "print first re-reverse-element" -+gdb_test "print pvla(10)" " = 10" "print last re-reverse-element" -+ -+gdb_breakpoint [gdb_get_line_number "odd-elements"] -+gdb_continue_to_breakpoint "odd-elements" -+gdb_test "print pvla" " = \\\(1, 3, 5, 7, 9\\\)" "print odd-elements" -+gdb_test "print pvla(1)" " = 1" "print first odd-element" -+gdb_test "print pvla(5)" " = 9" "print last odd-element" -+ -+gdb_breakpoint [gdb_get_line_number "single-element"] -+gdb_continue_to_breakpoint "single-element" -+gdb_test "print pvla" " = \\\(5\\\)" "print single-element" -+gdb_test "print pvla(1)" " = 5" "print one single-element" -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-stride.f90 insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-stride.f90 ---- insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-stride.f90 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-stride.f90 2016-02-09 13:30:19.573837710 +0100 -@@ -0,0 +1,30 @@ -+! 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 2 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, write to the Free Software -+! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+program vla_stride -+ integer, target, allocatable :: vla (:) -+ integer, pointer :: pvla (:) -+ -+ allocate(vla(10)) -+ vla = (/ (I, I = 1,10) /) -+ -+ pvla => vla(10:1:-1) -+ pvla => pvla(10:1:-1) -+ pvla => vla(1:10:2) ! re-reverse-elements -+ pvla => vla(5:4:-2) ! odd-elements -+ -+ pvla => null() ! single-element -+end program vla_stride -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-strings.exp insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-strings.exp ---- insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-strings.exp 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-strings.exp 2016-02-09 13:30:19.574837719 +0100 -@@ -0,0 +1,101 @@ -+# 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 . -+ -+standard_testfile ".f90" -+ -+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ -+ {debug f90 quiet}] } { -+ return -1 -+} -+ -+# check that all fortran standard datatypes will be -+# handled correctly when using as VLA's -+ -+if ![runto MAIN__] then { -+ perror "couldn't run to breakpoint MAIN__" -+ continue -+} -+ -+gdb_breakpoint [gdb_get_line_number "var_char-allocated-1"] -+gdb_continue_to_breakpoint "var_char-allocated-1" -+gdb_test "print var_char" \ -+ " = \\(PTR TO -> \\( character\\*10 \\)\\) ${hex}" \ -+ "print var_char after allocated first time" -+gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*10 \\)" \ -+ "whatis var_char first time" -+gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*10 \\)" \ -+ "ptype var_char first time" -+gdb_test "next" "\\d+.*var_char = 'foo'.*" \ -+ "next to allocation status of var_char" -+gdb_test "print l" " = .TRUE." "print allocation status first time" -+ -+gdb_breakpoint [gdb_get_line_number "var_char-filled-1"] -+gdb_continue_to_breakpoint "var_char-filled-1" -+gdb_test "print var_char" \ -+ " = \\(PTR TO -> \\( character\\*3 \\)\\) ${hex}" \ -+ "print var_char after filled first time" -+gdb_test "print *var_char" " = 'foo'" \ -+ "print *var_char after filled first time" -+gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*3 \\)" \ -+ "whatis var_char after filled first time" -+gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*3 \\)" \ -+ "ptype var_char after filled first time" -+gdb_test "print var_char(1)" " = 102 'f'" "print var_char(1)" -+gdb_test "print var_char(3)" " = 111 'o'" "print var_char(3)" -+ -+gdb_breakpoint [gdb_get_line_number "var_char-filled-2"] -+gdb_continue_to_breakpoint "var_char-filled-2" -+gdb_test "print var_char" \ -+ " = \\(PTR TO -> \\( character\\*6 \\)\\) ${hex}" \ -+ "print var_char after allocated second time" -+gdb_test "print *var_char" " = 'foobar'" \ -+ "print *var_char after allocated second time" -+gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*6 \\)" \ -+ "whatis var_char second time" -+gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*6 \\)" \ -+ "ptype var_char second time" -+ -+gdb_breakpoint [gdb_get_line_number "var_char-empty"] -+gdb_continue_to_breakpoint "var_char-empty" -+gdb_test "print var_char" \ -+ " = \\(PTR TO -> \\( character\\*0 \\)\\) ${hex}" \ -+ "print var_char after set empty" -+gdb_test "print *var_char" " = \"\"" "print *var_char after set empty" -+gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*0 \\)" \ -+ "whatis var_char after set empty" -+gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*0 \\)" \ -+ "ptype var_char after set empty" -+ -+gdb_breakpoint [gdb_get_line_number "var_char-allocated-3"] -+gdb_continue_to_breakpoint "var_char-allocated-3" -+gdb_test "print var_char" \ -+ " = \\(PTR TO -> \\( character\\*21 \\)\\) ${hex}" \ -+ "print var_char after allocated third time" -+gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*21 \\)" \ -+ "whatis var_char after allocated third time" -+gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*21 \\)" \ -+ "ptype var_char after allocated third time" -+ -+gdb_breakpoint [gdb_get_line_number "var_char_p-associated"] -+gdb_continue_to_breakpoint "var_char_p-associated" -+gdb_test "print var_char_p" \ -+ " = \\(PTR TO -> \\( character\\*7 \\)\\) ${hex}" \ -+ "print var_char_p after associated" -+gdb_test "print *var_char_p" " = 'johndoe'" \ -+ "print *var_char_ after associated" -+gdb_test "whatis var_char_p" "type = PTR TO -> \\( character\\*7 \\)" \ -+ "whatis var_char_p after associated" -+gdb_test "ptype var_char_p" "type = PTR TO -> \\( character\\*7 \\)" \ -+ "ptype var_char_p after associated" -diff -Naurp insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-strings.f90 insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-strings.f90 ---- insight-7.10.50.20160208.orig/gdb/testsuite/gdb.fortran/vla-strings.f90 1970-01-01 01:00:00.000000000 +0100 -+++ insight-7.10.50.20160208.new/gdb/testsuite/gdb.fortran/vla-strings.f90 2016-02-09 13:30:19.574837719 +0100 -@@ -0,0 +1,40 @@ -+! 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 2 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, write to the Free Software -+! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+program vla_strings -+ character(len=:), target, allocatable :: var_char -+ character(len=:), pointer :: var_char_p -+ logical :: l -+ -+ allocate(character(len=10) :: var_char) -+ l = allocated(var_char) ! var_char-allocated-1 -+ var_char = 'foo' -+ deallocate(var_char) ! var_char-filled-1 -+ l = allocated(var_char) ! var_char-deallocated -+ allocate(character(len=42) :: var_char) -+ l = allocated(var_char) -+ var_char = 'foobar' -+ var_char = '' ! var_char-filled-2 -+ var_char = 'bar' ! var_char-empty -+ deallocate(var_char) -+ allocate(character(len=21) :: var_char) -+ l = allocated(var_char) ! var_char-allocated-3 -+ var_char = 'johndoe' -+ var_char_p => var_char -+ l = associated(var_char_p) ! var_char_p-associated -+ var_char_p => null() -+ l = associated(var_char_p) ! var_char_p-not-associated -+end program vla_strings -diff -Naurp insight-7.10.50.20160208.orig/gdb/typeprint.c insight-7.10.50.20160208.new/gdb/typeprint.c ---- insight-7.10.50.20160208.orig/gdb/typeprint.c 2016-02-09 13:29:12.026206177 +0100 -+++ insight-7.10.50.20160208.new/gdb/typeprint.c 2016-02-09 13:30:19.574837719 +0100 -@@ -460,6 +460,13 @@ whatis_exp (char *exp, int show) - - type = value_type (val); - -+ if (TYPE_CODE (type) == TYPE_CODE_PTR) -+ if (is_dynamic_type (TYPE_TARGET_TYPE (type))) -+ { -+ val = value_addr (value_ind (val)); -+ type = value_type (val); -+ } -+ - get_user_print_options (&opts); - if (opts.objectprint) - { -diff -Naurp insight-7.10.50.20160208.orig/gdb/valarith.c insight-7.10.50.20160208.new/gdb/valarith.c ---- insight-7.10.50.20160208.orig/gdb/valarith.c 2016-02-09 13:29:12.026206177 +0100 -+++ insight-7.10.50.20160208.new/gdb/valarith.c 2016-02-09 13:41:25.179866060 +0100 -@@ -193,9 +193,21 @@ value_subscripted_rvalue (struct value * - struct type *array_type = check_typedef (value_type (array)); - struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); - ULONGEST elt_size = type_length_units (elt_type); -- ULONGEST elt_offs = elt_size * longest_to_int (index - lowerbound); -+ ULONGEST elt_offs = longest_to_int (index - lowerbound); -+ LONGEST elt_stride = TYPE_BYTE_STRIDE (TYPE_INDEX_TYPE (array_type)); - struct value *v; - -+ if (elt_stride > 0) -+ elt_offs *= elt_stride; -+ else if (elt_stride < 0) -+ { -+ int offs = (elt_offs + 1) * elt_stride; -+ -+ elt_offs = TYPE_LENGTH (array_type) + offs; -+ } -+ else -+ elt_offs *= elt_size; -+ - if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) - && elt_offs >= type_length_units (array_type))) - { -diff -Naurp insight-7.10.50.20160208.orig/gdb/valprint.c insight-7.10.50.20160208.new/gdb/valprint.c ---- insight-7.10.50.20160208.orig/gdb/valprint.c 2016-02-09 13:29:12.028206195 +0100 -+++ insight-7.10.50.20160208.new/gdb/valprint.c 2016-02-09 13:30:19.577837747 +0100 -@@ -316,6 +316,18 @@ valprint_check_validity (struct ui_file - return 0; - } - -+ if (TYPE_NOT_ASSOCIATED (type)) -+ { -+ val_print_not_associated (stream); -+ return 0; -+ } -+ -+ if (TYPE_NOT_ALLOCATED (type)) -+ { -+ val_print_not_allocated (stream); -+ return 0; -+ } -+ - if (TYPE_CODE (type) != TYPE_CODE_UNION - && TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_ARRAY) -@@ -1025,12 +1037,16 @@ static int - value_check_printable (struct value *val, struct ui_file *stream, - const struct value_print_options *options) - { -+ const struct type *type; -+ - if (val == 0) - { - fprintf_filtered (stream, _("
")); - return 0; - } - -+ type = value_type (val); -+ - if (value_entirely_optimized_out (val)) - { - if (options->summary && !val_print_scalar_type_p (value_type (val))) -@@ -1066,6 +1082,18 @@ value_check_printable (struct value *val - { - val_print_not_allocated (stream); - return 0; -+ } -+ -+ if (TYPE_NOT_ASSOCIATED (type)) -+ { -+ val_print_not_associated (stream); -+ return 0; -+ } -+ -+ if (TYPE_NOT_ALLOCATED (type)) -+ { -+ val_print_not_allocated (stream); -+ return 0; - } - - return 1; -diff -Naurp insight-7.10.50.20160208.orig/gdb/valprint.h insight-7.10.50.20160208.new/gdb/valprint.h ---- insight-7.10.50.20160208.orig/gdb/valprint.h 2016-02-09 13:29:12.029206205 +0100 -+++ insight-7.10.50.20160208.new/gdb/valprint.h 2016-02-09 13:30:19.578837757 +0100 -@@ -232,4 +232,8 @@ extern void print_command_parse_format ( - struct format_data *fmtp); - extern void print_value (struct value *val, const struct format_data *fmtp); - -+extern void val_print_not_allocated (struct ui_file *stream); -+ -+extern void val_print_not_associated (struct ui_file *stream); -+ - #endif -diff -Naurp insight-7.10.50.20160208.orig/gdb/value.c insight-7.10.50.20160208.new/gdb/value.c ---- insight-7.10.50.20160208.orig/gdb/value.c 2016-02-09 13:29:12.116207018 +0100 -+++ insight-7.10.50.20160208.new/gdb/value.c 2016-02-09 13:30:19.579837766 +0100 -@@ -40,6 +40,7 @@ - #include "tracepoint.h" - #include "cp-abi.h" - #include "user-regs.h" -+#include "dwarf2loc.h" - - /* Prototypes for exported functions. */ - -@@ -1870,6 +1871,25 @@ set_value_component_location (struct val - if (funcs->copy_closure) - component->location.computed.closure = funcs->copy_closure (whole); - } -+ -+ /* For dynamic types compute the address of the component value location in -+ sub range types based on the location of the sub range type, if not being -+ an internal GDB variable or parts of it. */ -+ if (VALUE_LVAL (component) != lval_internalvar -+ && VALUE_LVAL (component) != lval_internalvar_component) -+ { -+ CORE_ADDR addr; -+ struct type *type = value_type (whole); -+ -+ addr = value_raw_address (component); -+ -+ if (TYPE_DATA_LOCATION (type) -+ && TYPE_DATA_LOCATION_KIND (type) == PROP_CONST) -+ { -+ addr = TYPE_DATA_LOCATION_ADDR (type); -+ set_value_address (component, addr); -+ } -+ } - } - - -@@ -3182,13 +3202,22 @@ value_primitive_field (struct value *arg - v = allocate_value_lazy (type); - else - { -- v = allocate_value (type); -- value_contents_copy_raw (v, value_embedded_offset (v), -- arg1, value_embedded_offset (arg1) + offset, -- type_length_units (type)); -+ if (TYPE_DATA_LOCATION (type) -+ && TYPE_DATA_LOCATION_KIND (type) == PROP_CONST) -+ v = value_at_lazy (type, value_address (arg1) + offset); -+ else -+ { -+ v = allocate_value (type); -+ value_contents_copy_raw (v, value_embedded_offset (v), -+ arg1, value_embedded_offset (arg1) + offset, -+ type_length_units (type)); -+ } - } -- v->offset = (value_offset (arg1) + offset -- + value_embedded_offset (arg1)); -+ -+ if (!TYPE_DATA_LOCATION (type) -+ || !TYPE_DATA_LOCATION_KIND (type) == PROP_CONST) -+ v->offset = (value_offset (arg1) + offset -+ + value_embedded_offset (arg1)); - } - set_value_component_location (v, arg1); - VALUE_REGNUM (v) = VALUE_REGNUM (arg1); -@@ -3776,7 +3805,8 @@ readjust_indirect_value_type (struct val - struct value *original_value) - { - /* Re-adjust type. */ -- deprecated_set_value_type (value, TYPE_TARGET_TYPE (original_type)); -+ if (!is_dynamic_type (TYPE_TARGET_TYPE (original_type))) -+ deprecated_set_value_type (value, TYPE_TARGET_TYPE (original_type)); - - /* Add embedding info. */ - set_value_enclosing_type (value, enc_type); -@@ -3793,6 +3823,12 @@ coerce_ref (struct value *arg) - struct value *retval; - struct type *enc_type; - -+ if (current_language->la_language != language_fortran -+ && TYPE_DATA_LOCATION (value_type_arg_tmp) != NULL -+ && TYPE_DATA_LOCATION_KIND (value_type_arg_tmp) == PROP_CONST) -+ arg = value_at_lazy (value_type_arg_tmp, -+ TYPE_DATA_LOCATION_ADDR (value_type_arg_tmp)); -+ - retval = coerce_ref_if_computed (arg); - if (retval) - return retval; -@@ -3921,8 +3957,14 @@ value_fetch_lazy (struct value *val) - } - else if (VALUE_LVAL (val) == lval_memory) - { -- CORE_ADDR addr = value_address (val); - struct type *type = check_typedef (value_enclosing_type (val)); -+ CORE_ADDR addr; -+ -+ if (TYPE_DATA_LOCATION (type) != NULL -+ && TYPE_DATA_LOCATION_KIND (type) == PROP_CONST) -+ addr = TYPE_DATA_LOCATION_ADDR (type); -+ else -+ addr = value_address (val); - - if (TYPE_LENGTH (type)) - read_value_memory (val, 0, value_stack (val), diff --git a/insight-7.12-gdb-6.3-readnever-20050907.patch b/insight-7.12-gdb-6.3-readnever-20050907.patch new file mode 100644 index 0000000..21c467a --- /dev/null +++ b/insight-7.12-gdb-6.3-readnever-20050907.patch @@ -0,0 +1,78 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/doc/gdb.texinfo insight-7.12.50.20170416.new/gdb/doc/gdb.texinfo +--- insight-7.12.50.20170416.orig/gdb/doc/gdb.texinfo 2017-04-16 11:51:34.697009514 +0100 ++++ insight-7.12.50.20170416.new/gdb/doc/gdb.texinfo 2017-04-16 11:56:31.611716645 +0100 +@@ -1037,6 +1037,12 @@ Read each symbol file's entire symbol ta + the default, which is to read it incrementally as it is needed. + This makes startup slower, but makes future operations faster. + ++@item --readnever ++@cindex @code{--readnever} ++Do not read each symbol file's symbolic debug information. This makes ++startup faster but at the expense of not being able to perform ++symbolic debugging. ++ + @end table + + @node Mode Options +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2read.c insight-7.12.50.20170416.new/gdb/dwarf2read.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2read.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2read.c 2017-04-16 11:58:01.869539574 +0100 +@@ -73,6 +73,7 @@ + #include "common/function-view.h" + #include "common/gdb_optional.h" + #include "common/underlying.h" ++#include "top.h" + + #include + #include +@@ -2207,7 +2208,8 @@ dwarf2_has_info (struct objfile *objfile + (void *) names); + dwarf2_per_objfile->objfile = objfile; + } +- return (!dwarf2_per_objfile->info.is_virtual ++ return !readnever_symbol_files && ++ (!dwarf2_per_objfile->info.is_virtual + && dwarf2_per_objfile->info.s.section != NULL + && !dwarf2_per_objfile->abbrev.is_virtual + && dwarf2_per_objfile->abbrev.s.section != NULL); +diff -Naurp insight-7.12.50.20170416.orig/gdb/main.c insight-7.12.50.20170416.new/gdb/main.c +--- insight-7.12.50.20170416.orig/gdb/main.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/main.c 2017-04-16 11:56:31.612716654 +0100 +@@ -614,6 +614,7 @@ captured_main_1 (struct captured_main_ar + {"tui", no_argument, 0, OPT_TUI}, + {"dbx", no_argument, &dbx_commands, 1}, + {"readnow", no_argument, &readnow_symbol_files, 1}, ++ {"readnever", no_argument, &readnever_symbol_files, 1}, + {"r", no_argument, &readnow_symbol_files, 1}, + {"quiet", no_argument, &quiet, 1}, + {"q", no_argument, &quiet, 1}, +@@ -1202,6 +1203,7 @@ Selection of debuggee and its files:\n\n + --se=FILE Use FILE as symbol file and executable file.\n\ + --symbols=SYMFILE Read symbols from SYMFILE.\n\ + --readnow Fully read symbol files on first access.\n\ ++ --readnever Do not read symbol files.\n\ + --write Set writing into executable and core files.\n\n\ + "), stream); + fputs_unfiltered (_("\ +diff -Naurp insight-7.12.50.20170416.orig/gdb/symfile.c insight-7.12.50.20170416.new/gdb/symfile.c +--- insight-7.12.50.20170416.orig/gdb/symfile.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/symfile.c 2017-04-16 11:56:31.614716672 +0100 +@@ -79,6 +79,7 @@ static void clear_symtab_users_cleanup ( + + /* Global variables owned by this file. */ + int readnow_symbol_files; /* Read full symbols immediately. */ ++int readnever_symbol_files; /* Never read full symbols. */ + + /* Functions this file defines. */ + +diff -Naurp insight-7.12.50.20170416.orig/gdb/top.h insight-7.12.50.20170416.new/gdb/top.h +--- insight-7.12.50.20170416.orig/gdb/top.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/top.h 2017-04-16 11:56:31.622716745 +0100 +@@ -269,6 +269,7 @@ extern int gdb_in_secondary_prompt_p (st + + /* From random places. */ + extern int readnow_symbol_files; ++extern int readnever_symbol_files; + + /* Perform _initialize initialization. */ + extern void gdb_init (char *); diff --git a/insight-7.12-gdb-6.6-buildid-locate-core-as-arg.patch b/insight-7.12-gdb-6.6-buildid-locate-core-as-arg.patch new file mode 100644 index 0000000..a43b4aa --- /dev/null +++ b/insight-7.12-gdb-6.6-buildid-locate-core-as-arg.patch @@ -0,0 +1,134 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/common/common-exceptions.h insight-7.12.50.20170416.new/gdb/common/common-exceptions.h +--- insight-7.12.50.20170416.orig/gdb/common/common-exceptions.h 2017-03-04 04:09:18.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/common/common-exceptions.h 2017-04-16 12:17:55.954426687 +0100 +@@ -106,6 +106,9 @@ enum errors { + "_ERROR" is appended to the name. */ + MAX_COMPLETIONS_REACHED_ERROR, + ++ /* Attempt to load a core file as executable. */ ++ IS_CORE_ERROR, ++ + /* Add more errors here. */ + NR_ERRORS + }; +diff -Naurp insight-7.12.50.20170416.orig/gdb/exec.c insight-7.12.50.20170416.new/gdb/exec.c +--- insight-7.12.50.20170416.orig/gdb/exec.c 2017-01-21 02:32:23.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/exec.c 2017-04-16 12:17:55.952426669 +0100 +@@ -35,6 +35,7 @@ + #include "progspace.h" + #include "gdb_bfd.h" + #include "gcore.h" ++#include "exceptions.h" + + #include + #include "readline/readline.h" +@@ -359,12 +360,27 @@ exec_file_attach (const char *filename, + + if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching)) + { ++ int is_core; ++ ++ /* If the user accidentally did "gdb core", print a useful ++ error message. Check it only after bfd_object has been checked as ++ a valid executable may get recognized for example also as ++ "trad-core". */ ++ is_core = bfd_check_format (exec_bfd, bfd_core); ++ + /* Make sure to close exec_bfd, or else "run" might try to use + it. */ + exec_close (); +- error (_("\"%s\": not in executable format: %s"), +- scratch_pathname, +- gdb_bfd_errmsg (bfd_get_error (), matching)); ++ ++ if (is_core != 0) ++ throw_error (IS_CORE_ERROR, ++ _("\"%s\" is a core file.\n" ++ "Please specify an executable to debug."), ++ scratch_pathname); ++ else ++ error (_("\"%s\": not in executable format: %s"), ++ scratch_pathname, ++ gdb_bfd_errmsg (bfd_get_error (), matching)); + } + + if (build_section_table (exec_bfd, §ions, §ions_end)) +diff -Naurp insight-7.12.50.20170416.orig/gdb/main.c insight-7.12.50.20170416.new/gdb/main.c +--- insight-7.12.50.20170416.orig/gdb/main.c 2017-04-16 12:16:41.229745385 +0100 ++++ insight-7.12.50.20170416.new/gdb/main.c 2017-04-16 12:17:55.953426678 +0100 +@@ -458,6 +458,37 @@ struct cmdarg + char *string; + }; + ++/* Call exec_file_attach. If it detected FILENAME is a core file call ++ core_file_command. Print the original exec_file_attach error only if ++ core_file_command failed to find a matching executable. */ ++ ++static void ++exec_or_core_file_attach (const char *filename, int from_tty) ++{ ++ volatile struct gdb_exception e; ++ ++ gdb_assert (exec_bfd == NULL); ++ ++ TRY ++ { ++ exec_file_attach (filename, from_tty); ++ } ++ CATCH (e, RETURN_MASK_ALL) ++ { ++ if (e.error == IS_CORE_ERROR) ++ { ++ core_file_command ((char *) filename, from_tty); ++ ++ /* Iff the core file found its executable suppress the error message ++ from exec_file_attach. */ ++ if (exec_bfd != NULL) ++ return; ++ } ++ throw_exception (e); ++ } ++ END_CATCH ++} ++ + static void + captured_main_1 (struct captured_main_args *context) + { +@@ -880,6 +911,8 @@ captured_main_1 (struct captured_main_ar + { + symarg = argv[optind]; + execarg = argv[optind]; ++ if (optind + 1 == argc && corearg == NULL) ++ corearg = argv[optind]; + optind++; + } + +@@ -1030,11 +1063,25 @@ captured_main_1 (struct captured_main_ar + && symarg != NULL + && strcmp (execarg, symarg) == 0) + { ++ catch_command_errors_const_ftype *func; ++ ++ /* Call exec_or_core_file_attach only if the file was specified as ++ a command line argument (and not an a command line option). */ ++ if (corearg != NULL && strcmp (corearg, execarg) == 0) ++ { ++ func = exec_or_core_file_attach; ++ corearg = NULL; ++ } ++ else ++ func = exec_file_attach; ++ + /* The exec file and the symbol-file are the same. If we can't + open it, better only print one error message. +- catch_command_errors returns non-zero on success! */ +- if (catch_command_errors_const (exec_file_attach, execarg, +- !batch_flag)) ++ catch_command_errors returns non-zero on success! ++ Do not load EXECARG as a symbol file if it has been already processed ++ as a core file. */ ++ if (catch_command_errors_const (func, execarg, !batch_flag) ++ && core_bfd == NULL) + catch_command_errors_const (symbol_file_add_main_adapter, symarg, + !batch_flag); + } diff --git a/insight-7.12-gdb-6.6-buildid-locate-rpm.patch b/insight-7.12-gdb-6.6-buildid-locate-rpm.patch new file mode 100644 index 0000000..5f17b7c --- /dev/null +++ b/insight-7.12-gdb-6.6-buildid-locate-rpm.patch @@ -0,0 +1,1504 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/aclocal.m4 insight-7.12.50.20170416.new/gdb/aclocal.m4 +--- insight-7.12.50.20170416.orig/gdb/aclocal.m4 2017-04-16 10:13:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/aclocal.m4 2017-04-16 12:12:54.707680063 +0100 +@@ -12,6 +12,221 @@ + # PARTICULAR PURPOSE. + + m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) ++# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- ++# serial 1 (pkg-config-0.24) ++# ++# Copyright Ā© 2004 Scott James Remnant . ++# ++# 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 2 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, write to the Free Software ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++# ++# As a special exception to the GNU General Public License, if you ++# distribute this file as part of a program that contains a ++# configuration script generated by Autoconf, you may include it under ++# the same distribution terms that you use for the rest of that program. ++ ++# PKG_PROG_PKG_CONFIG([MIN-VERSION]) ++# ---------------------------------- ++AC_DEFUN([PKG_PROG_PKG_CONFIG], ++[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) ++m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) ++m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) ++AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) ++AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) ++AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) ++ ++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then ++ AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) ++fi ++if test -n "$PKG_CONFIG"; then ++ _pkg_min_version=m4_default([$1], [0.9.0]) ++ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) ++ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ PKG_CONFIG="" ++ fi ++fi[]dnl ++])# PKG_PROG_PKG_CONFIG ++ ++# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) ++# ++# Check to see whether a particular set of modules exists. Similar ++# to PKG_CHECK_MODULES(), but does not set variables or print errors. ++# ++# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) ++# only at the first occurence in configure.ac, so if the first place ++# it's called might be skipped (such as if it is within an "if", you ++# have to call PKG_CHECK_EXISTS manually ++# -------------------------------------------------------------- ++AC_DEFUN([PKG_CHECK_EXISTS], ++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl ++if test -n "$PKG_CONFIG" && \ ++ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then ++ m4_default([$2], [:]) ++m4_ifvaln([$3], [else ++ $3])dnl ++fi]) ++ ++# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) ++# --------------------------------------------- ++m4_define([_PKG_CONFIG], ++[if test -n "$$1"; then ++ pkg_cv_[]$1="$$1" ++ elif test -n "$PKG_CONFIG"; then ++ PKG_CHECK_EXISTS([$3], ++ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` ++ test "x$?" != "x0" && pkg_failed=yes ], ++ [pkg_failed=yes]) ++ else ++ pkg_failed=untried ++fi[]dnl ++])# _PKG_CONFIG ++ ++# _PKG_SHORT_ERRORS_SUPPORTED ++# ----------------------------- ++AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], ++[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi[]dnl ++])# _PKG_SHORT_ERRORS_SUPPORTED ++ ++ ++# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], ++# [ACTION-IF-NOT-FOUND]) ++# ++# ++# Note that if there is a possibility the first call to ++# PKG_CHECK_MODULES might not happen, you should be sure to include an ++# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac ++# ++# ++# -------------------------------------------------------------- ++AC_DEFUN([PKG_CHECK_MODULES], ++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl ++AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl ++AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl ++ ++pkg_failed=no ++AC_MSG_CHECKING([for $1]) ++ ++_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) ++_PKG_CONFIG([$1][_LIBS], [libs], [$2]) ++ ++m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS ++and $1[]_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details.]) ++ ++if test $pkg_failed = yes; then ++ AC_MSG_RESULT([no]) ++ _PKG_SHORT_ERRORS_SUPPORTED ++ if test $_pkg_short_errors_supported = yes; then ++ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` ++ else ++ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` ++ fi ++ # Put the nasty error message in config.log where it belongs ++ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ++ ++ m4_default([$4], [AC_MSG_ERROR( ++[Package requirements ($2) were not met: ++ ++$$1_PKG_ERRORS ++ ++Consider adjusting the PKG_CONFIG_PATH environment variable if you ++installed software in a non-standard prefix. ++ ++_PKG_TEXT])[]dnl ++ ]) ++elif test $pkg_failed = untried; then ++ AC_MSG_RESULT([no]) ++ m4_default([$4], [AC_MSG_FAILURE( ++[The pkg-config script could not be found or is too old. Make sure it ++is in your PATH or set the PKG_CONFIG environment variable to the full ++path to pkg-config. ++ ++_PKG_TEXT ++ ++To get pkg-config, see .])[]dnl ++ ]) ++else ++ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS ++ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS ++ AC_MSG_RESULT([yes]) ++ $3 ++fi[]dnl ++])# PKG_CHECK_MODULES ++ ++ ++# PKG_INSTALLDIR(DIRECTORY) ++# ------------------------- ++# Substitutes the variable pkgconfigdir as the location where a module ++# should install pkg-config .pc files. By default the directory is ++# $libdir/pkgconfig, but the default can be changed by passing ++# DIRECTORY. The user can override through the --with-pkgconfigdir ++# parameter. ++AC_DEFUN([PKG_INSTALLDIR], ++[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) ++m4_pushdef([pkg_description], ++ [pkg-config installation directory @<:@]pkg_default[@:>@]) ++AC_ARG_WITH([pkgconfigdir], ++ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, ++ [with_pkgconfigdir=]pkg_default) ++AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) ++m4_popdef([pkg_default]) ++m4_popdef([pkg_description]) ++]) dnl PKG_INSTALLDIR ++ ++ ++# PKG_NOARCH_INSTALLDIR(DIRECTORY) ++# ------------------------- ++# Substitutes the variable noarch_pkgconfigdir as the location where a ++# module should install arch-independent pkg-config .pc files. By ++# default the directory is $datadir/pkgconfig, but the default can be ++# changed by passing DIRECTORY. The user can override through the ++# --with-noarch-pkgconfigdir parameter. ++AC_DEFUN([PKG_NOARCH_INSTALLDIR], ++[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) ++m4_pushdef([pkg_description], ++ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) ++AC_ARG_WITH([noarch-pkgconfigdir], ++ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, ++ [with_noarch_pkgconfigdir=]pkg_default) ++AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) ++m4_popdef([pkg_default]) ++m4_popdef([pkg_description]) ++]) dnl PKG_NOARCH_INSTALLDIR ++ ++ ++# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, ++# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) ++# ------------------------------------------- ++# Retrieves the value of the pkg-config variable for the given module. ++AC_DEFUN([PKG_CHECK_VAR], ++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl ++AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl ++ ++_PKG_CONFIG([$1], [variable="][$3]["], [$2]) ++AS_VAR_COPY([$1], [pkg_cv_][$1]) ++ ++AS_VAR_IF([$1], [""], [$5], [$4])dnl ++])# PKG_CHECK_VAR ++ + # AM_AUX_DIR_EXPAND -*- Autoconf -*- + + # Copyright (C) 2001-2014 Free Software Foundation, Inc. +diff -Naurp insight-7.12.50.20170416.orig/gdb/build-id.c insight-7.12.50.20170416.new/gdb/build-id.c +--- insight-7.12.50.20170416.orig/gdb/build-id.c 2017-04-16 12:02:56.905229574 +0100 ++++ insight-7.12.50.20170416.new/gdb/build-id.c 2017-04-16 12:04:34.197116635 +0100 +@@ -35,6 +35,7 @@ + #include "elf/common.h" + #include "elf-bfd.h" + #include ++#include "elf/external.h" + + #define BUILD_ID_VERBOSE_NONE 0 + #define BUILD_ID_VERBOSE_FILENAMES 1 +@@ -664,8 +665,366 @@ build_id_to_filename (const struct bfd_b + return result; + } + ++#ifdef HAVE_LIBRPM ++ ++#include ++#include ++#include ++#include ++#ifdef DLOPEN_LIBRPM ++#include ++#endif ++ ++/* This MISSING_RPM_HASH tracker is used to collect all the missing rpm files ++ and avoid their duplicities during a single inferior run. */ ++ ++static struct htab *missing_rpm_hash; ++ ++/* This MISSING_RPM_LIST tracker is used to collect and print as a single line ++ all the rpms right before the nearest GDB prompt. It gets cleared after ++ each such print (it is questionable if we should clear it after the print). ++ */ ++ ++struct missing_rpm ++ { ++ struct missing_rpm *next; ++ char rpm[1]; ++ }; ++static struct missing_rpm *missing_rpm_list; ++static int missing_rpm_list_entries; ++ ++/* Returns the count of newly added rpms. */ ++ ++static int ++missing_rpm_enlist (const char *filename) ++{ ++ static int rpm_init_done = 0; ++ rpmts ts; ++ rpmdbMatchIterator mi; ++ int count = 0; ++ ++#ifdef DLOPEN_LIBRPM ++ /* Duplicate here the declarations to verify they match. The same sanity ++ check is present also in `configure.ac'. */ ++ extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); ++ static char *(*headerFormat_p) (Header h, const char * fmt, errmsg_t *errmsg); ++ extern int rpmReadConfigFiles(const char * file, const char * target); ++ static int (*rpmReadConfigFiles_p) (const char * file, const char * target); ++ extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); ++ static rpmdbMatchIterator (*rpmdbFreeIterator_p) (rpmdbMatchIterator mi); ++ extern Header rpmdbNextIterator(rpmdbMatchIterator mi); ++ static Header (*rpmdbNextIterator_p) (rpmdbMatchIterator mi); ++ extern rpmts rpmtsCreate(void); ++ static rpmts (*rpmtsCreate_p) (void); ++ extern rpmts rpmtsFree(rpmts ts); ++ static rpmts (*rpmtsFree_p) (rpmts ts); ++ extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, ++ const void * keyp, size_t keylen); ++ static rpmdbMatchIterator (*rpmtsInitIterator_p) (const rpmts ts, ++ rpmTag rpmtag, ++ const void *keyp, ++ size_t keylen); ++#else /* !DLOPEN_LIBRPM */ ++# define headerFormat_p headerFormat ++# define rpmReadConfigFiles_p rpmReadConfigFiles ++# define rpmdbFreeIterator_p rpmdbFreeIterator ++# define rpmdbNextIterator_p rpmdbNextIterator ++# define rpmtsCreate_p rpmtsCreate ++# define rpmtsFree_p rpmtsFree ++# define rpmtsInitIterator_p rpmtsInitIterator ++#endif /* !DLOPEN_LIBRPM */ ++ ++ gdb_assert (filename != NULL); ++ ++ if (strcmp (filename, BUILD_ID_MAIN_EXECUTABLE_FILENAME) == 0) ++ return 0; ++ ++ if (is_target_filename (filename)) ++ return 0; ++ ++ if (filename[0] != '/') ++ { ++ warning (_("Ignoring non-absolute filename: <%s>"), filename); ++ return 0; ++ } ++ ++ if (!rpm_init_done) ++ { ++ static int init_tried; ++ ++ /* Already failed the initialization before? */ ++ if (init_tried) ++ return 0; ++ init_tried = 1; ++ ++#ifdef DLOPEN_LIBRPM ++ { ++ void *h; ++ ++ h = dlopen (DLOPEN_LIBRPM, RTLD_LAZY); ++ if (!h) ++ { ++ warning (_("Unable to open \"%s\" (%s), " ++ "missing debuginfos notifications will not be displayed"), ++ DLOPEN_LIBRPM, dlerror ()); ++ return 0; ++ } ++ ++ if (!((headerFormat_p = (char *(*) (Header h, const char * fmt, errmsg_t *errmsg)) dlsym (h, "headerFormat")) ++ && (rpmReadConfigFiles_p = (int (*) (const char * file, const char * target)) dlsym (h, "rpmReadConfigFiles")) ++ && (rpmdbFreeIterator_p = (rpmdbMatchIterator (*) (rpmdbMatchIterator mi)) dlsym (h, "rpmdbFreeIterator")) ++ && (rpmdbNextIterator_p = (Header (*) (rpmdbMatchIterator mi)) dlsym (h, "rpmdbNextIterator")) ++ && (rpmtsCreate_p = (rpmts (*) (void)) dlsym (h, "rpmtsCreate")) ++ && (rpmtsFree_p = (rpmts (*) (rpmts ts)) dlsym (h, "rpmtsFree")) ++ && (rpmtsInitIterator_p = (rpmdbMatchIterator (*) (const rpmts ts, rpmTag rpmtag, const void *keyp, size_t keylen)) dlsym (h, "rpmtsInitIterator")))) ++ { ++ warning (_("Opened library \"%s\" is incompatible (%s), " ++ "missing debuginfos notifications will not be displayed"), ++ DLOPEN_LIBRPM, dlerror ()); ++ if (dlclose (h)) ++ warning (_("Error closing library \"%s\": %s\n"), DLOPEN_LIBRPM, ++ dlerror ()); ++ return 0; ++ } ++ } ++#endif /* DLOPEN_LIBRPM */ ++ ++ if (rpmReadConfigFiles_p (NULL, NULL) != 0) ++ { ++ warning (_("Error reading the rpm configuration files")); ++ return 0; ++ } ++ ++ rpm_init_done = 1; ++ } ++ ++ ts = rpmtsCreate_p (); ++ ++ mi = rpmtsInitIterator_p (ts, RPMTAG_BASENAMES, filename, 0); ++ if (mi != NULL) ++ { ++ for (;;) ++ { ++ Header h; ++ char *debuginfo, **slot, *s, *s2; ++ errmsg_t err; ++ size_t srcrpmlen = sizeof (".src.rpm") - 1; ++ size_t debuginfolen = sizeof ("-debuginfo") - 1; ++ rpmdbMatchIterator mi_debuginfo; ++ ++ h = rpmdbNextIterator_p (mi); ++ if (h == NULL) ++ break; ++ ++ /* Verify the debuginfo file is not already installed. */ ++ ++ debuginfo = headerFormat_p (h, "%{sourcerpm}-debuginfo.%{arch}", ++ &err); ++ if (!debuginfo) ++ { ++ warning (_("Error querying the rpm file `%s': %s"), filename, ++ err); ++ continue; ++ } ++ /* s = `.src.rpm-debuginfo.%{arch}' */ ++ s = strrchr (debuginfo, '-') - srcrpmlen; ++ s2 = NULL; ++ if (s > debuginfo && memcmp (s, ".src.rpm", srcrpmlen) == 0) ++ { ++ /* s2 = `-%{release}.src.rpm-debuginfo.%{arch}' */ ++ s2 = (char *) memrchr (debuginfo, '-', s - debuginfo); ++ } ++ if (s2) ++ { ++ /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */ ++ s2 = (char *) memrchr (debuginfo, '-', s2 - debuginfo); ++ } ++ if (!s2) ++ { ++ warning (_("Error querying the rpm file `%s': %s"), filename, ++ debuginfo); ++ xfree (debuginfo); ++ continue; ++ } ++ /* s = `.src.rpm-debuginfo.%{arch}' */ ++ /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */ ++ memmove (s2 + debuginfolen, s2, s - s2); ++ memcpy (s2, "-debuginfo", debuginfolen); ++ /* s = `XXXX.%{arch}' */ ++ /* strlen ("XXXX") == srcrpmlen + debuginfolen */ ++ /* s2 = `-debuginfo-%{version}-%{release}XX.%{arch}' */ ++ /* strlen ("XX") == srcrpmlen */ ++ memmove (s + debuginfolen, s + srcrpmlen + debuginfolen, ++ strlen (s + srcrpmlen + debuginfolen) + 1); ++ /* s = `-debuginfo-%{version}-%{release}.%{arch}' */ ++ ++ /* RPMDBI_PACKAGES requires keylen == sizeof (int). */ ++ /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel(). */ ++ mi_debuginfo = rpmtsInitIterator_p (ts, (rpmTag) RPMDBI_LABEL, debuginfo, 0); ++ xfree (debuginfo); ++ if (mi_debuginfo) ++ { ++ rpmdbFreeIterator_p (mi_debuginfo); ++ count = 0; ++ break; ++ } ++ ++ /* The allocated memory gets utilized below for MISSING_RPM_HASH. */ ++ debuginfo = headerFormat_p (h, ++ "%{name}-%{version}-%{release}.%{arch}", ++ &err); ++ if (!debuginfo) ++ { ++ warning (_("Error querying the rpm file `%s': %s"), filename, ++ err); ++ continue; ++ } ++ ++ /* Base package name for `debuginfo-install'. We do not use the ++ `yum' command directly as the line ++ yum --enablerepo='*debug*' install NAME-debuginfo.ARCH ++ would be more complicated than just: ++ debuginfo-install NAME-VERSION-RELEASE.ARCH ++ Do not supply the rpm base name (derived from .src.rpm name) as ++ debuginfo-install is unable to install the debuginfo package if ++ the base name PKG binary rpm is not installed while for example ++ PKG-libs would be installed (RH Bug 467901). ++ FUTURE: After multiple debuginfo versions simultaneously installed ++ get supported the support for the VERSION-RELEASE tags handling ++ may need an update. */ ++ ++ if (missing_rpm_hash == NULL) ++ { ++ /* DEL_F is passed NULL as MISSING_RPM_LIST's HTAB_DELETE ++ should not deallocate the entries. */ ++ ++ missing_rpm_hash = htab_create_alloc (64, htab_hash_string, ++ (int (*) (const void *, const void *)) streq, ++ NULL, xcalloc, xfree); ++ } ++ slot = (char **) htab_find_slot (missing_rpm_hash, debuginfo, INSERT); ++ /* XCALLOC never returns NULL. */ ++ gdb_assert (slot != NULL); ++ if (*slot == NULL) ++ { ++ struct missing_rpm *missing_rpm; ++ ++ *slot = debuginfo; ++ ++ missing_rpm = (struct missing_rpm *) xmalloc (sizeof (*missing_rpm) + strlen (debuginfo)); ++ strcpy (missing_rpm->rpm, debuginfo); ++ missing_rpm->next = missing_rpm_list; ++ missing_rpm_list = missing_rpm; ++ missing_rpm_list_entries++; ++ } ++ else ++ xfree (debuginfo); ++ count++; ++ } ++ ++ rpmdbFreeIterator_p (mi); ++ } ++ ++ rpmtsFree_p (ts); ++ ++ return count; ++} ++ ++static int ++missing_rpm_list_compar (const char *const *ap, const char *const *bp) ++{ ++ return strcoll (*ap, *bp); ++} ++ ++/* It returns a NULL-terminated array of strings needing to be FREEd. It may ++ also return only NULL. */ ++ ++static void ++missing_rpm_list_print (void) ++{ ++ char **array, **array_iter; ++ struct missing_rpm *list_iter; ++ struct cleanup *cleanups; ++ ++ if (missing_rpm_list_entries == 0) ++ return; ++ ++ array = (char **) xmalloc (sizeof (*array) * missing_rpm_list_entries); ++ cleanups = make_cleanup (xfree, array); ++ ++ array_iter = array; ++ for (list_iter = missing_rpm_list; list_iter != NULL; ++ list_iter = list_iter->next) ++ { ++ *array_iter++ = list_iter->rpm; ++ } ++ gdb_assert (array_iter == array + missing_rpm_list_entries); ++ ++ qsort (array, missing_rpm_list_entries, sizeof (*array), ++ (int (*) (const void *, const void *)) missing_rpm_list_compar); ++ ++ printf_unfiltered (_("Missing separate debuginfos, use: %s"), ++#ifdef DNF_DEBUGINFO_INSTALL ++ "dnf " ++#endif ++ "debuginfo-install"); ++ for (array_iter = array; array_iter < array + missing_rpm_list_entries; ++ array_iter++) ++ { ++ putchar_unfiltered (' '); ++ puts_unfiltered (*array_iter); ++ } ++ putchar_unfiltered ('\n'); ++ ++ while (missing_rpm_list != NULL) ++ { ++ list_iter = missing_rpm_list; ++ missing_rpm_list = list_iter->next; ++ xfree (list_iter); ++ } ++ missing_rpm_list_entries = 0; ++ ++ do_cleanups (cleanups); ++} ++ ++static void ++missing_rpm_change (void) ++{ ++ debug_flush_missing (); ++ ++ gdb_assert (missing_rpm_list == NULL); ++ if (missing_rpm_hash != NULL) ++ { ++ htab_delete (missing_rpm_hash); ++ missing_rpm_hash = NULL; ++ } ++} ++ ++enum missing_exec ++ { ++ /* Init state. EXEC_BFD also still could be NULL. */ ++ MISSING_EXEC_NOT_TRIED, ++ /* We saw a non-NULL EXEC_BFD but RPM has no info about it. */ ++ MISSING_EXEC_NOT_FOUND, ++ /* We found EXEC_BFD by RPM and we either have its symbols (either embedded ++ or separate) or the main executable's RPM is now contained in ++ MISSING_RPM_HASH. */ ++ MISSING_EXEC_ENLISTED ++ }; ++static enum missing_exec missing_exec = MISSING_EXEC_NOT_TRIED; ++ ++#endif /* HAVE_LIBRPM */ ++ ++void ++debug_flush_missing (void) ++{ ++#ifdef HAVE_LIBRPM ++ missing_rpm_list_print (); ++#endif ++} ++ + /* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages +- Try to install the hash file ... ++ yum --enablerepo='*debug*' install ... + avoidance. */ + + struct missing_filepair +@@ -719,11 +1078,17 @@ missing_filepair_change (void) + /* All their memory came just from missing_filepair_OBSTACK. */ + missing_filepair_hash = NULL; + } ++#ifdef HAVE_LIBRPM ++ missing_exec = MISSING_EXEC_NOT_TRIED; ++#endif + } + + static void + debug_print_executable_changed (void) + { ++#ifdef HAVE_LIBRPM ++ missing_rpm_change (); ++#endif + missing_filepair_change (); + } + +@@ -790,14 +1155,39 @@ debug_print_missing (const char *binary, + + *slot = missing_filepair; + +- /* We do not collect and flush these messages as each such message +- already requires its own separate lines. */ ++#ifdef HAVE_LIBRPM ++ if (missing_exec == MISSING_EXEC_NOT_TRIED) ++ { ++ char *execfilename; + +- fprintf_unfiltered (gdb_stdlog, +- _("Missing separate debuginfo for %s\n"), binary); +- if (debug != NULL) +- fprintf_unfiltered (gdb_stdlog, _("Try to install the hash file %s\n"), +- debug); ++ execfilename = get_exec_file (0); ++ if (execfilename != NULL) ++ { ++ if (missing_rpm_enlist (execfilename) == 0) ++ missing_exec = MISSING_EXEC_NOT_FOUND; ++ else ++ missing_exec = MISSING_EXEC_ENLISTED; ++ } ++ } ++ if (missing_exec != MISSING_EXEC_ENLISTED) ++ if ((binary[0] == 0 || missing_rpm_enlist (binary) == 0) ++ && (debug == NULL || missing_rpm_enlist (debug) == 0)) ++#endif /* HAVE_LIBRPM */ ++ { ++ /* We do not collect and flush these messages as each such message ++ already requires its own separate lines. */ ++ ++ fprintf_unfiltered (gdb_stdlog, ++ _("Missing separate debuginfo for %s\n"), binary); ++ if (debug != NULL) ++ fprintf_unfiltered (gdb_stdlog, _("Try: %s %s\n"), ++#ifdef DNF_DEBUGINFO_INSTALL ++ "dnf" ++#else ++ "yum" ++#endif ++ " --enablerepo='*debug*' install", debug); ++ } + } + + /* See build-id.h. */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/config.in insight-7.12.50.20170416.new/gdb/config.in +--- insight-7.12.50.20170416.orig/gdb/config.in 2016-11-06 09:57:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/config.in 2017-04-16 12:04:34.188116553 +0100 +@@ -33,6 +33,9 @@ + /* Define to BFD's default target vector. */ + #undef DEFAULT_BFD_VEC + ++/* librpm version specific library name to dlopen. */ ++#undef DLOPEN_LIBRPM ++ + /* Define to 1 if translation of program messages to the user's native + language is requested. */ + #undef ENABLE_NLS +@@ -264,6 +267,9 @@ + /* Define if Python 2.7 is being used. */ + #undef HAVE_LIBPYTHON2_7 + ++/* Define if librpm library is being used. */ ++#undef HAVE_LIBRPM ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_LIBUNWIND_IA64_H + +diff -Naurp insight-7.12.50.20170416.orig/gdb/configure insight-7.12.50.20170416.new/gdb/configure +--- insight-7.12.50.20170416.orig/gdb/configure 2017-04-16 10:13:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/configure 2017-04-16 12:08:10.902092451 +0100 +@@ -740,6 +740,11 @@ PKGVERSION + HAVE_NATIVE_GCORE_TARGET + TARGET_OBS + subdirs ++RPM_LIBS ++RPM_CFLAGS ++PKG_CONFIG_LIBDIR ++PKG_CONFIG_PATH ++PKG_CONFIG + GDB_DATADIR + DEBUGDIR + MAKEINFO_EXTRA_FLAGS +@@ -844,6 +849,7 @@ with_gdb_datadir + with_relocated_sources + with_auto_load_dir + with_auto_load_safe_path ++with_rpm + enable_targets + enable_64_bit_bfd + enable_gdbcli +@@ -900,6 +906,11 @@ CCC + CPP + MAKEINFO + MAKEINFOFLAGS ++PKG_CONFIG ++PKG_CONFIG_PATH ++PKG_CONFIG_LIBDIR ++RPM_CFLAGS ++RPM_LIBS + YACC + YFLAGS + XMKMF' +@@ -1570,6 +1581,8 @@ Optional Packages: + [--with-auto-load-dir] + --without-auto-load-safe-path + do not restrict auto-loaded files locations ++ --with-rpm query rpm database for missing debuginfos (yes/no, ++ def. auto=librpm.so) + --with-libunwind-ia64 use libunwind frame unwinding for ia64 targets + --with-curses use the curses library instead of the termcap + library +@@ -1624,6 +1637,13 @@ Some influential environment variables: + MAKEINFO Parent configure detects if it is of sufficient version. + MAKEINFOFLAGS + Parameters for MAKEINFO. ++ PKG_CONFIG path to pkg-config utility ++ PKG_CONFIG_PATH ++ directories to add to pkg-config's search path ++ PKG_CONFIG_LIBDIR ++ path overriding pkg-config's built-in search path ++ RPM_CFLAGS C compiler flags for RPM, overriding pkg-config ++ RPM_LIBS linker flags for RPM, overriding pkg-config + YACC The `Yet Another Compiler Compiler' implementation to use. + Defaults to the first program found out of: `bison -y', `byacc', + `yacc'. +@@ -6553,6 +6573,494 @@ _ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5 + $as_echo "$with_auto_load_safe_path" >&6; } + ++# Integration with rpm library to support missing debuginfo suggestions. ++# --without-rpm: Disable any rpm support. ++# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime. ++# Even with runtime missing `libname.so' GDB will still other run correctly. ++# Missing `libname.so' during ./configure will abort the configuration. ++# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific ++# minor version first such as `librpm-4.6.so' as minor version differences ++# mean API+ABI incompatibility. If the specific match versioned library name ++# could not be found still open dynamically at least `librpm.so'. ++# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try ++# to find librpm for compilation-time linking by pkg-config. GDB binary will ++# be probably linked with the version specific library (as `librpm-4.6.so'). ++# Failure to find librpm by pkg-config will abort the configuration. ++# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config ++# cannot find librpm use to the rpmless compilation (like `--without-rpm'). ++ ++ ++# Check whether --with-rpm was given. ++if test "${with_rpm+set}" = set; then : ++ withval=$with_rpm; ++else ++ with_rpm="auto" ++fi ++ ++ ++ ++ ++if test "x$with_rpm" != "xno"; then ++ if test "x$with_rpm" = "xyes"; then ++ LIBRPM="librpm.so" ++ RPM_REQUIRE=true ++ DLOPEN_REQUIRE=false ++ elif test "x$with_rpm" = "xauto"; then ++ LIBRPM="librpm.so" ++ RPM_REQUIRE=false ++ DLOPEN_REQUIRE=false ++ else ++ LIBRPM="$with_rpm" ++ RPM_REQUIRE=true ++ DLOPEN_REQUIRE=true ++ fi ++ LIBRPM_STRING='"'"$LIBRPM"'"' ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking specific librpm version" >&5 ++$as_echo_n "checking specific librpm version... " >&6; } ++ HAVE_DLOPEN_LIBRPM=false ++ save_LIBS="$LIBS" ++ LIBS="$LIBS -ldl" ++ if test "$cross_compiling" = yes; then : ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error "cannot run test program while cross compiling ++See \`config.log' for more details." "$LINENO" 5; } ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++#include ++#include ++#include ++ ++int ++main () ++{ ++ ++ void *h; ++ const char *const *rpmverp; ++ FILE *f; ++ ++ f = fopen ("conftest.out", "w"); ++ if (!f) ++ { ++ fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out", ++ strerror (errno)); ++ return 1; ++ } ++ h = dlopen ($LIBRPM_STRING, RTLD_LAZY); ++ if (!h) ++ { ++ fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ()); ++ return 1; ++ } ++ rpmverp = dlsym (h, "RPMVERSION"); ++ if (!rpmverp) ++ { ++ fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ()); ++ return 1; ++ } ++ fprintf (stderr, "RPMVERSION is: \""); ++ fprintf (stderr, "%s\"\n", *rpmverp); ++ ++ /* Try to find the specific librpm version only for "librpm.so" as we do ++ not know how to assemble the version string otherwise. */ ++ ++ if (strcmp ("librpm.so", $LIBRPM_STRING) != 0) ++ { ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ else ++ { ++ char *h2_name; ++ void *h2; ++ int major, minor; ++ ++ if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2) ++ { ++ fprintf (stderr, "Unable to parse RPMVERSION.\n"); ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ /* Avoid the square brackets by malloc. */ ++ h2_name = malloc (64); ++ sprintf (h2_name, "librpm-%d.%d.so", major, minor); ++ h2 = dlopen (h2_name, RTLD_LAZY); ++ if (!h2) ++ { ++ fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ()); ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ if (h2 != h) ++ { ++ fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n", ++ $LIBRPM_STRING, h2_name); ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ /* Found the valid .so name with a specific version. */ ++ fprintf (f, "%s\n", h2_name); ++ return 0; ++ } ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_run "$LINENO"; then : ++ ++ DLOPEN_LIBRPM="`cat conftest.out`" ++ if test "x$DLOPEN_LIBRPM" != "x"; then ++ HAVE_DLOPEN_LIBRPM=true ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLOPEN_LIBRPM" >&5 ++$as_echo "$DLOPEN_LIBRPM" >&6; } ++ fi ++ ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ++fi ++ ++ rm -f conftest.out ++ ++ ++ ++ if $HAVE_DLOPEN_LIBRPM; then ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5 ++$as_echo_n "checking rpm library API compatibility... " >&6; } ++ # The compilation requires -Werror to verify anything. ++ save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -Werror" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Duplicate here the declarations to verify they match "elfread.c". */ ++#include ++#include ++#include ++#include ++extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); ++extern int rpmReadConfigFiles(const char * file, const char * target); ++extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); ++extern Header rpmdbNextIterator(rpmdbMatchIterator mi); ++extern rpmts rpmtsCreate(void); ++extern rpmts rpmtsFree(rpmts ts); ++extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, ++ const void * keyp, size_t keylen); ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ++ LIBRPM_COMPAT=true ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ ++else ++ ++ LIBRPM_COMPAT=false ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ CFLAGS="$save_CFLAGS" ++ ++ if ! $LIBRPM_COMPAT; then ++ HAVE_DLOPEN_LIBRPM=false ++ fi ++ fi ++ ++ if $HAVE_DLOPEN_LIBRPM; then ++ DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"' ++ ++cat >>confdefs.h <<_ACEOF ++#define DLOPEN_LIBRPM $DLOPEN_LIBRPM_STRING ++_ACEOF ++ ++ ++$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h ++ ++ else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ LIBS="$save_LIBS" ++ if $DLOPEN_REQUIRE; then ++ as_fn_error "Specific name $LIBRPM was requested but it could not be opened." "$LINENO" 5 ++ fi ++ ++ ++ ++ ++ ++ ++ ++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. ++set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++fi ++PKG_CONFIG=$ac_cv_path_PKG_CONFIG ++if test -n "$PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 ++$as_echo "$PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_path_PKG_CONFIG"; then ++ ac_pt_PKG_CONFIG=$PKG_CONFIG ++ # Extract the first word of "pkg-config", so it can be a program name with args. ++set dummy pkg-config; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $ac_pt_PKG_CONFIG in ++ [\\/]* | ?:[\\/]*) ++ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ++ ;; ++ *) ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++fi ++ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG ++if test -n "$ac_pt_PKG_CONFIG"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 ++$as_echo "$ac_pt_PKG_CONFIG" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_pt_PKG_CONFIG" = x; then ++ PKG_CONFIG="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ PKG_CONFIG=$ac_pt_PKG_CONFIG ++ fi ++else ++ PKG_CONFIG="$ac_cv_path_PKG_CONFIG" ++fi ++ ++fi ++if test -n "$PKG_CONFIG"; then ++ _pkg_min_version=0.9.0 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 ++$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } ++ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ PKG_CONFIG="" ++ fi ++fi ++ ++pkg_failed=no ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RPM" >&5 ++$as_echo_n "checking for RPM... " >&6; } ++ ++if test -n "$RPM_CFLAGS"; then ++ pkg_cv_RPM_CFLAGS="$RPM_CFLAGS" ++ elif test -n "$PKG_CONFIG"; then ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "rpm") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_RPM_CFLAGS=`$PKG_CONFIG --cflags "rpm" 2>/dev/null` ++ test "x$?" != "x0" && pkg_failed=yes ++else ++ pkg_failed=yes ++fi ++ else ++ pkg_failed=untried ++fi ++if test -n "$RPM_LIBS"; then ++ pkg_cv_RPM_LIBS="$RPM_LIBS" ++ elif test -n "$PKG_CONFIG"; then ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "rpm") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_RPM_LIBS=`$PKG_CONFIG --libs "rpm" 2>/dev/null` ++ test "x$?" != "x0" && pkg_failed=yes ++else ++ pkg_failed=yes ++fi ++ else ++ pkg_failed=untried ++fi ++ ++ ++ ++if test $pkg_failed = yes; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi ++ if test $_pkg_short_errors_supported = yes; then ++ RPM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "rpm" 2>&1` ++ else ++ RPM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "rpm" 2>&1` ++ fi ++ # Put the nasty error message in config.log where it belongs ++ echo "$RPM_PKG_ERRORS" >&5 ++ ++ HAVE_LIBRPM=false ++elif test $pkg_failed = untried; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ HAVE_LIBRPM=false ++else ++ RPM_CFLAGS=$pkg_cv_RPM_CFLAGS ++ RPM_LIBS=$pkg_cv_RPM_LIBS ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ HAVE_LIBRPM=true ++fi ++ ++ if $HAVE_LIBRPM; then ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5 ++$as_echo_n "checking rpm library API compatibility... " >&6; } ++ # The compilation requires -Werror to verify anything. ++ save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -Werror" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Duplicate here the declarations to verify they match "elfread.c". */ ++#include ++#include ++#include ++#include ++extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); ++extern int rpmReadConfigFiles(const char * file, const char * target); ++extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); ++extern Header rpmdbNextIterator(rpmdbMatchIterator mi); ++extern rpmts rpmtsCreate(void); ++extern rpmts rpmtsFree(rpmts ts); ++extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, ++ const void * keyp, size_t keylen); ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ++ LIBRPM_COMPAT=true ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ ++else ++ ++ LIBRPM_COMPAT=false ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ CFLAGS="$save_CFLAGS" ++ ++ if ! $LIBRPM_COMPAT; then ++ HAVE_LIBRPM=false ++ RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB" ++ fi ++ fi ++ ++ if $HAVE_LIBRPM; then ++ ++$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h ++ ++ CFLAGS="$CFLAGS $RPM_CFLAGS" ++ LIBS="$LIBS $RPM_LIBS" ++ else ++ if $RPM_REQUIRE; then ++ as_fn_error "$RPM_PKG_ERRORS" "$LINENO" 5 ++ else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $RPM_PKG_ERRORS" >&5 ++$as_echo "$as_me: WARNING: $RPM_PKG_ERRORS" >&2;} ++ fi ++ fi ++ fi ++fi ++ + + + subdirs="$subdirs testsuite" +diff -Naurp insight-7.12.50.20170416.orig/gdb/configure.ac insight-7.12.50.20170416.new/gdb/configure.ac +--- insight-7.12.50.20170416.orig/gdb/configure.ac 2017-04-16 12:02:56.836228945 +0100 ++++ insight-7.12.50.20170416.new/gdb/configure.ac 2017-04-16 12:04:34.195116617 +0100 +@@ -167,6 +167,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escap + [Directories safe to hold auto-loaded files.]) + AC_MSG_RESULT([$with_auto_load_safe_path]) + ++# Integration with rpm library to support missing debuginfo suggestions. ++# --without-rpm: Disable any rpm support. ++# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime. ++# Even with runtime missing `libname.so' GDB will still other run correctly. ++# Missing `libname.so' during ./configure will abort the configuration. ++# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific ++# minor version first such as `librpm-4.6.so' as minor version differences ++# mean API+ABI incompatibility. If the specific match versioned library name ++# could not be found still open dynamically at least `librpm.so'. ++# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try ++# to find librpm for compilation-time linking by pkg-config. GDB binary will ++# be probably linked with the version specific library (as `librpm-4.6.so'). ++# Failure to find librpm by pkg-config will abort the configuration. ++# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config ++# cannot find librpm use to the rpmless compilation (like `--without-rpm'). ++ ++AC_ARG_WITH([rpm], ++ [AS_HELP_STRING([--with-rpm], ++ [query rpm database for missing debuginfos (yes/no, def. auto=librpm.so)])], [], [with_rpm="auto"]) ++ ++m4_pattern_allow([^AC_MSG_ERROR$]) ++m4_pattern_allow([^AC_MSG_WARN$]) ++if test "x$with_rpm" != "xno"; then ++ if test "x$with_rpm" = "xyes"; then ++ LIBRPM="librpm.so" ++ RPM_REQUIRE=true ++ DLOPEN_REQUIRE=false ++ elif test "x$with_rpm" = "xauto"; then ++ LIBRPM="librpm.so" ++ RPM_REQUIRE=false ++ DLOPEN_REQUIRE=false ++ else ++ LIBRPM="$with_rpm" ++ RPM_REQUIRE=true ++ DLOPEN_REQUIRE=true ++ fi ++ LIBRPM_STRING='"'"$LIBRPM"'"' ++ ++ AC_MSG_CHECKING([specific librpm version]) ++ HAVE_DLOPEN_LIBRPM=false ++ save_LIBS="$LIBS" ++ LIBS="$LIBS -ldl" ++ AC_RUN_IFELSE(AC_LANG_PROGRAM([[ ++#include ++#include ++#include ++ ]], [[ ++ void *h; ++ const char *const *rpmverp; ++ FILE *f; ++ ++ f = fopen ("conftest.out", "w"); ++ if (!f) ++ { ++ fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out", ++ strerror (errno)); ++ return 1; ++ } ++ h = dlopen ($LIBRPM_STRING, RTLD_LAZY); ++ if (!h) ++ { ++ fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ()); ++ return 1; ++ } ++ rpmverp = dlsym (h, "RPMVERSION"); ++ if (!rpmverp) ++ { ++ fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ()); ++ return 1; ++ } ++ fprintf (stderr, "RPMVERSION is: \""); ++ fprintf (stderr, "%s\"\n", *rpmverp); ++ ++ /* Try to find the specific librpm version only for "librpm.so" as we do ++ not know how to assemble the version string otherwise. */ ++ ++ if (strcmp ("librpm.so", $LIBRPM_STRING) != 0) ++ { ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ else ++ { ++ char *h2_name; ++ void *h2; ++ int major, minor; ++ ++ if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2) ++ { ++ fprintf (stderr, "Unable to parse RPMVERSION.\n"); ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ /* Avoid the square brackets by malloc. */ ++ h2_name = malloc (64); ++ sprintf (h2_name, "librpm-%d.%d.so", major, minor); ++ h2 = dlopen (h2_name, RTLD_LAZY); ++ if (!h2) ++ { ++ fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ()); ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ if (h2 != h) ++ { ++ fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n", ++ $LIBRPM_STRING, h2_name); ++ fprintf (f, "%s\n", $LIBRPM_STRING); ++ return 0; ++ } ++ /* Found the valid .so name with a specific version. */ ++ fprintf (f, "%s\n", h2_name); ++ return 0; ++ } ++ ]]), [ ++ DLOPEN_LIBRPM="`cat conftest.out`" ++ if test "x$DLOPEN_LIBRPM" != "x"; then ++ HAVE_DLOPEN_LIBRPM=true ++ AC_MSG_RESULT($DLOPEN_LIBRPM) ++ fi ++ ]) ++ rm -f conftest.out ++ ++ m4_define([CHECK_LIBRPM_COMPAT], [ ++ AC_MSG_CHECKING([rpm library API compatibility]) ++ # The compilation requires -Werror to verify anything. ++ save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -Werror" ++ AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[ ++/* Duplicate here the declarations to verify they match "elfread.c". */ ++#include ++#include ++#include ++#include ++extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); ++extern int rpmReadConfigFiles(const char * file, const char * target); ++extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); ++extern Header rpmdbNextIterator(rpmdbMatchIterator mi); ++extern rpmts rpmtsCreate(void); ++extern rpmts rpmtsFree(rpmts ts); ++extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag, ++ const void * keyp, size_t keylen); ++ ]]), [ ++ LIBRPM_COMPAT=true ++ AC_MSG_RESULT(yes) ++ ], [ ++ LIBRPM_COMPAT=false ++ AC_MSG_RESULT(no) ++ ]) ++ CFLAGS="$save_CFLAGS" ++ ]) ++ ++ if $HAVE_DLOPEN_LIBRPM; then ++ CHECK_LIBRPM_COMPAT ++ if ! $LIBRPM_COMPAT; then ++ HAVE_DLOPEN_LIBRPM=false ++ fi ++ fi ++ ++ if $HAVE_DLOPEN_LIBRPM; then ++ DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"' ++ AC_DEFINE_UNQUOTED(DLOPEN_LIBRPM, $DLOPEN_LIBRPM_STRING, [librpm version specific library name to dlopen.]) ++ AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.]) ++ else ++ AC_MSG_RESULT(no) ++ LIBS="$save_LIBS" ++ if $DLOPEN_REQUIRE; then ++ AC_MSG_ERROR([Specific name $LIBRPM was requested but it could not be opened.]) ++ fi ++ PKG_CHECK_MODULES(RPM, rpm, [HAVE_LIBRPM=true], [HAVE_LIBRPM=false]) ++ ++ if $HAVE_LIBRPM; then ++ CHECK_LIBRPM_COMPAT ++ if ! $LIBRPM_COMPAT; then ++ HAVE_LIBRPM=false ++ RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB" ++ fi ++ fi ++ ++ if $HAVE_LIBRPM; then ++ AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.]) ++ CFLAGS="$CFLAGS $RPM_CFLAGS" ++ LIBS="$LIBS $RPM_LIBS" ++ else ++ if $RPM_REQUIRE; then ++ AC_MSG_ERROR($RPM_PKG_ERRORS) ++ else ++ AC_MSG_WARN($RPM_PKG_ERRORS) ++ fi ++ fi ++ fi ++fi ++ + AC_CONFIG_SUBDIRS(testsuite) + + # Check whether to support alternative target configurations +diff -Naurp insight-7.12.50.20170416.orig/gdb/corelow.c insight-7.12.50.20170416.new/gdb/corelow.c +--- insight-7.12.50.20170416.orig/gdb/corelow.c 2017-04-16 12:02:56.896229492 +0100 ++++ insight-7.12.50.20170416.new/gdb/corelow.c 2017-04-16 12:04:34.196116626 +0100 +@@ -311,7 +311,7 @@ build_id_locate_exec (int from_tty) + symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED; + } + else +- debug_print_missing (_("the main executable file"), build_id_filename); ++ debug_print_missing (BUILD_ID_MAIN_EXECUTABLE_FILENAME, build_id_filename); + + do_cleanups (back_to); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/event-top.c insight-7.12.50.20170416.new/gdb/event-top.c +--- insight-7.12.50.20170416.orig/gdb/event-top.c 2017-04-16 10:13:09.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/event-top.c 2017-04-16 12:04:34.185116525 +0100 +@@ -40,6 +40,7 @@ + #include "buffer.h" + #include "ser-event.h" + #include "gdb_select.h" ++#include "symfile.h" + + /* readline include files. */ + #include "readline/readline.h" +@@ -360,6 +361,8 @@ display_gdb_prompt (const char *new_prom + /* Reset the nesting depth used when trace-commands is set. */ + reset_command_nest_depth (); + ++ debug_flush_missing (); ++ + old_chain = make_cleanup (free_current_contents, &actual_gdb_prompt); + + /* Do not call the python hook on an explicit prompt change as +@@ -780,7 +783,10 @@ command_line_handler (char *rl) + command_handler (cmd); + + if (ui->prompt_state != PROMPTED) +- display_gdb_prompt (0); ++ { ++ debug_flush_missing (); ++ display_gdb_prompt (0); ++ } + } + } + +diff -Naurp insight-7.12.50.20170416.orig/gdb/symfile.h insight-7.12.50.20170416.new/gdb/symfile.h +--- insight-7.12.50.20170416.orig/gdb/symfile.h 2017-04-16 12:02:56.903229555 +0100 ++++ insight-7.12.50.20170416.new/gdb/symfile.h 2017-04-16 12:04:34.186116534 +0100 +@@ -570,6 +570,8 @@ void map_symbol_filenames (symbol_filena + /* build-id support. */ + extern struct bfd_build_id *build_id_addr_get (CORE_ADDR addr); + extern void debug_print_missing (const char *binary, const char *debug); ++extern void debug_flush_missing (void); ++#define BUILD_ID_MAIN_EXECUTABLE_FILENAME _("the main executable file") + + /* From dwarf2read.c */ + diff --git a/insight-7.12-gdb-6.6-buildid-locate.patch b/insight-7.12-gdb-6.6-buildid-locate.patch new file mode 100644 index 0000000..8e0826c --- /dev/null +++ b/insight-7.12-gdb-6.6-buildid-locate.patch @@ -0,0 +1,1257 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/build-id.c insight-7.12.50.20170416.new/gdb/build-id.c +--- insight-7.12.50.20170416.orig/gdb/build-id.c 2017-01-21 02:32:23.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/build-id.c 2017-04-16 13:55:30.668769990 +0100 +@@ -26,11 +26,67 @@ + #include "objfiles.h" + #include "filenames.h" + #include "gdbcore.h" ++#include "libbfd.h" ++#include "gdbcore.h" ++#include "gdbcmd.h" ++#include "observer.h" ++#include "elf/external.h" ++#include "elf/internal.h" ++#include "elf/common.h" ++#include "elf-bfd.h" ++#include ++ ++#define BUILD_ID_VERBOSE_NONE 0 ++#define BUILD_ID_VERBOSE_FILENAMES 1 ++#define BUILD_ID_VERBOSE_BINARY_PARSE 2 ++static int build_id_verbose = BUILD_ID_VERBOSE_FILENAMES; ++static void ++show_build_id_verbose (struct ui_file *file, int from_tty, ++ struct cmd_list_element *c, const char *value) ++{ ++ fprintf_filtered (file, _("Verbosity level of the build-id locator is %s.\n"), ++ value); ++} ++/* Locate NT_GNU_BUILD_ID and return its matching debug filename. ++ FIXME: NOTE decoding should be unified with the BFD core notes decoding. */ ++ ++static struct bfd_build_id * ++build_id_buf_get (bfd *templ, gdb_byte *buf, bfd_size_type size) ++{ ++ bfd_byte *p; ++ ++ p = buf; ++ while (p < buf + size) ++ { ++ /* FIXME: bad alignment assumption. */ ++ Elf_External_Note *xnp = (Elf_External_Note *) p; ++ size_t namesz = H_GET_32 (templ, xnp->namesz); ++ size_t descsz = H_GET_32 (templ, xnp->descsz); ++ bfd_byte *descdata = (gdb_byte *) xnp->name + BFD_ALIGN (namesz, 4); ++ ++ if (H_GET_32 (templ, xnp->type) == NT_GNU_BUILD_ID ++ && namesz == sizeof "GNU" ++ && memcmp (xnp->name, "GNU", sizeof "GNU") == 0) ++ { ++ size_t size = descsz; ++ gdb_byte *data = (gdb_byte *) descdata; ++ struct bfd_build_id *retval; ++ ++ retval = (struct bfd_build_id *) xmalloc (sizeof *retval - 1 + size); ++ retval->size = size; ++ memcpy (retval->data, data, size); ++ ++ return retval; ++ } ++ p = descdata + BFD_ALIGN (descsz, 4); ++ } ++ return NULL; ++} + + /* See build-id.h. */ + + const struct bfd_build_id * +-build_id_bfd_get (bfd *abfd) ++build_id_bfd_shdr_get (bfd *abfd) + { + if (!bfd_check_format (abfd, bfd_object)) + return NULL; +@@ -42,6 +98,348 @@ build_id_bfd_get (bfd *abfd) + return NULL; + } + ++/* Core files may have missing (corrupt) SHDR but PDHR is correct there. ++ bfd_elf_bfd_from_remote_memory () has too much overhead by ++ allocating/reading all the available ELF PT_LOADs. */ ++ ++static struct bfd_build_id * ++build_id_phdr_get (bfd *templ, bfd_vma loadbase, unsigned e_phnum, ++ Elf_Internal_Phdr *i_phdr) ++{ ++ int i; ++ struct bfd_build_id *retval = NULL; ++ ++ for (i = 0; i < e_phnum; i++) ++ if (i_phdr[i].p_type == PT_NOTE && i_phdr[i].p_filesz > 0) ++ { ++ Elf_Internal_Phdr *hdr = &i_phdr[i]; ++ gdb_byte *buf; ++ int err; ++ ++ buf = (gdb_byte *) xmalloc (hdr->p_filesz); ++ err = target_read_memory (loadbase + i_phdr[i].p_vaddr, buf, ++ hdr->p_filesz); ++ if (err == 0) ++ retval = build_id_buf_get (templ, buf, hdr->p_filesz); ++ else ++ retval = NULL; ++ xfree (buf); ++ if (retval != NULL) ++ break; ++ } ++ return retval; ++} ++ ++/* First we validate the file by reading in the ELF header and checking ++ the magic number. */ ++ ++static inline bfd_boolean ++elf_file_p (Elf64_External_Ehdr *x_ehdrp64) ++{ ++ gdb_assert (sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr)); ++ gdb_assert (offsetof (Elf64_External_Ehdr, e_ident) ++ == offsetof (Elf32_External_Ehdr, e_ident)); ++ gdb_assert (sizeof (((Elf64_External_Ehdr *) 0)->e_ident) ++ == sizeof (((Elf32_External_Ehdr *) 0)->e_ident)); ++ ++ return ((x_ehdrp64->e_ident[EI_MAG0] == ELFMAG0) ++ && (x_ehdrp64->e_ident[EI_MAG1] == ELFMAG1) ++ && (x_ehdrp64->e_ident[EI_MAG2] == ELFMAG2) ++ && (x_ehdrp64->e_ident[EI_MAG3] == ELFMAG3)); ++} ++ ++/* Translate an ELF file header in external format into an ELF file header in ++ internal format. */ ++ ++#define H_GET_WORD(bfd, ptr) (is64 ? H_GET_64 (bfd, (ptr)) \ ++ : H_GET_32 (bfd, (ptr))) ++#define H_GET_SIGNED_WORD(bfd, ptr) (is64 ? H_GET_S64 (bfd, (ptr)) \ ++ : H_GET_S32 (bfd, (ptr))) ++ ++static void ++elf_swap_ehdr_in (bfd *abfd, ++ const Elf64_External_Ehdr *src64, ++ Elf_Internal_Ehdr *dst) ++{ ++ int is64 = bfd_get_arch_size (abfd) == 64; ++#define SRC(field) (is64 ? src64->field \ ++ : ((const Elf32_External_Ehdr *) src64)->field) ++ ++ int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; ++ memcpy (dst->e_ident, SRC (e_ident), EI_NIDENT); ++ dst->e_type = H_GET_16 (abfd, SRC (e_type)); ++ dst->e_machine = H_GET_16 (abfd, SRC (e_machine)); ++ dst->e_version = H_GET_32 (abfd, SRC (e_version)); ++ if (signed_vma) ++ dst->e_entry = H_GET_SIGNED_WORD (abfd, SRC (e_entry)); ++ else ++ dst->e_entry = H_GET_WORD (abfd, SRC (e_entry)); ++ dst->e_phoff = H_GET_WORD (abfd, SRC (e_phoff)); ++ dst->e_shoff = H_GET_WORD (abfd, SRC (e_shoff)); ++ dst->e_flags = H_GET_32 (abfd, SRC (e_flags)); ++ dst->e_ehsize = H_GET_16 (abfd, SRC (e_ehsize)); ++ dst->e_phentsize = H_GET_16 (abfd, SRC (e_phentsize)); ++ dst->e_phnum = H_GET_16 (abfd, SRC (e_phnum)); ++ dst->e_shentsize = H_GET_16 (abfd, SRC (e_shentsize)); ++ dst->e_shnum = H_GET_16 (abfd, SRC (e_shnum)); ++ dst->e_shstrndx = H_GET_16 (abfd, SRC (e_shstrndx)); ++ ++#undef SRC ++} ++ ++/* Translate an ELF program header table entry in external format into an ++ ELF program header table entry in internal format. */ ++ ++static void ++elf_swap_phdr_in (bfd *abfd, ++ const Elf64_External_Phdr *src64, ++ Elf_Internal_Phdr *dst) ++{ ++ int is64 = bfd_get_arch_size (abfd) == 64; ++#define SRC(field) (is64 ? src64->field \ ++ : ((const Elf32_External_Phdr *) src64)->field) ++ ++ int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; ++ ++ dst->p_type = H_GET_32 (abfd, SRC (p_type)); ++ dst->p_flags = H_GET_32 (abfd, SRC (p_flags)); ++ dst->p_offset = H_GET_WORD (abfd, SRC (p_offset)); ++ if (signed_vma) ++ { ++ dst->p_vaddr = H_GET_SIGNED_WORD (abfd, SRC (p_vaddr)); ++ dst->p_paddr = H_GET_SIGNED_WORD (abfd, SRC (p_paddr)); ++ } ++ else ++ { ++ dst->p_vaddr = H_GET_WORD (abfd, SRC (p_vaddr)); ++ dst->p_paddr = H_GET_WORD (abfd, SRC (p_paddr)); ++ } ++ dst->p_filesz = H_GET_WORD (abfd, SRC (p_filesz)); ++ dst->p_memsz = H_GET_WORD (abfd, SRC (p_memsz)); ++ dst->p_align = H_GET_WORD (abfd, SRC (p_align)); ++ ++#undef SRC ++} ++ ++#undef H_GET_SIGNED_WORD ++#undef H_GET_WORD ++ ++static Elf_Internal_Phdr * ++elf_get_phdr (bfd *templ, bfd_vma ehdr_vma, unsigned *e_phnum_pointer, ++ bfd_vma *loadbase_pointer) ++{ ++ /* sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr) */ ++ Elf64_External_Ehdr x_ehdr64; /* Elf file header, external form */ ++ Elf_Internal_Ehdr i_ehdr; /* Elf file header, internal form */ ++ bfd_size_type x_phdrs_size; ++ gdb_byte *x_phdrs_ptr; ++ Elf_Internal_Phdr *i_phdrs; ++ int err; ++ unsigned int i; ++ bfd_vma loadbase; ++ int loadbase_set; ++ ++ gdb_assert (templ != NULL); ++ gdb_assert (sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr)); ++ ++ /* Read in the ELF header in external format. */ ++ err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr64, sizeof x_ehdr64); ++ if (err) ++ { ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Error reading ELF header at address 0x%lx"), ++ (unsigned long) ehdr_vma); ++ return NULL; ++ } ++ ++ /* Now check to see if we have a valid ELF file, and one that BFD can ++ make use of. The magic number must match, the address size ('class') ++ and byte-swapping must match our XVEC entry. */ ++ ++ if (! elf_file_p (&x_ehdr64) ++ || x_ehdr64.e_ident[EI_VERSION] != EV_CURRENT ++ || !((bfd_get_arch_size (templ) == 64 ++ && x_ehdr64.e_ident[EI_CLASS] == ELFCLASS64) ++ || (bfd_get_arch_size (templ) == 32 ++ && x_ehdr64.e_ident[EI_CLASS] == ELFCLASS32))) ++ { ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Unrecognized ELF header at address 0x%lx"), ++ (unsigned long) ehdr_vma); ++ return NULL; ++ } ++ ++ /* Check that file's byte order matches xvec's */ ++ switch (x_ehdr64.e_ident[EI_DATA]) ++ { ++ case ELFDATA2MSB: /* Big-endian */ ++ if (! bfd_header_big_endian (templ)) ++ { ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Unrecognized " ++ "big-endian ELF header at address 0x%lx"), ++ (unsigned long) ehdr_vma); ++ return NULL; ++ } ++ break; ++ case ELFDATA2LSB: /* Little-endian */ ++ if (! bfd_header_little_endian (templ)) ++ { ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Unrecognized " ++ "little-endian ELF header at address 0x%lx"), ++ (unsigned long) ehdr_vma); ++ return NULL; ++ } ++ break; ++ case ELFDATANONE: /* No data encoding specified */ ++ default: /* Unknown data encoding specified */ ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Unrecognized " ++ "ELF header endianity at address 0x%lx"), ++ (unsigned long) ehdr_vma); ++ return NULL; ++ } ++ ++ elf_swap_ehdr_in (templ, &x_ehdr64, &i_ehdr); ++ ++ /* The file header tells where to find the program headers. ++ These are what we use to actually choose what to read. */ ++ ++ if (i_ehdr.e_phentsize != (bfd_get_arch_size (templ) == 64 ++ ? sizeof (Elf64_External_Phdr) ++ : sizeof (Elf32_External_Phdr)) ++ || i_ehdr.e_phnum == 0) ++ { ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Invalid ELF program headers from the ELF header " ++ "at address 0x%lx"), (unsigned long) ehdr_vma); ++ return NULL; ++ } ++ ++ x_phdrs_size = (bfd_get_arch_size (templ) == 64 ? sizeof (Elf64_External_Phdr) ++ : sizeof (Elf32_External_Phdr)); ++ ++ i_phdrs = (Elf_Internal_Phdr *) xmalloc (i_ehdr.e_phnum * (sizeof *i_phdrs + x_phdrs_size)); ++ x_phdrs_ptr = (gdb_byte *) &i_phdrs[i_ehdr.e_phnum]; ++ err = target_read_memory (ehdr_vma + i_ehdr.e_phoff, (bfd_byte *) x_phdrs_ptr, ++ i_ehdr.e_phnum * x_phdrs_size); ++ if (err) ++ { ++ free (i_phdrs); ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Error reading " ++ "ELF program headers at address 0x%lx"), ++ (unsigned long) (ehdr_vma + i_ehdr.e_phoff)); ++ return NULL; ++ } ++ ++ loadbase = ehdr_vma; ++ loadbase_set = 0; ++ for (i = 0; i < i_ehdr.e_phnum; ++i) ++ { ++ elf_swap_phdr_in (templ, (Elf64_External_Phdr *) ++ (x_phdrs_ptr + i * x_phdrs_size), &i_phdrs[i]); ++ /* IA-64 vDSO may have two mappings for one segment, where one mapping ++ is executable only, and one is read only. We must not use the ++ executable one (PF_R is the first one, PF_X the second one). */ ++ if (i_phdrs[i].p_type == PT_LOAD && (i_phdrs[i].p_flags & PF_R)) ++ { ++ /* Only the first PT_LOAD segment indicates the file bias. ++ Next segments may have P_VADDR arbitrarily higher. ++ If the first segment has P_VADDR zero any next segment must not ++ confuse us, the first one sets LOADBASE certainly enough. */ ++ if (!loadbase_set && i_phdrs[i].p_offset == 0) ++ { ++ loadbase = ehdr_vma - i_phdrs[i].p_vaddr; ++ loadbase_set = 1; ++ } ++ } ++ } ++ ++ if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE) ++ warning (_("build-id: Found ELF header at address 0x%lx, loadbase 0x%lx"), ++ (unsigned long) ehdr_vma, (unsigned long) loadbase); ++ ++ *e_phnum_pointer = i_ehdr.e_phnum; ++ *loadbase_pointer = loadbase; ++ return i_phdrs; ++} ++ ++/* BUILD_ID_ADDR_GET gets ADDR located somewhere in the object. ++ Find the first section before ADDR containing an ELF header. ++ We rely on the fact the sections from multiple files do not mix. ++ FIXME: We should check ADDR is contained _inside_ the section with possibly ++ missing content (P_FILESZ < P_MEMSZ). These omitted sections are currently ++ hidden by _BFD_ELF_MAKE_SECTION_FROM_PHDR. */ ++ ++static CORE_ADDR build_id_addr; ++struct build_id_addr_sect ++ { ++ struct build_id_addr_sect *next; ++ asection *sect; ++ }; ++static struct build_id_addr_sect *build_id_addr_sect; ++ ++static void build_id_addr_candidate (bfd *abfd, asection *sect, void *obj) ++{ ++ if (build_id_addr >= bfd_section_vma (abfd, sect)) ++ { ++ struct build_id_addr_sect *candidate; ++ ++ candidate = (struct build_id_addr_sect *) xmalloc (sizeof *candidate); ++ candidate->next = build_id_addr_sect; ++ build_id_addr_sect = candidate; ++ candidate->sect = sect; ++ } ++} ++ ++struct bfd_build_id * ++build_id_addr_get (CORE_ADDR addr) ++{ ++ struct build_id_addr_sect *candidate; ++ struct bfd_build_id *retval = NULL; ++ Elf_Internal_Phdr *i_phdr = NULL; ++ bfd_vma loadbase = 0; ++ unsigned e_phnum = 0; ++ ++ if (core_bfd == NULL) ++ return NULL; ++ ++ build_id_addr = addr; ++ gdb_assert (build_id_addr_sect == NULL); ++ bfd_map_over_sections (core_bfd, build_id_addr_candidate, NULL); ++ ++ /* Sections are sorted in the high-to-low VMAs order. ++ Stop the search on the first ELF header we find. ++ Do not continue the search even if it does not contain NT_GNU_BUILD_ID. */ ++ ++ for (candidate = build_id_addr_sect; candidate != NULL; ++ candidate = candidate->next) ++ { ++ i_phdr = elf_get_phdr (core_bfd, ++ bfd_section_vma (core_bfd, candidate->sect), ++ &e_phnum, &loadbase); ++ if (i_phdr != NULL) ++ break; ++ } ++ ++ if (i_phdr != NULL) ++ { ++ retval = build_id_phdr_get (core_bfd, loadbase, e_phnum, i_phdr); ++ xfree (i_phdr); ++ } ++ ++ while (build_id_addr_sect != NULL) ++ { ++ candidate = build_id_addr_sect; ++ build_id_addr_sect = candidate->next; ++ xfree (candidate); ++ } ++ ++ return retval; ++} ++ + /* See build-id.h. */ + + int +@@ -50,7 +448,7 @@ build_id_verify (bfd *abfd, size_t check + const struct bfd_build_id *found; + int retval = 0; + +- found = build_id_bfd_get (abfd); ++ found = build_id_bfd_shdr_get (abfd); + + if (found == NULL) + warning (_("File \"%s\" has no build-id, file skipped"), +@@ -65,23 +463,56 @@ build_id_verify (bfd *abfd, size_t check + return retval; + } + ++static char * ++link_resolve (const char *symlink, int level) ++{ ++ char buf[PATH_MAX + 1], *target, *retval; ++ ssize_t got; ++ ++ if (level > 10) ++ return xstrdup (symlink); ++ ++ got = readlink (symlink, buf, sizeof (buf)); ++ if (got < 0 || got >= sizeof (buf)) ++ return xstrdup (symlink); ++ buf[got] = '\0'; ++ ++ if (IS_ABSOLUTE_PATH (buf)) ++ target = xstrdup (buf); ++ else ++ { ++ std::string dir = ldirname (symlink); ++ ++ if (dir.length () == 0) ++ return xstrdup (symlink); ++ target = xstrprintf ("%s" ++#ifndef HAVE_DOS_BASED_FILE_SYSTEM ++ "/" ++#else /* HAVE_DOS_BASED_FILE_SYSTEM */ ++ "\\" ++#endif /* HAVE_DOS_BASED_FILE_SYSTEM */ ++ "%s", dir.c_str (), buf); ++ } ++ ++ retval = link_resolve (target, level + 1); ++ xfree (target); ++ return retval; ++} ++ + /* See build-id.h. */ + + gdb_bfd_ref_ptr +-build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id) ++build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id, ++ char **link_return, int add_debug_suffix) + { +- char *link, *debugdir; ++ char *link, *debugdir, *link_all = NULL; + VEC (char_ptr) *debugdir_vec; + struct cleanup *back_to; + int ix; + gdb_bfd_ref_ptr abfd; +- int alloc_len; + + /* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */ +- alloc_len = (strlen (debug_file_directory) +- + (sizeof "/.build-id/" - 1) + 1 +- + 2 * build_id_len + (sizeof ".debug" - 1) + 1); +- link = (char *) alloca (alloc_len); ++ link = (char *) xmalloc (strlen (debug_file_directory) + 2 * build_id_len + 50); + + /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will + cause "/.build-id/..." lookups. */ +@@ -94,9 +525,12 @@ build_id_to_debug_bfd (size_t build_id_l + size_t debugdir_len = strlen (debugdir); + const gdb_byte *data = build_id; + size_t size = build_id_len; +- char *s; + char *filename = NULL; + struct cleanup *inner; ++ unsigned seqno; ++ struct stat statbuf_trash; ++ /* Initialize it just to avoid a GCC false warning. */ ++ char *s, *link0 = NULL, *link0_resolved; + + memcpy (link, debugdir, debugdir_len); + s = &link[debugdir_len]; +@@ -110,45 +544,290 @@ build_id_to_debug_bfd (size_t build_id_l + *s++ = '/'; + while (size-- > 0) + s += sprintf (s, "%02x", (unsigned) *data++); +- strcpy (s, ".debug"); ++ for (seqno = 0;; seqno++) ++ { ++ char *s2; + +- /* lrealpath() is expensive even for the usually non-existent files. */ +- if (access (link, F_OK) == 0) +- filename = lrealpath (link); ++ if (seqno) ++ { ++ /* There can be multiple build-id symlinks pointing to real files ++ with the same build-id (such as hard links). Some of the real ++ files may not be installed. */ ++ ++ s2 = s + sprintf (s, ".%u", seqno); ++ } ++ else ++ s2 = s; ++ ++ if (add_debug_suffix) ++ strcpy (s2, ".debug"); ++ else ++ *s2 = 0; ++ ++ if (!seqno) ++ { ++ /* If none of the real files is found report as missing file ++ always the non-.%u-suffixed file. */ ++ link0 = xstrdup (link); ++ } ++ ++ /* `access' automatically dereferences LINK. */ ++ if (lstat (link, &statbuf_trash) != 0) ++ { ++ /* Stop increasing SEQNO. */ ++ break; ++ } ++ ++ filename = lrealpath (link); ++ if (filename == NULL) ++ continue; ++ ++ /* We expect to be silent on the non-existing files. */ ++ inner = make_cleanup (xfree, filename); ++ abfd = gdb_bfd_open (filename, gnutarget, -1); ++ do_cleanups (inner); ++ ++ if (abfd == NULL) ++ continue; + +- if (filename == NULL) +- continue; ++ if (build_id_verify (abfd.get(), build_id_len, build_id)) ++ break; + +- /* We expect to be silent on the non-existing files. */ +- inner = make_cleanup (xfree, filename); +- abfd = gdb_bfd_open (filename, gnutarget, -1); +- do_cleanups (inner); ++ abfd.release (); + +- if (abfd == NULL) +- continue; ++ filename = NULL; ++ } + +- if (build_id_verify (abfd.get(), build_id_len, build_id)) +- break; ++ if (filename != NULL) ++ { ++ /* LINK_ALL is not used below in this non-NULL FILENAME case. */ ++ xfree (link0); ++ break; ++ } + +- abfd.release (); ++ /* If the symlink has target request to install the target. ++ BASE-debuginfo.rpm contains the symlink but BASE.rpm may be missing. ++ https://bugzilla.redhat.com/show_bug.cgi?id=981154 */ ++ link0_resolved = link_resolve (link0, 0); ++ xfree (link0); ++ ++ if (link_all == NULL) ++ link_all = link0_resolved; ++ else ++ { ++ size_t len_orig = strlen (link_all); ++ ++ link_all = (char *) xrealloc (link_all, ++ len_orig + 1 + strlen (link0_resolved) + 1); ++ ++ /* Use whitespace instead of DIRNAME_SEPARATOR to be compatible with ++ its possible use as an argument for installation command. */ ++ link_all[len_orig] = ' '; ++ ++ strcpy (&link_all[len_orig + 1], link0_resolved); ++ xfree (link0_resolved); ++ } ++ } ++ ++ if (link_return != NULL) ++ { ++ if (abfd != NULL) ++ { ++ *link_return = link; ++ link = NULL; ++ } ++ else ++ { ++ *link_return = link_all; ++ link_all = NULL; ++ } + } ++ xfree (link); ++ xfree (link_all); + + do_cleanups (back_to); + return abfd; + } + ++char * ++build_id_to_filename (const struct bfd_build_id *build_id, char **link_return) ++{ ++ gdb_bfd_ref_ptr abfd; ++ char *result; ++ ++ abfd = build_id_to_debug_bfd (build_id->size, build_id->data, link_return, 0); ++ if (abfd == NULL) ++ return NULL; ++ ++ result = xstrdup (bfd_get_filename (abfd)); ++ abfd.release (); ++ return result; ++} ++ ++/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages ++ Try to install the hash file ... ++ avoidance. */ ++ ++struct missing_filepair ++ { ++ char *binary; ++ char *debug; ++ char data[1]; ++ }; ++ ++static struct htab *missing_filepair_hash; ++static struct obstack missing_filepair_obstack; ++ ++static void * ++missing_filepair_xcalloc (size_t nmemb, size_t nmemb_size) ++{ ++ void *retval; ++ size_t size = nmemb * nmemb_size; ++ ++ retval = obstack_alloc (&missing_filepair_obstack, size); ++ memset (retval, 0, size); ++ return retval; ++} ++ ++static hashval_t ++missing_filepair_hash_func (const struct missing_filepair *elem) ++{ ++ hashval_t retval = 0; ++ ++ retval ^= htab_hash_string (elem->binary); ++ if (elem->debug != NULL) ++ retval ^= htab_hash_string (elem->debug); ++ ++ return retval; ++} ++ ++static int ++missing_filepair_eq (const struct missing_filepair *elem1, ++ const struct missing_filepair *elem2) ++{ ++ return strcmp (elem1->binary, elem2->binary) == 0 ++ && ((elem1->debug == NULL) == (elem2->debug == NULL)) ++ && (elem1->debug == NULL || strcmp (elem1->debug, elem2->debug) == 0); ++} ++ ++static void ++missing_filepair_change (void) ++{ ++ if (missing_filepair_hash != NULL) ++ { ++ obstack_free (&missing_filepair_obstack, NULL); ++ /* All their memory came just from missing_filepair_OBSTACK. */ ++ missing_filepair_hash = NULL; ++ } ++} ++ ++static void ++debug_print_executable_changed (void) ++{ ++ missing_filepair_change (); ++} ++ ++/* Notify user the file BINARY with (possibly NULL) associated separate debug ++ information file DEBUG is missing. DEBUG may or may not be the build-id ++ file such as would be: ++ /usr/lib/debug/.build-id/dd/b1d2ce632721c47bb9e8679f369e2295ce71be.debug ++ */ ++ ++void ++debug_print_missing (const char *binary, const char *debug) ++{ ++ size_t binary_len0 = strlen (binary) + 1; ++ size_t debug_len0 = debug ? strlen (debug) + 1 : 0; ++ struct missing_filepair missing_filepair_find; ++ struct missing_filepair *missing_filepair; ++ struct missing_filepair **slot; ++ ++ if (build_id_verbose < BUILD_ID_VERBOSE_FILENAMES) ++ return; ++ ++ if (missing_filepair_hash == NULL) ++ { ++ obstack_init (&missing_filepair_obstack); ++ missing_filepair_hash = htab_create_alloc (64, ++ (hashval_t (*) (const void *)) missing_filepair_hash_func, ++ (int (*) (const void *, const void *)) missing_filepair_eq, NULL, ++ missing_filepair_xcalloc, NULL); ++ } ++ ++ /* Use MISSING_FILEPAIR_FIND first instead of calling obstack_alloc with ++ obstack_free in the case of a (rare) match. The problem is ALLOC_F for ++ MISSING_FILEPAIR_HASH allocates from MISSING_FILEPAIR_OBSTACK maintenance ++ structures for MISSING_FILEPAIR_HASH. Calling obstack_free would possibly ++ not to free only MISSING_FILEPAIR but also some such structures (allocated ++ during the htab_find_slot call). */ ++ ++ missing_filepair_find.binary = (char *) binary; ++ missing_filepair_find.debug = (char *) debug; ++ slot = (struct missing_filepair **) htab_find_slot (missing_filepair_hash, ++ &missing_filepair_find, ++ INSERT); ++ ++ /* While it may be still printed duplicitely with the missing debuginfo file ++ * it is due to once printing about the binary file build-id link and once ++ * about the .debug file build-id link as both the build-id symlinks are ++ * located in the debuginfo package. */ ++ ++ if (*slot != NULL) ++ return; ++ ++ missing_filepair = (struct missing_filepair *) obstack_alloc (&missing_filepair_obstack, ++ sizeof (*missing_filepair) - 1 ++ + binary_len0 + debug_len0); ++ missing_filepair->binary = missing_filepair->data; ++ memcpy (missing_filepair->binary, binary, binary_len0); ++ if (debug != NULL) ++ { ++ missing_filepair->debug = missing_filepair->binary + binary_len0; ++ memcpy (missing_filepair->debug, debug, debug_len0); ++ } ++ else ++ missing_filepair->debug = NULL; ++ ++ *slot = missing_filepair; ++ ++ /* We do not collect and flush these messages as each such message ++ already requires its own separate lines. */ ++ ++ fprintf_unfiltered (gdb_stdlog, ++ _("Missing separate debuginfo for %s\n"), binary); ++ if (debug != NULL) ++ fprintf_unfiltered (gdb_stdlog, _("Try to install the hash file %s\n"), ++ debug); ++} ++ + /* See build-id.h. */ + + char * +-find_separate_debug_file_by_buildid (struct objfile *objfile) ++find_separate_debug_file_by_buildid (struct objfile *objfile, ++ gdb::unique_xmalloc_ptr *build_id_filename_return) + { + const struct bfd_build_id *build_id; + +- build_id = build_id_bfd_get (objfile->obfd); ++ if (build_id_filename_return) ++ *build_id_filename_return = NULL; ++ ++ build_id = build_id_bfd_shdr_get (objfile->obfd); + if (build_id != NULL) + { ++ char *build_id_filename_cstr = NULL; + gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size, +- build_id->data)); ++ build_id->data, ++ (!build_id_filename_return ? NULL : &build_id_filename_cstr), 1)); ++ if (build_id_filename_return) ++ { ++ if (!build_id_filename_cstr) ++ gdb_assert (!*build_id_filename_return); ++ else ++ { ++ *build_id_filename_return = gdb::unique_xmalloc_ptr (build_id_filename_cstr); ++ build_id_filename_cstr = NULL; ++ } ++ } + /* Prevent looping on a stripped .debug file. */ + if (abfd != NULL + && filename_cmp (bfd_get_filename (abfd.get ()), +@@ -160,3 +839,21 @@ find_separate_debug_file_by_buildid (str + } + return NULL; + } ++ ++extern void _initialize_build_id (void); ++ ++void ++_initialize_build_id (void) ++{ ++ add_setshow_zinteger_cmd ("build-id-verbose", no_class, &build_id_verbose, ++ _("\ ++Set debugging level of the build-id locator."), _("\ ++Show debugging level of the build-id locator."), _("\ ++Level 1 (default) enables printing the missing debug filenames,\n\ ++level 2 also prints the parsing of binaries to find the identificators."), ++ NULL, ++ show_build_id_verbose, ++ &setlist, &showlist); ++ ++ observer_attach_executable_changed (debug_print_executable_changed); ++} +diff -Naurp insight-7.12.50.20170416.orig/gdb/build-id.h insight-7.12.50.20170416.new/gdb/build-id.h +--- insight-7.12.50.20170416.orig/gdb/build-id.h 2017-01-21 02:32:23.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/build-id.h 2017-04-16 13:52:31.767187912 +0100 +@@ -22,9 +22,10 @@ + + #include "gdb_bfd.h" + +-/* Locate NT_GNU_BUILD_ID from ABFD and return its content. */ ++/* Separate debuginfo files have corrupted PHDR but SHDR is correct there. ++ Locate NT_GNU_BUILD_ID from ABFD and return its content. */ + +-extern const struct bfd_build_id *build_id_bfd_get (bfd *abfd); ++extern const struct bfd_build_id *build_id_bfd_shdr_get (bfd *abfd); + + /* Return true if ABFD has NT_GNU_BUILD_ID matching the CHECK value. + Otherwise, issue a warning and return false. */ +@@ -38,13 +39,19 @@ extern int build_id_verify (bfd *abfd, + the caller. */ + + extern gdb_bfd_ref_ptr build_id_to_debug_bfd (size_t build_id_len, +- const bfd_byte *build_id); ++ const bfd_byte *build_id, ++ char **link_return, ++ int add_debug_suffix); ++ ++extern char *build_id_to_filename (const struct bfd_build_id *build_id, ++ char **link_return); + + /* Find the separate debug file for OBJFILE, by using the build-id + associated with OBJFILE's BFD. If successful, returns a malloc'd + file name for the separate debug file. The caller must free this. + Otherwise, returns NULL. */ + +-extern char *find_separate_debug_file_by_buildid (struct objfile *objfile); ++extern char *find_separate_debug_file_by_buildid (struct objfile *objfile, ++ gdb::unique_xmalloc_ptr *build_id_filename_return); + + #endif /* BUILD_ID_H */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/coffread.c insight-7.12.50.20170416.new/gdb/coffread.c +--- insight-7.12.50.20170416.orig/gdb/coffread.c 2017-01-21 02:32:23.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/coffread.c 2017-04-16 13:52:31.773187966 +0100 +@@ -734,7 +734,7 @@ coff_symfile_read (struct objfile *objfi + { + char *debugfile; + +- debugfile = find_separate_debug_file_by_buildid (objfile); ++ debugfile = find_separate_debug_file_by_buildid (objfile, NULL); + + if (debugfile == NULL) + debugfile = find_separate_debug_file_by_debuglink (objfile); +diff -Naurp insight-7.12.50.20170416.orig/gdb/corelow.c insight-7.12.50.20170416.new/gdb/corelow.c +--- insight-7.12.50.20170416.orig/gdb/corelow.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/corelow.c 2017-04-16 13:52:31.752187778 +0100 +@@ -45,6 +45,10 @@ + #include "gdb_bfd.h" + #include "completer.h" + #include "filestuff.h" ++#include "auxv.h" ++#include "elf/common.h" ++#include "gdbcmd.h" ++#include "build-id.h" + + #ifndef O_LARGEFILE + #define O_LARGEFILE 0 +@@ -266,6 +270,54 @@ add_to_thread_list (bfd *abfd, asection + inferior_ptid = ptid; /* Yes, make it current. */ + } + ++static int build_id_core_loads = 1; ++ ++static void ++build_id_locate_exec (int from_tty) ++{ ++ CORE_ADDR at_entry; ++ struct bfd_build_id *build_id; ++ char *execfilename, *debug_filename; ++ char *build_id_filename; ++ struct cleanup *back_to; ++ ++ if (exec_bfd != NULL || symfile_objfile != NULL) ++ return; ++ ++ if (target_auxv_search (¤t_target, AT_ENTRY, &at_entry) <= 0) ++ return; ++ ++ build_id = build_id_addr_get (at_entry); ++ if (build_id == NULL) ++ return; ++ back_to = make_cleanup (xfree, build_id); ++ ++ /* SYMFILE_OBJFILE should refer to the main executable (not only to its ++ separate debug info file). gcc44+ keeps .eh_frame only in the main ++ executable without its duplicate .debug_frame in the separate debug info ++ file - such .eh_frame would not be found if SYMFILE_OBJFILE would refer ++ directly to the separate debug info file. */ ++ ++ execfilename = build_id_to_filename (build_id, &build_id_filename); ++ make_cleanup (xfree, build_id_filename); ++ ++ if (execfilename != NULL) ++ { ++ make_cleanup (xfree, execfilename); ++ exec_file_attach (execfilename, from_tty); ++ symbol_file_add_main (execfilename, ++ symfile_add_flag (!from_tty ? 0 : SYMFILE_VERBOSE)); ++ if (symfile_objfile != NULL) ++ symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED; ++ } ++ else ++ debug_print_missing (_("the main executable file"), build_id_filename); ++ ++ do_cleanups (back_to); ++ ++ /* No automatic SOLIB_ADD as the libraries would get read twice. */ ++} ++ + /* This routine opens and sets up the core file bfd. */ + + static void +@@ -402,6 +454,14 @@ core_open (const char *arg, int from_tty + switch_to_thread (thread->ptid); + } + ++ /* Find the build_id identifiers. If it gets executed after ++ POST_CREATE_INFERIOR we would clash with asking to discard the already ++ loaded VDSO symbols. If it gets executed before bfd_map_over_sections ++ INFERIOR_PTID is still not set and libthread_db initialization crashes on ++ PID == 0 in ps_pglobal_lookup. */ ++ if (build_id_core_loads != 0) ++ build_id_locate_exec (from_tty); ++ + post_create_inferior (&core_ops, from_tty); + + /* Now go through the target stack looking for threads since there +@@ -1079,4 +1139,11 @@ _initialize_corelow (void) + init_core_ops (); + + add_target_with_completer (&core_ops, filename_completer); ++ ++ add_setshow_boolean_cmd ("build-id-core-loads", class_files, ++ &build_id_core_loads, _("\ ++Set whether CORE-FILE loads the build-id associated files automatically."), _("\ ++Show whether CORE-FILE loads the build-id associated files automatically."), ++ NULL, NULL, NULL, ++ &setlist, &showlist); + } +diff -Naurp insight-7.12.50.20170416.orig/gdb/doc/gdb.texinfo insight-7.12.50.20170416.new/gdb/doc/gdb.texinfo +--- insight-7.12.50.20170416.orig/gdb/doc/gdb.texinfo 2017-04-16 13:51:32.834666757 +0100 ++++ insight-7.12.50.20170416.new/gdb/doc/gdb.texinfo 2017-04-16 13:52:31.761187859 +0100 +@@ -18977,6 +18977,27 @@ information files. + + @end table + ++You can also adjust the current verbosity of the @dfn{build id} locating. ++ ++@table @code ++ ++@kindex set build-id-verbose ++@item set build-id-verbose 0 ++No additional messages are printed. ++ ++@item set build-id-verbose 1 ++Missing separate debug filenames are printed. ++ ++@item set build-id-verbose 2 ++Missing separate debug filenames are printed and also all the parsing of the ++binaries to find their @dfn{build id} content is printed. ++ ++@kindex show build-id-verbose ++@item show build-id-verbose ++Show the current verbosity value for the @dfn{build id} content locating. ++ ++@end table ++ + @cindex @code{.gnu_debuglink} sections + @cindex debug link sections + A debug link is a special section of the executable file named +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2read.c insight-7.12.50.20170416.new/gdb/dwarf2read.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2read.c 2017-04-16 13:51:32.837666783 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2read.c 2017-04-16 13:52:31.772187957 +0100 +@@ -2670,7 +2670,7 @@ dwarf2_get_dwz_file (void) + } + + if (dwz_bfd == NULL) +- dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid); ++ dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid, NULL, 1); + + if (dwz_bfd == NULL) + error (_("could not find '.gnu_debugaltlink' file for %s"), +diff -Naurp insight-7.12.50.20170416.orig/gdb/elfread.c insight-7.12.50.20170416.new/gdb/elfread.c +--- insight-7.12.50.20170416.orig/gdb/elfread.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/elfread.c 2017-04-16 13:52:31.762187868 +0100 +@@ -1265,8 +1265,9 @@ elf_symfile_read (struct objfile *objfil + && objfile->separate_debug_objfile == NULL + && objfile->separate_debug_objfile_backlink == NULL) + { ++ gdb::unique_xmalloc_ptr build_id_filename; + gdb::unique_xmalloc_ptr debugfile +- (find_separate_debug_file_by_buildid (objfile)); ++ (find_separate_debug_file_by_buildid (objfile, &build_id_filename)); + + if (debugfile == NULL) + debugfile.reset (find_separate_debug_file_by_debuglink (objfile)); +@@ -1278,6 +1279,10 @@ elf_symfile_read (struct objfile *objfil + symbol_file_add_separate (abfd.get (), debugfile.get (), + symfile_flags, objfile); + } ++ /* Check if any separate debug info has been extracted out. */ ++ else if (bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink") ++ != NULL) ++ debug_print_missing (objfile_name (objfile), build_id_filename.get ()); + } + } + +diff -Naurp insight-7.12.50.20170416.orig/gdb/objfiles.h insight-7.12.50.20170416.new/gdb/objfiles.h +--- insight-7.12.50.20170416.orig/gdb/objfiles.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/objfiles.h 2017-04-16 13:52:31.766187903 +0100 +@@ -444,6 +444,10 @@ struct objfile + htab_t static_links; + }; + ++/* This file was loaded according to the BUILD_ID_CORE_LOADS rules. */ ++ ++#define OBJF_BUILD_ID_CORE_LOADED static_cast(1 << 12) ++ + /* Declarations for functions defined in objfiles.c */ + + extern struct objfile *allocate_objfile (bfd *, const char *name, +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/py-objfile.c insight-7.12.50.20170416.new/gdb/python/py-objfile.c +--- insight-7.12.50.20170416.orig/gdb/python/py-objfile.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/py-objfile.c 2017-04-16 13:52:31.772187957 +0100 +@@ -137,7 +137,7 @@ objfpy_get_build_id (PyObject *self, voi + + TRY + { +- build_id = build_id_bfd_get (objfile->obfd); ++ build_id = build_id_bfd_shdr_get (objfile->obfd); + } + CATCH (except, RETURN_MASK_ALL) + { +@@ -544,7 +544,7 @@ objfpy_lookup_objfile_by_build_id (const + /* Don't return separate debug files. */ + if (objfile->separate_debug_objfile_backlink != NULL) + continue; +- obfd_build_id = build_id_bfd_get (objfile->obfd); ++ obfd_build_id = build_id_bfd_shdr_get (objfile->obfd); + if (obfd_build_id == NULL) + continue; + if (objfpy_build_id_matches (obfd_build_id, build_id)) +diff -Naurp insight-7.12.50.20170416.orig/gdb/solib-svr4.c insight-7.12.50.20170416.new/gdb/solib-svr4.c +--- insight-7.12.50.20170416.orig/gdb/solib-svr4.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/solib-svr4.c 2017-04-16 13:52:31.762187868 +0100 +@@ -45,6 +45,7 @@ + #include "auxv.h" + #include "gdb_bfd.h" + #include "probe.h" ++#include "build-id.h" + + static struct link_map_offsets *svr4_fetch_link_map_offsets (void); + static int svr4_have_link_map_offsets (void); +@@ -1420,9 +1421,52 @@ svr4_read_so_list (CORE_ADDR lm, CORE_AD + continue; + } + +- strncpy (newobj->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); +- newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; +- strcpy (newobj->so_original_name, newobj->so_name); ++ { ++ struct bfd_build_id *build_id; ++ ++ strncpy (newobj->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); ++ newobj->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; ++ /* May get overwritten below. */ ++ strcpy (newobj->so_name, newobj->so_original_name); ++ ++ build_id = build_id_addr_get (newobj->lm_info->l_ld); ++ if (build_id != NULL) ++ { ++ char *name, *build_id_filename; ++ ++ /* Missing the build-id matching separate debug info file ++ would be handled while SO_NAME gets loaded. */ ++ name = build_id_to_filename (build_id, &build_id_filename); ++ if (name != NULL) ++ { ++ strncpy (newobj->so_name, name, SO_NAME_MAX_PATH_SIZE - 1); ++ newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; ++ xfree (name); ++ } ++ else ++ { ++ debug_print_missing (newobj->so_name, build_id_filename); ++ ++ /* In the case the main executable was found according to ++ its build-id (from a core file) prevent loading ++ a different build of a library with accidentally the ++ same SO_NAME. ++ ++ It suppresses bogus backtraces (and prints "??" there ++ instead) if the on-disk files no longer match the ++ running program version. */ ++ ++ if (symfile_objfile != NULL ++ && (symfile_objfile->flags ++ & OBJF_BUILD_ID_CORE_LOADED) != 0) ++ newobj->so_name[0] = 0; ++ } ++ ++ xfree (build_id_filename); ++ xfree (build_id); ++ } ++ } ++ + xfree (buffer); + + /* If this entry has no name, or its name matches the name +diff -Naurp insight-7.12.50.20170416.orig/gdb/symfile.h insight-7.12.50.20170416.new/gdb/symfile.h +--- insight-7.12.50.20170416.orig/gdb/symfile.h 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/symfile.h 2017-04-16 13:52:31.763187877 +0100 +@@ -567,6 +567,10 @@ void expand_symtabs_matching + void map_symbol_filenames (symbol_filename_ftype *fun, void *data, + int need_fullname); + ++/* build-id support. */ ++extern struct bfd_build_id *build_id_addr_get (CORE_ADDR addr); ++extern void debug_print_missing (const char *binary, const char *debug); ++ + /* From dwarf2read.c */ + + /* Names for a dwarf2 debugging section. The field NORMAL is the normal +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.base/corefile.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.base/corefile.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.base/corefile.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.base/corefile.exp 2017-04-16 13:52:31.766187903 +0100 +@@ -293,3 +293,33 @@ gdb_test_multiple "core-file $corefile" + pass $test + } + } ++ ++ ++# Test auto-loading of binary files through build-id from the core file. ++set buildid [build_id_debug_filename_get $binfile] ++set wholetest "binfile found by build-id" ++if {$buildid == ""} { ++ untested "$wholetest (binary has no build-id)" ++} else { ++ gdb_exit ++ gdb_start ++ ++ regsub {\.debug$} $buildid {} buildid ++ set debugdir [standard_output_file ${testfile}-debugdir] ++ file delete -force -- $debugdir ++ file mkdir $debugdir/[file dirname $buildid] ++ file copy $binfile $debugdir/$buildid ++ ++ set test "show debug-file-directory" ++ gdb_test_multiple $test $test { ++ -re "The directory where separate debug symbols are searched for is \"(.*)\"\\.\r\n$gdb_prompt $" { ++ set debugdir_orig $expect_out(1,string) ++ pass $test ++ } ++ } ++ gdb_test_no_output "set debug-file-directory $debugdir:$debugdir_orig" "set debug-file-directory" ++ gdb_test "show build-id-core-loads" {Whether CORE-FILE loads the build-id associated files automatically is on\.} ++ gdb_test "core-file $corefile" "\r\nProgram terminated with .*" "core-file without executable" ++ gdb_test "info files" "Local exec file:\r\n\[ \t\]*`[string_to_regexp $debugdir/$buildid]', file type .*" ++ pass $wholetest ++} +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.base/new-ui-pending-input.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.base/new-ui-pending-input.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.base/new-ui-pending-input.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.base/new-ui-pending-input.exp 2017-04-16 13:52:31.765187895 +0100 +@@ -62,6 +62,7 @@ proc test_command_line_new_ui_pending_in + set options "" + append options " -iex \"set height 0\"" + append options " -iex \"set width 0\"" ++ append options " -iex \"set build-id-verbose 0\"" + append options " -iex \"new-ui console $extra_tty_name\"" + append options " -ex \"b $bpline\"" + append options " -ex \"run\"" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/lib/gdb.exp insight-7.12.50.20170416.new/gdb/testsuite/lib/gdb.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/lib/gdb.exp 2017-04-16 13:51:32.814666580 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/lib/gdb.exp 2017-04-16 13:52:31.764187886 +0100 +@@ -1646,6 +1646,16 @@ proc default_gdb_start { } { + warning "Couldn't set the width to 0." + } + } ++ # Turn off the missing warnings as the testsuite does not expect it. ++ send_gdb "set build-id-verbose 0\n" ++ gdb_expect 10 { ++ -re "$gdb_prompt $" { ++ verbose "Disabled the missing debug infos warnings." 2 ++ } ++ timeout { ++ warning "Could not disable the missing debug infos warnings.." ++ } ++ } + return 0 + } + +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/lib/mi-support.exp insight-7.12.50.20170416.new/gdb/testsuite/lib/mi-support.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/lib/mi-support.exp 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/lib/mi-support.exp 2017-04-16 13:52:31.765187895 +0100 +@@ -309,6 +309,16 @@ proc default_mi_gdb_start { args } { + warning "Couldn't set the width to 0." + } + } ++ # Turn off the missing warnings as the testsuite does not expect it. ++ send_gdb "190-gdb-set build-id-verbose 0\n" ++ gdb_expect 10 { ++ -re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" { ++ verbose "Disabled the missing debug infos warnings." 2 ++ } ++ timeout { ++ warning "Could not disable the missing debug infos warnings.." ++ } ++ } + + if { $separate_inferior_pty } { + mi_create_inferior_pty diff --git a/insight-7.12-gdb-6.8-attach-signalled-detach-stopped.patch b/insight-7.12-gdb-6.8-attach-signalled-detach-stopped.patch new file mode 100644 index 0000000..6126c41 --- /dev/null +++ b/insight-7.12-gdb-6.8-attach-signalled-detach-stopped.patch @@ -0,0 +1,177 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/infrun.c insight-7.12.50.20170416.new/gdb/infrun.c +--- insight-7.12.50.20170416.orig/gdb/infrun.c 2017-04-16 12:20:48.912021636 +0100 ++++ insight-7.12.50.20170416.new/gdb/infrun.c 2017-04-16 12:21:43.277528153 +0100 +@@ -620,6 +620,13 @@ holding the child stopped. Try \"set de + target_pid_to_str (process_ptid)); + } + ++#ifdef NEED_DETACH_SIGSTOP ++ /* We should check PID_WAS_STOPPED and detach it stopped accordingly. ++ In this point of code it cannot be 1 as we would not get FORK ++ executed without CONTINUE first which resets PID_WAS_STOPPED. ++ We would have to first TARGET_STOP and WAITPID it as with running ++ inferior PTRACE_DETACH, SIGSTOP will ignore the signal. */ ++#endif + target_detach (NULL, 0); + } + +diff -Naurp insight-7.12.50.20170416.orig/gdb/linux-nat.c insight-7.12.50.20170416.new/gdb/linux-nat.c +--- insight-7.12.50.20170416.orig/gdb/linux-nat.c 2017-04-16 10:13:09.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/linux-nat.c 2017-04-16 12:21:43.941534340 +0100 +@@ -194,6 +194,11 @@ enum tribool have_ptrace_getregset = TRI + static struct target_ops *linux_ops; + static struct target_ops linux_ops_saved; + ++#ifdef NEED_DETACH_SIGSTOP ++/* PID of the inferior stopped by SIGSTOP before attaching (or zero). */ ++static pid_t pid_was_stopped; ++ ++#endif + /* The method to call, if any, when a new thread is attached. */ + static void (*linux_nat_new_thread) (struct lwp_info *); + +@@ -1055,6 +1060,9 @@ linux_nat_post_attach_wait (ptid_t ptid, + if (debug_linux_nat) + fprintf_unfiltered (gdb_stdlog, + "LNPAW: Attaching to a stopped process\n"); ++#ifdef NEED_DETACH_SIGSTOP ++ pid_was_stopped = ptid_get_pid (ptid); ++#endif + + /* The process is definitely stopped. It is in a job control + stop, unless the kernel predates the TASK_STOPPED / +@@ -1390,6 +1398,25 @@ get_detach_signal (struct lwp_info *lp) + return gdb_signal_to_host (signo); + } + ++#ifdef NEED_DETACH_SIGSTOP ++ /* Workaround RHEL-5 kernel which has unreliable PTRACE_DETACH, SIGSTOP (that ++ many TIDs are left unstopped). See RH Bug 496732. */ ++ if (ptid_get_pid (lp->ptid) == pid_was_stopped) ++ { ++ int err; ++ ++ errno = 0; ++ err = kill_lwp (ptid_get_lwp (lp->ptid), SIGSTOP); ++ if (debug_linux_nat) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "SC: lwp kill %d %s\n", ++ err, ++ errno ? safe_strerror (errno) : "ERRNO-OK"); ++ } ++ } ++ ++#endif + return 0; + } + +@@ -1548,6 +1575,10 @@ linux_nat_detach (struct target_ops *ops + detach_one_lwp (main_lwp, &signo); + + inf_ptrace_detach_success (ops); ++ ++#ifdef NEED_DETACH_SIGSTOP ++ pid_was_stopped = 0; ++#endif + } + } + +@@ -1808,6 +1839,16 @@ linux_nat_resume (struct target_ops *ops + return; + } + ++#ifdef NEED_DETACH_SIGSTOP ++ /* At this point, we are going to resume the inferior and if we ++ have attached to a stopped process, we no longer should leave ++ it as stopped if the user detaches. PTID variable has PID set to LWP ++ while we need to check the real PID here. */ ++ ++ if (!step && lp && pid_was_stopped == ptid_get_pid (lp->ptid)) ++ pid_was_stopped = 0; ++ ++#endif + if (resume_many) + iterate_over_lwps (ptid, linux_nat_resume_callback, lp); + +@@ -3804,6 +3845,10 @@ linux_nat_mourn_inferior (struct target_ + + /* Let the arch-specific native code know this process is gone. */ + linux_nat_forget_process (pid); ++#ifdef NEED_DETACH_SIGSTOP ++ ++ pid_was_stopped = 0; ++#endif + } + + /* Convert a native/host siginfo object, into/from the siginfo in the +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.threads/attach-stopped.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.threads/attach-stopped.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.threads/attach-stopped.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.threads/attach-stopped.exp 2017-04-16 12:21:43.942534349 +0100 +@@ -56,7 +56,65 @@ proc corefunc { threadtype } { + gdb_reinitialize_dir $srcdir/$subdir + gdb_load ${binfile} + +- # Verify that we can attach to the stopped process. ++ # Verify that we can attach to the process by first giving its ++ # executable name via the file command, and using attach with the ++ # process ID. ++ ++ set test "$threadtype: set file, before attach1 to stopped process" ++ gdb_test_multiple "file $binfile" "$test" { ++ -re "Load new symbol table from.*y or n. $" { ++ gdb_test "y" "Reading symbols from $escapedbinfile\.\.\.*done." \ ++ "$test (re-read)" ++ } ++ -re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $" { ++ pass "$test" ++ } ++ } ++ ++ set test "$threadtype: attach1 to stopped, after setting file" ++ gdb_test_multiple "attach $testpid" "$test" { ++ -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" { ++ pass "$test" ++ } ++ } ++ ++ # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there. ++ if {[string equal $threadtype threaded]} { ++ gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: attach1 to stopped bt" ++ } else { ++ gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach1 to stopped bt" ++ } ++ ++ # Exit and detach the process. ++ ++ gdb_exit ++ ++ # Avoid some race: ++ sleep 2 ++ ++ if [catch {open /proc/${testpid}/status r} fileid] { ++ set line2 "NOTFOUND" ++ } else { ++ gets $fileid line1; ++ gets $fileid line2; ++ close $fileid; ++ } ++ ++ set test "$threadtype: attach1, exit leaves process stopped" ++ if {[string match "*(stopped)*" $line2]} { ++ pass $test ++ } else { ++ fail $test ++ } ++ ++ # At this point, the process should still be stopped ++ ++ gdb_start ++ gdb_reinitialize_dir $srcdir/$subdir ++ gdb_load ${binfile} ++ ++ # Verify that we can attach to the process just by giving the ++ # process ID. + + set test "$threadtype: attach2 to stopped, after setting file" + gdb_test_multiple "attach $testpid" "$test" { diff --git a/insight-7.12-gdb-archer-pie-addons-keep-disabled.patch b/insight-7.12-gdb-archer-pie-addons-keep-disabled.patch new file mode 100644 index 0000000..371711b --- /dev/null +++ b/insight-7.12-gdb-archer-pie-addons-keep-disabled.patch @@ -0,0 +1,80 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/breakpoint.c insight-7.12.50.20170416.new/gdb/breakpoint.c +--- insight-7.12.50.20170416.orig/gdb/breakpoint.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/breakpoint.c 2017-04-16 14:14:26.217661774 +0100 +@@ -16086,6 +16086,50 @@ initialize_breakpoint_ops (void) + static struct cmd_list_element *enablebreaklist = NULL; + + void ++breakpoints_relocate (struct objfile *objfile, struct section_offsets *delta) ++{ ++ struct bp_location *bl, **blp_tmp; ++ int changed = 0; ++ ++ gdb_assert (objfile->separate_debug_objfile_backlink == NULL); ++ ++ ALL_BP_LOCATIONS (bl, blp_tmp) ++ { ++ struct obj_section *osect; ++ ++ /* BL->SECTION can be correctly NULL for breakpoints with multiple ++ locations expanded through symtab. */ ++ ++ ALL_OBJFILE_OSECTIONS (objfile, osect) ++ { ++ CORE_ADDR relocated_address; ++ CORE_ADDR delta_offset; ++ ++ delta_offset = ANOFFSET (delta, osect->the_bfd_section->index); ++ if (delta_offset == 0) ++ continue; ++ relocated_address = bl->address + delta_offset; ++ ++ if (obj_section_addr (osect) <= relocated_address ++ && relocated_address < obj_section_endaddr (osect)) ++ { ++ if (bl->inserted) ++ remove_breakpoint (bl); ++ ++ bl->address += delta_offset; ++ bl->requested_address += delta_offset; ++ ++ changed = 1; ++ } ++ } ++ } ++ ++ if (changed) ++ qsort (bp_locations, bp_locations_count, sizeof (*bp_locations), ++ bp_locations_compare); ++} ++ ++void + _initialize_breakpoint (void) + { + struct cmd_list_element *c; +diff -Naurp insight-7.12.50.20170416.orig/gdb/breakpoint.h insight-7.12.50.20170416.new/gdb/breakpoint.h +--- insight-7.12.50.20170416.orig/gdb/breakpoint.h 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/breakpoint.h 2017-04-16 14:02:21.816405874 +0100 +@@ -1646,4 +1646,7 @@ extern const char *ep_parse_optional_if_ + UIOUT iff debugging multiple threads. */ + extern void maybe_print_thread_hit_breakpoint (struct ui_out *uiout); + ++extern void breakpoints_relocate (struct objfile *objfile, ++ struct section_offsets *delta); ++ + #endif /* !defined (BREAKPOINT_H) */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/objfiles.c insight-7.12.50.20170416.new/gdb/objfiles.c +--- insight-7.12.50.20170416.orig/gdb/objfiles.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/objfiles.c 2017-04-16 14:02:21.817405883 +0100 +@@ -909,6 +909,11 @@ objfile_relocate1 (struct objfile *objfi + obj_section_addr (s)); + } + ++ /* Final call of breakpoint_re_set can keep breakpoint locations disabled if ++ their addresses match. */ ++ if (objfile->separate_debug_objfile_backlink == NULL) ++ breakpoints_relocate (objfile, delta); ++ + /* Data changed. */ + return 1; + } diff --git a/insight-7.12-gdb-archer.patch b/insight-7.12-gdb-archer.patch new file mode 100644 index 0000000..4b4c57e --- /dev/null +++ b/insight-7.12-gdb-archer.patch @@ -0,0 +1,663 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/data-directory/Makefile.in insight-7.12.50.20170416.new/gdb/data-directory/Makefile.in +--- insight-7.12.50.20170416.orig/gdb/data-directory/Makefile.in 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/data-directory/Makefile.in 2017-04-16 12:26:17.155076938 +0100 +@@ -77,7 +77,11 @@ PYTHON_FILE_LIST = \ + gdb/types.py \ + gdb/unwinder.py \ + gdb/xmethod.py \ ++ gdb/types.py \ + gdb/command/__init__.py \ ++ gdb/command/ignore_errors.py \ ++ gdb/command/pahole.py \ ++ gdb/command/xmethods.py \ + gdb/command/explore.py \ + gdb/command/frame_filters.py \ + gdb/command/pretty_printers.py \ +@@ -89,6 +93,8 @@ PYTHON_FILE_LIST = \ + gdb/function/as_string.py \ + gdb/function/caller_is.py \ + gdb/function/strfns.py \ ++ gdb/function/caller_is.py \ ++ gdb/function/in_scope.py \ + gdb/printer/__init__.py \ + gdb/printer/bound_registers.py + +diff -Naurp insight-7.12.50.20170416.orig/gdb/doc/gdb.texinfo insight-7.12.50.20170416.new/gdb/doc/gdb.texinfo +--- insight-7.12.50.20170416.orig/gdb/doc/gdb.texinfo 2017-04-16 12:25:21.689560997 +0100 ++++ insight-7.12.50.20170416.new/gdb/doc/gdb.texinfo 2017-04-16 12:26:17.163077013 +0100 +@@ -1236,6 +1236,16 @@ for remote debugging. + Run using @var{device} for your program's standard input and output. + @c FIXME: kingdon thinks there is more to -tty. Investigate. + ++@item -P ++@cindex @code{-P} ++@itemx --python ++@cindex @code{--python} ++Change interpretation of command line so that the argument immediately ++following this switch is taken to be the name of a Python script file. ++This option stops option processing; subsequent options are passed to ++Python as @code{sys.argv}. This option is only available if Python ++scripting support was enabled when @value{GDBN} was configured. ++ + @c resolve the situation of these eventually + @item -tui + @cindex @code{--tui} +diff -Naurp insight-7.12.50.20170416.orig/gdb/doc/python.texi insight-7.12.50.20170416.new/gdb/doc/python.texi +--- insight-7.12.50.20170416.orig/gdb/doc/python.texi 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/doc/python.texi 2017-04-16 12:26:17.164077022 +0100 +@@ -88,8 +88,6 @@ containing @code{end}. For example: + + @smallexample + (@value{GDBP}) python +-Type python script +-End with a line saying just "end". + >print 23 + >end + 23 +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdb-gdb.gdb.in insight-7.12.50.20170416.new/gdb/gdb-gdb.gdb.in +--- insight-7.12.50.20170416.orig/gdb/gdb-gdb.gdb.in 2015-08-15 00:31:38.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdb-gdb.gdb.in 2017-04-16 12:26:17.164077022 +0100 +@@ -1,5 +1,15 @@ + echo Setting up the environment for debugging gdb.\n + ++# Set up the Python library and "require" command. ++python ++from os.path import abspath ++gdb.datadir = abspath ('@srcdir@/python/lib') ++gdb.pythonlibdir = gdb.datadir ++gdb.__path__ = [gdb.datadir + '/gdb'] ++sys.path.insert(0, gdb.datadir) ++end ++source @srcdir@/python/lib/gdb/__init__.py ++ + if !$gdb_init_done + set variable $gdb_init_done = 1 + +diff -Naurp insight-7.12.50.20170416.orig/gdb/main.c insight-7.12.50.20170416.new/gdb/main.c +--- insight-7.12.50.20170416.orig/gdb/main.c 2017-04-16 12:25:21.792561955 +0100 ++++ insight-7.12.50.20170416.new/gdb/main.c 2017-04-16 12:26:17.165077031 +0100 +@@ -33,6 +33,7 @@ + + #include "interps.h" + #include "main.h" ++#include "python/python.h" + #include "source.h" + #include "cli/cli-cmds.h" + #include "objfiles.h" +@@ -490,7 +491,7 @@ exec_or_core_file_attach (const char *fi + } + + static void +-captured_main_1 (struct captured_main_args *context) ++captured_main_1 (struct captured_main_args *context, int &python_script) + { + int argc = context->argc; + char **argv = context->argv; +@@ -708,10 +709,14 @@ captured_main_1 (struct captured_main_ar + {"args", no_argument, &set_args, 1}, + {"l", required_argument, 0, 'l'}, + {"return-child-result", no_argument, &return_child_result, 1}, ++#if HAVE_PYTHON ++ {"python", no_argument, 0, 'P'}, ++ {"P", no_argument, 0, 'P'}, ++#endif + {0, no_argument, 0, 0} + }; + +- while (1) ++ while (!python_script) + { + int option_index; + +@@ -729,6 +734,9 @@ captured_main_1 (struct captured_main_ar + case 0: + /* Long option that just sets a flag. */ + break; ++ case 'P': ++ python_script = 1; ++ break; + case OPT_SE: + symarg = optarg; + execarg = optarg; +@@ -887,7 +895,31 @@ captured_main_1 (struct captured_main_ar + + /* Now that gdb_init has created the initial inferior, we're in + position to set args for that inferior. */ +- if (set_args) ++ if (python_script) ++ { ++ /* The first argument is a python script to evaluate, and ++ subsequent arguments are passed to the script for ++ processing there. */ ++ if (optind >= argc) ++ { ++ fprintf_unfiltered (gdb_stderr, ++ _("%s: Python script file name required\n"), ++ argv[0]); ++ exit (1); ++ } ++ ++ /* FIXME: should handle inferior I/O intelligently here. ++ E.g., should be possible to run gdb in pipeline and have ++ Python (and gdb) output go to stderr or file; and if a ++ prompt is needed, open the tty. */ ++ quiet = 1; ++ /* FIXME: should read .gdbinit if, and only if, a prompt is ++ requested by the script. Though... maybe this is not ++ ideal? */ ++ /* FIXME: likewise, reading in history. */ ++ inhibit_gdbinit = 1; ++ } ++ else if (set_args) + { + /* The remaining options are the command-line options for the + inferior. The first one is the sym/exec file, and the rest +@@ -1173,7 +1205,8 @@ captured_main_1 (struct captured_main_ar + + /* Read in the old history after all the command files have been + read. */ +- init_history (); ++ if (!python_script) ++ init_history (); + + if (batch_flag) + { +@@ -1186,16 +1219,29 @@ static void + captured_main (void *data) + { + struct captured_main_args *context = (struct captured_main_args *) data; ++ int python_script = 0; + +- captured_main_1 (context); ++ captured_main_1 (context, python_script); + +- /* NOTE: cagney/1999-11-07: There is probably no reason for not +- moving this loop and the code found in captured_command_loop() +- into the command_loop() proper. The main thing holding back that +- change - SET_TOP_LEVEL() - has been eliminated. */ +- while (1) ++#if HAVE_PYTHON ++ if (python_script) + { +- catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL); ++ extern int pagination_enabled; ++ pagination_enabled = 0; ++ run_python_script (context->argc - optind, &context->argv[optind]); ++ return; ++ } ++ else ++#endif ++ { ++ /* NOTE: cagney/1999-11-07: There is probably no reason for not ++ moving this loop and the code found in captured_command_loop() ++ into the command_loop() proper. The main thing holding back that ++ change - SET_TOP_LEVEL() - has been eliminated. */ ++ while (1) ++ { ++ catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL); ++ } + } + /* No exit -- exit is through quit_command. */ + } +@@ -1238,6 +1284,12 @@ print_gdb_help (struct ui_file *stream) + fputs_unfiltered (_("\ + This is the GNU debugger. Usage:\n\n\ + gdb [options] [executable-file [core-file or process-id]]\n\ ++ gdb [options] --args executable-file [inferior-arguments ...]\n"), stream); ++#if HAVE_PYTHON ++ fputs_unfiltered (_("\ ++ gdb [options] [--python|-P] script-file [script-arguments ...]\n"), stream); ++#endif ++ fputs_unfiltered (_("\n\ + gdb [options] --args executable-file [inferior-arguments ...]\n\n\ + "), stream); + fputs_unfiltered (_("\ +@@ -1283,6 +1335,13 @@ Output and user interface control:\n\n\ + #endif + fputs_unfiltered (_("\ + --dbx DBX compatibility mode.\n\ ++"), stream); ++#if HAVE_PYTHON ++ fputs_unfiltered (_("\ ++ --python, -P Following argument is Python script file; remaining\n\ ++ arguments are passed to script.\n"), stream); ++#endif ++ fputs_unfiltered (_("\ + -q, --quiet, --silent\n\ + Do not print version number on startup.\n\n\ + "), stream); +diff -Naurp insight-7.12.50.20170416.orig/gdb/Makefile.in insight-7.12.50.20170416.new/gdb/Makefile.in +--- insight-7.12.50.20170416.orig/gdb/Makefile.in 2017-04-16 12:25:21.544559648 +0100 ++++ insight-7.12.50.20170416.new/gdb/Makefile.in 2017-04-16 12:26:17.155076938 +0100 +@@ -2379,6 +2379,12 @@ stamp-h: $(srcdir)/config.in config.stat + CONFIG_LINKS= \ + $(SHELL) config.status + ++.gdbinit: $(srcdir)/gdbinit.in config.status ++ CONFIG_FILES=".gdbinit:gdbinit.in" \ ++ CONFIG_COMMANDS= \ ++ CONFIG_HEADERS= \ ++ $(SHELL) config.status ++ + config.status: $(srcdir)/configure configure.tgt configure.host ../bfd/development.sh + $(SHELL) config.status --recheck + +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/lib/gdb/command/ignore_errors.py insight-7.12.50.20170416.new/gdb/python/lib/gdb/command/ignore_errors.py +--- insight-7.12.50.20170416.orig/gdb/python/lib/gdb/command/ignore_errors.py 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/lib/gdb/command/ignore_errors.py 2017-04-16 12:26:17.165077031 +0100 +@@ -0,0 +1,37 @@ ++# Ignore errors in user commands. ++ ++# Copyright (C) 2008 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 . ++ ++import gdb ++ ++class IgnoreErrorsCommand (gdb.Command): ++ """Execute a single command, ignoring all errors. ++Only one-line commands are supported. ++This is primarily useful in scripts.""" ++ ++ def __init__ (self): ++ super (IgnoreErrorsCommand, self).__init__ ("ignore-errors", ++ gdb.COMMAND_OBSCURE, ++ # FIXME... ++ gdb.COMPLETE_COMMAND) ++ ++ def invoke (self, arg, from_tty): ++ try: ++ gdb.execute (arg, from_tty) ++ except: ++ pass ++ ++IgnoreErrorsCommand () +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/lib/gdb/command/pahole.py insight-7.12.50.20170416.new/gdb/python/lib/gdb/command/pahole.py +--- insight-7.12.50.20170416.orig/gdb/python/lib/gdb/command/pahole.py 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/lib/gdb/command/pahole.py 2017-04-16 12:26:17.165077031 +0100 +@@ -0,0 +1,81 @@ ++# pahole command for gdb ++ ++# Copyright (C) 2008, 2009, 2012 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 . ++ ++import gdb ++ ++class Pahole (gdb.Command): ++ """Show the holes in a structure. ++This command takes a single argument, a type name. ++It prints the type and displays comments showing where holes are.""" ++ ++ def __init__ (self): ++ super (Pahole, self).__init__ ("pahole", gdb.COMMAND_NONE, ++ gdb.COMPLETE_SYMBOL) ++ ++ def maybe_print_hole(self, bitpos, field_bitpos): ++ if bitpos != field_bitpos: ++ hole = field_bitpos - bitpos ++ print (' /* XXX %d bit hole, try to pack */' % hole) ++ ++ def pahole (self, type, level, name): ++ if name is None: ++ name = '' ++ tag = type.tag ++ if tag is None: ++ tag = '' ++ print ('%sstruct %s {' % (' ' * (2 * level), tag)) ++ bitpos = 0 ++ for field in type.fields (): ++ # Skip static fields. ++ if not hasattr (field, ('bitpos')): ++ continue ++ ++ ftype = field.type.strip_typedefs() ++ ++ self.maybe_print_hole(bitpos, field.bitpos) ++ bitpos = field.bitpos ++ if field.bitsize > 0: ++ fieldsize = field.bitsize ++ else: ++ # TARGET_CHAR_BIT here... ++ fieldsize = 8 * ftype.sizeof ++ ++ # TARGET_CHAR_BIT ++ print (' /* %3d %3d */' % (int (bitpos / 8), int (fieldsize / 8)), end = "") ++ bitpos = bitpos + fieldsize ++ ++ if ftype.code == gdb.TYPE_CODE_STRUCT: ++ self.pahole (ftype, level + 1, field.name) ++ else: ++ print (' ' * (2 + 2 * level), end = "") ++ print ('%s %s' % (str (ftype), field.name)) ++ ++ if level == 0: ++ self.maybe_print_hole(bitpos, 8 * type.sizeof) ++ ++ print (' ' * (14 + 2 * level), end = "") ++ print ('} %s' % name) ++ ++ def invoke (self, arg, from_tty): ++ type = gdb.lookup_type (arg) ++ type = type.strip_typedefs () ++ if type.code != gdb.TYPE_CODE_STRUCT: ++ raise (TypeError, '%s is not a struct type' % arg) ++ print (' ' * 14, end = "") ++ self.pahole (type, 0, '') ++ ++Pahole() +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/lib/gdb/function/in_scope.py insight-7.12.50.20170416.new/gdb/python/lib/gdb/function/in_scope.py +--- insight-7.12.50.20170416.orig/gdb/python/lib/gdb/function/in_scope.py 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/lib/gdb/function/in_scope.py 2017-04-16 12:26:17.165077031 +0100 +@@ -0,0 +1,47 @@ ++# In-scope function. ++ ++# Copyright (C) 2008 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 . ++ ++import gdb ++ ++class InScope (gdb.Function): ++ """Return True if all the given variables or macros are in scope. ++Takes one argument for each variable name to be checked.""" ++ ++ def __init__ (self): ++ super (InScope, self).__init__ ("in_scope") ++ ++ def invoke (self, *vars): ++ if len (vars) == 0: ++ raise (TypeError, "in_scope takes at least one argument") ++ ++ # gdb.Value isn't hashable so it can't be put in a map. ++ # Convert to string first. ++ wanted = set (map (lambda x: x.string (), vars)) ++ found = set () ++ block = gdb.selected_frame ().block () ++ while block: ++ for sym in block: ++ if (sym.is_argument or sym.is_constant ++ or sym.is_function or sym.is_variable): ++ if sym.name in wanted: ++ found.add (sym.name) ++ ++ block = block.superblock ++ ++ return wanted == found ++ ++InScope () +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/python.c insight-7.12.50.20170416.new/gdb/python/python.c +--- insight-7.12.50.20170416.orig/gdb/python/python.c 2017-04-16 10:13:09.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/python.c 2017-04-16 12:26:17.166077041 +0100 +@@ -95,6 +95,8 @@ const struct extension_language_defn ext + #include "linespec.h" + #include "source.h" + #include "version.h" ++#include "inferior.h" ++#include "gdbthread.h" + #include "target.h" + #include "gdbthread.h" + #include "interps.h" +@@ -242,6 +244,29 @@ gdbpy_enter::~gdbpy_enter () + restore_active_ext_lang (m_previous_active); + } + ++static void ++restore_python_env (void *p) ++{ ++ gdbpy_enter *env = (gdbpy_enter *) p; ++ ++ delete env; ++} ++ ++/* Called before entering the Python interpreter to install the ++ current language and architecture to be used for Python values. ++ Also set the active extension language for GDB so that SIGINT's ++ are directed our way, and if necessary install the right SIGINT ++ handler. */ ++ ++struct cleanup * ++ensure_python_env (struct gdbarch *gdbarch, ++ const struct language_defn *language) ++{ ++ gdbpy_enter *env = new gdbpy_enter (gdbarch, language); ++ ++ return make_cleanup (restore_python_env, env); ++} ++ + /* Set the quit flag. */ + + static void +@@ -1187,6 +1212,92 @@ gdbpy_print_stack (void) + + /* Return the current Progspace. + There always is one. */ ++/* True if 'gdb -P' was used, false otherwise. */ ++static int running_python_script; ++ ++/* True if we are currently in a call to 'gdb.cli', false otherwise. */ ++static int in_cli; ++ ++/* Enter the command loop. */ ++ ++static PyObject * ++gdbpy_cli (PyObject *unused1, PyObject *unused2) ++{ ++ if (! running_python_script || in_cli) ++ return PyErr_Format (PyExc_RuntimeError, "cannot invoke CLI recursively"); ++ ++ if (current_uiout->is_mi_like_p ()) ++ return PyErr_Format (PyExc_RuntimeError, _("Cannot invoke CLI from MI.")); ++ ++ in_cli = 1; ++ /* See captured_command_loop. */ ++ ++ /* Give the interpreter a chance to print a prompt. */ ++ interp_pre_command_loop (top_level_interpreter ()); ++ ++ /* Now it's time to start the event loop. */ ++ start_event_loop (); ++ ++ in_cli = 0; ++ ++ Py_RETURN_NONE; ++} ++ ++/* Set up the Python argument vector and evaluate a script. This is ++ used to implement 'gdb -P'. */ ++ ++void ++run_python_script (int argc, char **argv) ++{ ++ FILE *input; ++ ++ /* We never free this, since we plan to exit at the end. */ ++ ensure_python_env (get_current_arch (), current_language); ++ ++ running_python_script = 1; ++ ++#if PYTHON_ABI_VERSION < 3 ++ PySys_SetArgv (argc - 1, argv + 1); ++#else ++ { ++ wchar_t **wargv = (wchar_t **) alloca (sizeof (*wargv) * (argc + 1)); ++ int i; ++ ++ for (i = 1; i < argc; i++) ++ { ++ size_t len = mbstowcs (NULL, argv[i], 0); ++ /* Python-related GDB sources are built with -DNDEBUG ++ https://sourceware.org/bugzilla/show_bug.cgi?id=20445 */ ++ size_t len2 ATTRIBUTE_UNUSED; ++ ++ if (len == (size_t) -1) ++ { ++ fprintf (stderr, "Invalid multibyte argument #%d \"%s\"\n", ++ i, argv[i]); ++ exit (1); ++ } ++ wargv[i] = (wchar_t *) alloca (sizeof (**wargv) * (len + 1)); ++ len2 = mbstowcs (wargv[i], argv[i], len + 1); ++ assert (len2 == len); ++ } ++ wargv[argc] = NULL; ++ PySys_SetArgv (argc - 1, wargv + 1); ++ } ++#endif ++ ++ input = fopen (argv[0], "r"); ++ if (! input) ++ { ++ fprintf (stderr, "could not open %s: %s\n", argv[0], strerror (errno)); ++ exit (1); ++ } ++ PyRun_SimpleFile (input, argv[0]); ++ fclose (input); ++ exit (0); ++} ++ ++ ++ + + static PyObject * + gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2) +@@ -1881,6 +1992,8 @@ PyMethodDef python_GdbMethods[] = + Evaluate command, a string, as a gdb CLI command. Optionally returns\n\ + a Python String containing the output of the command if to_string is\n\ + set to True." }, ++ { "cli", gdbpy_cli, METH_NOARGS, ++ "Enter the gdb CLI" }, + { "parameter", gdbpy_parameter, METH_VARARGS, + "Return a gdb parameter's value" }, + +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/python.h insight-7.12.50.20170416.new/gdb/python/python.h +--- insight-7.12.50.20170416.orig/gdb/python/python.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/python.h 2017-04-16 12:26:17.166077041 +0100 +@@ -25,4 +25,6 @@ + /* This is all that python exports to gdb. */ + extern const struct extension_language_defn extension_language_python; + ++extern void run_python_script (int argc, char **argv); ++ + #endif /* GDB_PYTHON_H */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/python-internal.h insight-7.12.50.20170416.new/gdb/python/python-internal.h +--- insight-7.12.50.20170416.orig/gdb/python/python-internal.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/python-internal.h 2017-04-16 12:26:17.166077041 +0100 +@@ -672,6 +672,9 @@ class gdbpy_enter_varobj : public gdbpy_ + + }; + ++struct cleanup *ensure_python_env (struct gdbarch *gdbarch, ++ const struct language_defn *language); ++ + extern struct gdbarch *python_gdbarch; + extern const struct language_defn *python_language; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-frame.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-frame.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-frame.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-frame.exp 2017-04-16 12:26:17.166077041 +0100 +@@ -95,6 +95,8 @@ gdb_test "python print ('result = %s' % + + gdb_test "python print ('result = %s' % (gdb.selected_frame () == f1))" " = True" "test gdb.selected_frame" + ++gdb_test "python print ('result = %s' % (f0.block ()))" "" "test Frame.block" ++ + # Can read SP register. + gdb_test "python print ('result = %s' % (gdb.selected_frame ().read_register ('sp') == gdb.parse_and_eval ('\$sp')))" \ + " = True" \ +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-value.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-value.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-value.exp 2017-03-18 01:22:31.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-value.exp 2017-04-16 12:26:17.166077041 +0100 +@@ -384,6 +384,15 @@ proc test_value_after_death {} { + "print value's type" + } + ++# Regression test for a cast failure. The bug was that if we cast a ++# value to its own type, gdb could crash. This happened because we ++# could end up double-freeing a struct value. ++proc test_cast_regression {} { ++ gdb_test "python v = gdb.Value(5)" "" "create value for cast test" ++ gdb_test "python v = v.cast(v.type)" "" "cast value for cast test" ++ gdb_test "python print(v)" "5" "print value for cast test" ++} ++ + # Regression test for invalid subscript operations. The bug was that + # the type of the value was not being checked before allowing a + # subscript operation to proceed. +@@ -512,6 +521,7 @@ if ![runto_main] then { + test_value_in_inferior + test_inferior_function_call + test_value_after_death ++test_cast_regression + + # Test either C or C++ values. + +diff -Naurp insight-7.12.50.20170416.orig/gdb/varobj.c insight-7.12.50.20170416.new/gdb/varobj.c +--- insight-7.12.50.20170416.orig/gdb/varobj.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/varobj.c 2017-04-16 12:26:17.167077050 +0100 +@@ -226,6 +226,14 @@ is_root_p (const struct varobj *var) + } + + #ifdef HAVE_PYTHON ++/* Helper function to install a Python environment suitable for ++ use during operations on VAR. */ ++struct cleanup * ++varobj_ensure_python_env (const struct varobj *var) ++{ ++ return ensure_python_env (var->root->exp->gdbarch, ++ var->root->exp->language_defn); ++} + + /* See python-internal.h. */ + gdbpy_enter_varobj::gdbpy_enter_varobj (const struct varobj *var) +diff -Naurp insight-7.12.50.20170416.orig/gdb/varobj.h insight-7.12.50.20170416.new/gdb/varobj.h +--- insight-7.12.50.20170416.orig/gdb/varobj.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/varobj.h 2017-04-16 12:26:17.167077050 +0100 +@@ -320,6 +320,8 @@ extern int varobj_has_more (const struct + + extern int varobj_is_dynamic_p (const struct varobj *var); + ++extern struct cleanup *varobj_ensure_python_env (const struct varobj *var); ++ + extern int varobj_default_value_is_changeable_p (const struct varobj *var); + extern int varobj_value_is_changeable_p (const struct varobj *var); + +diff -Naurp insight-7.12.50.20170416.orig/README.archer insight-7.12.50.20170416.new/README.archer +--- insight-7.12.50.20170416.orig/README.archer 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/README.archer 2017-04-16 12:26:17.154076929 +0100 +@@ -0,0 +1,2 @@ ++This branch originally held the Python code for gdb. It still exists ++because a small amount of code here has not yet been merged upstream. diff --git a/insight-7.12-gdb-fedora-libncursesw.patch b/insight-7.12-gdb-fedora-libncursesw.patch new file mode 100644 index 0000000..5e7aa46 --- /dev/null +++ b/insight-7.12-gdb-fedora-libncursesw.patch @@ -0,0 +1,60 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/configure insight-7.12.50.20170416.new/gdb/configure +--- insight-7.12.50.20170416.orig/gdb/configure 2017-04-16 13:35:12.113725974 +0100 ++++ insight-7.12.50.20170416.new/gdb/configure 2017-04-16 13:36:16.306314191 +0100 +@@ -9359,6 +9359,7 @@ if test x"$prefer_curses" = xyes; then + # search /usr/local/include, if ncurses is installed in /usr/local. A + # default installation of ncurses on alpha*-dec-osf* will lead to such + # a situation. ++ # Fedora: Force libncursesw over libncurses to match the includes. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing waddstr" >&5 + $as_echo_n "checking for library containing waddstr... " >&6; } + if ${ac_cv_search_waddstr+:} false; then : +@@ -9383,7 +9384,7 @@ return waddstr (); + return 0; + } + _ACEOF +-for ac_lib in '' ncurses cursesX curses; do ++for ac_lib in '' ncursesw; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -9457,6 +9458,7 @@ case $host_os in + esac + + # These are the libraries checked by Readline. ++# Fedora: Force libncursesw over libncurses to match the includes. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5 + $as_echo_n "checking for library containing tgetent... " >&6; } + if ${ac_cv_search_tgetent+:} false; then : +@@ -9481,7 +9483,7 @@ return tgetent (); + return 0; + } + _ACEOF +-for ac_lib in '' termcap tinfo curses ncurses; do ++for ac_lib in '' termcap tinfo ncursesw; do + if test -z "$ac_lib"; then + ac_res="none required" + else +diff -Naurp insight-7.12.50.20170416.orig/gdb/configure.ac insight-7.12.50.20170416.new/gdb/configure.ac +--- insight-7.12.50.20170416.orig/gdb/configure.ac 2017-04-16 13:35:12.113725974 +0100 ++++ insight-7.12.50.20170416.new/gdb/configure.ac 2017-04-16 13:36:16.307314200 +0100 +@@ -762,7 +762,8 @@ if test x"$prefer_curses" = xyes; then + # search /usr/local/include, if ncurses is installed in /usr/local. A + # default installation of ncurses on alpha*-dec-osf* will lead to such + # a situation. +- AC_SEARCH_LIBS(waddstr, [ncurses cursesX curses]) ++ # Fedora: Force libncursesw over libncurses to match the includes. ++ AC_SEARCH_LIBS(waddstr, [ncursesw]) + + if test "$ac_cv_search_waddstr" != no; then + curses_found=yes +@@ -804,7 +805,8 @@ case $host_os in + esac + + # These are the libraries checked by Readline. +-AC_SEARCH_LIBS(tgetent, [termcap tinfo curses ncurses]) ++# Fedora: Force libncursesw over libncurses to match the includes. ++AC_SEARCH_LIBS(tgetent, [termcap tinfo ncursesw]) + + if test "$ac_cv_search_tgetent" = no; then + CONFIG_OBS="$CONFIG_OBS stub-termcap.o" diff --git a/insight-7.12-gdb-python-gil.patch b/insight-7.12-gdb-python-gil.patch new file mode 100644 index 0000000..4c41efe --- /dev/null +++ b/insight-7.12-gdb-python-gil.patch @@ -0,0 +1,230 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/doc/python.texi insight-7.12.50.20170416.new/gdb/doc/python.texi +--- insight-7.12.50.20170416.orig/gdb/doc/python.texi 2017-04-16 13:26:46.610227059 +0100 ++++ insight-7.12.50.20170416.new/gdb/doc/python.texi 2017-04-16 13:27:34.573643843 +0100 +@@ -230,6 +230,14 @@ returned as a string. The default is @c + return value is @code{None}. If @var{to_string} is @code{True}, the + @value{GDBN} virtual terminal will be temporarily set to unlimited width + and height, and its pagination will be disabled; @pxref{Screen Size}. ++ ++The @var{release_gil} flag specifies whether @value{GDBN} ought to ++release the Python GIL before executing the command. This is useful ++in multi-threaded Python programs where by default the Python ++interpreter will acquire the GIL and lock other threads from ++executing. After the command has completed executing in @value{GDBN} ++the Python GIL is reacquired. This flag must be a boolean value. If ++omitted, it defaults to @code{False}. + @end defun + + @findex gdb.breakpoints +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/python.c insight-7.12.50.20170416.new/gdb/python/python.c +--- insight-7.12.50.20170416.orig/gdb/python/python.c 2017-04-16 13:26:46.612227077 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/python.c 2017-04-16 13:31:19.962602386 +0100 +@@ -594,12 +594,16 @@ execute_gdb_command (PyObject *self, PyO + { + const char *arg; + PyObject *from_tty_obj = NULL, *to_string_obj = NULL; +- int from_tty, to_string; +- static const char *keywords[] = { "command", "from_tty", "to_string", NULL }; ++ int from_tty, to_string, release_gil; ++ static const char *keywords[] = { "command", "from_tty", "to_string", "release_gil", NULL }; ++ PyObject *release_gil_obj = NULL; ++ /* Initialize it just to avoid a GCC false warning. */ ++ PyThreadState *state = NULL; + +- if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!", keywords, &arg, ++ if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!O!", keywords, &arg, + &PyBool_Type, &from_tty_obj, +- &PyBool_Type, &to_string_obj)) ++ &PyBool_Type, &to_string_obj, ++ &PyBool_Type, &release_gil_obj)) + return NULL; + + from_tty = 0; +@@ -620,6 +624,15 @@ execute_gdb_command (PyObject *self, PyO + to_string = cmp; + } + ++ release_gil = 0; ++ if (release_gil_obj) ++ { ++ int cmp = PyObject_IsTrue (release_gil_obj); ++ if (cmp < 0) ++ return NULL; ++ release_gil = cmp; ++ } ++ + std::string to_string_res; + + TRY +@@ -628,6 +641,13 @@ execute_gdb_command (PyObject *self, PyO + std::string copy (arg); + struct interp *interp; + ++ /* In the case of long running GDB commands, allow the user to ++ release the Python GIL acquired by Python. Restore the GIL ++ after the command has completed before handing back to ++ Python. */ ++ if (release_gil) ++ state = PyEval_SaveThread(); ++ + scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); + + scoped_restore save_uiout = make_scoped_restore (¤t_uiout); +@@ -642,10 +662,22 @@ execute_gdb_command (PyObject *self, PyO + to_string_res = execute_command_to_string (©[0], from_tty); + else + execute_command (©[0], from_tty); ++ ++ /* Reacquire the GIL if it was released earlier. */ ++ if (release_gil) ++ PyEval_RestoreThread (state); + } + CATCH (except, RETURN_MASK_ALL) + { +- GDB_PY_HANDLE_EXCEPTION (except); ++ if (except.reason < 0) ++ { ++ /* Reacquire the GIL if it was released earlier. */ ++ if (release_gil) ++ PyEval_RestoreThread (state); ++ ++ gdbpy_convert_exception (except); ++ return NULL; ++ } + } + END_CATCH + +diff -Naurp insight-7.12.50.20170416.orig/gdb/python/python-internal.h insight-7.12.50.20170416.new/gdb/python/python-internal.h +--- insight-7.12.50.20170416.orig/gdb/python/python-internal.h 2017-04-16 13:26:46.612227077 +0100 ++++ insight-7.12.50.20170416.new/gdb/python/python-internal.h 2017-04-16 13:27:34.573643843 +0100 +@@ -142,6 +142,8 @@ typedef int Py_ssize_t; + #define PyGILState_Release(ARG) ((void)(ARG)) + #define PyEval_InitThreads() + #define PyThreadState_Swap(ARG) ((void)(ARG)) ++#define PyEval_SaveThread() ((void)(ARG)) ++#define PyEval_RestoreThread(ARG) ((void)(ARG)) + #define PyEval_ReleaseLock() + #endif + +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-gil-mthread.c insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-gil-mthread.c +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-gil-mthread.c 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-gil-mthread.c 2017-04-16 13:27:34.574643851 +0100 +@@ -0,0 +1,13 @@ ++#include ++#include ++ ++int ++main (void) ++{ ++ int i; ++ for (i = 0; i < 10; i++) ++ { ++ sleep (1); /* break-here */ ++ printf ("Sleeping %d\n", i); ++ } ++} +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-gil-mthread.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-gil-mthread.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-gil-mthread.exp 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-gil-mthread.exp 2017-04-16 13:27:34.574643851 +0100 +@@ -0,0 +1,69 @@ ++# Copyright (C) 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 . ++ ++standard_testfile .c .py ++set executable $testfile ++ ++if { [prepare_for_testing $testfile.exp $executable $srcfile] } { ++ return -1 ++} ++ ++# Skip all tests if Python scripting is not enabled. ++if { [skip_python_tests] } { continue } ++ ++if ![runto_main] { ++ return -1 ++} ++ ++gdb_breakpoint $srcfile:[gdb_get_line_number "break-here"] temporary ++gdb_continue_to_breakpoint "break-here" ".* break-here .*" ++ ++set test "response" ++set timeout 60 ++set sleeping_last -1 ++set hello_last 0 ++set minimal 5 ++gdb_test_multiple "python exec (open ('$srcdir/$subdir/$srcfile2').read ())" $test { ++ -re "Error: unable to start thread\r\n" { ++ fail $test ++ # Not $gdb_prompt-synced! ++ } ++ -re "Sleeping (\[0-9\]+)\r\n" { ++ set n $expect_out(1,string) ++ if { $sleeping_last + 1 != $n } { ++ fail $test ++ } else { ++ set sleeping_last $n ++ if { $sleeping_last >= $minimal && $hello_last >= $minimal } { ++ pass $test ++ } else { ++ exp_continue ++ } ++ } ++ } ++ -re "Hello \\( (\[0-9\]+) \\)\r\n" { ++ set n $expect_out(1,string) ++ if { $hello_last + 1 != $n } { ++ fail $test ++ } else { ++ set hello_last $n ++ if { $sleeping_last >= $minimal && $hello_last >= $minimal } { ++ pass $test ++ } else { ++ exp_continue ++ } ++ } ++ } ++} +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-gil-mthread.py insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-gil-mthread.py +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.python/py-gil-mthread.py 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.python/py-gil-mthread.py 2017-04-16 13:27:34.574643851 +0100 +@@ -0,0 +1,28 @@ ++try: ++ import thread ++except: ++ import _thread ++import time ++import gdb ++ ++# Define a function for the thread ++def print_thread_hello(): ++ count = 0 ++ while count < 10: ++ time.sleep(1) ++ count += 1 ++ print ("Hello ( %d )" % count) ++ ++# Create a threads a continue ++try: ++ thread.start_new_thread (print_thread_hello, ()) ++ gdb.execute ("continue", release_gil=True) ++except: ++ try: ++ _thread.start_new_thread (print_thread_hello, ()) ++ gdb.execute ("continue", release_gil=True) ++ except: ++ print ("Error: unable to start thread") ++ ++while 1: ++ pass diff --git a/insight-7.12-gdb-rhbz795424-bitpos-20of25.patch b/insight-7.12-gdb-rhbz795424-bitpos-20of25.patch new file mode 100644 index 0000000..6b22704 --- /dev/null +++ b/insight-7.12-gdb-rhbz795424-bitpos-20of25.patch @@ -0,0 +1,2887 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/aarch64-linux-nat.c insight-7.12.50.20170416.new/gdb/aarch64-linux-nat.c +--- insight-7.12.50.20170416.orig/gdb/aarch64-linux-nat.c 2017-03-18 01:22:31.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/aarch64-linux-nat.c 2017-04-16 12:29:51.472070521 +0100 +@@ -708,7 +708,7 @@ aarch64_linux_remove_watchpoint (struct + + static int + aarch64_linux_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + return aarch64_linux_region_ok_for_watchpoint (addr, len); + } +diff -Naurp insight-7.12.50.20170416.orig/gdb/ada-lang.c insight-7.12.50.20170416.new/gdb/ada-lang.c +--- insight-7.12.50.20170416.orig/gdb/ada-lang.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ada-lang.c 2017-04-16 12:29:51.435070177 +0100 +@@ -76,7 +76,7 @@ static struct type *desc_bounds_type (st + + static struct value *desc_bounds (struct value *); + +-static int fat_pntr_bounds_bitpos (struct type *); ++static LONGEST fat_pntr_bounds_bitpos (struct type *); + + static int fat_pntr_bounds_bitsize (struct type *); + +@@ -84,13 +84,13 @@ static struct type *desc_data_target_typ + + static struct value *desc_data (struct value *); + +-static int fat_pntr_data_bitpos (struct type *); ++static LONGEST fat_pntr_data_bitpos (struct type *); + + static int fat_pntr_data_bitsize (struct type *); + + static struct value *desc_one_bound (struct value *, int, int); + +-static int desc_bound_bitpos (struct type *, int, int); ++static LONGEST desc_bound_bitpos (struct type *, int, int); + + static int desc_bound_bitsize (struct type *, int, int); + +@@ -173,7 +173,7 @@ static struct type *static_unwrap_type ( + + static struct value *unwrap_value (struct value *); + +-static struct type *constrained_packed_array_type (struct type *, long *); ++static struct type *constrained_packed_array_type (struct type *, LONGEST *); + + static struct type *decode_constrained_packed_array_type (struct type *); + +@@ -188,7 +188,8 @@ static int ada_is_unconstrained_packed_a + static struct value *value_subscript_packed (struct value *, int, + struct value **); + +-static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int); ++static void move_bits (gdb_byte *, int, const gdb_byte *, LONGEST, LONGEST, ++ int); + + static struct value *coerce_unspec_val_to_type (struct value *, + struct type *); +@@ -216,14 +217,14 @@ static struct value *value_val_atr (stru + static struct symbol *standard_lookup (const char *, const struct block *, + domain_enum); + +-static struct value *ada_search_struct_field (const char *, struct value *, int, ++static struct value *ada_search_struct_field (const char *, struct value *, LONGEST, + struct type *); + +-static struct value *ada_value_primitive_field (struct value *, int, int, ++static struct value *ada_value_primitive_field (struct value *, LONGEST, int, + struct type *); + +-static int find_struct_field (const char *, struct type *, int, +- struct type **, int *, int *, int *, int *); ++static int find_struct_field (const char *, struct type *, LONGEST, ++ struct type **, LONGEST *, int *, int *, int *); + + static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR, + struct value *); +@@ -237,7 +238,7 @@ static int ada_is_direct_array_type (str + static void ada_language_arch_info (struct gdbarch *, + struct language_arch_info *); + +-static struct value *ada_index_struct_field (int, struct value *, int, ++static struct value *ada_index_struct_field (LONGEST, struct value *, LONGEST, + struct type *); + + static struct value *assign_aggregate (struct value *, struct value *, +@@ -699,7 +700,7 @@ coerce_unspec_val_to_type (struct value + } + + static const gdb_byte * +-cond_offset_host (const gdb_byte *valaddr, long offset) ++cond_offset_host (const gdb_byte *valaddr, LONGEST offset) + { + if (valaddr == NULL) + return NULL; +@@ -708,7 +709,7 @@ cond_offset_host (const gdb_byte *valadd + } + + static CORE_ADDR +-cond_offset_target (CORE_ADDR address, long offset) ++cond_offset_target (CORE_ADDR address, LONGEST offset) + { + if (address == 0) + return 0; +@@ -1755,7 +1756,7 @@ desc_bounds (struct value *arr) + /* If TYPE is the type of an array-descriptor (fat pointer), the bit + position of the field containing the address of the bounds data. */ + +-static int ++static LONGEST + fat_pntr_bounds_bitpos (struct type *type) + { + return TYPE_FIELD_BITPOS (desc_base_type (type), 1); +@@ -1821,7 +1822,7 @@ desc_data (struct value *arr) + /* If TYPE is the type of an array-descriptor (fat pointer), the bit + position of the field containing the address of the data. */ + +-static int ++static LONGEST + fat_pntr_data_bitpos (struct type *type) + { + return TYPE_FIELD_BITPOS (desc_base_type (type), 0); +@@ -1856,7 +1857,7 @@ desc_one_bound (struct value *bounds, in + of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper + bound, if WHICH is 1. The first bound is I=1. */ + +-static int ++static LONGEST + desc_bound_bitpos (struct type *type, int i, int which) + { + return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2); +@@ -2046,7 +2047,7 @@ ada_type_of_array (struct value *arr, in + zero, and does not need to be recomputed. */ + if (lo < hi) + { +- int array_bitsize = ++ LONGEST array_bitsize = + (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0); + + TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8; +@@ -2206,7 +2207,7 @@ decode_packed_array_bitsize (struct type + the length is arbitrary. */ + + static struct type * +-constrained_packed_array_type (struct type *type, long *elt_bits) ++constrained_packed_array_type (struct type *type, LONGEST *elt_bits) + { + struct type *new_elt_type; + struct type *new_type; +@@ -2260,7 +2261,7 @@ decode_constrained_packed_array_type (st + char *name; + const char *tail; + struct type *shadow_type; +- long bits; ++ LONGEST bits; + + if (!raw_name) + raw_name = ada_type_name (desc_base_type (type)); +@@ -2331,7 +2332,8 @@ decode_constrained_packed_array (struct + array with no wrapper. In order to interpret the value through + the (left-justified) packed array type we just built, we must + first left-justify it. */ +- int bit_size, bit_pos; ++ int bit_size; ++ LONGEST bit_pos; + ULONGEST mod; + + mod = ada_modulus (value_type (arr)) - 1; +@@ -2559,7 +2561,7 @@ ada_unpack_from_contents (const gdb_byte + + struct value * + ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr, +- long offset, int bit_offset, int bit_size, ++ LONGEST offset, int bit_offset, int bit_size, + struct type *type) + { + struct value *v; +@@ -2630,7 +2632,7 @@ ada_value_primitive_packed_val (struct v + + if (obj != NULL) + { +- long new_offset = offset; ++ LONGEST new_offset = offset; + + set_value_component_location (v, obj); + set_value_bitpos (v, bit_offset + value_bitpos (obj)); +@@ -2676,7 +2678,7 @@ ada_value_primitive_packed_val (struct v + not overlap. */ + static void + move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source, +- int src_offset, int n, int bits_big_endian_p) ++ LONGEST src_offset, LONGEST n, int bits_big_endian_p) + { + unsigned int accum, mask; + int accum_bits, chunk_size; +@@ -2766,7 +2768,7 @@ ada_value_assign (struct value *toval, s + { + int len = (value_bitpos (toval) + + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT; +- int from_size; ++ LONGEST from_size; + gdb_byte *buffer = (gdb_byte *) alloca (len); + struct value *val; + CORE_ADDR to_addr = value_address (toval); +@@ -2817,7 +2819,7 @@ value_assign_to_component (struct value + (LONGEST) (value_address (component) - value_address (container)); + int bit_offset_in_container = + value_bitpos (component) - value_bitpos (container); +- int bits; ++ LONGEST bits; + + val = value_cast (value_type (component), val); + +@@ -4468,7 +4470,7 @@ ensure_lval (struct value *val) + if (VALUE_LVAL (val) == not_lval + || VALUE_LVAL (val) == lval_internalvar) + { +- int len = TYPE_LENGTH (ada_check_typedef (value_type (val))); ++ LONGEST len = TYPE_LENGTH (ada_check_typedef (value_type (val))); + const CORE_ADDR addr = + value_as_long (value_allocate_space_in_inferior (len)); + +@@ -4552,7 +4554,7 @@ static CORE_ADDR + value_pointer (struct value *value, struct type *type) + { + struct gdbarch *gdbarch = get_type_arch (type); +- unsigned len = TYPE_LENGTH (type); ++ ULONGEST len = TYPE_LENGTH (type); + gdb_byte *buf = (gdb_byte *) alloca (len); + CORE_ADDR addr; + +@@ -6752,7 +6754,7 @@ value_tag_from_contents_and_address (str + const gdb_byte *valaddr, + CORE_ADDR address) + { +- int tag_byte_offset; ++ LONGEST tag_byte_offset; + struct type *tag_type; + + if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset, +@@ -7233,7 +7235,7 @@ ada_in_variant (LONGEST val, struct type + only in that it can handle packed values of arbitrary type. */ + + static struct value * +-ada_value_primitive_field (struct value *arg1, int offset, int fieldno, ++ada_value_primitive_field (struct value *arg1, LONGEST offset, int fieldno, + struct type *arg_type) + { + struct type *type; +@@ -7245,7 +7247,7 @@ ada_value_primitive_field (struct value + + if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0) + { +- int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno); ++ LONGEST bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno); + int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno); + + return ada_value_primitive_packed_val (arg1, value_contents (arg1), +@@ -7272,9 +7274,9 @@ ada_value_primitive_field (struct value + Returns 1 if found, 0 otherwise. */ + + static int +-find_struct_field (const char *name, struct type *type, int offset, ++find_struct_field (const char *name, struct type *type, LONGEST offset, + struct type **field_type_p, +- int *byte_offset_p, int *bit_offset_p, int *bit_size_p, ++ LONGEST *byte_offset_p, int *bit_offset_p, int *bit_size_p, + int *index_p) + { + int i; +@@ -7292,8 +7294,8 @@ find_struct_field (const char *name, str + + for (i = 0; i < TYPE_NFIELDS (type); i += 1) + { +- int bit_pos = TYPE_FIELD_BITPOS (type, i); +- int fld_offset = offset + bit_pos / 8; ++ LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i); ++ LONGEST fld_offset = offset + bit_pos / 8; + const char *t_field_name = TYPE_FIELD_NAME (type, i); + + if (t_field_name == NULL) +@@ -7363,7 +7365,7 @@ num_visible_fields (struct type *type) + Searches recursively through wrapper fields (e.g., '_parent'). */ + + static struct value * +-ada_search_struct_field (const char *name, struct value *arg, int offset, ++ada_search_struct_field (const char *name, struct value *arg, LONGEST offset, + struct type *type) + { + int i; +@@ -7396,7 +7398,7 @@ ada_search_struct_field (const char *nam + int j; + struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, + i)); +- int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; ++ LONGEST var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; + + for (j = 0; j < TYPE_NFIELDS (field_type); j += 1) + { +@@ -7414,8 +7416,8 @@ ada_search_struct_field (const char *nam + return NULL; + } + +-static struct value *ada_index_struct_field_1 (int *, struct value *, +- int, struct type *); ++static struct value *ada_index_struct_field_1 (LONGEST *, struct value *, ++ LONGEST, struct type *); + + + /* Return field #INDEX in ARG, where the index is that returned by +@@ -7424,7 +7426,7 @@ static struct value *ada_index_struct_fi + * If found, return value, else return NULL. */ + + static struct value * +-ada_index_struct_field (int index, struct value *arg, int offset, ++ada_index_struct_field (LONGEST index, struct value *arg, LONGEST offset, + struct type *type) + { + return ada_index_struct_field_1 (&index, arg, offset, type); +@@ -7436,7 +7438,7 @@ ada_index_struct_field (int index, struc + * *INDEX_P. */ + + static struct value * +-ada_index_struct_field_1 (int *index_p, struct value *arg, int offset, ++ada_index_struct_field_1 (LONGEST *index_p, struct value *arg, LONGEST offset, + struct type *type) + { + int i; +@@ -7526,7 +7528,8 @@ ada_value_struct_elt (struct value *arg, + v = ada_search_struct_field (name, arg, 0, t); + else + { +- int bit_offset, bit_size, byte_offset; ++ int bit_offset, bit_size; ++ LONGEST byte_offset; + struct type *field_type; + CORE_ADDR address; + +@@ -7832,8 +7835,8 @@ ada_coerce_ref (struct value *val0) + /* Return OFF rounded upward if necessary to a multiple of + ALIGNMENT (a power of 2). */ + +-static unsigned int +-align_value (unsigned int off, unsigned int alignment) ++static ULONGEST ++align_value (ULONGEST off, ULONGEST alignment) + { + return (off + alignment - 1) & ~(alignment - 1); + } +@@ -8227,10 +8230,9 @@ ada_template_to_fixed_record_type_1 (str + struct value *mark = value_mark (); + struct value *dval; + struct type *rtype; +- int nfields, bit_len; ++ int nfields; + int variant_field; +- long off; +- int fld_bit_len; ++ LONGEST off, bit_len, fld_bit_len; + int f; + + /* Compute the number of fields in this record type that are going +@@ -8308,7 +8310,7 @@ ada_template_to_fixed_record_type_1 (str + that follow this one. */ + if (ada_is_aligner_type (field_type)) + { +- long field_offset = TYPE_FIELD_BITPOS (field_type, f); ++ LONGEST field_offset = TYPE_FIELD_BITPOS (field_type, f); + + field_valaddr = cond_offset_host (field_valaddr, field_offset); + field_address = cond_offset_target (field_address, field_offset); +@@ -8444,11 +8446,11 @@ ada_template_to_fixed_record_type_1 (str + if (TYPE_LENGTH (type) <= 0) + { + if (TYPE_NAME (rtype)) +- warning (_("Invalid type size for `%s' detected: %d."), +- TYPE_NAME (rtype), TYPE_LENGTH (type)); ++ warning (_("Invalid type size for `%s' detected: %s."), ++ TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type))); + else +- warning (_("Invalid type size for detected: %d."), +- TYPE_LENGTH (type)); ++ warning (_("Invalid type size for detected: %s."), ++ pulongest (TYPE_LENGTH (type))); + } + else + { +@@ -8915,7 +8917,8 @@ to_fixed_array_type (struct type *type0, + type was a regular (non-packed) array type. As a result, the + bitsize of the array elements needs to be set again, and the array + length needs to be recomputed based on that bitsize. */ +- int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result)); ++ LONGEST len = (TYPE_LENGTH (result) ++ / TYPE_LENGTH (TYPE_TARGET_TYPE (result))); + int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0); + + TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0); +diff -Naurp insight-7.12.50.20170416.orig/gdb/ada-lang.h insight-7.12.50.20170416.new/gdb/ada-lang.h +--- insight-7.12.50.20170416.orig/gdb/ada-lang.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ada-lang.h 2017-04-16 12:29:51.436070187 +0100 +@@ -168,7 +168,7 @@ extern void ada_print_type (struct type + extern void ada_print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream); + +-extern void ada_val_print (struct type *, int, CORE_ADDR, ++extern void ada_val_print (struct type *, LONGEST, CORE_ADDR, + struct ui_file *, int, + struct value *, + const struct value_print_options *); +@@ -183,7 +183,7 @@ extern void ada_emit_char (int, struct t + extern void ada_printchar (int, struct type *, struct ui_file *); + + extern void ada_printstr (struct ui_file *, struct type *, const gdb_byte *, +- unsigned int, const char *, int, ++ ULONGEST, const char *, int, + const struct value_print_options *); + + struct value *ada_convert_actual (struct value *actual, +@@ -255,7 +255,7 @@ extern int ada_is_constrained_packed_arr + + extern struct value *ada_value_primitive_packed_val (struct value *, + const gdb_byte *, +- long, int, int, ++ LONGEST, int, int, + struct type *); + + extern struct type *ada_coerce_to_simple_array_type (struct type *); +diff -Naurp insight-7.12.50.20170416.orig/gdb/ada-typeprint.c insight-7.12.50.20170416.new/gdb/ada-typeprint.c +--- insight-7.12.50.20170416.orig/gdb/ada-typeprint.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ada-typeprint.c 2017-04-16 12:29:51.436070187 +0100 +@@ -891,8 +891,8 @@ ada_print_type (struct type *type0, cons + const char *name = ada_type_name (type); + + if (!ada_is_range_type_name (name)) +- fprintf_filtered (stream, _("<%d-byte integer>"), +- TYPE_LENGTH (type)); ++ fprintf_filtered (stream, _("<%s-byte integer>"), ++ pulongest (TYPE_LENGTH (type))); + else + { + fprintf_filtered (stream, "range "); +@@ -913,7 +913,8 @@ ada_print_type (struct type *type0, cons + } + break; + case TYPE_CODE_FLT: +- fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type)); ++ fprintf_filtered (stream, _("<%s-byte float>"), ++ pulongest (TYPE_LENGTH (type))); + break; + case TYPE_CODE_ENUM: + if (show < 0) +diff -Naurp insight-7.12.50.20170416.orig/gdb/ada-valprint.c insight-7.12.50.20170416.new/gdb/ada-valprint.c +--- insight-7.12.50.20170416.orig/gdb/ada-valprint.c 2017-03-04 04:09:18.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ada-valprint.c 2017-04-16 12:29:51.436070187 +0100 +@@ -33,11 +33,11 @@ + #include "objfiles.h" + + static int print_field_values (struct type *, const gdb_byte *, +- int, ++ LONGEST, + struct ui_file *, int, + struct value *, + const struct value_print_options *, +- int, struct type *, int, ++ int, struct type *, LONGEST, + const struct language_defn *); + + +@@ -279,7 +279,7 @@ ada_emit_char (int c, struct type *type, + of a character. */ + + static int +-char_at (const gdb_byte *string, int i, int type_len, ++char_at (const gdb_byte *string, LONGEST i, int type_len, + enum bfd_endian byte_order) + { + if (type_len == 1) +@@ -439,11 +439,11 @@ ada_print_scalar (struct type *type, LON + + static void + printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string, +- unsigned int length, int force_ellipses, int type_len, ++ ULONGEST length, int force_ellipses, int type_len, + const struct value_print_options *options) + { + enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (elttype)); +- unsigned int i; ++ ULONGEST i; + unsigned int things_printed = 0; + int in_quotes = 0; + int need_comma = 0; +@@ -458,9 +458,9 @@ printstr (struct ui_file *stream, struct + { + /* Position of the character we are examining + to see whether it is repeated. */ +- unsigned int rep1; ++ ULONGEST rep1; + /* Number of repetitions we have detected so far. */ +- unsigned int reps; ++ ULONGEST reps; + + QUIT; + +@@ -491,7 +491,8 @@ printstr (struct ui_file *stream, struct + ada_emit_char (char_at (string, i, type_len, byte_order), + elttype, stream, '\'', type_len); + fputs_filtered ("'", stream); +- fprintf_filtered (stream, _(" "), reps); ++ fprintf_filtered (stream, _(" "), ++ pulongest (reps)); + i = rep1 - 1; + things_printed += options->repeat_count_threshold; + need_comma = 1; +@@ -519,7 +520,7 @@ printstr (struct ui_file *stream, struct + + void + ada_printstr (struct ui_file *stream, struct type *type, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) + { +@@ -529,12 +530,12 @@ ada_printstr (struct ui_file *stream, st + + static int + print_variant_part (struct type *type, int field_num, +- const gdb_byte *valaddr, int offset, ++ const gdb_byte *valaddr, LONGEST offset, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options, + int comma_needed, +- struct type *outer_type, int outer_offset, ++ struct type *outer_type, LONGEST outer_offset, + const struct language_defn *language) + { + struct type *var_type = TYPE_FIELD_TYPE (type, field_num); +@@ -570,11 +571,11 @@ print_variant_part (struct type *type, i + + static int + print_field_values (struct type *type, const gdb_byte *valaddr, +- int offset, struct ui_file *stream, int recurse, ++ LONGEST offset, struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options, + int comma_needed, +- struct type *outer_type, int outer_offset, ++ struct type *outer_type, LONGEST outer_offset, + const struct language_defn *language) + { + int i, len; +@@ -640,7 +641,7 @@ print_field_values (struct type *type, c + else + { + struct value *v; +- int bit_pos = TYPE_FIELD_BITPOS (type, i); ++ LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i); + int bit_size = TYPE_FIELD_BITSIZE (type, i); + struct value_print_options opts; + +@@ -685,8 +686,8 @@ ada_val_print_string (struct type *type, + { + enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); + struct type *elttype = TYPE_TARGET_TYPE (type); +- unsigned int eltlen; +- unsigned int len; ++ ULONGEST eltlen; ++ ULONGEST len; + + /* We know that ELTTYPE cannot possibly be null, because we assume + that we're called only when TYPE is a string-like type. +@@ -705,7 +706,7 @@ ada_val_print_string (struct type *type, + elements up to it. */ + if (options->stop_print_at_null) + { +- int temp_len; ++ LONGEST temp_len; + + /* Look for a NULL char. */ + for (temp_len = 0; +@@ -1072,7 +1073,7 @@ ada_val_print_ref (struct type *type, co + + static void + ada_val_print_1 (struct type *type, +- int offset, CORE_ADDR address, ++ LONGEST offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *original_value, + const struct value_print_options *options, +@@ -1156,7 +1157,7 @@ ada_val_print_1 (struct type *type, + + void + ada_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/annotate.c insight-7.12.50.20170416.new/gdb/annotate.c +--- insight-7.12.50.20170416.orig/gdb/annotate.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/annotate.c 2017-04-16 12:29:51.437070196 +0100 +@@ -533,21 +533,21 @@ annotate_frame_end (void) + } + + void +-annotate_array_section_begin (int idx, struct type *elttype) ++annotate_array_section_begin (LONGEST idx, struct type *elttype) + { + if (annotation_level == 2) + { +- printf_filtered (("\n\032\032array-section-begin %d "), idx); ++ printf_filtered (("\n\032\032array-section-begin %s "), plongest (idx)); + print_value_flags (elttype); + printf_filtered (("\n")); + } + } + + void +-annotate_elt_rep (unsigned int repcount) ++annotate_elt_rep (ULONGEST repcount) + { + if (annotation_level == 2) +- printf_filtered (("\n\032\032elt-rep %u\n"), repcount); ++ printf_filtered (("\n\032\032elt-rep %s\n"), pulongest (repcount)); + } + + void +diff -Naurp insight-7.12.50.20170416.orig/gdb/annotate.h insight-7.12.50.20170416.new/gdb/annotate.h +--- insight-7.12.50.20170416.orig/gdb/annotate.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/annotate.h 2017-04-16 12:29:51.437070196 +0100 +@@ -92,8 +92,8 @@ extern void annotate_frame_source_end (v + extern void annotate_frame_where (void); + extern void annotate_frame_end (void); + +-extern void annotate_array_section_begin (int, struct type *); +-extern void annotate_elt_rep (unsigned int); ++extern void annotate_array_section_begin (LONGEST, struct type *); ++extern void annotate_elt_rep (ULONGEST); + extern void annotate_elt_rep_end (void); + extern void annotate_elt (void); + extern void annotate_array_section_end (void); +diff -Naurp insight-7.12.50.20170416.orig/gdb/arch-utils.c insight-7.12.50.20170416.new/gdb/arch-utils.c +--- insight-7.12.50.20170416.orig/gdb/arch-utils.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/arch-utils.c 2017-04-16 12:29:51.474070540 +0100 +@@ -247,7 +247,7 @@ legacy_virtual_frame_pointer (struct gdb + + const struct floatformat ** + default_floatformat_for_type (struct gdbarch *gdbarch, +- const char *name, int len) ++ const char *name, LONGEST len) + { + const struct floatformat **format = NULL; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/arch-utils.h insight-7.12.50.20170416.new/gdb/arch-utils.h +--- insight-7.12.50.20170416.orig/gdb/arch-utils.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/arch-utils.h 2017-04-16 12:29:51.474070540 +0100 +@@ -144,7 +144,7 @@ extern gdbarch_virtual_frame_pointer_fty + /* Default implementation of gdbarch_floatformat_for_type. */ + extern const struct floatformat ** + default_floatformat_for_type (struct gdbarch *gdbarch, +- const char *name, int len); ++ const char *name, LONGEST len); + + extern CORE_ADDR generic_skip_trampoline_code (struct frame_info *frame, + CORE_ADDR pc); +diff -Naurp insight-7.12.50.20170416.orig/gdb/arm-linux-nat.c insight-7.12.50.20170416.new/gdb/arm-linux-nat.c +--- insight-7.12.50.20170416.orig/gdb/arm-linux-nat.c 2017-03-18 01:22:31.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/arm-linux-nat.c 2017-04-16 12:29:51.437070196 +0100 +@@ -1065,7 +1065,7 @@ arm_linux_remove_hw_breakpoint (struct t + ADDR? */ + static int + arm_linux_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + const struct arm_linux_hwbp_cap *cap = arm_linux_get_hwbp_cap (); + CORE_ADDR max_wp_length, aligned_addr; +diff -Naurp insight-7.12.50.20170416.orig/gdb/ax-gdb.c insight-7.12.50.20170416.new/gdb/ax-gdb.c +--- insight-7.12.50.20170416.orig/gdb/ax-gdb.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ax-gdb.c 2017-04-16 12:34:26.988633385 +0100 +@@ -83,12 +83,12 @@ static void gen_traced_pop (struct gdbar + static void gen_sign_extend (struct agent_expr *, struct type *); + static void gen_extend (struct agent_expr *, struct type *); + static void gen_fetch (struct agent_expr *, struct type *); +-static void gen_left_shift (struct agent_expr *, int); ++static void gen_left_shift (struct agent_expr *, LONGEST); + + + static void gen_frame_args_address (struct gdbarch *, struct agent_expr *); + static void gen_frame_locals_address (struct gdbarch *, struct agent_expr *); +-static void gen_offset (struct agent_expr *ax, int offset); ++static void gen_offset (struct agent_expr *ax, LONGEST offset); + static void gen_sym_offset (struct agent_expr *, struct symbol *); + static void gen_var_ref (struct gdbarch *, struct agent_expr *ax, + struct axs_value *value, struct symbol *var); +@@ -137,15 +137,16 @@ static void gen_deref (struct agent_expr + static void gen_address_of (struct agent_expr *, struct axs_value *); + static void gen_bitfield_ref (struct expression *exp, struct agent_expr *ax, + struct axs_value *value, +- struct type *type, int start, int end); ++ struct type *type, LONGEST start, LONGEST end); + static void gen_primitive_field (struct expression *exp, + struct agent_expr *ax, + struct axs_value *value, +- int offset, int fieldno, struct type *type); ++ LONGEST offset, int fieldno, ++ struct type *type); + static int gen_struct_ref_recursive (struct expression *exp, + struct agent_expr *ax, + struct axs_value *value, +- const char *field, int offset, ++ const char *field, LONGEST offset, + struct type *type); + static void gen_struct_ref (struct expression *exp, struct agent_expr *ax, + struct axs_value *value, +@@ -541,7 +542,7 @@ gen_fetch (struct agent_expr *ax, struct + right shift it by -DISTANCE bits if DISTANCE < 0. This generates + unsigned (logical) right shifts. */ + static void +-gen_left_shift (struct agent_expr *ax, int distance) ++gen_left_shift (struct agent_expr *ax, LONGEST distance) + { + if (distance > 0) + { +@@ -595,7 +596,7 @@ gen_frame_locals_address (struct gdbarch + programming in ML, it would be clearer why these are the same + thing. */ + static void +-gen_offset (struct agent_expr *ax, int offset) ++gen_offset (struct agent_expr *ax, LONGEST offset) + { + /* It would suffice to simply push the offset and add it, but this + makes it easier to read positive and negative offsets in the +@@ -1251,7 +1252,7 @@ gen_address_of (struct agent_expr *ax, s + static void + gen_bitfield_ref (struct expression *exp, struct agent_expr *ax, + struct axs_value *value, struct type *type, +- int start, int end) ++ LONGEST start, LONGEST end) + { + /* Note that ops[i] fetches 8 << i bits. */ + static enum agent_op ops[] +@@ -1286,13 +1287,13 @@ gen_bitfield_ref (struct expression *exp + + /* The first and one-after-last bits in the field, but rounded down + and up to byte boundaries. */ +- int bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT; +- int bound_end = (((end + TARGET_CHAR_BIT - 1) +- / TARGET_CHAR_BIT) +- * TARGET_CHAR_BIT); ++ LONGEST bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT; ++ LONGEST bound_end = (((end + TARGET_CHAR_BIT - 1) ++ / TARGET_CHAR_BIT) ++ * TARGET_CHAR_BIT); + + /* current bit offset within the structure */ +- int offset; ++ LONGEST offset; + + /* The index in ops of the opcode we're considering. */ + int op; +@@ -1411,7 +1412,7 @@ gen_bitfield_ref (struct expression *exp + static void + gen_primitive_field (struct expression *exp, + struct agent_expr *ax, struct axs_value *value, +- int offset, int fieldno, struct type *type) ++ LONGEST offset, int fieldno, struct type *type) + { + /* Is this a bitfield? */ + if (TYPE_FIELD_PACKED (type, fieldno)) +@@ -1436,7 +1437,7 @@ gen_primitive_field (struct expression * + static int + gen_struct_ref_recursive (struct expression *exp, struct agent_expr *ax, + struct axs_value *value, +- const char *field, int offset, struct type *type) ++ const char *field, LONGEST offset, struct type *type) + { + int i, rslt; + int nbases = TYPE_N_BASECLASSES (type); +diff -Naurp insight-7.12.50.20170416.orig/gdb/ax-general.c insight-7.12.50.20170416.new/gdb/ax-general.c +--- insight-7.12.50.20170416.orig/gdb/ax-general.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ax-general.c 2017-04-16 12:29:51.439070215 +0100 +@@ -177,7 +177,7 @@ ax_zero_ext (struct agent_expr *x, int n + + /* Append a trace_quick instruction to EXPR, to record N bytes. */ + void +-ax_trace_quick (struct agent_expr *x, int n) ++ax_trace_quick (struct agent_expr *x, LONGEST n) + { + /* N must fit in a byte. */ + if (n < 0 || n > 255) +diff -Naurp insight-7.12.50.20170416.orig/gdb/ax.h insight-7.12.50.20170416.new/gdb/ax.h +--- insight-7.12.50.20170416.orig/gdb/ax.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ax.h 2017-04-16 12:29:51.439070215 +0100 +@@ -205,7 +205,7 @@ extern void ax_ext (struct agent_expr *E + extern void ax_zero_ext (struct agent_expr *EXPR, int N); + + /* Append a trace_quick instruction to EXPR, to record N bytes. */ +-extern void ax_trace_quick (struct agent_expr *EXPR, int N); ++extern void ax_trace_quick (struct agent_expr *EXPR, LONGEST N); + + /* Append a goto op to EXPR. OP is the actual op (must be aop_goto or + aop_if_goto). We assume we don't know the target offset yet, +diff -Naurp insight-7.12.50.20170416.orig/gdb/breakpoint.c insight-7.12.50.20170416.new/gdb/breakpoint.c +--- insight-7.12.50.20170416.orig/gdb/breakpoint.c 2017-04-16 12:29:02.788617666 +0100 ++++ insight-7.12.50.20170416.new/gdb/breakpoint.c 2017-04-16 12:29:51.442070242 +0100 +@@ -2225,9 +2225,9 @@ should_be_inserted (struct bp_location * + { + fprintf_unfiltered (gdb_stdlog, + "infrun: stepping past non-steppable watchpoint. " +- "skipping watchpoint at %s:%d\n", ++ "skipping watchpoint at %s:%s\n", + paddress (bl->gdbarch, bl->address), +- bl->length); ++ plongest (bl->length)); + } + return 0; + } +@@ -7151,7 +7151,7 @@ breakpoint_address_match (struct address + + static int + breakpoint_address_match_range (struct address_space *aspace1, CORE_ADDR addr1, +- int len1, struct address_space *aspace2, ++ LONGEST len1, struct address_space *aspace2, + CORE_ADDR addr2) + { + return ((gdbarch_has_global_breakpoints (target_gdbarch ()) +@@ -11444,7 +11444,7 @@ can_use_hardware_watchpoint (struct valu + && TYPE_CODE (vtype) != TYPE_CODE_ARRAY)) + { + CORE_ADDR vaddr = value_address (v); +- int len; ++ LONGEST len; + int num_regs; + + len = (target_exact_watchpoints +diff -Naurp insight-7.12.50.20170416.orig/gdb/breakpoint.h insight-7.12.50.20170416.new/gdb/breakpoint.h +--- insight-7.12.50.20170416.orig/gdb/breakpoint.h 2017-04-16 12:29:02.694616792 +0100 ++++ insight-7.12.50.20170416.new/gdb/breakpoint.h 2017-04-16 12:29:51.443070252 +0100 +@@ -250,7 +250,7 @@ struct bp_target_info + + /* If this is a ranged breakpoint, then this field contains the + length of the range that will be watched for execution. */ +- int length; ++ LONGEST length; + + /* If the breakpoint lives in memory and reading that memory would + give back the breakpoint, instead of the original contents, then +@@ -422,7 +422,7 @@ struct bp_location + /* For hardware watchpoints, the size of the memory region being + watched. For hardware ranged breakpoints, the size of the + breakpoint range. */ +- int length; ++ LONGEST length; + + /* Type of hardware watchpoint. */ + enum target_hw_bp_type watchpoint_type; +diff -Naurp insight-7.12.50.20170416.orig/gdb/c-lang.c insight-7.12.50.20170416.new/gdb/c-lang.c +--- insight-7.12.50.20170416.orig/gdb/c-lang.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/c-lang.c 2017-04-16 12:29:51.443070252 +0100 +@@ -186,7 +186,7 @@ c_printchar (int c, struct type *type, s + + void + c_printstr (struct ui_file *stream, struct type *type, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *user_encoding, int force_ellipses, + const struct value_print_options *options) + { +@@ -672,7 +672,7 @@ evaluate_subexp_c (struct type *expect_t + } + else + { +- int i; ++ LONGEST i; + + /* Write the terminating character. */ + for (i = 0; i < TYPE_LENGTH (type); ++i) +@@ -681,7 +681,7 @@ evaluate_subexp_c (struct type *expect_t + if (satisfy_expected) + { + LONGEST low_bound, high_bound; +- int element_size = TYPE_LENGTH (type); ++ LONGEST element_size = TYPE_LENGTH (type); + + if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type), + &low_bound, &high_bound) < 0) +diff -Naurp insight-7.12.50.20170416.orig/gdb/c-lang.h insight-7.12.50.20170416.new/gdb/c-lang.h +--- insight-7.12.50.20170416.orig/gdb/c-lang.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/c-lang.h 2017-04-16 12:29:51.443070252 +0100 +@@ -77,7 +77,7 @@ extern void c_print_typedef (struct type + struct ui_file *); + + extern void c_val_print (struct type *, +- int, CORE_ADDR, ++ LONGEST, CORE_ADDR, + struct ui_file *, int, + struct value *, + const struct value_print_options *); +@@ -97,7 +97,7 @@ extern void c_printchar (int, struct typ + extern void c_printstr (struct ui_file * stream, + struct type *elttype, + const gdb_byte *string, +- unsigned int length, ++ ULONGEST length, + const char *user_encoding, + int force_ellipses, + const struct value_print_options *options); +diff -Naurp insight-7.12.50.20170416.orig/gdb/compile/compile-c-support.c insight-7.12.50.20170416.new/gdb/compile/compile-c-support.c +--- insight-7.12.50.20170416.orig/gdb/compile/compile-c-support.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/compile/compile-c-support.c 2017-04-16 12:29:51.473070531 +0100 +@@ -309,11 +309,11 @@ generate_register_struct (struct ui_file + + default: + fprintf_unfiltered (stream, +- " unsigned char %s[%d]" ++ " unsigned char %s[%s]" + " __attribute__((__aligned__(" + "__BIGGEST_ALIGNMENT__)))", + regname, +- TYPE_LENGTH (regtype)); ++ pulongest (TYPE_LENGTH (regtype))); + } + fputs_unfiltered (";\n", stream); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/cp-abi.c insight-7.12.50.20170416.new/gdb/cp-abi.c +--- insight-7.12.50.20170416.orig/gdb/cp-abi.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/cp-abi.c 2017-04-16 12:29:51.444070261 +0100 +@@ -64,12 +64,12 @@ is_operator_name (const char *name) + return (*current_cp_abi.is_operator_name) (name); + } + +-int ++LONGEST + baseclass_offset (struct type *type, int index, const gdb_byte *valaddr, + LONGEST embedded_offset, CORE_ADDR address, + const struct value *val) + { +- int res = 0; ++ LONGEST res = 0; + + gdb_assert (current_cp_abi.baseclass_offset != NULL); + +@@ -96,7 +96,7 @@ baseclass_offset (struct type *type, int + struct value * + value_virtual_fn_field (struct value **arg1p, + struct fn_field *f, int j, +- struct type *type, int offset) ++ struct type *type, LONGEST offset) + { + if ((current_cp_abi.virtual_fn_field) == NULL) + return NULL; +diff -Naurp insight-7.12.50.20170416.orig/gdb/cp-abi.h insight-7.12.50.20170416.new/gdb/cp-abi.h +--- insight-7.12.50.20170416.orig/gdb/cp-abi.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/cp-abi.h 2017-04-16 12:29:51.444070261 +0100 +@@ -108,7 +108,7 @@ extern struct value *value_virtual_fn_fi + struct fn_field *f, + int j, + struct type *type, +- int offset); ++ LONGEST offset); + + + /* Try to find the run-time type of VALUE, using C++ run-time type +@@ -144,11 +144,11 @@ extern struct type *value_rtti_type (str + contents of VAL. The result is the offset of the baseclass value + relative to (the address of)(ARG) + OFFSET. */ + +-extern int baseclass_offset (struct type *type, +- int index, const gdb_byte *valaddr, +- LONGEST embedded_offset, +- CORE_ADDR address, +- const struct value *val); ++extern LONGEST baseclass_offset (struct type *type, ++ int index, const gdb_byte *valaddr, ++ LONGEST embedded_offset, ++ CORE_ADDR address, ++ const struct value *val); + + /* Describe the target of a pointer to method. CONTENTS is the byte + pattern representing the pointer to method. TYPE is the pointer to +@@ -226,12 +226,12 @@ struct cp_abi_ops + struct value *(*virtual_fn_field) (struct value **arg1p, + struct fn_field * f, + int j, struct type * type, +- int offset); ++ LONGEST offset); + struct type *(*rtti_type) (struct value *v, int *full, + LONGEST *top, int *using_enc); +- int (*baseclass_offset) (struct type *type, int index, +- const bfd_byte *valaddr, LONGEST embedded_offset, +- CORE_ADDR address, const struct value *val); ++ LONGEST (*baseclass_offset) (struct type *type, int index, ++ const bfd_byte *valaddr, LONGEST embedded_offset, ++ CORE_ADDR address, const struct value *val); + void (*print_method_ptr) (const gdb_byte *contents, + struct type *type, + struct ui_file *stream); +diff -Naurp insight-7.12.50.20170416.orig/gdb/cp-valprint.c insight-7.12.50.20170416.new/gdb/cp-valprint.c +--- insight-7.12.50.20170416.orig/gdb/cp-valprint.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/cp-valprint.c 2017-04-16 12:29:51.444070261 +0100 +@@ -336,7 +336,7 @@ cp_print_value_fields (struct type *type + } + else if (i == vptr_fieldno && type == vptr_basetype) + { +- int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; ++ LONGEST i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; + struct type *i_type = TYPE_FIELD_TYPE (type, i); + + if (valprint_check_validity (stream, i_type, i_offset, val)) +diff -Naurp insight-7.12.50.20170416.orig/gdb/c-valprint.c insight-7.12.50.20170416.new/gdb/c-valprint.c +--- insight-7.12.50.20170416.orig/gdb/c-valprint.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/c-valprint.c 2017-04-16 12:29:51.443070252 +0100 +@@ -244,7 +244,7 @@ c_val_print_array (struct type *type, co + if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0) + { + LONGEST low_bound, high_bound; +- int eltlen, len; ++ LONGEST eltlen, len; + struct gdbarch *gdbarch = get_type_arch (type); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + unsigned int i = 0; /* Number of characters printed. */ +@@ -318,8 +318,8 @@ c_val_print_array (struct type *type, co + if (cp_is_vtbl_ptr_type (elttype)) + { + i = 1; +- fprintf_filtered (stream, _("%d vtable entries"), +- len - 1); ++ fprintf_filtered (stream, _("%s vtable entries"), ++ plongest (len - 1)); + } + else + { +@@ -396,7 +396,7 @@ c_val_print_struct (struct type *type, c + -fvtable_thunks. (Otherwise, look under + TYPE_CODE_PTR.) */ + struct gdbarch *gdbarch = get_type_arch (type); +- int offset = (embedded_offset ++ LONGEST offset = (embedded_offset + + TYPE_FIELD_BITPOS (type, + VTBL_FNADDR_OFFSET) / 8); + struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET); +@@ -495,7 +495,7 @@ c_val_print_memberptr (struct type *type + + void + c_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *original_value, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/d-lang.h insight-7.12.50.20170416.new/gdb/d-lang.h +--- insight-7.12.50.20170416.orig/gdb/d-lang.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/d-lang.h 2017-04-16 12:29:51.444070261 +0100 +@@ -81,7 +81,7 @@ extern struct block_symbol d_lookup_nest + /* Defined in d-valprint.c */ + + extern void d_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options); +diff -Naurp insight-7.12.50.20170416.orig/gdb/d-valprint.c insight-7.12.50.20170416.new/gdb/d-valprint.c +--- insight-7.12.50.20170416.orig/gdb/d-valprint.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/d-valprint.c 2017-04-16 12:29:51.444070261 +0100 +@@ -73,7 +73,7 @@ dynamic_array_type (struct type *type, + + /* Implements the la_val_print routine for language D. */ + void +-d_val_print (struct type *type, int embedded_offset, ++d_val_print (struct type *type, LONGEST embedded_offset, + CORE_ADDR address, struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2loc.c insight-7.12.50.20170416.new/gdb/dwarf2loc.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2loc.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2loc.c 2017-04-16 12:41:35.762621853 +0100 +@@ -1760,12 +1760,12 @@ static void + read_pieced_value (struct value *v) + { + int i; +- long offset = 0; ++ LONGEST offset = 0; + ULONGEST bits_to_skip; + gdb_byte *contents; + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (v); +- size_t type_len; ++ ULONGEST type_len; + size_t buffer_size = 0; + std::vector buffer; + int bits_big_endian +@@ -1789,8 +1789,8 @@ read_pieced_value (struct value *v) + for (i = 0; i < c->n_pieces && offset < type_len; i++) + { + struct dwarf_expr_piece *p = &c->pieces[i]; +- size_t this_size, this_size_bits; +- long dest_offset_bits, source_offset_bits, source_offset; ++ ULONGEST this_size, this_size_bits; ++ LONGEST dest_offset_bits, source_offset_bits, source_offset; + const gdb_byte *intermediate_buffer; + + /* Compute size, source, and destination offsets for copying, in +@@ -1929,12 +1929,12 @@ static void + write_pieced_value (struct value *to, struct value *from) + { + int i; +- long offset = 0; ++ LONGEST offset = 0; + ULONGEST bits_to_skip; + const gdb_byte *contents; + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (to); +- size_t type_len; ++ ULONGEST type_len; + size_t buffer_size = 0; + std::vector buffer; + int bits_big_endian +@@ -1953,8 +1953,8 @@ write_pieced_value (struct value *to, st + for (i = 0; i < c->n_pieces && offset < type_len; i++) + { + struct dwarf_expr_piece *p = &c->pieces[i]; +- size_t this_size_bits, this_size; +- long dest_offset_bits, source_offset_bits, dest_offset, source_offset; ++ ULONGEST this_size_bits, this_size; ++ LONGEST dest_offset_bits, source_offset_bits, dest_offset, source_offset; + int need_bitwise; + const gdb_byte *source_buffer; + +@@ -2073,7 +2073,7 @@ write_pieced_value (struct value *to, st + + static int + check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset, +- int bit_length) ++ LONGEST bit_length) + { + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (value); +@@ -2086,7 +2086,7 @@ check_pieced_synthetic_pointer (const st + for (i = 0; i < c->n_pieces && bit_length > 0; i++) + { + struct dwarf_expr_piece *p = &c->pieces[i]; +- size_t this_size_bits = p->size; ++ ULONGEST this_size_bits = p->size; + + if (bit_offset > 0) + { +@@ -2194,8 +2194,8 @@ indirect_pieced_value (struct value *val + struct type *type; + struct frame_info *frame; + struct dwarf2_locexpr_baton baton; +- int i, bit_length; +- LONGEST bit_offset; ++ int i; ++ LONGEST bit_length, bit_offset; + struct dwarf_expr_piece *piece = NULL; + LONGEST byte_offset; + enum bfd_endian byte_order; +@@ -2212,7 +2212,7 @@ indirect_pieced_value (struct value *val + for (i = 0; i < c->n_pieces && bit_length > 0; i++) + { + struct dwarf_expr_piece *p = &c->pieces[i]; +- size_t this_size_bits = p->size; ++ ULONGEST this_size_bits = p->size; + + if (bit_offset > 0) + { +@@ -2489,9 +2489,9 @@ dwarf2_evaluate_loc_desc_full (struct ty + case DWARF_VALUE_STACK: + { + struct value *value = ctx.fetch (0); +- size_t n = TYPE_LENGTH (value_type (value)); +- size_t len = TYPE_LENGTH (subobj_type); +- size_t max = TYPE_LENGTH (type); ++ ULONGEST n = TYPE_LENGTH (value_type (value)); ++ ULONGEST len = TYPE_LENGTH (subobj_type); ++ ULONGEST max = TYPE_LENGTH (type); + struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile); + struct cleanup *cleanup; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2read.c insight-7.12.50.20170416.new/gdb/dwarf2read.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2read.c 2017-04-16 12:29:02.815617918 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2read.c 2017-04-16 12:29:51.449070307 +0100 +@@ -2063,12 +2063,12 @@ dwarf2_complex_location_expr_complaint ( + } + + static void +-dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2, +- int arg3) ++dwarf2_const_value_length_mismatch_complaint (const char *arg1, LONGEST arg2, ++ LONGEST arg3) + { + complaint (&symfile_complaints, +- _("const value length mismatch for '%s', got %d, expected %d"), +- arg1, arg2, arg3); ++ _("const value length mismatch for '%s', got %s, expected %s"), ++ arg1, plongest (arg2), plongest (arg3)); + } + + static void +@@ -12876,8 +12876,8 @@ dwarf2_add_field (struct field_info *fip + object, and then subtract off the number of bits of + the field itself. The result is the bit offset of + the LSB of the field. */ +- int anonymous_size; +- int bit_offset = DW_UNSND (attr); ++ LONGEST anonymous_size; ++ LONGEST bit_offset = DW_UNSND (attr); + + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr) +diff -Naurp insight-7.12.50.20170416.orig/gdb/eval.c insight-7.12.50.20170416.new/gdb/eval.c +--- insight-7.12.50.20170416.orig/gdb/eval.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/eval.c 2017-04-16 12:29:51.450070317 +0100 +@@ -297,7 +297,8 @@ evaluate_struct_tuple (struct value *str + while (--nargs >= 0) + { + struct value *val = NULL; +- int bitpos, bitsize; ++ LONGEST bitpos; ++ int bitsize; + bfd_byte *addr; + + fieldno++; +@@ -358,7 +359,7 @@ init_array_element (struct value *array, + enum noside noside, LONGEST low_bound, LONGEST high_bound) + { + LONGEST index; +- int element_size = TYPE_LENGTH (value_type (element)); ++ LONGEST element_size = TYPE_LENGTH (value_type (element)); + + if (exp->elts[*pos].opcode == BINOP_COMMA) + { +@@ -506,11 +507,11 @@ binop_promote (const struct language_def + /* FIXME: Also mixed integral/booleans, with result an integer. */ + { + const struct builtin_type *builtin = builtin_type (gdbarch); +- unsigned int promoted_len1 = TYPE_LENGTH (type1); +- unsigned int promoted_len2 = TYPE_LENGTH (type2); ++ ULONGEST promoted_len1 = TYPE_LENGTH (type1); ++ ULONGEST promoted_len2 = TYPE_LENGTH (type2); + int is_unsigned1 = TYPE_UNSIGNED (type1); + int is_unsigned2 = TYPE_UNSIGNED (type2); +- unsigned int result_len; ++ ULONGEST result_len; + int unsigned_operation; + + /* Determine type length and signedness after promotion for +@@ -692,7 +693,7 @@ evaluate_subexp_standard (struct type *e + struct value **argvec; + int code; + int ix; +- long mem_offset; ++ LONGEST mem_offset; + struct type **arg_types; + int save_pos1; + struct symbol *function = NULL; +@@ -871,7 +872,7 @@ evaluate_subexp_standard (struct type *e + struct type *range_type = TYPE_INDEX_TYPE (type); + struct type *element_type = TYPE_TARGET_TYPE (type); + struct value *array = allocate_value (expect_type); +- int element_size = TYPE_LENGTH (check_typedef (element_type)); ++ LONGEST element_size = TYPE_LENGTH (check_typedef (element_type)); + LONGEST low_bound, high_bound, index; + + if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) +diff -Naurp insight-7.12.50.20170416.orig/gdb/findcmd.c insight-7.12.50.20170416.new/gdb/findcmd.c +--- insight-7.12.50.20170416.orig/gdb/findcmd.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/findcmd.c 2017-04-16 12:29:51.474070540 +0100 +@@ -180,7 +180,7 @@ parse_find_args (char *args, ULONGEST *m + need to grow the pattern buf. */ + pattern_buf_size_need = (pattern_buf_end - pattern_buf + + std::max (TYPE_LENGTH (t), +- (unsigned) sizeof (int64_t))); ++ (ULONGEST) sizeof (int64_t))); + if (pattern_buf_size_need > pattern_buf_size) + { + size_t current_offset = pattern_buf_end - pattern_buf; +diff -Naurp insight-7.12.50.20170416.orig/gdb/findvar.c insight-7.12.50.20170416.new/gdb/findvar.c +--- insight-7.12.50.20170416.orig/gdb/findvar.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/findvar.c 2017-04-16 12:29:51.451070326 +0100 +@@ -817,7 +817,7 @@ struct value * + default_value_from_register (struct gdbarch *gdbarch, struct type *type, + int regnum, struct frame_id frame_id) + { +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + struct value *value = allocate_value (type); + struct frame_info *frame; + +@@ -861,7 +861,7 @@ read_frame_register_value (struct value + LONGEST offset = 0; + LONGEST reg_offset = value_offset (value); + int regnum = VALUE_REGNUM (value); +- int len = type_length_units (check_typedef (value_type (value))); ++ LONGEST len = type_length_units (check_typedef (value_type (value))); + + gdb_assert (VALUE_LVAL (value) == lval_register); + +@@ -876,7 +876,7 @@ read_frame_register_value (struct value + while (len > 0) + { + struct value *regval = get_frame_register_value (frame, regnum); +- int reg_len = type_length_units (value_type (regval)) - reg_offset; ++ LONGEST reg_len = type_length_units (value_type (regval)) - reg_offset; + + /* If the register length is larger than the number of bytes + remaining to copy, then only copy the appropriate bytes. */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-lang.c insight-7.12.50.20170416.new/gdb/f-lang.c +--- insight-7.12.50.20170416.orig/gdb/f-lang.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-lang.c 2017-04-16 12:29:51.450070317 +0100 +@@ -103,7 +103,7 @@ f_printchar (int c, struct type *type, s + + static void + f_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, +- unsigned int length, const char *encoding, int force_ellipses, ++ ULONGEST length, const char *encoding, int force_ellipses, + const struct value_print_options *options) + { + const char *type_encoding = f_get_encoding (type); +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-lang.h insight-7.12.50.20170416.new/gdb/f-lang.h +--- insight-7.12.50.20170416.orig/gdb/f-lang.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-lang.h 2017-04-16 12:29:51.450070317 +0100 +@@ -30,7 +30,7 @@ extern void f_yyerror (const char *); /* + extern void f_print_type (struct type *, const char *, struct ui_file *, int, + int, const struct type_print_options *); + +-extern void f_val_print (struct type *, int, CORE_ADDR, ++extern void f_val_print (struct type *, LONGEST, CORE_ADDR, + struct ui_file *, int, + struct value *, + const struct value_print_options *); +diff -Naurp insight-7.12.50.20170416.orig/gdb/frame.c insight-7.12.50.20170416.new/gdb/frame.c +--- insight-7.12.50.20170416.orig/gdb/frame.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/frame.c 2017-04-16 12:29:51.452070335 +0100 +@@ -1375,7 +1375,7 @@ deprecated_frame_register_read (struct f + + int + get_frame_register_bytes (struct frame_info *frame, int regnum, +- CORE_ADDR offset, int len, gdb_byte *myaddr, ++ CORE_ADDR offset, LONGEST len, gdb_byte *myaddr, + int *optimizedp, int *unavailablep) + { + struct gdbarch *gdbarch = get_frame_arch (frame); +@@ -1404,7 +1404,7 @@ get_frame_register_bytes (struct frame_i + } + if (len > maxsize) + error (_("Bad debug information detected: " +- "Attempt to read %d bytes from registers."), len); ++ "Attempt to read %s bytes from registers."), plongest (len)); + + /* Copy the data. */ + while (len > 0) +diff -Naurp insight-7.12.50.20170416.orig/gdb/frame.h insight-7.12.50.20170416.new/gdb/frame.h +--- insight-7.12.50.20170416.orig/gdb/frame.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/frame.h 2017-04-16 12:29:51.453070345 +0100 +@@ -600,7 +600,7 @@ extern void put_frame_register (struct f + contents are optimized out or unavailable, set *OPTIMIZEDP, + *UNAVAILABLEP accordingly. */ + extern int get_frame_register_bytes (struct frame_info *frame, int regnum, +- CORE_ADDR offset, int len, ++ CORE_ADDR offset, LONGEST len, + gdb_byte *myaddr, + int *optimizedp, int *unavailablep); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-valprint.c insight-7.12.50.20170416.new/gdb/f-valprint.c +--- insight-7.12.50.20170416.orig/gdb/f-valprint.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-valprint.c 2017-04-16 12:29:51.451070326 +0100 +@@ -38,7 +38,7 @@ extern void _initialize_f_valprint (void + static void info_common_command (char *, int); + static void f77_get_dynamic_length_of_aggregate (struct type *); + +-int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2]; ++LONGEST f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2]; + + /* Array which holds offsets to be applied to get a row's elements + for a given array. Array also holds the size of each subarray. */ +@@ -73,8 +73,8 @@ f77_get_upperbound (struct type *type) + static void + f77_get_dynamic_length_of_aggregate (struct type *type) + { +- int upper_bound = -1; +- int lower_bound = 1; ++ LONGEST upper_bound = -1; ++ LONGEST lower_bound = 1; + + /* Recursively go all the way down into a possibly multi-dimensional + F77 array and get the bounds. For simple arrays, this is pretty +@@ -106,7 +106,7 @@ f77_get_dynamic_length_of_aggregate (str + static void + f77_print_array_1 (int nss, int ndimensions, struct type *type, + const gdb_byte *valaddr, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + const struct value *val, + const struct value_print_options *options, +@@ -115,7 +115,7 @@ f77_print_array_1 (int nss, int ndimensi + struct type *range_type = TYPE_INDEX_TYPE (check_typedef (type)); + CORE_ADDR addr = address + embedded_offset; + LONGEST lowerbound, upperbound; +- int i; ++ LONGEST i; + + get_discrete_bounds (range_type, &lowerbound, &upperbound); + +@@ -171,7 +171,7 @@ f77_print_array_1 (int nss, int ndimensi + + static void + f77_print_array (struct type *type, const gdb_byte *valaddr, +- int embedded_offset, ++ LONGEST embedded_offset, + CORE_ADDR address, struct ui_file *stream, + int recurse, + const struct value *val, +@@ -210,7 +210,7 @@ static const struct generic_val_print_de + function; they are identical. */ + + void +-f_val_print (struct type *type, int embedded_offset, ++f_val_print (struct type *type, LONGEST embedded_offset, + CORE_ADDR address, struct ui_file *stream, int recurse, + struct value *original_value, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbarch.c insight-7.12.50.20170416.new/gdb/gdbarch.c +--- insight-7.12.50.20170416.orig/gdb/gdbarch.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbarch.c 2017-04-16 12:29:51.475070549 +0100 +@@ -1806,7 +1806,7 @@ set_gdbarch_wchar_signed (struct gdbarch + } + + const struct floatformat ** +-gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, int length) ++gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, LONGEST length) + { + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->floatformat_for_type != NULL); +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbarch.h insight-7.12.50.20170416.new/gdb/gdbarch.h +--- insight-7.12.50.20170416.orig/gdb/gdbarch.h 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbarch.h 2017-04-16 12:29:51.475070549 +0100 +@@ -203,8 +203,8 @@ extern void set_gdbarch_wchar_signed (st + NAME, if non-NULL, is the type name, which may be used to distinguish + different target formats of the same length. */ + +-typedef const struct floatformat ** (gdbarch_floatformat_for_type_ftype) (struct gdbarch *gdbarch, const char *name, int length); +-extern const struct floatformat ** gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, int length); ++typedef const struct floatformat ** (gdbarch_floatformat_for_type_ftype) (struct gdbarch *gdbarch, const char *name, LONGEST length); ++extern const struct floatformat ** gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, LONGEST length); + extern void set_gdbarch_floatformat_for_type (struct gdbarch *gdbarch, gdbarch_floatformat_for_type_ftype *floatformat_for_type); + + /* For most targets, a pointer on the target and its representation as an +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbarch.sh insight-7.12.50.20170416.new/gdb/gdbarch.sh +--- insight-7.12.50.20170416.orig/gdb/gdbarch.sh 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbarch.sh 2017-04-16 12:29:51.476070559 +0100 +@@ -392,7 +392,7 @@ v:int:wchar_signed:::1:-1:1 + # Returns the floating-point format to be used for values of length LENGTH. + # NAME, if non-NULL, is the type name, which may be used to distinguish + # different target formats of the same length. +-m:const struct floatformat **:floatformat_for_type:const char *name, int length:name, length:0:default_floatformat_for_type::0 ++m:const struct floatformat **:floatformat_for_type:const char *name, LONGEST length:name, length:0:default_floatformat_for_type::0 + + # For most targets, a pointer on the target and its representation as an + # address in GDB have the same size and "look the same". For such a +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbtypes.c insight-7.12.50.20170416.new/gdb/gdbtypes.c +--- insight-7.12.50.20170416.orig/gdb/gdbtypes.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbtypes.c 2017-04-16 12:29:51.453070345 +0100 +@@ -2756,7 +2756,7 @@ verify_floatformat (int bit, const struc + least as long as OBJFILE. */ + + struct type * +-init_type (struct objfile *objfile, enum type_code code, int length, ++init_type (struct objfile *objfile, enum type_code code, LONGEST length, + const char *name) + { + struct type *type; +@@ -3065,8 +3065,8 @@ is_public_ancestor (struct type *base, s + + static int + is_unique_ancestor_worker (struct type *base, struct type *dclass, +- int *offset, +- const gdb_byte *valaddr, int embedded_offset, ++ LONGEST *offset, ++ const gdb_byte *valaddr, LONGEST embedded_offset, + CORE_ADDR address, struct value *val) + { + int i, count = 0; +@@ -3077,7 +3077,7 @@ is_unique_ancestor_worker (struct type * + for (i = 0; i < TYPE_N_BASECLASSES (dclass) && count < 2; ++i) + { + struct type *iter; +- int this_offset; ++ LONGEST this_offset; + + iter = check_typedef (TYPE_BASECLASS (dclass, i)); + +@@ -3118,7 +3118,7 @@ is_unique_ancestor_worker (struct type * + int + is_unique_ancestor (struct type *base, struct value *val) + { +- int offset = -1; ++ LONGEST offset = -1; + + return is_unique_ancestor_worker (base, value_type (val), &offset, + value_contents_for_printing (val), +@@ -4357,7 +4357,7 @@ recursive_dump_type (struct type *type, + break; + } + puts_filtered ("\n"); +- printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type)); ++ printfi_filtered (spaces, "length %s\n", pulongest (TYPE_LENGTH (type))); + if (TYPE_OBJFILE_OWNED (type)) + { + printfi_filtered (spaces, "objfile "); +@@ -4817,7 +4817,7 @@ copy_type (const struct type *type) + + struct type * + arch_type (struct gdbarch *gdbarch, +- enum type_code code, int length, const char *name) ++ enum type_code code, LONGEST length, const char *name) + { + struct type *type; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbtypes.h insight-7.12.50.20170416.new/gdb/gdbtypes.h +--- insight-7.12.50.20170416.orig/gdb/gdbtypes.h 2017-04-16 12:29:02.689616746 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbtypes.h 2017-04-16 12:29:51.454070354 +0100 +@@ -784,7 +784,7 @@ struct type + type_length_units function should be used in order to get the length + expressed in target addressable memory units. */ + +- unsigned int length; ++ ULONGEST length; + + /* * Core type, shared by a group of qualified types. */ + +@@ -1650,7 +1650,7 @@ extern unsigned int type_length_units (s + + /* * Helper function to construct objfile-owned types. */ + +-extern struct type *init_type (struct objfile *, enum type_code, int, ++extern struct type *init_type (struct objfile *, enum type_code, LONGEST, + const char *); + extern struct type *init_integer_type (struct objfile *, int, int, + const char *); +@@ -1667,7 +1667,7 @@ extern struct type *init_pointer_type (s + struct type *); + + /* Helper functions to construct architecture-owned types. */ +-extern struct type *arch_type (struct gdbarch *, enum type_code, int, ++extern struct type *arch_type (struct gdbarch *, enum type_code, LONGEST, + const char *); + extern struct type *arch_integer_type (struct gdbarch *, int, int, + const char *); +diff -Naurp insight-7.12.50.20170416.orig/gdb/gnu-v2-abi.c insight-7.12.50.20170416.new/gdb/gnu-v2-abi.c +--- insight-7.12.50.20170416.orig/gdb/gnu-v2-abi.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/gnu-v2-abi.c 2017-04-16 12:29:51.455070363 +0100 +@@ -82,7 +82,7 @@ gnuv2_is_operator_name (const char *name + TYPE is the type in which F is located. */ + static struct value * + gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j, +- struct type * type, int offset) ++ struct type *type, LONGEST offset) + { + struct value *arg1 = *arg1p; + struct type *type1 = check_typedef (value_type (arg1)); +@@ -338,7 +338,7 @@ vb_match (struct type *type, int index, + target). The result is the offset of the baseclass value relative + to (the address of)(ARG) + OFFSET. */ + +-static int ++static LONGEST + gnuv2_baseclass_offset (struct type *type, int index, + const bfd_byte *valaddr, LONGEST embedded_offset, + CORE_ADDR address, const struct value *val) +@@ -358,8 +358,7 @@ gnuv2_baseclass_offset (struct type *typ + if (vb_match (type, i, basetype)) + { + struct type *field_type; +- LONGEST field_offset; +- int field_length; ++ LONGEST field_offset, field_length; + CORE_ADDR addr; + + field_type = check_typedef (TYPE_FIELD_TYPE (type, i)); +@@ -383,7 +382,7 @@ gnuv2_baseclass_offset (struct type *typ + /* Don't go through baseclass_offset, as that wraps + exceptions, thus, inner exceptions would be wrapped more + than once. */ +- int boffset = ++ LONGEST boffset = + gnuv2_baseclass_offset (type, i, valaddr, + embedded_offset, address, val); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/gnu-v3-abi.c insight-7.12.50.20170416.new/gdb/gnu-v3-abi.c +--- insight-7.12.50.20170416.orig/gdb/gnu-v3-abi.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/gnu-v3-abi.c 2017-04-16 12:29:51.455070363 +0100 +@@ -109,7 +109,7 @@ build_gdb_vtable_type (struct gdbarch *a + { + struct type *t; + struct field *field_list, *field; +- int offset; ++ LONGEST offset; + + struct type *void_ptr_type + = builtin_type (arch)->builtin_data_ptr; +@@ -185,7 +185,7 @@ vtable_ptrdiff_type (struct gdbarch *gdb + /* Return the offset from the start of the imaginary `struct + gdb_gnu_v3_abi_vtable' object to the vtable's "address point" + (i.e., where objects' virtual table pointers point). */ +-static int ++static LONGEST + vtable_address_point_offset (struct gdbarch *gdbarch) + { + struct type *vtable_type +@@ -408,7 +408,7 @@ gnuv3_get_virtual_fn (struct gdbarch *gd + static struct value * + gnuv3_virtual_fn_field (struct value **value_p, + struct fn_field *f, int j, +- struct type *vfn_base, int offset) ++ struct type *vfn_base, LONGEST offset) + { + struct type *values_type = check_typedef (value_type (*value_p)); + struct gdbarch *gdbarch; +@@ -438,7 +438,7 @@ gnuv3_virtual_fn_field (struct value **v + + -1 is returned on error. */ + +-static int ++static LONGEST + gnuv3_baseclass_offset (struct type *type, int index, + const bfd_byte *valaddr, LONGEST embedded_offset, + CORE_ADDR address, const struct value *val) +@@ -447,7 +447,7 @@ gnuv3_baseclass_offset (struct type *typ + struct type *ptr_type; + struct value *vtable; + struct value *vbase_array; +- long int cur_base_offset, base_offset; ++ LONGEST cur_base_offset, base_offset; + + /* Determine architecture. */ + gdbarch = get_type_arch (type); +@@ -470,7 +470,7 @@ gnuv3_baseclass_offset (struct type *typ + cur_base_offset = cur_base_offset + vtable_address_point_offset (gdbarch); + if ((- cur_base_offset) % TYPE_LENGTH (ptr_type) != 0) + error (_("Misaligned vbase offset.")); +- cur_base_offset = cur_base_offset / ((int) TYPE_LENGTH (ptr_type)); ++ cur_base_offset = cur_base_offset / ((LONGEST) TYPE_LENGTH (ptr_type)); + + vtable = gnuv3_get_vtable (gdbarch, type, address + embedded_offset); + gdb_assert (vtable != NULL); +@@ -514,7 +514,7 @@ gnuv3_find_method_in (struct type *domai + we're out of luck. */ + for (i = 0; i < TYPE_N_BASECLASSES (domain); i++) + { +- int pos; ++ LONGEST pos; + struct type *basetype; + + if (BASETYPE_VIA_VIRTUAL (domain, i)) +diff -Naurp insight-7.12.50.20170416.orig/gdb/go-lang.h insight-7.12.50.20170416.new/gdb/go-lang.h +--- insight-7.12.50.20170416.orig/gdb/go-lang.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/go-lang.h 2017-04-16 12:29:51.456070373 +0100 +@@ -85,7 +85,7 @@ extern void go_print_type (struct type * + /* Defined in go-valprint.c. */ + + extern void go_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options); +diff -Naurp insight-7.12.50.20170416.orig/gdb/go-valprint.c insight-7.12.50.20170416.new/gdb/go-valprint.c +--- insight-7.12.50.20170416.orig/gdb/go-valprint.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/go-valprint.c 2017-04-16 12:29:51.456070373 +0100 +@@ -86,7 +86,7 @@ print_go_string (struct type *type, + /* Implements the la_val_print routine for language Go. */ + + void +-go_val_print (struct type *type, int embedded_offset, ++go_val_print (struct type *type, LONGEST embedded_offset, + CORE_ADDR address, struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/i386-tdep.c insight-7.12.50.20170416.new/gdb/i386-tdep.c +--- insight-7.12.50.20170416.orig/gdb/i386-tdep.c 2017-04-16 12:29:02.714616978 +0100 ++++ insight-7.12.50.20170416.new/gdb/i386-tdep.c 2017-04-16 12:29:51.477070568 +0100 +@@ -8180,7 +8180,7 @@ i386_fast_tracepoint_valid_at (struct gd + + const struct floatformat ** + i386_floatformat_for_type (struct gdbarch *gdbarch, +- const char *name, int len) ++ const char *name, LONGEST len) + { + if (len == 128 && name) + if (strcmp (name, "__float128") == 0 +diff -Naurp insight-7.12.50.20170416.orig/gdb/language.c insight-7.12.50.20170416.new/gdb/language.c +--- insight-7.12.50.20170416.orig/gdb/language.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/language.c 2017-04-16 12:29:51.456070373 +0100 +@@ -753,7 +753,7 @@ unk_lang_printchar (int c, struct type * + + static void + unk_lang_printstr (struct ui_file *stream, struct type *type, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) + { +@@ -772,7 +772,7 @@ unk_lang_print_type (struct type *type, + + static void + unk_lang_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/language.h insight-7.12.50.20170416.new/gdb/language.h +--- insight-7.12.50.20170416.orig/gdb/language.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/language.h 2017-04-16 12:29:51.457070382 +0100 +@@ -197,7 +197,7 @@ struct language_defn + struct ui_file * stream); + + void (*la_printstr) (struct ui_file * stream, struct type *elttype, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *encoding, int force_ellipses, + const struct value_print_options *); + +@@ -235,7 +235,7 @@ struct language_defn + printing. */ + + void (*la_val_print) (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options); +diff -Naurp insight-7.12.50.20170416.orig/gdb/m2-lang.c insight-7.12.50.20170416.new/gdb/m2-lang.c +--- insight-7.12.50.20170416.orig/gdb/m2-lang.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/m2-lang.c 2017-04-16 12:29:51.457070382 +0100 +@@ -104,10 +104,10 @@ m2_printchar (int c, struct type *type, + + static void + m2_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, +- unsigned int length, const char *encoding, int force_ellipses, ++ ULONGEST length, const char *encoding, int force_ellipses, + const struct value_print_options *options) + { +- unsigned int i; ++ ULONGEST i; + unsigned int things_printed = 0; + int in_quotes = 0; + int need_comma = 0; +@@ -122,9 +122,9 @@ m2_printstr (struct ui_file *stream, str + { + /* Position of the character we are examining + to see whether it is repeated. */ +- unsigned int rep1; ++ ULONGEST rep1; + /* Number of repetitions we have detected so far. */ +- unsigned int reps; ++ ULONGEST reps; + + QUIT; + +@@ -150,7 +150,7 @@ m2_printstr (struct ui_file *stream, str + in_quotes = 0; + } + m2_printchar (string[i], type, stream); +- fprintf_filtered (stream, " ", reps); ++ fprintf_filtered (stream, " ", pulongest (reps)); + i = rep1 - 1; + things_printed += options->repeat_count_threshold; + need_comma = 1; +diff -Naurp insight-7.12.50.20170416.orig/gdb/m2-lang.h insight-7.12.50.20170416.new/gdb/m2-lang.h +--- insight-7.12.50.20170416.orig/gdb/m2-lang.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/m2-lang.h 2017-04-16 12:29:51.457070382 +0100 +@@ -34,7 +34,7 @@ extern void m2_print_typedef (struct typ + extern int m2_is_long_set (struct type *type); + extern int m2_is_unbounded_array (struct type *type); + +-extern void m2_val_print (struct type *, int, CORE_ADDR, ++extern void m2_val_print (struct type *, LONGEST, CORE_ADDR, + struct ui_file *, int, + struct value *, + const struct value_print_options *); +diff -Naurp insight-7.12.50.20170416.orig/gdb/m2-typeprint.c insight-7.12.50.20170416.new/gdb/m2-typeprint.c +--- insight-7.12.50.20170416.orig/gdb/m2-typeprint.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/m2-typeprint.c 2017-04-16 12:29:51.457070382 +0100 +@@ -234,9 +234,12 @@ static void m2_array (struct type *type, + m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1); + } + else +- fprintf_filtered (stream, "%d", +- (TYPE_LENGTH (type) +- / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))); ++ { ++ ULONGEST val = (TYPE_LENGTH (type) ++ / TYPE_LENGTH (TYPE_TARGET_TYPE (type))); ++ ++ fprintf_filtered (stream, "%s", pulongest (val)); ++ } + } + fprintf_filtered (stream, "] OF "); + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); +diff -Naurp insight-7.12.50.20170416.orig/gdb/m2-valprint.c insight-7.12.50.20170416.new/gdb/m2-valprint.c +--- insight-7.12.50.20170416.orig/gdb/m2-valprint.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/m2-valprint.c 2017-04-16 12:29:51.457070382 +0100 +@@ -35,7 +35,7 @@ static int print_unpacked_pointer (struc + struct ui_file *stream); + static void + m2_print_array_contents (struct type *type, const gdb_byte *valaddr, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options, +@@ -67,7 +67,7 @@ get_long_set_bounds (struct type *type, + + static void + m2_print_long_set (struct type *type, const gdb_byte *valaddr, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream) + { + int empty_set = 1; +@@ -158,7 +158,7 @@ m2_print_long_set (struct type *type, co + + static void + m2_print_unbounded_array (struct type *type, const gdb_byte *valaddr, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + const struct value_print_options *options) + { +@@ -260,7 +260,7 @@ print_variable_at_address (struct type * + + static void + m2_print_array_contents (struct type *type, const gdb_byte *valaddr, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options, +@@ -308,13 +308,13 @@ static const struct generic_val_print_de + function; they are identical. */ + + void +-m2_val_print (struct type *type, int embedded_offset, ++m2_val_print (struct type *type, LONGEST embedded_offset, + CORE_ADDR address, struct ui_file *stream, int recurse, + struct value *original_value, + const struct value_print_options *options) + { + struct gdbarch *gdbarch = get_type_arch (type); +- unsigned len; ++ ULONGEST len; + struct type *elttype; + CORE_ADDR addr; + const gdb_byte *valaddr = value_contents_for_printing (original_value); +@@ -340,7 +340,7 @@ m2_val_print (struct type *type, int emb + elements up to it. */ + if (options->stop_print_at_null) + { +- unsigned int temp_len; ++ ULONGEST temp_len; + + /* Look for a NULL char. */ + for (temp_len = 0; +@@ -416,7 +416,7 @@ m2_val_print (struct type *type, int emb + { + struct type *range = elttype; + LONGEST low_bound, high_bound; +- int i; ++ LONGEST i; + int need_comma = 0; + + fputs_filtered ("{", stream); +diff -Naurp insight-7.12.50.20170416.orig/gdb/memrange.c insight-7.12.50.20170416.new/gdb/memrange.c +--- insight-7.12.50.20170416.orig/gdb/memrange.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/memrange.c 2017-04-16 12:29:51.457070382 +0100 +@@ -22,8 +22,8 @@ + #include + + int +-mem_ranges_overlap (CORE_ADDR start1, int len1, +- CORE_ADDR start2, int len2) ++mem_ranges_overlap (CORE_ADDR start1, LONGEST len1, ++ CORE_ADDR start2, LONGEST len2) + { + ULONGEST h, l; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/memrange.h insight-7.12.50.20170416.new/gdb/memrange.h +--- insight-7.12.50.20170416.orig/gdb/memrange.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/memrange.h 2017-04-16 12:29:51.458070391 +0100 +@@ -30,7 +30,7 @@ struct mem_range + CORE_ADDR start; + + /* Length of the range. */ +- int length; ++ LONGEST length; + }; + + typedef struct mem_range mem_range_s; +@@ -40,8 +40,8 @@ DEF_VEC_O(mem_range_s); + /* Returns true if the ranges defined by [start1, start1+len1) and + [start2, start2+len2) overlap. */ + +-extern int mem_ranges_overlap (CORE_ADDR start1, int len1, +- CORE_ADDR start2, int len2); ++extern int mem_ranges_overlap (CORE_ADDR start1, LONGEST len1, ++ CORE_ADDR start2, LONGEST len2); + + /* Returns true if ADDR is in RANGE. */ + +diff -Naurp insight-7.12.50.20170416.orig/gdb/mips-linux-nat.c insight-7.12.50.20170416.new/gdb/mips-linux-nat.c +--- insight-7.12.50.20170416.orig/gdb/mips-linux-nat.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/mips-linux-nat.c 2017-04-16 12:29:51.458070391 +0100 +@@ -584,7 +584,7 @@ mips_linux_stopped_data_address (struct + + static int + mips_linux_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + struct pt_watch_regs dummy_regs; + int i; +diff -Naurp insight-7.12.50.20170416.orig/gdb/nat/x86-dregs.c insight-7.12.50.20170416.new/gdb/nat/x86-dregs.c +--- insight-7.12.50.20170416.orig/gdb/nat/x86-dregs.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/nat/x86-dregs.c 2017-04-16 12:29:51.473070531 +0100 +@@ -384,7 +384,7 @@ x86_remove_aligned_watchpoint (struct x8 + + static int + x86_handle_nonaligned_watchpoint (struct x86_debug_reg_state *state, +- x86_wp_op_t what, CORE_ADDR addr, int len, ++ x86_wp_op_t what, CORE_ADDR addr, LONGEST len, + enum target_hw_bp_type type) + { + int retval = 0; +@@ -552,7 +552,7 @@ x86_dr_remove_watchpoint (struct x86_deb + + int + x86_dr_region_ok_for_watchpoint (struct x86_debug_reg_state *state, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + int nregs; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/nat/x86-dregs.h insight-7.12.50.20170416.new/gdb/nat/x86-dregs.h +--- insight-7.12.50.20170416.orig/gdb/nat/x86-dregs.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/nat/x86-dregs.h 2017-04-16 12:29:51.473070531 +0100 +@@ -116,7 +116,7 @@ extern int x86_dr_remove_watchpoint (str + /* Return non-zero if we can watch a memory region that starts at + address ADDR and whose length is LEN bytes. */ + extern int x86_dr_region_ok_for_watchpoint (struct x86_debug_reg_state *state, +- CORE_ADDR addr, int len); ++ CORE_ADDR addr, LONGEST len); + + /* If the inferior has some break/watchpoint that triggered, set the + address associated with that break/watchpoint and return true. +diff -Naurp insight-7.12.50.20170416.orig/gdb/opencl-lang.c insight-7.12.50.20170416.new/gdb/opencl-lang.c +--- insight-7.12.50.20170416.orig/gdb/opencl-lang.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/opencl-lang.c 2017-04-16 12:29:51.458070391 +0100 +@@ -78,11 +78,11 @@ builtin_opencl_type (struct gdbarch *gdb + + static struct type * + lookup_opencl_vector_type (struct gdbarch *gdbarch, enum type_code code, +- unsigned int el_length, unsigned int flag_unsigned, ++ ULONGEST el_length, unsigned int flag_unsigned, + int n) + { + int i; +- unsigned int length; ++ ULONGEST length; + struct type *type = NULL; + struct type **types = builtin_opencl_type (gdbarch); + +@@ -174,7 +174,7 @@ lval_func_read (struct value *v) + struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val))); + LONGEST offset = value_offset (v); + LONGEST elsize = TYPE_LENGTH (eltype); +- int n, i, j = 0; ++ LONGEST n, i, j = 0; + LONGEST lowb = 0; + LONGEST highb = 0; + +@@ -203,7 +203,7 @@ lval_func_write (struct value *v, struct + struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val))); + LONGEST offset = value_offset (v); + LONGEST elsize = TYPE_LENGTH (eltype); +- int n, i, j = 0; ++ LONGEST n, i, j = 0; + LONGEST lowb = 0; + LONGEST highb = 0; + +@@ -243,17 +243,17 @@ lval_func_write (struct value *v, struct + + static int + lval_func_check_synthetic_pointer (const struct value *v, +- LONGEST offset, int length) ++ LONGEST offset, LONGEST length) + { + struct lval_closure *c = (struct lval_closure *) value_computed_closure (v); + /* Size of the target type in bits. */ +- int elsize = ++ LONGEST elsize = + TYPE_LENGTH (TYPE_TARGET_TYPE (check_typedef (value_type (c->val)))) * 8; +- int startrest = offset % elsize; +- int start = offset / elsize; +- int endrest = (offset + length) % elsize; +- int end = (offset + length) / elsize; +- int i; ++ LONGEST startrest = offset % elsize; ++ LONGEST start = offset / elsize; ++ LONGEST endrest = (offset + length) % elsize; ++ LONGEST end = (offset + length) / elsize; ++ LONGEST i; + + if (endrest) + end++; +@@ -263,8 +263,8 @@ lval_func_check_synthetic_pointer (const + + for (i = start; i < end; i++) + { +- int comp_offset = (i == start) ? startrest : 0; +- int comp_length = (i == end) ? endrest : elsize; ++ LONGEST comp_offset = (i == start) ? startrest : 0; ++ LONGEST comp_length = (i == end) ? endrest : elsize; + + if (!value_bits_synthetic_pointer (c->val, + c->indices[i] * elsize + comp_offset, +diff -Naurp insight-7.12.50.20170416.orig/gdb/p-lang.c insight-7.12.50.20170416.new/gdb/p-lang.c +--- insight-7.12.50.20170416.orig/gdb/p-lang.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/p-lang.c 2017-04-16 12:29:51.458070391 +0100 +@@ -95,8 +95,8 @@ pascal_main_name (void) + are not multiple of TARGET_CHAR_BIT then the results are wrong + but this does not happen for Free Pascal nor for GPC. */ + int +-is_pascal_string_type (struct type *type,int *length_pos, +- int *length_size, int *string_pos, ++is_pascal_string_type (struct type *type, LONGEST *length_pos, ++ LONGEST *length_size, LONGEST *string_pos, + struct type **char_type, + const char **arrayname) + { +@@ -216,12 +216,12 @@ pascal_printchar (int c, struct type *ty + + void + pascal_printstr (struct ui_file *stream, struct type *type, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) + { + enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); +- unsigned int i; ++ ULONGEST i; + unsigned int things_printed = 0; + int in_quotes = 0; + int need_comma = 0; +@@ -249,9 +249,9 @@ pascal_printstr (struct ui_file *stream, + { + /* Position of the character we are examining + to see whether it is repeated. */ +- unsigned int rep1; ++ ULONGEST rep1; + /* Number of repetitions we have detected so far. */ +- unsigned int reps; ++ ULONGEST reps; + unsigned long int current_char; + + QUIT; +@@ -283,7 +283,7 @@ pascal_printstr (struct ui_file *stream, + in_quotes = 0; + } + pascal_printchar (current_char, type, stream); +- fprintf_filtered (stream, " ", reps); ++ fprintf_filtered (stream, " ", pulongest (reps)); + i = rep1 - 1; + things_printed += options->repeat_count_threshold; + need_comma = 1; +diff -Naurp insight-7.12.50.20170416.orig/gdb/p-lang.h insight-7.12.50.20170416.new/gdb/p-lang.h +--- insight-7.12.50.20170416.orig/gdb/p-lang.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/p-lang.h 2017-04-16 12:29:51.458070391 +0100 +@@ -36,7 +36,7 @@ extern void pascal_print_type (struct ty + extern void pascal_print_typedef (struct type *, struct symbol *, + struct ui_file *); + +-extern void pascal_val_print (struct type *, int, ++extern void pascal_val_print (struct type *, LONGEST, + CORE_ADDR, struct ui_file *, int, + struct value *, + const struct value_print_options *); +@@ -50,13 +50,13 @@ extern void pascal_type_print_method_arg + /* These are in p-lang.c: */ + + extern int +- is_pascal_string_type (struct type *, int *, int *, int *, ++ is_pascal_string_type (struct type *, LONGEST *, LONGEST *, LONGEST *, + struct type **, const char **); + + extern void pascal_printchar (int, struct type *, struct ui_file *); + + extern void pascal_printstr (struct ui_file *, struct type *, const gdb_byte *, +- unsigned int, const char *, int, ++ ULONGEST, const char *, int, + const struct value_print_options *); + + extern struct type **const (pascal_builtin_types[]); +diff -Naurp insight-7.12.50.20170416.orig/gdb/ppc-linux-nat.c insight-7.12.50.20170416.new/gdb/ppc-linux-nat.c +--- insight-7.12.50.20170416.orig/gdb/ppc-linux-nat.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ppc-linux-nat.c 2017-04-16 12:29:51.459070401 +0100 +@@ -1445,7 +1445,7 @@ ppc_linux_can_use_hw_breakpoint (struct + + static int + ppc_linux_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + /* Handle sub-8-byte quantities. */ + if (len <= 0) +diff -Naurp insight-7.12.50.20170416.orig/gdb/ppc-linux-tdep.c insight-7.12.50.20170416.new/gdb/ppc-linux-tdep.c +--- insight-7.12.50.20170416.orig/gdb/ppc-linux-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ppc-linux-tdep.c 2017-04-16 12:29:51.478070577 +0100 +@@ -1632,7 +1632,7 @@ ppc_init_linux_record_tdep (struct linux + + const struct floatformat ** + ppc_floatformat_for_type (struct gdbarch *gdbarch, +- const char *name, int len) ++ const char *name, LONGEST len) + { + if (len == 128 && name) + if (strcmp (name, "__float128") == 0 +diff -Naurp insight-7.12.50.20170416.orig/gdb/printcmd.c insight-7.12.50.20170416.new/gdb/printcmd.c +--- insight-7.12.50.20170416.orig/gdb/printcmd.c 2017-04-16 12:29:02.709616932 +0100 ++++ insight-7.12.50.20170416.new/gdb/printcmd.c 2017-04-16 12:29:51.460070410 +0100 +@@ -280,7 +280,7 @@ print_formatted (struct value *val, int + struct ui_file *stream) + { + struct type *type = check_typedef (value_type (val)); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + if (VALUE_LVAL (val) == lval_memory) + next_address = value_address (val) + len; +@@ -357,7 +357,7 @@ print_scalar_formatted (const gdb_byte * + { + struct gdbarch *gdbarch = get_type_arch (type); + LONGEST val_long = 0; +- unsigned int len = TYPE_LENGTH (type); ++ ULONGEST len = TYPE_LENGTH (type); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + + /* String printing should go through val_print_scalar_formatted. */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/procfs.c insight-7.12.50.20170416.new/gdb/procfs.c +--- insight-7.12.50.20170416.orig/gdb/procfs.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/procfs.c 2017-04-16 12:29:51.461070419 +0100 +@@ -4864,7 +4864,7 @@ procfs_remove_watchpoint (struct target_ + + static int + procfs_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + /* The man page for proc(4) on Solaris 2.6 and up says that the + system can support "thousands" of hardware watchpoints, but gives +diff -Naurp insight-7.12.50.20170416.orig/gdb/p-valprint.c insight-7.12.50.20170416.new/gdb/p-valprint.c +--- insight-7.12.50.20170416.orig/gdb/p-valprint.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/p-valprint.c 2017-04-16 12:29:51.459070401 +0100 +@@ -59,7 +59,7 @@ static const struct generic_val_print_de + + void + pascal_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *original_value, + const struct value_print_options *options) +@@ -70,8 +70,8 @@ pascal_val_print (struct type *type, + unsigned len; + LONGEST low_bound, high_bound; + struct type *elttype; +- unsigned eltlen; +- int length_pos, length_size, string_pos; ++ ULONGEST eltlen; ++ LONGEST length_pos, length_size, string_pos; + struct type *char_type; + CORE_ADDR addr; + int want_space = 0; +diff -Naurp insight-7.12.50.20170416.orig/gdb/regcache.c insight-7.12.50.20170416.new/gdb/regcache.c +--- insight-7.12.50.20170416.orig/gdb/regcache.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/regcache.c 2017-04-16 12:29:51.461070419 +0100 +@@ -988,7 +988,7 @@ typedef void (regcache_write_ftype) (str + + static enum register_status + regcache_xfer_part (struct regcache *regcache, int regnum, +- int offset, int len, void *in, const void *out, ++ LONGEST offset, LONGEST len, void *in, const void *out, + enum register_status (*read) (struct regcache *regcache, + int regnum, + gdb_byte *buf), +@@ -1033,7 +1033,7 @@ regcache_xfer_part (struct regcache *reg + + enum register_status + regcache_raw_read_part (struct regcache *regcache, int regnum, +- int offset, int len, gdb_byte *buf) ++ int offset, LONGEST len, gdb_byte *buf) + { + struct regcache_descr *descr = regcache->descr; + +@@ -1044,7 +1044,7 @@ regcache_raw_read_part (struct regcache + + void + regcache_raw_write_part (struct regcache *regcache, int regnum, +- int offset, int len, const gdb_byte *buf) ++ int offset, LONGEST len, const gdb_byte *buf) + { + struct regcache_descr *descr = regcache->descr; + +@@ -1055,7 +1055,7 @@ regcache_raw_write_part (struct regcache + + enum register_status + regcache_cooked_read_part (struct regcache *regcache, int regnum, +- int offset, int len, gdb_byte *buf) ++ LONGEST offset, LONGEST len, gdb_byte *buf) + { + struct regcache_descr *descr = regcache->descr; + +@@ -1066,7 +1066,7 @@ regcache_cooked_read_part (struct regcac + + void + regcache_cooked_write_part (struct regcache *regcache, int regnum, +- int offset, int len, const gdb_byte *buf) ++ LONGEST offset, LONGEST len, const gdb_byte *buf) + { + struct regcache_descr *descr = regcache->descr; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/regcache.h insight-7.12.50.20170416.new/gdb/regcache.h +--- insight-7.12.50.20170416.orig/gdb/regcache.h 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/regcache.h 2017-04-16 12:29:51.462070429 +0100 +@@ -94,9 +94,9 @@ extern void regcache_raw_set_cached_valu + + extern enum register_status + regcache_raw_read_part (struct regcache *regcache, int regnum, +- int offset, int len, gdb_byte *buf); ++ int offset, LONGEST len, gdb_byte *buf); + void regcache_raw_write_part (struct regcache *regcache, int regnum, +- int offset, int len, const gdb_byte *buf); ++ int offset, LONGEST len, const gdb_byte *buf); + + void regcache_invalidate (struct regcache *regcache, int regnum); + +@@ -133,10 +133,11 @@ extern void regcache_cooked_write_unsign + write style operations. */ + + enum register_status regcache_cooked_read_part (struct regcache *regcache, +- int regnum, int offset, +- int len, gdb_byte *buf); ++ int regnum, LONGEST offset, ++ LONGEST len, gdb_byte *buf); + void regcache_cooked_write_part (struct regcache *regcache, int regnum, +- int offset, int len, const gdb_byte *buf); ++ LONGEST offset, LONGEST len, ++ const gdb_byte *buf); + + /* Special routines to read/write the PC. */ + +diff -Naurp insight-7.12.50.20170416.orig/gdb/remote.c insight-7.12.50.20170416.new/gdb/remote.c +--- insight-7.12.50.20170416.orig/gdb/remote.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/remote.c 2017-04-16 12:29:51.464070447 +0100 +@@ -9915,7 +9915,7 @@ int remote_hw_breakpoint_limit = -1; + + static int + remote_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + if (remote_hw_watchpoint_length_limit == 0) + return 0; +diff -Naurp insight-7.12.50.20170416.orig/gdb/rust-lang.c insight-7.12.50.20170416.new/gdb/rust-lang.c +--- insight-7.12.50.20170416.orig/gdb/rust-lang.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/rust-lang.c 2017-04-16 12:29:51.473070531 +0100 +@@ -439,7 +439,7 @@ rust_printchar (int c, struct type *type + + static void + rust_printstr (struct ui_file *stream, struct type *type, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *user_encoding, int force_ellipses, + const struct value_print_options *options) + { +@@ -563,7 +563,7 @@ static const struct generic_val_print_de + /* la_val_print implementation for Rust. */ + + static void +-rust_val_print (struct type *type, int embedded_offset, ++rust_val_print (struct type *type, LONGEST embedded_offset, + CORE_ADDR address, struct ui_file *stream, int recurse, + struct value *val, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/s390-linux-nat.c insight-7.12.50.20170416.new/gdb/s390-linux-nat.c +--- insight-7.12.50.20170416.orig/gdb/s390-linux-nat.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/s390-linux-nat.c 2017-04-16 12:29:51.471070512 +0100 +@@ -900,7 +900,7 @@ s390_remove_hw_breakpoint (struct target + + static int + s390_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int cnt) ++ CORE_ADDR addr, LONGEST cnt) + { + return 1; + } +diff -Naurp insight-7.12.50.20170416.orig/gdb/spu-multiarch.c insight-7.12.50.20170416.new/gdb/spu-multiarch.c +--- insight-7.12.50.20170416.orig/gdb/spu-multiarch.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/spu-multiarch.c 2017-04-16 12:29:51.464070447 +0100 +@@ -127,7 +127,7 @@ spu_thread_architecture (struct target_o + /* Override the to_region_ok_for_hw_watchpoint routine. */ + static int + spu_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + struct target_ops *ops_beneath = find_target_beneath (self); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/stack.c insight-7.12.50.20170416.new/gdb/stack.c +--- insight-7.12.50.20170416.orig/gdb/stack.c 2017-03-04 04:09:18.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/stack.c 2017-04-16 12:29:51.465070457 +0100 +@@ -189,7 +189,7 @@ print_stack_frame (struct frame_info *fr + argument (not just the first nameless argument). */ + + static void +-print_frame_nameless_args (struct frame_info *frame, long start, int num, ++print_frame_nameless_args (struct frame_info *frame, LONGEST start, int num, + int first, struct ui_file *stream) + { + struct gdbarch *gdbarch = get_frame_arch (frame); +@@ -546,7 +546,7 @@ print_frame_args (struct symbol *func, s + /* Offset of next stack argument beyond the one we have seen that is + at the highest offset, or -1 if we haven't come to a stack + argument yet. */ +- long highest_offset = -1; ++ LONGEST highest_offset = -1; + /* Number of ints of arguments that we have printed so far. */ + int args_printed = 0; + /* True if we should print arguments, false otherwise. */ +@@ -575,8 +575,8 @@ print_frame_args (struct symbol *func, s + case LOC_ARG: + case LOC_REF_ARG: + { +- long current_offset = SYMBOL_VALUE (sym); +- int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym)); ++ LONGEST current_offset = SYMBOL_VALUE (sym); ++ LONGEST arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym)); + + /* Compute address of next argument by adding the size of + this argument and rounding to an int boundary. */ +@@ -711,7 +711,7 @@ print_frame_args (struct symbol *func, s + enough about the stack to find them. */ + if (num != -1) + { +- long start; ++ LONGEST start; + + if (highest_offset == -1) + start = gdbarch_frame_args_skip (get_frame_arch (frame)); +diff -Naurp insight-7.12.50.20170416.orig/gdb/symmisc.c insight-7.12.50.20170416.new/gdb/symmisc.c +--- insight-7.12.50.20170416.orig/gdb/symmisc.c 2017-03-04 04:09:18.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/symmisc.c 2017-04-16 12:29:51.465070457 +0100 +@@ -604,11 +604,11 @@ print_symbol (void *args) + + case LOC_CONST_BYTES: + { +- unsigned i; ++ ULONGEST i; + struct type *type = check_typedef (SYMBOL_TYPE (symbol)); + +- fprintf_filtered (outfile, "const %u hex bytes:", +- TYPE_LENGTH (type)); ++ fprintf_filtered (outfile, "const %s hex bytes:", ++ pulongest (TYPE_LENGTH (type))); + for (i = 0; i < TYPE_LENGTH (type); i++) + fprintf_filtered (outfile, " %02x", + (unsigned) SYMBOL_VALUE_BYTES (symbol)[i]); +diff -Naurp insight-7.12.50.20170416.orig/gdb/target.c insight-7.12.50.20170416.new/gdb/target.c +--- insight-7.12.50.20170416.orig/gdb/target.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/target.c 2017-04-16 12:29:51.465070457 +0100 +@@ -57,7 +57,7 @@ static int default_watchpoint_addr_withi + CORE_ADDR, CORE_ADDR, int); + + static int default_region_ok_for_hw_watchpoint (struct target_ops *, +- CORE_ADDR, int); ++ CORE_ADDR, LONGEST); + + static void default_rcmd (struct target_ops *, const char *, struct ui_file *); + +@@ -3228,7 +3228,7 @@ target_fileio_read_stralloc (struct infe + + static int + default_region_ok_for_hw_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + return (len <= gdbarch_ptr_bit (target_gdbarch ()) / TARGET_CHAR_BIT); + } +diff -Naurp insight-7.12.50.20170416.orig/gdb/target-delegates.c insight-7.12.50.20170416.new/gdb/target-delegates.c +--- insight-7.12.50.20170416.orig/gdb/target-delegates.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/target-delegates.c 2017-04-16 12:29:51.472070521 +0100 +@@ -760,14 +760,14 @@ debug_watchpoint_addr_within_range (stru + } + + static int +-delegate_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, int arg2) ++delegate_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, LONGEST arg2) + { + self = self->beneath; + return self->to_region_ok_for_hw_watchpoint (self, arg1, arg2); + } + + static int +-debug_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, int arg2) ++debug_region_ok_for_hw_watchpoint (struct target_ops *self, CORE_ADDR arg1, LONGEST arg2) + { + int result; + fprintf_unfiltered (gdb_stdlog, "-> %s->to_region_ok_for_hw_watchpoint (...)\n", debug_target.to_shortname); +@@ -777,7 +777,7 @@ debug_region_ok_for_hw_watchpoint (struc + fputs_unfiltered (", ", gdb_stdlog); + target_debug_print_CORE_ADDR (arg1); + fputs_unfiltered (", ", gdb_stdlog); +- target_debug_print_int (arg2); ++ target_debug_print_LONGEST (arg2); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_int (result); + fputs_unfiltered ("\n", gdb_stdlog); +diff -Naurp insight-7.12.50.20170416.orig/gdb/target.h insight-7.12.50.20170416.new/gdb/target.h +--- insight-7.12.50.20170416.orig/gdb/target.h 2017-04-16 12:29:02.782617611 +0100 ++++ insight-7.12.50.20170416.new/gdb/target.h 2017-04-16 12:29:51.466070466 +0100 +@@ -555,7 +555,7 @@ struct target_ops + /* Documentation of this routine is provided with the corresponding + target_* macro. */ + int (*to_region_ok_for_hw_watchpoint) (struct target_ops *, +- CORE_ADDR, int) ++ CORE_ADDR, LONGEST) + TARGET_DEFAULT_FUNC (default_region_ok_for_hw_watchpoint); + + int (*to_can_accel_watchpoint_condition) (struct target_ops *, +diff -Naurp insight-7.12.50.20170416.orig/gdb/tracepoint.c insight-7.12.50.20170416.new/gdb/tracepoint.c +--- insight-7.12.50.20170416.orig/gdb/tracepoint.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/tracepoint.c 2017-04-16 12:29:51.467070475 +0100 +@@ -904,10 +904,10 @@ collection_list::add_register (unsigned + void + collection_list::add_memrange (struct gdbarch *gdbarch, + int type, bfd_signed_vma base, +- unsigned long len) ++ ULONGEST len) + { + if (info_verbose) +- printf_filtered ("(%d,%s,%ld)\n", type, paddress (gdbarch, base), len); ++ printf_filtered ("(%d,%s,%s)\n", type, paddress (gdbarch, base), pulongest (len)); + + /* type: memrange_absolute == memory, other n == basereg */ + /* base: addr if memory, offset if reg relative. */ +@@ -927,7 +927,7 @@ collection_list::collect_symbol (struct + CORE_ADDR scope, + int trace_string) + { +- unsigned long len; ++ ULONGEST len; + unsigned int reg; + bfd_signed_vma offset; + int treat_as_expr = 0; +@@ -948,8 +948,8 @@ collection_list::collect_symbol (struct + offset = SYMBOL_VALUE_ADDRESS (sym); + if (info_verbose) + { +- printf_filtered ("LOC_STATIC %s: collect %ld bytes at %s.\n", +- SYMBOL_PRINT_NAME (sym), len, ++ printf_filtered ("LOC_STATIC %s: collect %s bytes at %s.\n", ++ SYMBOL_PRINT_NAME (sym), pulongest (len), + paddress (gdbarch, offset)); + } + /* A struct may be a C++ class with static fields, go to general +@@ -981,9 +981,9 @@ collection_list::collect_symbol (struct + offset = frame_offset + SYMBOL_VALUE (sym); + if (info_verbose) + { +- printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s" ++ printf_filtered ("LOC_LOCAL %s: Collect %s bytes at offset %s" + " from frame ptr reg %d\n", +- SYMBOL_PRINT_NAME (sym), len, ++ SYMBOL_PRINT_NAME (sym), pulongest (len), + paddress (gdbarch, offset), reg); + } + add_memrange (gdbarch, reg, offset, len); +@@ -993,9 +993,9 @@ collection_list::collect_symbol (struct + offset = 0; + if (info_verbose) + { +- printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset %s" ++ printf_filtered ("LOC_REGPARM_ADDR %s: Collect %s bytes at offset %s" + " from reg %d\n", +- SYMBOL_PRINT_NAME (sym), len, ++ SYMBOL_PRINT_NAME (sym), pulongest (len), + paddress (gdbarch, offset), reg); + } + add_memrange (gdbarch, reg, offset, len); +@@ -1005,9 +1005,9 @@ collection_list::collect_symbol (struct + offset = frame_offset + SYMBOL_VALUE (sym); + if (info_verbose) + { +- printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s" ++ printf_filtered ("LOC_LOCAL %s: Collect %s bytes at offset %s" + " from frame ptr reg %d\n", +- SYMBOL_PRINT_NAME (sym), len, ++ SYMBOL_PRINT_NAME (sym), pulongest (len), + paddress (gdbarch, offset), reg); + } + add_memrange (gdbarch, reg, offset, len); +@@ -2585,7 +2585,8 @@ scope_info (char *args, int from_tty) + const char *symname; + char *save_args = args; + struct block_iterator iter; +- int j, count = 0; ++ int count = 0; ++ LONGEST j; + struct gdbarch *gdbarch; + int regno; + +@@ -2727,8 +2728,11 @@ scope_info (char *args, int from_tty) + } + } + if (SYMBOL_TYPE (sym)) +- printf_filtered (", length %d.\n", +- TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym)))); ++ { ++ ULONGEST len = TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym))); ++ ++ printf_filtered (", length %s.\n", pulongest (len)); ++ } + } + if (BLOCK_FUNCTION (block)) + break; +diff -Naurp insight-7.12.50.20170416.orig/gdb/tracepoint.h insight-7.12.50.20170416.new/gdb/tracepoint.h +--- insight-7.12.50.20170416.orig/gdb/tracepoint.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/tracepoint.h 2017-04-16 12:29:51.478070577 +0100 +@@ -254,7 +254,7 @@ public: + void add_register (unsigned int regno); + void add_memrange (struct gdbarch *gdbarch, + int type, bfd_signed_vma base, +- unsigned long len); ++ ULONGEST len); + void collect_symbol (struct symbol *sym, + struct gdbarch *gdbarch, + long frame_regno, long frame_offset, +diff -Naurp insight-7.12.50.20170416.orig/gdb/valarith.c insight-7.12.50.20170416.new/gdb/valarith.c +--- insight-7.12.50.20170416.orig/gdb/valarith.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/valarith.c 2017-04-16 12:29:51.467070475 +0100 +@@ -188,7 +188,7 @@ value_subscript (struct value *array, LO + to doubles, but no longer does. */ + + struct value * +-value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound) ++value_subscripted_rvalue (struct value *array, LONGEST index, LONGEST lowerbound) + { + struct type *array_type = check_typedef (value_type (array)); + struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); +@@ -659,7 +659,7 @@ value_concat (struct value *arg1, struct + struct value *inval1; + struct value *inval2; + struct value *outval = NULL; +- int inval1len, inval2len; ++ ssize_t inval1len, inval2len; + int count, idx; + char *ptr; + char inchar; +@@ -1512,7 +1512,7 @@ value_binop (struct value *arg1, struct + int + value_logical_not (struct value *arg1) + { +- int len; ++ LONGEST len; + const gdb_byte *p; + struct type *type1; + +@@ -1543,11 +1543,11 @@ value_logical_not (struct value *arg1) + static int + value_strcmp (struct value *arg1, struct value *arg2) + { +- int len1 = TYPE_LENGTH (value_type (arg1)); +- int len2 = TYPE_LENGTH (value_type (arg2)); ++ LONGEST len1 = TYPE_LENGTH (value_type (arg1)); ++ LONGEST len2 = TYPE_LENGTH (value_type (arg2)); + const gdb_byte *s1 = value_contents (arg1); + const gdb_byte *s2 = value_contents (arg2); +- int i, len = len1 < len2 ? len1 : len2; ++ LONGEST i, len = len1 < len2 ? len1 : len2; + + for (i = 0; i < len; i++) + { +diff -Naurp insight-7.12.50.20170416.orig/gdb/valops.c insight-7.12.50.20170416.new/gdb/valops.c +--- insight-7.12.50.20170416.orig/gdb/valops.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/valops.c 2017-04-16 12:29:51.468070484 +0100 +@@ -79,7 +79,7 @@ oload_classification classify_oload_matc + int, int); + + static struct value *value_struct_elt_for_reference (struct type *, +- int, struct type *, ++ LONGEST, struct type *, + const char *, + struct type *, + int, enum noside); +@@ -183,7 +183,7 @@ find_function_in_inferior (const char *n + space. */ + + struct value * +-value_allocate_space_in_inferior (int len) ++value_allocate_space_in_inferior (LONGEST len) + { + struct objfile *objf; + struct value *val = find_function_in_inferior ("malloc", &objf); +@@ -393,12 +393,12 @@ value_cast (struct type *type, struct va + if (code1 == TYPE_CODE_ARRAY) + { + struct type *element_type = TYPE_TARGET_TYPE (type); +- unsigned element_length = TYPE_LENGTH (check_typedef (element_type)); ++ ULONGEST element_length = TYPE_LENGTH (check_typedef (element_type)); + + if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) + { + struct type *range_type = TYPE_INDEX_TYPE (type); +- int val_length = TYPE_LENGTH (type2); ++ LONGEST val_length = TYPE_LENGTH (type2); + LONGEST low_bound, high_bound, new_length; + + if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) +@@ -1064,7 +1064,7 @@ value_assign (struct value *toval, struc + { + const gdb_byte *dest_buffer; + CORE_ADDR changed_addr; +- int changed_len; ++ LONGEST changed_len; + gdb_byte buffer[sizeof (LONGEST)]; + + if (value_bitsize (toval)) +@@ -3319,7 +3319,7 @@ compare_parameters (struct type *t1, str + the form "DOMAIN::NAME". */ + + static struct value * +-value_struct_elt_for_reference (struct type *domain, int offset, ++value_struct_elt_for_reference (struct type *domain, LONGEST offset, + struct type *curtype, const char *name, + struct type *intype, + int want_address, +@@ -3353,7 +3353,7 @@ value_struct_elt_for_reference (struct t + if (want_address) + return value_from_longest + (lookup_memberptr_type (TYPE_FIELD_TYPE (t, i), domain), +- offset + (LONGEST) (TYPE_FIELD_BITPOS (t, i) >> 3)); ++ offset + (TYPE_FIELD_BITPOS (t, i) >> 3)); + else if (noside != EVAL_NORMAL) + return allocate_value (TYPE_FIELD_TYPE (t, i)); + else +@@ -3521,7 +3521,7 @@ value_struct_elt_for_reference (struct t + for (i = TYPE_N_BASECLASSES (t) - 1; i >= 0; i--) + { + struct value *v; +- int base_offset; ++ LONGEST base_offset; + + if (BASETYPE_VIA_VIRTUAL (t, i)) + base_offset = 0; +@@ -3670,7 +3670,7 @@ value_rtti_indirect_type (struct value * + struct value * + value_full_object (struct value *argp, + struct type *rtype, +- int xfull, int xtop, ++ int xfull, LONGEST xtop, + int xusing_enc) + { + struct type *real_type; +diff -Naurp insight-7.12.50.20170416.orig/gdb/valprint.c insight-7.12.50.20170416.new/gdb/valprint.c +--- insight-7.12.50.20170416.orig/gdb/valprint.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/valprint.c 2017-04-16 12:29:51.469070494 +0100 +@@ -933,7 +933,7 @@ generic_val_print_complex (struct type * + + void + generic_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *original_value, + const struct value_print_options *options, +@@ -1879,7 +1879,7 @@ print_decimal_chars (struct ui_file *str + + void + print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr, +- unsigned len, enum bfd_endian byte_order) ++ ULONGEST len, enum bfd_endian byte_order) + { + const gdb_byte *p; + +@@ -2001,17 +2001,17 @@ val_print_array_elements (struct type *t + int recurse, + struct value *val, + const struct value_print_options *options, +- unsigned int i) ++ ULONGEST i) + { + unsigned int things_printed = 0; +- unsigned len; ++ ULONGEST len; + struct type *elttype, *index_type, *base_index_type; +- unsigned eltlen; ++ ULONGEST eltlen; + /* Position of the array element we are examining to see + whether it is repeated. */ +- unsigned int rep1; ++ ULONGEST rep1; + /* Number of repetitions we have detected so far. */ +- unsigned int reps; ++ ULONGEST reps; + LONGEST low_bound, high_bound; + LONGEST low_pos, high_pos; + +@@ -2101,7 +2101,7 @@ val_print_array_elements (struct type *t + address, stream, recurse + 1, val, options, + current_language); + annotate_elt_rep (reps); +- fprintf_filtered (stream, " ", reps); ++ fprintf_filtered (stream, " ", pulongest (reps)); + annotate_elt_rep_end (); + + i = rep1 - 1; +@@ -2753,7 +2753,7 @@ print_converted_chars_to_obstack (struct + + void + generic_printstr (struct ui_file *stream, struct type *type, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *encoding, int force_ellipses, + int quote_char, int c_style_terminator, + const struct value_print_options *options) +diff -Naurp insight-7.12.50.20170416.orig/gdb/valprint.h insight-7.12.50.20170416.new/gdb/valprint.h +--- insight-7.12.50.20170416.orig/gdb/valprint.h 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/valprint.h 2017-04-16 12:29:51.469070494 +0100 +@@ -119,7 +119,7 @@ extern void val_print_array_elements (st + CORE_ADDR, struct ui_file *, int, + struct value *, + const struct value_print_options *, +- unsigned int); ++ ULONGEST); + + extern void val_print_type_code_int (struct type *, const gdb_byte *, + struct ui_file *); +@@ -141,7 +141,7 @@ extern void print_decimal_chars (struct + unsigned int, enum bfd_endian); + + extern void print_hex_chars (struct ui_file *, const gdb_byte *, +- unsigned int, enum bfd_endian); ++ ULONGEST, enum bfd_endian); + + extern void print_char_chars (struct ui_file *, struct type *, + const gdb_byte *, unsigned int, enum bfd_endian); +@@ -194,7 +194,7 @@ struct generic_val_print_decorations + + + extern void generic_val_print (struct type *type, +- int embedded_offset, CORE_ADDR address, ++ LONGEST embedded_offset, CORE_ADDR address, + struct ui_file *stream, int recurse, + struct value *original_value, + const struct value_print_options *options, +@@ -204,7 +204,7 @@ extern void generic_emit_char (int c, st + int quoter, const char *encoding); + + extern void generic_printstr (struct ui_file *stream, struct type *type, +- const gdb_byte *string, unsigned int length, ++ const gdb_byte *string, ULONGEST length, + const char *encoding, int force_ellipses, + int quote_char, int c_style_terminator, + const struct value_print_options *options); +diff -Naurp insight-7.12.50.20170416.orig/gdb/value.c insight-7.12.50.20170416.new/gdb/value.c +--- insight-7.12.50.20170416.orig/gdb/value.c 2017-04-16 12:29:02.690616755 +0100 ++++ insight-7.12.50.20170416.new/gdb/value.c 2017-04-16 12:29:51.470070503 +0100 +@@ -367,7 +367,8 @@ value_bytes_available (const struct valu + } + + int +-value_bits_any_optimized_out (const struct value *value, int bit_offset, int bit_length) ++value_bits_any_optimized_out (const struct value *value, LONGEST bit_offset, ++ LONGEST bit_length) + { + gdb_assert (!value->lazy); + +@@ -813,9 +814,9 @@ find_first_range_overlap_and_match (stru + Return true if the available bits match. */ + + static int +-value_contents_bits_eq (const struct value *val1, int offset1, +- const struct value *val2, int offset2, +- int length) ++value_contents_bits_eq (const struct value *val1, LONGEST offset1, ++ const struct value *val2, LONGEST offset2, ++ LONGEST length) + { + /* Each array element corresponds to a ranges source (unavailable, + optimized out). '1' is for VAL1, '2' for VAL2. */ +@@ -1455,7 +1456,8 @@ value_optimized_out (struct value *value + the following LENGTH bytes. */ + + void +-mark_value_bytes_optimized_out (struct value *value, int offset, int length) ++mark_value_bytes_optimized_out (struct value *value, LONGEST offset, ++ LONGEST length) + { + mark_value_bits_optimized_out (value, + offset * TARGET_CHAR_BIT, +diff -Naurp insight-7.12.50.20170416.orig/gdb/value.h insight-7.12.50.20170416.new/gdb/value.h +--- insight-7.12.50.20170416.orig/gdb/value.h 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/value.h 2017-04-16 12:29:51.471070512 +0100 +@@ -246,7 +246,7 @@ struct lval_funcs + /* If non-NULL, this is used to determine whether the indicated bits + of VALUE are a synthetic pointer. */ + int (*check_synthetic_pointer) (const struct value *value, +- LONGEST offset, int length); ++ LONGEST offset, LONGEST length); + + /* Return a duplicate of VALUE's closure, for use in a new value. + This may simply return the same closure, if VALUE's is +@@ -377,7 +377,8 @@ extern int value_optimized_out (struct v + otherwise. */ + + extern int value_bits_any_optimized_out (const struct value *value, +- int bit_offset, int bit_length); ++ LONGEST bit_offset, ++ LONGEST bit_length); + + /* Like value_optimized_out, but return true iff the whole value is + optimized out. */ +@@ -387,7 +388,7 @@ extern int value_entirely_optimized_out + LENGTH bytes as optimized out. */ + + extern void mark_value_bytes_optimized_out (struct value *value, +- int offset, int length); ++ LONGEST offset, LONGEST length); + + /* Mark VALUE's content bits starting at OFFSET and extending for + LENGTH bits as optimized out. */ +@@ -820,12 +821,11 @@ extern struct value *value_primitive_fie + int fieldno, + struct type *arg_type); + +- + extern struct type *value_rtti_indirect_type (struct value *, int *, LONGEST *, + int *); + + extern struct value *value_full_object (struct value *, struct type *, int, +- int, int); ++ LONGEST, int); + + extern struct value *value_cast_pointers (struct type *, struct value *, int); + +@@ -1112,10 +1112,11 @@ extern struct value *value_literal_compl + extern struct value *find_function_in_inferior (const char *, + struct objfile **); + +-extern struct value *value_allocate_space_in_inferior (int); ++extern struct value *value_allocate_space_in_inferior (LONGEST); + + extern struct value *value_subscripted_rvalue (struct value *array, +- LONGEST index, int lowerbound); ++ LONGEST index, ++ LONGEST lowerbound); + + /* User function handler. */ + +diff -Naurp insight-7.12.50.20170416.orig/gdb/x86-nat.c insight-7.12.50.20170416.new/gdb/x86-nat.c +--- insight-7.12.50.20170416.orig/gdb/x86-nat.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/x86-nat.c 2017-04-16 12:29:51.473070531 +0100 +@@ -174,7 +174,7 @@ x86_remove_watchpoint (struct target_ops + + static int + x86_region_ok_for_watchpoint (struct target_ops *self, +- CORE_ADDR addr, int len) ++ CORE_ADDR addr, LONGEST len) + { + struct x86_debug_reg_state *state + = x86_debug_reg_state (ptid_get_pid (inferior_ptid)); diff --git a/insight-7.12-gdb-rhbz795424-bitpos-23of25.patch b/insight-7.12-gdb-rhbz795424-bitpos-23of25.patch new file mode 100644 index 0000000..9f75cad --- /dev/null +++ b/insight-7.12-gdb-rhbz795424-bitpos-23of25.patch @@ -0,0 +1,1137 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/alpha-tdep.c insight-7.12.50.20170416.new/gdb/alpha-tdep.c +--- insight-7.12.50.20170416.orig/gdb/alpha-tdep.c 2017-04-16 12:45:38.999884453 +0100 ++++ insight-7.12.50.20170416.new/gdb/alpha-tdep.c 2017-04-16 12:46:32.449381642 +0100 +@@ -300,17 +300,17 @@ alpha_push_dummy_call (struct gdbarch *g + { + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int i; +- int accumulate_size = struct_return ? 8 : 0; ++ ssize_t accumulate_size = struct_return ? 8 : 0; + struct alpha_arg + { + const gdb_byte *contents; +- int len; +- int offset; ++ ssize_t len; ++ ssize_t offset; + }; + struct alpha_arg *alpha_args = XALLOCAVEC (struct alpha_arg, nargs); + struct alpha_arg *m_arg; + gdb_byte arg_reg_buffer[ALPHA_REGISTER_SIZE * ALPHA_NUM_ARG_REGS]; +- int required_arg_regs; ++ ssize_t required_arg_regs; + CORE_ADDR func_addr = find_function_addr (function, NULL); + + /* The ABI places the address of the called function in T12. */ +@@ -430,8 +430,8 @@ alpha_push_dummy_call (struct gdbarch *g + for (i = nargs; m_arg--, --i >= 0;) + { + const gdb_byte *contents = m_arg->contents; +- int offset = m_arg->offset; +- int len = m_arg->len; ++ ssize_t offset = m_arg->offset; ++ ssize_t len = m_arg->len; + + /* Copy the bytes destined for registers into arg_reg_buffer. */ + if (offset < sizeof(arg_reg_buffer)) +@@ -443,7 +443,7 @@ alpha_push_dummy_call (struct gdbarch *g + } + else + { +- int tlen = sizeof(arg_reg_buffer) - offset; ++ ssize_t tlen = sizeof(arg_reg_buffer) - offset; + memcpy (arg_reg_buffer + offset, contents, tlen); + offset += tlen; + contents += tlen; +diff -Naurp insight-7.12.50.20170416.orig/gdb/amd64-tdep.c insight-7.12.50.20170416.new/gdb/amd64-tdep.c +--- insight-7.12.50.20170416.orig/gdb/amd64-tdep.c 2017-04-16 12:45:38.685881532 +0100 ++++ insight-7.12.50.20170416.new/gdb/amd64-tdep.c 2017-04-16 12:46:32.450381651 +0100 +@@ -735,7 +735,7 @@ amd64_return_value (struct gdbarch *gdba + gdb_byte *readbuf, const gdb_byte *writebuf) + { + enum amd64_reg_class theclass[2]; +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + static int integer_regnum[] = { AMD64_RAX_REGNUM, AMD64_RDX_REGNUM }; + static int sse_regnum[] = { AMD64_XMM0_REGNUM, AMD64_XMM1_REGNUM }; + int integer_reg = 0; +@@ -852,10 +852,10 @@ amd64_return_value (struct gdbarch *gdba + gdb_assert (regnum != -1); + + if (readbuf) +- regcache_raw_read_part (regcache, regnum, offset, std::min (len, 8), ++ regcache_raw_read_part (regcache, regnum, offset, std::min (len, (LONGEST) 8), + readbuf + i * 8); + if (writebuf) +- regcache_raw_write_part (regcache, regnum, offset, std::min (len, 8), ++ regcache_raw_write_part (regcache, regnum, offset, std::min (len, (LONGEST) 8), + writebuf + i * 8); + } + +@@ -886,8 +886,8 @@ amd64_push_arguments (struct regcache *r + }; + struct value **stack_args = XALLOCAVEC (struct value *, nargs); + int num_stack_args = 0; +- int num_elements = 0; +- int element = 0; ++ LONGEST num_elements = 0; ++ LONGEST element = 0; + int integer_reg = 0; + int sse_reg = 0; + int i; +@@ -899,7 +899,7 @@ amd64_push_arguments (struct regcache *r + for (i = 0; i < nargs; i++) + { + struct type *type = value_type (args[i]); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + enum amd64_reg_class theclass[2]; + int needed_integer_regs = 0; + int needed_sse_regs = 0; +@@ -963,7 +963,7 @@ amd64_push_arguments (struct regcache *r + + gdb_assert (regnum != -1); + memset (buf, 0, sizeof buf); +- memcpy (buf, valbuf + j * 8, std::min (len, 8)); ++ memcpy (buf, valbuf + j * 8, std::min (len, (LONGEST) 8)); + regcache_raw_write_part (regcache, regnum, offset, 8, buf); + } + } +diff -Naurp insight-7.12.50.20170416.orig/gdb/amd64-windows-tdep.c insight-7.12.50.20170416.new/gdb/amd64-windows-tdep.c +--- insight-7.12.50.20170416.orig/gdb/amd64-windows-tdep.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/amd64-windows-tdep.c 2017-04-16 12:46:32.450381651 +0100 +@@ -290,7 +290,7 @@ amd64_windows_return_value (struct gdbar + struct type *type, struct regcache *regcache, + gdb_byte *readbuf, const gdb_byte *writebuf) + { +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + int regnum = -1; + + /* See if our value is returned through a register. If it is, then +diff -Naurp insight-7.12.50.20170416.orig/gdb/arm-tdep.c insight-7.12.50.20170416.new/gdb/arm-tdep.c +--- insight-7.12.50.20170416.orig/gdb/arm-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/arm-tdep.c 2017-04-16 12:46:32.453381679 +0100 +@@ -3492,7 +3492,7 @@ arm_vfp_cprc_reg_char (enum arm_vfp_cprc + array). Vector types are not currently supported, matching the + generic AAPCS support. */ + +-static int ++static LONGEST + arm_vfp_cprc_sub_candidate (struct type *t, + enum arm_vfp_cprc_base_type *base_type) + { +@@ -3575,7 +3575,7 @@ arm_vfp_cprc_sub_candidate (struct type + } + else + { +- int count; ++ LONGEST count; + unsigned unitlen; + + count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t), +@@ -3598,12 +3598,12 @@ arm_vfp_cprc_sub_candidate (struct type + + case TYPE_CODE_STRUCT: + { +- int count = 0; ++ LONGEST count = 0; + unsigned unitlen; + int i; + for (i = 0; i < TYPE_NFIELDS (t); i++) + { +- int sub_count = 0; ++ LONGEST sub_count = 0; + + if (!field_is_static (&TYPE_FIELD (t, i))) + sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), +@@ -3627,13 +3627,15 @@ arm_vfp_cprc_sub_candidate (struct type + + case TYPE_CODE_UNION: + { +- int count = 0; ++ LONGEST count = 0; + unsigned unitlen; + int i; + for (i = 0; i < TYPE_NFIELDS (t); i++) + { +- int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), +- base_type); ++ LONGEST sub_count; ++ ++ sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), ++ base_type); + if (sub_count == -1) + return -1; + count = (count > sub_count ? count : sub_count); +@@ -3669,7 +3671,7 @@ arm_vfp_call_candidate (struct type *t, + int *count) + { + enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN; +- int c = arm_vfp_cprc_sub_candidate (t, &b); ++ LONGEST c = arm_vfp_cprc_sub_candidate (t, &b); + if (c <= 0 || c > 4) + return 0; + *base_type = b; +@@ -3750,7 +3752,7 @@ arm_push_dummy_call (struct gdbarch *gdb + + for (argnum = 0; argnum < nargs; argnum++) + { +- int len; ++ LONGEST len; + struct type *arg_type; + struct type *target_type; + enum type_code typecode; +diff -Naurp insight-7.12.50.20170416.orig/gdb/avr-tdep.c insight-7.12.50.20170416.new/gdb/avr-tdep.c +--- insight-7.12.50.20170416.orig/gdb/avr-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/avr-tdep.c 2017-04-16 12:46:32.454381689 +0100 +@@ -1191,13 +1191,13 @@ avr_dummy_id (struct gdbarch *gdbarch, s + + struct stack_item + { +- int len; ++ ssize_t len; + struct stack_item *prev; + gdb_byte *data; + }; + + static struct stack_item * +-push_stack_item (struct stack_item *prev, const bfd_byte *contents, int len) ++push_stack_item (struct stack_item *prev, const bfd_byte *contents, ssize_t len) + { + struct stack_item *si; + si = XNEW (struct stack_item); +@@ -1285,12 +1285,12 @@ avr_push_dummy_call (struct gdbarch *gdb + + for (i = 0; i < nargs; i++) + { +- int last_regnum; +- int j; ++ ssize_t last_regnum; ++ ssize_t j; + struct value *arg = args[i]; + struct type *type = check_typedef (value_type (arg)); + const bfd_byte *contents = value_contents (arg); +- int len = TYPE_LENGTH (type); ++ ssize_t len = TYPE_LENGTH (type); + + /* Calculate the potential last register needed. + E.g. For length 2, registers regnum and regnum-1 (say 25 and 24) +diff -Naurp insight-7.12.50.20170416.orig/gdb/bfin-tdep.c insight-7.12.50.20170416.new/gdb/bfin-tdep.c +--- insight-7.12.50.20170416.orig/gdb/bfin-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/bfin-tdep.c 2017-04-16 12:46:32.455381698 +0100 +@@ -504,7 +504,7 @@ bfin_push_dummy_call (struct gdbarch *gd + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int i; + long reg_r0, reg_r1, reg_r2; +- int total_len = 0; ++ ssize_t total_len = 0; + + for (i = nargs - 1; i >= 0; i--) + { +@@ -526,7 +526,7 @@ bfin_push_dummy_call (struct gdbarch *gd + { + struct type *value_type = value_enclosing_type (args[i]); + struct type *arg_type = check_typedef (value_type); +- int container_len = (TYPE_LENGTH (value_type) + 3) & ~3; ++ ssize_t container_len = (TYPE_LENGTH (value_type) + 3) & ~3; + + sp -= container_len; + write_memory (sp, value_contents (args[i]), container_len); +diff -Naurp insight-7.12.50.20170416.orig/gdb/cris-tdep.c insight-7.12.50.20170416.new/gdb/cris-tdep.c +--- insight-7.12.50.20170416.orig/gdb/cris-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/cris-tdep.c 2017-04-16 12:46:32.457381717 +0100 +@@ -663,13 +663,13 @@ static CORE_ADDR cris_unwind_sp (struct + + struct stack_item + { +- int len; ++ ssize_t len; + struct stack_item *prev; + gdb_byte *data; + }; + + static struct stack_item * +-push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len) ++push_stack_item (struct stack_item *prev, const gdb_byte *contents, ssize_t len) + { + struct stack_item *si = XNEW (struct stack_item); + si->data = (gdb_byte *) xmalloc (len); +@@ -833,13 +833,13 @@ cris_push_dummy_call (struct gdbarch *gd + + for (argnum = 0; argnum < nargs; argnum++) + { +- int len; ++ ssize_t len; + const gdb_byte *val; +- int reg_demand; +- int i; ++ ssize_t reg_demand; ++ ssize_t i; + +- len = TYPE_LENGTH (value_type (args[argnum])); + val = value_contents (args[argnum]); ++ len = TYPE_LENGTH (value_type (args[argnum])); + + /* How may registers worth of storage do we need for this argument? */ + reg_demand = (len / 4) + (len % 4 != 0 ? 1 : 0); +diff -Naurp insight-7.12.50.20170416.orig/gdb/h8300-tdep.c insight-7.12.50.20170416.new/gdb/h8300-tdep.c +--- insight-7.12.50.20170416.orig/gdb/h8300-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/h8300-tdep.c 2017-04-16 12:46:32.457381717 +0100 +@@ -637,7 +637,7 @@ h8300_push_dummy_call (struct gdbarch *g + int struct_return, CORE_ADDR struct_addr) + { + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); +- int stack_alloc = 0, stack_offset = 0; ++ LONGEST stack_alloc = 0, stack_offset = 0; + int wordsize = BINWORD (gdbarch); + int reg = E_ARG0_REGNUM; + int argument; +@@ -664,11 +664,11 @@ h8300_push_dummy_call (struct gdbarch *g + { + struct cleanup *back_to; + struct type *type = value_type (args[argument]); +- int len = TYPE_LENGTH (type); ++ ssize_t len = TYPE_LENGTH (type); + char *contents = (char *) value_contents (args[argument]); + + /* Pad the argument appropriately. */ +- int padded_len = align_up (len, wordsize); ++ ssize_t padded_len = align_up (len, wordsize); + gdb_byte *padded = (gdb_byte *) xmalloc (padded_len); + back_to = make_cleanup (xfree, padded); + +@@ -697,7 +697,7 @@ h8300_push_dummy_call (struct gdbarch *g + /* Heavens to Betsy --- it's really going in registers! + Note that on the h8/300s, there are gaps between the + registers in the register file. */ +- int offset; ++ ssize_t offset; + + for (offset = 0; offset < padded_len; offset += wordsize) + { +diff -Naurp insight-7.12.50.20170416.orig/gdb/hppa-tdep.c insight-7.12.50.20170416.new/gdb/hppa-tdep.c +--- insight-7.12.50.20170416.orig/gdb/hppa-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/hppa-tdep.c 2017-04-16 12:46:32.458381726 +0100 +@@ -989,7 +989,7 @@ hppa64_push_dummy_call (struct gdbarch * + { + struct value *arg = args[i]; + struct type *type = value_type (arg); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + const bfd_byte *valbuf; + bfd_byte fptrbuf[8]; + int regnum; +@@ -1184,7 +1184,7 @@ hppa64_return_value (struct gdbarch *gdb + struct type *type, struct regcache *regcache, + gdb_byte *readbuf, const gdb_byte *writebuf) + { +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + int regnum, offset; + + if (len > 16) +diff -Naurp insight-7.12.50.20170416.orig/gdb/i386-darwin-tdep.c insight-7.12.50.20170416.new/gdb/i386-darwin-tdep.c +--- insight-7.12.50.20170416.orig/gdb/i386-darwin-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/i386-darwin-tdep.c 2017-04-16 12:46:32.459381735 +0100 +@@ -167,7 +167,7 @@ i386_darwin_push_dummy_call (struct gdba + + for (write_pass = 0; write_pass < 2; write_pass++) + { +- int args_space = 0; ++ LONGEST args_space = 0; + int num_m128 = 0; + + if (struct_return) +diff -Naurp insight-7.12.50.20170416.orig/gdb/i386-tdep.c insight-7.12.50.20170416.new/gdb/i386-tdep.c +--- insight-7.12.50.20170416.orig/gdb/i386-tdep.c 2017-04-16 12:45:38.982884295 +0100 ++++ insight-7.12.50.20170416.new/gdb/i386-tdep.c 2017-04-16 12:46:32.461381754 +0100 +@@ -2682,7 +2682,7 @@ i386_push_dummy_call (struct gdbarch *gd + gdb_byte buf[4]; + int i; + int write_pass; +- int args_space = 0; ++ LONGEST args_space = 0; + + /* BND registers can be in arbitrary values at the moment of the + inferior call. This can cause boundary violations that are not +@@ -2697,7 +2697,7 @@ i386_push_dummy_call (struct gdbarch *gd + + for (write_pass = 0; write_pass < 2; write_pass++) + { +- int args_space_used = 0; ++ LONGEST args_space_used = 0; + + if (struct_return) + { +@@ -2714,7 +2714,7 @@ i386_push_dummy_call (struct gdbarch *gd + + for (i = 0; i < nargs; i++) + { +- int len = TYPE_LENGTH (value_enclosing_type (args[i])); ++ LONGEST len = TYPE_LENGTH (value_enclosing_type (args[i])); + + if (write_pass) + { +@@ -2921,7 +2921,7 @@ i386_reg_struct_return_p (struct gdbarch + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + enum type_code code = TYPE_CODE (type); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + gdb_assert (code == TYPE_CODE_STRUCT + || code == TYPE_CODE_UNION +@@ -3743,7 +3743,7 @@ static int + i386_convert_register_p (struct gdbarch *gdbarch, + int regnum, struct type *type) + { +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + /* Values may be spread across multiple registers. Most debugging + formats aren't expressive enough to specify the locations, so +@@ -3776,7 +3776,7 @@ i386_register_to_value (struct frame_inf + int *optimizedp, int *unavailablep) + { + struct gdbarch *gdbarch = get_frame_arch (frame); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + if (i386_fp_regnum_p (gdbarch, regnum)) + return i387_register_to_value (frame, regnum, type, to, +@@ -3812,7 +3812,7 @@ static void + i386_value_to_register (struct frame_info *frame, int regnum, + struct type *type, const gdb_byte *from) + { +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + if (i386_fp_regnum_p (get_frame_arch (frame), regnum)) + { +diff -Naurp insight-7.12.50.20170416.orig/gdb/iq2000-tdep.c insight-7.12.50.20170416.new/gdb/iq2000-tdep.c +--- insight-7.12.50.20170416.orig/gdb/iq2000-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/iq2000-tdep.c 2017-04-16 12:46:32.461381754 +0100 +@@ -651,8 +651,9 @@ iq2000_push_dummy_call (struct gdbarch * + const bfd_byte *val; + bfd_byte buf[4]; + struct type *type; +- int i, argreg, typelen, slacklen; +- int stackspace = 0; ++ int i, argreg, slacklen; ++ LONGEST typelen; ++ LONGEST stackspace = 0; + /* Used to copy struct arguments into the stack. */ + CORE_ADDR struct_ptr; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/m32r-tdep.c insight-7.12.50.20170416.new/gdb/m32r-tdep.c +--- insight-7.12.50.20170416.orig/gdb/m32r-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/m32r-tdep.c 2017-04-16 12:48:29.791473162 +0100 +@@ -681,7 +681,7 @@ m32r_push_dummy_call (struct gdbarch *gd + CORE_ADDR regval; + gdb_byte *val; + gdb_byte valbuf[M32R_ARG_REGISTER_SIZE]; +- int len; ++ LONGEST len; + + /* First force sp to a 4-byte alignment. */ + sp = sp & ~3; +diff -Naurp insight-7.12.50.20170416.orig/gdb/m68k-tdep.c insight-7.12.50.20170416.new/gdb/m68k-tdep.c +--- insight-7.12.50.20170416.orig/gdb/m68k-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/m68k-tdep.c 2017-04-16 12:46:32.463381773 +0100 +@@ -377,7 +377,7 @@ m68k_reg_struct_return_p (struct gdbarch + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + enum type_code code = TYPE_CODE (type); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION + || code == TYPE_CODE_COMPLEX); +@@ -509,9 +509,9 @@ m68k_push_dummy_call (struct gdbarch *gd + for (i = nargs - 1; i >= 0; i--) + { + struct type *value_type = value_enclosing_type (args[i]); +- int len = TYPE_LENGTH (value_type); +- int container_len = (len + 3) & ~3; +- int offset; ++ LONGEST len = TYPE_LENGTH (value_type); ++ LONGEST container_len = (len + 3) & ~3; ++ LONGEST offset; + + /* Non-scalars bigger than 4 bytes are left aligned, others are + right aligned. */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/m88k-tdep.c insight-7.12.50.20170416.new/gdb/m88k-tdep.c +--- insight-7.12.50.20170416.orig/gdb/m88k-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/m88k-tdep.c 2017-04-16 12:46:32.464381782 +0100 +@@ -254,13 +254,13 @@ m88k_store_arguments (struct regcache *r + { + struct gdbarch *gdbarch = get_regcache_arch (regcache); + int num_register_words = 0; +- int num_stack_words = 0; ++ LONGEST num_stack_words = 0; + int i; + + for (i = 0; i < nargs; i++) + { + struct type *type = value_type (args[i]); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + if (m88k_integral_or_pointer_p (type) && len < 4) + { +@@ -302,8 +302,8 @@ m88k_store_arguments (struct regcache *r + { + const bfd_byte *valbuf = value_contents (args[i]); + struct type *type = value_type (args[i]); +- int len = TYPE_LENGTH (type); +- int stack_word = num_stack_words; ++ LONGEST len = TYPE_LENGTH (type); ++ LONGEST stack_word = num_stack_words; + + if (m88k_in_register_p (type)) + { +diff -Naurp insight-7.12.50.20170416.orig/gdb/mep-tdep.c insight-7.12.50.20170416.new/gdb/mep-tdep.c +--- insight-7.12.50.20170416.orig/gdb/mep-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/mep-tdep.c 2017-04-16 12:46:32.465381791 +0100 +@@ -2262,7 +2262,7 @@ push_large_arguments (CORE_ADDR sp, int + + for (i = 0; i < argc; i++) + { +- unsigned arg_len = TYPE_LENGTH (value_type (argv[i])); ++ ULONGEST arg_len = TYPE_LENGTH (value_type (argv[i])); + + if (arg_len > MEP_GPR_SIZE) + { +diff -Naurp insight-7.12.50.20170416.orig/gdb/mips-tdep.c insight-7.12.50.20170416.new/gdb/mips-tdep.c +--- insight-7.12.50.20170416.orig/gdb/mips-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/mips-tdep.c 2017-04-16 12:46:32.468381819 +0100 +@@ -474,7 +474,7 @@ static void + mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache, + int reg_num, int length, + enum bfd_endian endian, gdb_byte *in, +- const gdb_byte *out, int buf_offset) ++ const gdb_byte *out, LONGEST buf_offset) + { + int reg_offset = 0; + +@@ -497,8 +497,8 @@ mips_xfer_register (struct gdbarch *gdba + } + if (mips_debug) + fprintf_unfiltered (gdb_stderr, +- "xfer $%d, reg offset %d, buf offset %d, length %d, ", +- reg_num, reg_offset, buf_offset, length); ++ "xfer $%d, reg offset %d, buf offset %s, length %d, ", ++ reg_num, reg_offset, plongest (buf_offset), length); + if (mips_debug && out != NULL) + { + int i; +@@ -4530,13 +4530,13 @@ mips_eabi_push_dummy_call (struct gdbarc + gdb_byte valbuf[MAX_REGISTER_SIZE]; + struct value *arg = args[argnum]; + struct type *arg_type = check_typedef (value_type (arg)); +- int len = TYPE_LENGTH (arg_type); ++ LONGEST len = TYPE_LENGTH (arg_type); + enum type_code typecode = TYPE_CODE (arg_type); + + if (mips_debug) + fprintf_unfiltered (gdb_stdlog, +- "mips_eabi_push_dummy_call: %d len=%d type=%d", +- argnum + 1, len, (int) typecode); ++ "mips_eabi_push_dummy_call: %d len=%s type=%d", ++ argnum + 1, plongest (len), (int) typecode); + + /* The EABI passes structures that do not fit in a register by + reference. */ +@@ -4805,7 +4805,7 @@ mips_eabi_return_value (struct gdbarch * + + static int + mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type, +- int offset) ++ LONGEST offset) + { + int i; + +@@ -4820,7 +4820,7 @@ mips_n32n64_fp_arg_chunk_p (struct gdbar + + for (i = 0; i < TYPE_NFIELDS (arg_type); i++) + { +- int pos; ++ LONGEST pos; + struct type *field_type; + + /* We're only looking at normal fields. */ +@@ -4862,7 +4862,7 @@ mips_n32n64_push_dummy_call (struct gdba + int argreg; + int float_argreg; + int argnum; +- int len = 0; ++ LONGEST len = 0; + int stack_offset = 0; + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + CORE_ADDR func_addr = find_function_addr (function, NULL); +@@ -5213,11 +5213,11 @@ mips_n32n64_return_value (struct gdbarch + : MIPS_V0_REGNUM); + field < TYPE_NFIELDS (type); field++, regnum += 2) + { +- int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field]) +- / TARGET_CHAR_BIT); ++ LONGEST offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field]) ++ / TARGET_CHAR_BIT); + if (mips_debug) +- fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n", +- offset); ++ fprintf_unfiltered (gdb_stderr, "Return float struct+%s\n", ++ plongest (offset)); + if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16) + { + /* A 16-byte long double field goes in two consecutive +@@ -5259,8 +5259,8 @@ mips_n32n64_return_value (struct gdbarch + if (offset + xfer > TYPE_LENGTH (type)) + xfer = TYPE_LENGTH (type) - offset; + if (mips_debug) +- fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n", +- offset, xfer, regnum); ++ fprintf_unfiltered (gdb_stderr, "Return struct+%s:%d in $%d\n", ++ plongest (offset), xfer, regnum); + mips_xfer_register (gdbarch, regcache, + gdbarch_num_regs (gdbarch) + regnum, + xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf, +@@ -5318,7 +5318,7 @@ mips_o32_push_dummy_call (struct gdbarch + int argreg; + int float_argreg; + int argnum; +- int len = 0; ++ LONGEST len = 0; + int stack_offset = 0; + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + CORE_ADDR func_addr = find_function_addr (function, NULL); +@@ -5382,13 +5382,13 @@ mips_o32_push_dummy_call (struct gdbarch + const gdb_byte *val; + struct value *arg = args[argnum]; + struct type *arg_type = check_typedef (value_type (arg)); +- int len = TYPE_LENGTH (arg_type); ++ LONGEST len = TYPE_LENGTH (arg_type); + enum type_code typecode = TYPE_CODE (arg_type); + + if (mips_debug) + fprintf_unfiltered (gdb_stdlog, +- "mips_o32_push_dummy_call: %d len=%d type=%d", +- argnum + 1, len, (int) typecode); ++ "mips_o32_push_dummy_call: %d len=%s type=%d", ++ argnum + 1, plongest (len), (int) typecode); + + val = value_contents (arg); + +@@ -5843,8 +5843,8 @@ mips_o64_push_dummy_call (struct gdbarch + int argreg; + int float_argreg; + int argnum; +- int len = 0; +- int stack_offset = 0; ++ LONGEST len = 0; ++ LONGEST stack_offset = 0; + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + CORE_ADDR func_addr = find_function_addr (function, NULL); + +@@ -5904,13 +5904,13 @@ mips_o64_push_dummy_call (struct gdbarch + const gdb_byte *val; + struct value *arg = args[argnum]; + struct type *arg_type = check_typedef (value_type (arg)); +- int len = TYPE_LENGTH (arg_type); ++ LONGEST len = TYPE_LENGTH (arg_type); + enum type_code typecode = TYPE_CODE (arg_type); + + if (mips_debug) + fprintf_unfiltered (gdb_stdlog, +- "mips_o64_push_dummy_call: %d len=%d type=%d", +- argnum + 1, len, (int) typecode); ++ "mips_o64_push_dummy_call: %d len=%s type=%d", ++ argnum + 1, plongest (len), (int) typecode); + + val = value_contents (arg); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/mn10300-tdep.c insight-7.12.50.20170416.new/gdb/mn10300-tdep.c +--- insight-7.12.50.20170416.orig/gdb/mn10300-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/mn10300-tdep.c 2017-04-16 12:46:32.469381828 +0100 +@@ -1220,7 +1220,7 @@ mn10300_push_dummy_call (struct gdbarch + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + const int push_size = register_size (gdbarch, E_PC_REGNUM); + int regs_used; +- int len, arg_len; ++ LONGEST len, arg_len; + int stack_offset = 0; + int argnum; + const gdb_byte *val; +diff -Naurp insight-7.12.50.20170416.orig/gdb/mt-tdep.c insight-7.12.50.20170416.new/gdb/mt-tdep.c +--- insight-7.12.50.20170416.orig/gdb/mt-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/mt-tdep.c 2017-04-16 12:46:32.470381838 +0100 +@@ -788,9 +788,9 @@ mt_push_dummy_call (struct gdbarch *gdba + gdb_byte buf[MT_MAX_STRUCT_SIZE]; + int argreg = MT_1ST_ARGREG; + int split_param_len = 0; +- int stack_dest = sp; ++ LONGEST stack_dest = sp; + int slacklen; +- int typelen; ++ LONGEST typelen; + int i, j; + + /* First handle however many args we can fit into MT_1ST_ARGREG thru +diff -Naurp insight-7.12.50.20170416.orig/gdb/ppc-sysv-tdep.c insight-7.12.50.20170416.new/gdb/ppc-sysv-tdep.c +--- insight-7.12.50.20170416.orig/gdb/ppc-sysv-tdep.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/ppc-sysv-tdep.c 2017-04-16 12:46:32.471381847 +0100 +@@ -67,7 +67,7 @@ ppc_sysv_abi_push_dummy_call (struct gdb + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int opencl_abi = ppc_sysv_use_opencl_abi (value_type (function)); + ULONGEST saved_sp; +- int argspace = 0; /* 0 is an initial wrong guess. */ ++ LONGEST argspace = 0; /* 0 is an initial wrong guess. */ + int write_pass; + + gdb_assert (tdep->wordsize == 4); +@@ -98,9 +98,9 @@ ppc_sysv_abi_push_dummy_call (struct gdb + /* Next available vector register for vector arguments. */ + int vreg = 2; + /* Arguments start above the "LR save word" and "Back chain". */ +- int argoffset = 2 * tdep->wordsize; ++ LONGEST argoffset = 2 * tdep->wordsize; + /* Structures start after the arguments. */ +- int structoffset = argoffset + argspace; ++ LONGEST structoffset = argoffset + argspace; + + /* If the function is returning a `struct', then the first word + (which will be passed in r3) is used for struct return +@@ -119,7 +119,7 @@ ppc_sysv_abi_push_dummy_call (struct gdb + { + struct value *arg = args[argno]; + struct type *type = check_typedef (value_type (arg)); +- int len = TYPE_LENGTH (type); ++ ssize_t len = TYPE_LENGTH (type); + const bfd_byte *val = value_contents (arg); + + if (TYPE_CODE (type) == TYPE_CODE_FLT && len <= 8 +@@ -1284,11 +1284,11 @@ struct ppc64_sysv_argpos + + static void + ppc64_sysv_abi_push_val (struct gdbarch *gdbarch, +- const bfd_byte *val, int len, int align, ++ const bfd_byte *val, ssize_t len, int align, + struct ppc64_sysv_argpos *argpos) + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); +- int offset = 0; ++ ssize_t offset = 0; + + /* Enforce alignment of stack location, if requested. */ + if (align > tdep->wordsize) +diff -Naurp insight-7.12.50.20170416.orig/gdb/rl78-tdep.c insight-7.12.50.20170416.new/gdb/rl78-tdep.c +--- insight-7.12.50.20170416.orig/gdb/rl78-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/rl78-tdep.c 2017-04-16 12:46:32.471381847 +0100 +@@ -1352,8 +1352,8 @@ rl78_push_dummy_call (struct gdbarch *gd + for (i = nargs - 1; i >= 0; i--) + { + struct type *value_type = value_enclosing_type (args[i]); +- int len = TYPE_LENGTH (value_type); +- int container_len = (len + 1) & ~1; ++ LONGEST len = TYPE_LENGTH (value_type); ++ LONGEST container_len = (len + 1) & ~1; + + sp -= container_len; + write_memory (rl78_make_data_address (sp), +diff -Naurp insight-7.12.50.20170416.orig/gdb/rs6000-aix-tdep.c insight-7.12.50.20170416.new/gdb/rs6000-aix-tdep.c +--- insight-7.12.50.20170416.orig/gdb/rs6000-aix-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/rs6000-aix-tdep.c 2017-04-16 12:46:32.471381847 +0100 +@@ -186,9 +186,9 @@ rs6000_push_dummy_call (struct gdbarch * + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int ii; +- int len = 0; ++ LONGEST len = 0; + int argno; /* current argument number */ +- int argbytes; /* current argument byte */ ++ LONGEST argbytes; /* current argument byte */ + gdb_byte tmp_buffer[50]; + int f_argno = 0; /* current floating point argno */ + int wordsize = gdbarch_tdep (gdbarch)->wordsize; +@@ -319,7 +319,7 @@ ran_out_of_registers_for_arguments: + + if ((argno < nargs) || argbytes) + { +- int space = 0, jj; ++ LONGEST space = 0, jj; + + if (argbytes) + { +diff -Naurp insight-7.12.50.20170416.orig/gdb/s390-linux-tdep.c insight-7.12.50.20170416.new/gdb/s390-linux-tdep.c +--- insight-7.12.50.20170416.orig/gdb/s390-linux-tdep.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/s390-linux-tdep.c 2017-04-16 12:46:32.473381865 +0100 +@@ -3081,7 +3081,7 @@ s390_function_arg_vector (struct type *t + /* Determine whether N is a power of two. */ + + static int +-is_power_of_two (unsigned int n) ++is_power_of_two (ULONGEST n) + { + return n && ((n & (n - 1)) == 0); + } +@@ -3138,7 +3138,7 @@ s390_handle_arg (struct s390_arg_state * + enum bfd_endian byte_order, int is_unnamed) + { + struct type *type = check_typedef (value_type (arg)); +- unsigned int length = TYPE_LENGTH (type); ++ ULONGEST length = TYPE_LENGTH (type); + int write_mode = as->regcache != NULL; + + if (s390_function_arg_float (type)) +diff -Naurp insight-7.12.50.20170416.orig/gdb/score-tdep.c insight-7.12.50.20170416.new/gdb/score-tdep.c +--- insight-7.12.50.20170416.orig/gdb/score-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/score-tdep.c 2017-04-16 12:46:32.474381875 +0100 +@@ -525,7 +525,7 @@ score_push_dummy_call (struct gdbarch *g + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int argnum; + int argreg; +- int arglen = 0; ++ LONGEST arglen = 0; + CORE_ADDR stack_offset = 0; + CORE_ADDR addr = 0; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/sh64-tdep.c insight-7.12.50.20170416.new/gdb/sh64-tdep.c +--- insight-7.12.50.20170416.orig/gdb/sh64-tdep.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/sh64-tdep.c 2017-04-16 12:46:32.475381884 +0100 +@@ -1062,7 +1062,7 @@ sh64_push_dummy_call (struct gdbarch *gd + CORE_ADDR struct_addr) + { + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); +- int stack_offset, stack_alloc; ++ LONGEST stack_offset, stack_alloc; + int int_argreg; + int float_arg_index = 0; + int double_arg_index = 0; +@@ -1071,7 +1071,7 @@ sh64_push_dummy_call (struct gdbarch *gd + CORE_ADDR regval; + const gdb_byte *val; + gdb_byte valbuf[8]; +- int len; ++ LONGEST len; + int argreg_size; + int fp_args[12]; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/sh-tdep.c insight-7.12.50.20170416.new/gdb/sh-tdep.c +--- insight-7.12.50.20170416.orig/gdb/sh-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/sh-tdep.c 2017-04-16 12:46:32.474381875 +0100 +@@ -814,7 +814,7 @@ sh_skip_prologue (struct gdbarch *gdbarc + static int + sh_use_struct_convention (int renesas_abi, struct type *type) + { +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + int nelem = TYPE_NFIELDS (type); + + /* The Renesas ABI returns aggregate types always on stack. */ +@@ -916,7 +916,7 @@ sh_frame_align (struct gdbarch *ignore, + + /* Helper function to justify value in register according to endianess. */ + static const gdb_byte * +-sh_justify_value_in_reg (struct gdbarch *gdbarch, struct value *val, int len) ++sh_justify_value_in_reg (struct gdbarch *gdbarch, struct value *val, LONGEST len) + { + static gdb_byte valbuf[4]; + +@@ -1076,7 +1076,8 @@ sh_push_dummy_call_fpu (struct gdbarch * + struct type *type; + CORE_ADDR regval; + const gdb_byte *val; +- int len, reg_size = 0; ++ LONGEST len; ++ int reg_size = 0; + int pass_on_stack = 0; + int treat_as_flt; + int last_reg_arg = INT_MAX; +@@ -1217,7 +1218,8 @@ sh_push_dummy_call_nofpu (struct gdbarch + struct type *type; + CORE_ADDR regval; + const gdb_byte *val; +- int len, reg_size = 0; ++ LONGEST len; ++ int reg_size = 0; + int pass_on_stack = 0; + int last_reg_arg = INT_MAX; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/sparc64-tdep.c insight-7.12.50.20170416.new/gdb/sparc64-tdep.c +--- insight-7.12.50.20170416.orig/gdb/sparc64-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/sparc64-tdep.c 2017-04-16 12:46:32.476381893 +0100 +@@ -696,7 +696,8 @@ sparc64_16_byte_align_p (struct type *ty + + static void + sparc64_store_floating_fields (struct regcache *regcache, struct type *type, +- const gdb_byte *valbuf, int element, int bitpos) ++ const gdb_byte *valbuf, int element, ++ LONGEST bitpos) + { + struct gdbarch *gdbarch = get_regcache_arch (regcache); + int len = TYPE_LENGTH (type); +@@ -740,7 +741,7 @@ sparc64_store_floating_fields (struct re + for (i = 0; i < TYPE_NFIELDS (type); i++) + { + struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); +- int subpos = bitpos + TYPE_FIELD_BITPOS (type, i); ++ LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i); + + sparc64_store_floating_fields (regcache, subtype, valbuf, + element, subpos); +@@ -772,7 +773,7 @@ sparc64_store_floating_fields (struct re + + static void + sparc64_extract_floating_fields (struct regcache *regcache, struct type *type, +- gdb_byte *valbuf, int bitpos) ++ gdb_byte *valbuf, LONGEST bitpos) + { + struct gdbarch *gdbarch = get_regcache_arch (regcache); + +@@ -812,7 +813,7 @@ sparc64_extract_floating_fields (struct + for (i = 0; i < TYPE_NFIELDS (type); i++) + { + struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); +- int subpos = bitpos + TYPE_FIELD_BITPOS (type, i); ++ LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i); + + sparc64_extract_floating_fields (regcache, subtype, valbuf, subpos); + } +@@ -845,7 +846,7 @@ sparc64_store_arguments (struct regcache + for (i = 0; i < nargs; i++) + { + struct type *type = value_type (args[i]); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + if (sparc64_structure_or_union_p (type) + || (sparc64_complex_floating_p (type) && len == 32)) +@@ -945,7 +946,7 @@ sparc64_store_arguments (struct regcache + { + const gdb_byte *valbuf = value_contents (args[i]); + struct type *type = value_type (args[i]); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + int regnum = -1; + gdb_byte buf[16]; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/sparc-tdep.c insight-7.12.50.20170416.new/gdb/sparc-tdep.c +--- insight-7.12.50.20170416.orig/gdb/sparc-tdep.c 2017-04-16 12:45:38.764882267 +0100 ++++ insight-7.12.50.20170416.new/gdb/sparc-tdep.c 2017-04-16 12:46:32.475381884 +0100 +@@ -567,7 +567,7 @@ sparc32_store_arguments (struct regcache + for (i = 0; i < nargs; i++) + { + struct type *type = value_type (args[i]); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + + if (sparc_structure_or_union_p (type) + || (sparc_floating_p (type) && len == 16) +diff -Naurp insight-7.12.50.20170416.orig/gdb/spu-tdep.c insight-7.12.50.20170416.new/gdb/spu-tdep.c +--- insight-7.12.50.20170416.orig/gdb/spu-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/spu-tdep.c 2017-04-16 12:46:32.477381903 +0100 +@@ -1431,7 +1431,7 @@ spu_push_dummy_call (struct gdbarch *gdb + struct value *arg = args[i]; + struct type *type = check_typedef (value_type (arg)); + const gdb_byte *contents = value_contents (arg); +- int n_regs = align_up (TYPE_LENGTH (type), 16) / 16; ++ LONGEST n_regs = align_up (TYPE_LENGTH (type), 16) / 16; + + /* If the argument doesn't wholly fit into registers, it and + all subsequent arguments go to the stack. */ +@@ -1463,7 +1463,7 @@ spu_push_dummy_call (struct gdbarch *gdb + { + struct value *arg = args[i]; + struct type *type = check_typedef (value_type (arg)); +- int len = TYPE_LENGTH (type); ++ LONGEST len = TYPE_LENGTH (type); + int preferred_slot; + + if (spu_scalar_value_p (type)) +diff -Naurp insight-7.12.50.20170416.orig/gdb/tic6x-tdep.c insight-7.12.50.20170416.new/gdb/tic6x-tdep.c +--- insight-7.12.50.20170416.orig/gdb/tic6x-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/tic6x-tdep.c 2017-04-16 12:46:32.478381912 +0100 +@@ -899,7 +899,7 @@ tic6x_push_dummy_call (struct gdbarch *g + int argreg = 0; + int argnum; + int stack_offset = 4; +- int references_offset = 4; ++ LONGEST references_offset = 4; + CORE_ADDR func_addr = find_function_addr (function, NULL); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + struct type *func_type = value_type (function); +@@ -933,7 +933,7 @@ tic6x_push_dummy_call (struct gdbarch *g + /* Now make space on the stack for the args. */ + for (argnum = 0; argnum < nargs; argnum++) + { +- int len = align_up (TYPE_LENGTH (value_type (args[argnum])), 4); ++ LONGEST len = align_up (TYPE_LENGTH (value_type (args[argnum])), 4); + if (argnum >= 10 - argreg) + references_offset += len; + stack_offset += len; +@@ -952,7 +952,7 @@ tic6x_push_dummy_call (struct gdbarch *g + const gdb_byte *val; + struct value *arg = args[argnum]; + struct type *arg_type = check_typedef (value_type (arg)); +- int len = TYPE_LENGTH (arg_type); ++ ssize_t len = TYPE_LENGTH (arg_type); + enum type_code typecode = TYPE_CODE (arg_type); + + val = value_contents (arg); +@@ -1112,7 +1112,8 @@ tic6x_push_dummy_call (struct gdbarch *g + } + else + internal_error (__FILE__, __LINE__, +- _("unexpected length %d of arg %d"), len, argnum); ++ _("unexpected length %s of arg %d"), ++ plongest (len), argnum); + + addr = sp + stack_offset; + write_memory (addr, val, len); +diff -Naurp insight-7.12.50.20170416.orig/gdb/tilegx-tdep.c insight-7.12.50.20170416.new/gdb/tilegx-tdep.c +--- insight-7.12.50.20170416.orig/gdb/tilegx-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/tilegx-tdep.c 2017-04-16 12:46:32.478381912 +0100 +@@ -289,7 +289,7 @@ tilegx_push_dummy_call (struct gdbarch * + CORE_ADDR stack_dest = sp; + int argreg = TILEGX_R0_REGNUM; + int i, j; +- int typelen, slacklen; ++ LONGEST typelen, slacklen; + static const gdb_byte four_zero_words[16] = { 0 }; + + /* If struct_return is 1, then the struct return address will +diff -Naurp insight-7.12.50.20170416.orig/gdb/v850-tdep.c insight-7.12.50.20170416.new/gdb/v850-tdep.c +--- insight-7.12.50.20170416.orig/gdb/v850-tdep.c 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/v850-tdep.c 2017-04-16 12:46:32.478381912 +0100 +@@ -1019,7 +1019,7 @@ v850_push_dummy_call (struct gdbarch *gd + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int argreg; + int argnum; +- int len = 0; ++ LONGEST len = 0; + int stack_offset; + + if (gdbarch_tdep (gdbarch)->abi == V850_ABI_RH850) +@@ -1047,7 +1047,7 @@ v850_push_dummy_call (struct gdbarch *gd + in four registers available. Loop thru args from first to last. */ + for (argnum = 0; argnum < nargs; argnum++) + { +- int len; ++ LONGEST len; + gdb_byte *val; + gdb_byte valbuf[v850_reg_size]; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/vax-tdep.c insight-7.12.50.20170416.new/gdb/vax-tdep.c +--- insight-7.12.50.20170416.orig/gdb/vax-tdep.c 2017-04-16 12:45:39.005884509 +0100 ++++ insight-7.12.50.20170416.new/gdb/vax-tdep.c 2017-04-16 12:46:32.479381921 +0100 +@@ -111,7 +111,7 @@ vax_store_arguments (struct regcache *re + struct gdbarch *gdbarch = get_regcache_arch (regcache); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + gdb_byte buf[4]; +- int count = 0; ++ LONGEST count = 0; + int i; + + /* We create an argument list on the stack, and make the argument +@@ -120,7 +120,7 @@ vax_store_arguments (struct regcache *re + /* Push arguments in reverse order. */ + for (i = nargs - 1; i >= 0; i--) + { +- int len = TYPE_LENGTH (value_enclosing_type (args[i])); ++ LONGEST len = TYPE_LENGTH (value_enclosing_type (args[i])); + + sp -= (len + 3) & ~3; + count += (len + 3) / 4; +diff -Naurp insight-7.12.50.20170416.orig/gdb/xstormy16-tdep.c insight-7.12.50.20170416.new/gdb/xstormy16-tdep.c +--- insight-7.12.50.20170416.orig/gdb/xstormy16-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/xstormy16-tdep.c 2017-04-16 12:46:32.479381921 +0100 +@@ -233,8 +233,9 @@ xstormy16_push_dummy_call (struct gdbarc + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + CORE_ADDR stack_dest = sp; + int argreg = E_1ST_ARG_REGNUM; +- int i, j; +- int typelen, slacklen; ++ int i, slacklen; ++ LONGEST j; ++ LONGEST typelen; + const gdb_byte *val; + gdb_byte buf[xstormy16_pc_size]; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/xtensa-tdep.c insight-7.12.50.20170416.new/gdb/xtensa-tdep.c +--- insight-7.12.50.20170416.orig/gdb/xtensa-tdep.c 2017-04-15 01:21:12.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/xtensa-tdep.c 2017-04-16 12:46:32.480381930 +0100 +@@ -1637,8 +1637,7 @@ xtensa_store_return_value (struct type * + + if (len > (callsize > 8 ? 8 : 16)) + internal_error (__FILE__, __LINE__, +- _("unimplemented for this length: %d"), +- TYPE_LENGTH (type)); ++ _("unimplemented for this length: %d"), len); + areg = arreg_number (gdbarch, + gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb); + +@@ -1712,18 +1711,18 @@ xtensa_push_dummy_call (struct gdbarch * + { + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int i; +- int size, onstack_size; ++ LONGEST size, onstack_size; + gdb_byte *buf = (gdb_byte *) alloca (16); + CORE_ADDR ra, ps; + struct argument_info + { + const bfd_byte *contents; +- int length; ++ ssize_t length; + int onstack; /* onstack == 0 => in reg */ + int align; /* alignment */ + union + { +- int offset; /* stack offset if on stack. */ ++ ssize_t offset; /* stack offset if on stack. */ + int regno; /* regno if in register. */ + } u; + }; +@@ -1747,9 +1746,10 @@ xtensa_push_dummy_call (struct gdbarch * + { + struct value *arg = args[i]; + struct type *arg_type = check_typedef (value_type (arg)); +- fprintf_unfiltered (gdb_stdlog, "%2d: %s %3d ", i, +- host_address_to_string (arg), +- TYPE_LENGTH (arg_type)); ++ const char *arg_type_len_s = pulongest (TYPE_LENGTH (arg_type)); ++ ++ fprintf_unfiltered (gdb_stdlog, "%2d: %s %s ", i, ++ host_address_to_string (arg), arg_type_len_s); + switch (TYPE_CODE (arg_type)) + { + case TYPE_CODE_INT: +@@ -1819,8 +1819,8 @@ xtensa_push_dummy_call (struct gdbarch * + info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_long); + break; + } +- info->length = TYPE_LENGTH (arg_type); + info->contents = value_contents (arg); ++ info->length = TYPE_LENGTH (arg_type); + + /* Align size and onstack_size. */ + size = (size + info->align - 1) & ~(info->align - 1); +@@ -1865,7 +1865,7 @@ xtensa_push_dummy_call (struct gdbarch * + + if (info->onstack) + { +- int n = info->length; ++ ssize_t n = info->length; + CORE_ADDR offset = sp + info->u.offset; + + /* Odd-sized structs are aligned to the lower side of a memory +@@ -1881,7 +1881,7 @@ xtensa_push_dummy_call (struct gdbarch * + } + else + { +- int n = info->length; ++ ssize_t n = info->length; + const bfd_byte *cp = info->contents; + int r = info->u.regno; + diff --git a/insight-7.12-gdb-rhbz795424-bitpos-25of25.patch b/insight-7.12-gdb-rhbz795424-bitpos-25of25.patch new file mode 100644 index 0000000..8092552 --- /dev/null +++ b/insight-7.12-gdb-rhbz795424-bitpos-25of25.patch @@ -0,0 +1,84 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-lang.h insight-7.12.50.20170416.new/gdb/f-lang.h +--- insight-7.12.50.20170416.orig/gdb/f-lang.h 2017-04-16 12:50:42.704709525 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-lang.h 2017-04-16 12:51:39.948242006 +0100 +@@ -49,9 +49,9 @@ struct common_block + struct symbol *contents[1]; + }; + +-extern int f77_get_upperbound (struct type *); ++extern LONGEST f77_get_upperbound (struct type *); + +-extern int f77_get_lowerbound (struct type *); ++extern LONGEST f77_get_lowerbound (struct type *); + + extern void f77_get_dynamic_array_length (struct type *); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-typeprint.c insight-7.12.50.20170416.new/gdb/f-typeprint.c +--- insight-7.12.50.20170416.orig/gdb/f-typeprint.c 2017-03-04 04:09:18.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-typeprint.c 2017-04-16 12:53:44.404399699 +0100 +@@ -161,7 +161,7 @@ f_type_print_varspec_suffix (struct type + int show, int passed_a_ptr, int demangled_args, + int arrayprint_recurse_level) + { +- int upper_bound, lower_bound; ++ LONGEST upper_bound, lower_bound; + + /* No static variables are permitted as an error call may occur during + execution of this function. */ +@@ -194,7 +194,7 @@ f_type_print_varspec_suffix (struct type + + lower_bound = f77_get_lowerbound (type); + if (lower_bound != 1) /* Not the default. */ +- fprintf_filtered (stream, "%d:", lower_bound); ++ fprintf_filtered (stream, "%s:", plongest (lower_bound)); + + /* Make sure that, if we have an assumed size array, we + print out a warning and print the upperbound as '*'. */ +@@ -204,7 +204,7 @@ f_type_print_varspec_suffix (struct type + else + { + upper_bound = f77_get_upperbound (type); +- fprintf_filtered (stream, "%d", upper_bound); ++ fprintf_filtered (stream, "%s", plongest (upper_bound)); + } + + if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY) +@@ -273,7 +273,7 @@ void + f_type_print_base (struct type *type, struct ui_file *stream, int show, + int level) + { +- int upper_bound; ++ LONGEST upper_bound; + int index; + + QUIT; +@@ -355,7 +355,7 @@ f_type_print_base (struct type *type, st + else + { + upper_bound = f77_get_upperbound (type); +- fprintf_filtered (stream, "character*%d", upper_bound); ++ fprintf_filtered (stream, "character*%s", plongest (upper_bound)); + } + break; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-valprint.c insight-7.12.50.20170416.new/gdb/f-valprint.c +--- insight-7.12.50.20170416.orig/gdb/f-valprint.c 2017-04-16 12:50:42.705709534 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-valprint.c 2017-04-16 12:51:39.950242024 +0100 +@@ -43,7 +43,7 @@ LONGEST f77_array_offset_tbl[MAX_FORTRAN + /* Array which holds offsets to be applied to get a row's elements + for a given array. Array also holds the size of each subarray. */ + +-int ++LONGEST + f77_get_lowerbound (struct type *type) + { + if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type)) +@@ -52,7 +52,7 @@ f77_get_lowerbound (struct type *type) + return TYPE_ARRAY_LOWER_BOUND_VALUE (type); + } + +-int ++LONGEST + f77_get_upperbound (struct type *type) + { + if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) diff --git a/insight-7.12-gdb-vla-intel-fortran-strides.patch b/insight-7.12-gdb-vla-intel-fortran-strides.patch new file mode 100644 index 0000000..3b0e685 --- /dev/null +++ b/insight-7.12-gdb-vla-intel-fortran-strides.patch @@ -0,0 +1,1942 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2loc.c insight-7.12.50.20170416.new/gdb/dwarf2loc.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2loc.c 2017-04-16 14:23:22.918275412 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2loc.c 2017-04-16 14:24:24.088833984 +0100 +@@ -2625,11 +2625,14 @@ dwarf2_locexpr_baton_eval (const struct + /* See dwarf2loc.h. */ + + int +-dwarf2_evaluate_property (const struct dynamic_prop *prop, ++dwarf2_evaluate_property_signed (const struct dynamic_prop *prop, + struct frame_info *frame, + struct property_addr_info *addr_stack, +- CORE_ADDR *value) ++ CORE_ADDR *value, ++ int is_signed) + { ++ int rc = 0; ++ + if (prop == NULL) + return 0; + +@@ -2653,7 +2656,7 @@ dwarf2_evaluate_property (const struct d + + *value = value_as_address (val); + } +- return 1; ++ rc = 1; + } + } + break; +@@ -2675,7 +2678,7 @@ dwarf2_evaluate_property (const struct d + if (!value_optimized_out (val)) + { + *value = value_as_address (val); +- return 1; ++ rc = 1; + } + } + } +@@ -2683,8 +2686,8 @@ dwarf2_evaluate_property (const struct d + + case PROP_CONST: + *value = prop->data.const_val; +- return 1; +- ++ rc = 1; ++ break; + case PROP_ADDR_OFFSET: + { + struct dwarf2_property_baton *baton +@@ -2705,11 +2708,38 @@ dwarf2_evaluate_property (const struct d + val = value_at (baton->offset_info.type, + pinfo->addr + baton->offset_info.offset); + *value = value_as_address (val); +- return 1; ++ rc = 1; + } ++ break; ++ } ++ ++ if (rc == 1 && is_signed == 1) ++ { ++ /* If we have a valid return candidate and it's value is signed, ++ we have to sign-extend the value because CORE_ADDR on 64bit machine has ++ 8 bytes but address size of an 32bit application is 4 bytes. */ ++ struct gdbarch * gdbarch = target_gdbarch (); ++ const int addr_bit = gdbarch_addr_bit (gdbarch); ++ const CORE_ADDR neg_mask = ((~0) << (addr_bit - 1)); ++ ++ /* Check if signed bit is set and sign-extend values. */ ++ if (*value & (neg_mask)) ++ *value |= (neg_mask ); + } ++ return rc; ++} + +- return 0; ++int ++dwarf2_evaluate_property (const struct dynamic_prop *prop, ++ struct frame_info *frame, ++ struct property_addr_info *addr_stack, ++ CORE_ADDR *value) ++{ ++ return dwarf2_evaluate_property_signed (prop, ++ frame, ++ addr_stack, ++ value, ++ 0); + } + + /* See dwarf2loc.h. */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2loc.h insight-7.12.50.20170416.new/gdb/dwarf2loc.h +--- insight-7.12.50.20170416.orig/gdb/dwarf2loc.h 2017-03-18 01:22:31.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2loc.h 2017-04-16 14:24:24.088833984 +0100 +@@ -143,6 +143,12 @@ int dwarf2_evaluate_property (const stru + struct property_addr_info *addr_stack, + CORE_ADDR *value); + ++int dwarf2_evaluate_property_signed (const struct dynamic_prop *prop, ++ struct frame_info *frame, ++ struct property_addr_info *addr_stack, ++ CORE_ADDR *value, ++ int is_signed); ++ + /* A helper for the compiler interface that compiles a single dynamic + property to C code. + +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2read.c insight-7.12.50.20170416.new/gdb/dwarf2read.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2read.c 2017-04-16 14:23:22.973275917 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2read.c 2017-04-16 15:14:21.011106705 +0100 +@@ -505,7 +505,7 @@ struct dwarf2_cu + int last_used; + + /* A hash table of DIE cu_offset for following references with +- die_info->offset.sect_off as hash. */ ++ die_info->sect_off as hash. */ + htab_t die_hash; + + /* Full DIEs if read in. */ +@@ -8443,7 +8443,7 @@ process_die (struct die_info *die, struc + { + complaint (&symfile_complaints, + _("DIE at 0x%x attempted to be processed twice"), +- die->offset.sect_off); ++ to_underlying (die->sect_off)); + return; + } + +@@ -15290,7 +15290,7 @@ read_subrange_type (struct die_info *die + struct type *base_type, *orig_base_type; + struct type *range_type; + struct attribute *attr; +- struct dynamic_prop low, high; ++ struct dynamic_prop low, high, stride; + int low_default_is_valid; + int high_bound_is_count = 0; + const char *name; +@@ -15310,7 +15310,9 @@ read_subrange_type (struct die_info *die + + low.kind = PROP_CONST; + high.kind = PROP_CONST; ++ stride.kind = PROP_CONST; + high.data.const_val = 0; ++ stride.data.const_val = 0; + + /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow + omitting DW_AT_lower_bound. */ +@@ -15343,6 +15345,13 @@ read_subrange_type (struct die_info *die + break; + } + ++ attr = dwarf2_attr (die, DW_AT_byte_stride, cu); ++ if (attr) ++ if (!attr_to_dynamic_prop (attr, die, cu, &stride)) ++ complaint (&symfile_complaints, _("Missing DW_AT_byte_stride " ++ "- DIE at 0x%x [in module %s]"), ++ to_underlying (die->sect_off), objfile_name (cu->objfile)); ++ + attr = dwarf2_attr (die, DW_AT_lower_bound, cu); + if (attr) + attr_to_dynamic_prop (attr, die, cu, &low); +@@ -15419,7 +15428,7 @@ read_subrange_type (struct die_info *die + && !TYPE_UNSIGNED (base_type) && (high.data.const_val & negative_mask)) + high.data.const_val |= negative_mask; + +- range_type = create_range_type (NULL, orig_base_type, &low, &high); ++ range_type = create_range_type (NULL, orig_base_type, &low, &high, &stride); + + if (high_bound_is_count) + TYPE_RANGE_DATA (range_type)->flag_upper_bound_is_count = 1; +diff -Naurp insight-7.12.50.20170416.orig/gdb/eval.c insight-7.12.50.20170416.new/gdb/eval.c +--- insight-7.12.50.20170416.orig/gdb/eval.c 2017-04-16 14:23:22.888275136 +0100 ++++ insight-7.12.50.20170416.new/gdb/eval.c 2017-04-16 14:24:24.094834039 +0100 +@@ -380,29 +380,325 @@ init_array_element (struct value *array, + return index; + } + ++/* Evaluates any operation on Fortran arrays or strings with at least ++ one user provided parameter. Expects the input ARRAY to be either ++ an array, or a string. Evaluates EXP by incrementing POS, and ++ writes the content from the elt stack into a local struct. NARGS ++ specifies number of literal or range arguments the user provided. ++ NARGS must be the same number as ARRAY has dimensions. */ ++ + static struct value * +-value_f90_subarray (struct value *array, +- struct expression *exp, int *pos, enum noside noside) ++value_f90_subarray (struct value *array, struct expression *exp, ++ int *pos, int nargs, enum noside noside) + { +- int pc = (*pos) + 1; ++ int i, dim_count = 0; + LONGEST low_bound, high_bound; +- struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array))); +- enum range_type range_type +- = (enum range_type) longest_to_int (exp->elts[pc].longconst); +- +- *pos += 3; ++ struct value *new_array = array; ++ struct type *array_type = check_typedef (value_type (new_array)); ++ struct type *elt_type; ++ ++ typedef struct subscript_range ++ { ++ enum range_type f90_range_type; ++ LONGEST low, high, stride; ++ } subscript_range; ++ ++ typedef enum subscript_kind ++ { ++ SUBSCRIPT_RANGE, /* e.g. "(lowbound:highbound)" */ ++ SUBSCRIPT_INDEX /* e.g. "(literal)" */ ++ } kind; ++ ++ /* Local struct to hold user data for Fortran subarray dimensions. */ ++ struct subscript_store ++ { ++ /* For every dimension, we are either working on a range or an index ++ expression, so we store this info separately for later. */ ++ enum subscript_kind kind; ++ ++ /* We also store either the lower and upper bound info, or the index ++ number. Before evaluation of the input values, we do not know if we are ++ actually working on a range of ranges, or an index in a range. So as a ++ first step we store all input in a union. The array calculation itself ++ deals with this later on. */ ++ union element_range ++ { ++ subscript_range range; ++ LONGEST number; ++ } U; ++ } *subscript_array; ++ ++ /* Check if the number of arguments provided by the user matches ++ the number of dimension of the array. A string has only one ++ dimension. */ ++ if (nargs != calc_f77_array_dims (value_type (new_array))) ++ error (_("Wrong number of subscripts")); ++ ++ subscript_array = (struct subscript_store*) alloca (sizeof (*subscript_array) * nargs); ++ ++ /* Parse the user input into the SUBSCRIPT_ARRAY to store it. We need ++ to evaluate it first, as the input is from left-to-right. The ++ array is stored from right-to-left. So we have to use the user ++ input in reverse order. Later on, we need the input information to ++ re-calculate the output array. For multi-dimensional arrays, we ++ can be dealing with any possible combination of ranges and indices ++ for every dimension. */ ++ for (i = 0; i < nargs; i++) ++ { ++ struct subscript_store *index = &subscript_array[i]; + +- if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) +- low_bound = TYPE_LOW_BOUND (range); +- else +- low_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); ++ /* The user input is a range, with or without lower and upper bound. ++ E.g.: "p arry(2:5)", "p arry( :5)", "p arry( : )", etc. */ ++ if (exp->elts[*pos].opcode == OP_RANGE) ++ { ++ int pc = (*pos) + 1; ++ subscript_range *range; + +- if (range_type == HIGH_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) +- high_bound = TYPE_HIGH_BOUND (range); +- else +- high_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); ++ index->kind = SUBSCRIPT_RANGE; ++ range = &index->U.range; ++ ++ *pos += 3; ++ range->f90_range_type = (enum range_type) exp->elts[pc].longconst; ++ ++ /* If a lower bound was provided by the user, the bit has been ++ set and we can assign the value from the elt stack. Same for ++ upper bound. */ ++ if ((range->f90_range_type & SUBARRAY_LOW_BOUND) ++ == SUBARRAY_LOW_BOUND) ++ range->low = value_as_long (evaluate_subexp (NULL_TYPE, exp, ++ pos, noside)); ++ if ((range->f90_range_type & SUBARRAY_HIGH_BOUND) ++ == SUBARRAY_HIGH_BOUND) ++ range->high = value_as_long (evaluate_subexp (NULL_TYPE, exp, ++ pos, noside)); ++ ++ /* Assign the user's stride value if provided. */ ++ if ((range->f90_range_type & SUBARRAY_STRIDE) == SUBARRAY_STRIDE) ++ range->stride = value_as_long (evaluate_subexp (NULL_TYPE, exp, ++ pos, noside)); ++ ++ /* Assign the default stride value '1'. */ ++ else ++ range->stride = 1; ++ ++ /* Check the provided stride value is illegal, aka '0'. */ ++ if (range->stride == 0) ++ error (_("Stride must not be 0")); ++ } ++ /* User input is an index. E.g.: "p arry(5)". */ ++ else ++ { ++ struct value *val; ++ ++ index->kind = SUBSCRIPT_INDEX; ++ ++ /* Evaluate each subscript; it must be a legal integer in F77. This ++ ensures the validity of the provided index. */ ++ val = evaluate_subexp_with_coercion (exp, pos, noside); ++ index->U.number = value_as_long (val); ++ } ++ ++ } ++ ++ /* Traverse the array from right to left and set the high and low bounds ++ for later use. */ ++ for (i = nargs - 1; i >= 0; i--) ++ { ++ struct subscript_store *index = &subscript_array[i]; ++ struct type *index_type = TYPE_INDEX_TYPE (array_type); ++ ++ switch (index->kind) ++ { ++ case SUBSCRIPT_RANGE: ++ { ++ ++ /* When we hit the first range specified by the user, we must ++ treat any subsequent user entry as a range. We simply ++ increment DIM_COUNT which tells us how many times we are ++ calling VALUE_SLICE_1. */ ++ subscript_range *range = &index->U.range; ++ ++ /* If no lower bound was provided by the user, we take the ++ default boundary. Same for the high bound. */ ++ if ((range->f90_range_type & SUBARRAY_LOW_BOUND) == 0) ++ range->low = TYPE_LOW_BOUND (index_type); ++ ++ if ((range->f90_range_type & SUBARRAY_HIGH_BOUND) == 0) ++ range->high = TYPE_HIGH_BOUND (index_type); ++ ++ /* Both user provided low and high bound have to be inside the ++ array bounds. Throw an error if not. */ ++ if (range->low < TYPE_LOW_BOUND (index_type) ++ || range->low > TYPE_HIGH_BOUND (index_type) ++ || range->high < TYPE_LOW_BOUND (index_type) ++ || range->high > TYPE_HIGH_BOUND (index_type)) ++ error (_("provided bound(s) outside array bound(s)")); ++ ++ /* For a negative stride the lower boundary must be larger than the ++ upper boundary. ++ For a positive stride the lower boundary must be smaller than the ++ upper boundary. */ ++ if ((range->stride < 0 && range->low < range->high) ++ || (range->stride > 0 && range->low > range->high)) ++ error (_("Wrong value provided for stride and boundaries")); ++ ++ } ++ break; ++ ++ case SUBSCRIPT_INDEX: ++ break; + +- return value_slice (array, low_bound, high_bound - low_bound + 1); ++ } ++ ++ array_type = TYPE_TARGET_TYPE (array_type); ++ } ++ ++ /* Reset ARRAY_TYPE before slicing.*/ ++ array_type = check_typedef (value_type (new_array)); ++ ++ /* Traverse the array from right to left and evaluate each corresponding ++ user input. VALUE_SUBSCRIPT is called for every index, until a range ++ expression is evaluated. After a range expression has been evaluated, ++ every subsequent expression is also treated as a range. */ ++ for (i = nargs - 1; i >= 0; i--) ++ { ++ struct subscript_store *index = &subscript_array[i]; ++ struct type *index_type = TYPE_INDEX_TYPE (array_type); ++ ++ switch (index->kind) ++ { ++ case SUBSCRIPT_RANGE: ++ { ++ ++ /* When we hit the first range specified by the user, we must ++ treat any subsequent user entry as a range. We simply ++ increment DIM_COUNT which tells us how many times we are ++ calling VALUE_SLICE_1. */ ++ subscript_range *range = &index->U.range; ++ ++ /* DIM_COUNT counts every user argument that is treated as a range. ++ This is necessary for expressions like 'print array(7, 8:9). ++ Here the first argument is a literal, but must be treated as a ++ range argument to allow the correct output representation. */ ++ dim_count++; ++ ++ new_array ++ = value_slice_1 (new_array, range->low, ++ range->high - range->low + 1, ++ range->stride, dim_count); ++ } ++ break; ++ ++ case SUBSCRIPT_INDEX: ++ { ++ /* DIM_COUNT only stays '0' when no range argument was processed ++ before, starting from the last dimension. This way we can ++ reduce the number of dimensions from the result array. ++ However, if a range has been processed before an index, we ++ treat the index like a range with equal low- and high bounds ++ to get the value offset right. */ ++ if (dim_count == 0) ++ new_array ++ = value_subscripted_rvalue (new_array, index->U.number, ++ f77_get_lowerbound (value_type ++ (new_array))); ++ else ++ { ++ dim_count++; ++ ++ /* We might end up here, because we have to treat the provided ++ index like a range. But now VALUE_SUBSCRIPTED_RVALUE ++ cannot do the range checks for us. So we have to make sure ++ ourselves that the user provided index is inside the ++ array bounds. Throw an error if not. */ ++ if (index->U.number < TYPE_LOW_BOUND (index_type) ++ && index->U.number > TYPE_HIGH_BOUND (index_type)) ++ error (_("provided bound(s) outside array bound(s)")); ++ ++ if (index->U.number > TYPE_LOW_BOUND (index_type) ++ && index->U.number > TYPE_HIGH_BOUND (index_type)) ++ error (_("provided bound(s) outside array bound(s)")); ++ ++ new_array = value_slice_1 (new_array, ++ index->U.number, ++ 1, /* COUNT is '1' element */ ++ 1, /* STRIDE set to '1' */ ++ dim_count); ++ } ++ ++ } ++ break; ++ } ++ array_type = TYPE_TARGET_TYPE (array_type); ++ } ++ ++ /* With DIM_COUNT > 1 we currently have a one dimensional array, but expect ++ an array of arrays, depending on how many ranges have been provided by ++ the user. So we need to rebuild the array dimensions for printing it ++ correctly. ++ Starting from right to left in the user input, after we hit the first ++ range argument every subsequent argument is also treated as a range. ++ E.g.: ++ "p ary(3, 7, 2:15)" in Fortran has only 1 dimension, but we calculated 3 ++ ranges. ++ "p ary(3, 7:12, 4)" in Fortran has only 1 dimension, but we calculated 2 ++ ranges. ++ "p ary(2:4, 5, 7)" in Fortran has only 1 dimension, and we calculated 1 ++ range. */ ++ if (dim_count > 1) ++ { ++ struct value *v = NULL; ++ ++ elt_type = TYPE_TARGET_TYPE (value_type (new_array)); ++ ++ /* Every SUBSCRIPT_RANGE in the user input signifies an actual range in ++ the output array. So we traverse the SUBSCRIPT_ARRAY again, looking ++ for a range entry. When we find one, we use the range info to create ++ an additional range_type to set the correct bounds and dimensions for ++ the output array. In addition, we may have a stride value that is not ++ '1', forcing us to adjust the number of elements in a range, according ++ to the stride value. */ ++ for (i = 0; i < nargs; i++) ++ { ++ struct subscript_store *index = &subscript_array[i]; ++ ++ if (index->kind == SUBSCRIPT_RANGE) ++ { ++ struct type *range_type, *interim_array_type; ++ ++ int new_length; ++ ++ /* The length of a sub-dimension with all elements between the ++ bounds plus the start element itself. It may be modified by ++ a user provided stride value. */ ++ new_length = index->U.range.high - index->U.range.low; ++ ++ new_length /= index->U.range.stride; ++ ++ range_type ++ = create_static_range_type (NULL, ++ elt_type, ++ index->U.range.low, ++ index->U.range.low + new_length); ++ ++ interim_array_type = create_array_type (NULL, ++ elt_type, ++ range_type); ++ ++ TYPE_CODE (interim_array_type) ++ = TYPE_CODE (value_type (new_array)); ++ ++ v = allocate_value (interim_array_type); ++ ++ elt_type = value_type (v); ++ } ++ ++ } ++ value_contents_copy (v, 0, new_array, 0, TYPE_LENGTH (elt_type)); ++ return v; ++ } ++ ++ return new_array; + } + + +@@ -1791,19 +2087,8 @@ evaluate_subexp_standard (struct type *e + switch (code) + { + case TYPE_CODE_ARRAY: +- if (exp->elts[*pos].opcode == OP_RANGE) +- return value_f90_subarray (arg1, exp, pos, noside); +- else +- goto multi_f77_subscript; +- + case TYPE_CODE_STRING: +- if (exp->elts[*pos].opcode == OP_RANGE) +- return value_f90_subarray (arg1, exp, pos, noside); +- else +- { +- arg2 = evaluate_subexp_with_coercion (exp, pos, noside); +- return value_subscript (arg1, value_as_long (arg2)); +- } ++ return value_f90_subarray (arg1, exp, pos, nargs, noside); + + case TYPE_CODE_PTR: + case TYPE_CODE_FUNC: +@@ -2204,49 +2489,6 @@ evaluate_subexp_standard (struct type *e + } + return (arg1); + +- multi_f77_subscript: +- { +- LONGEST subscript_array[MAX_FORTRAN_DIMS]; +- int ndimensions = 1, i; +- struct value *array = arg1; +- +- if (nargs > MAX_FORTRAN_DIMS) +- error (_("Too many subscripts for F77 (%d Max)"), MAX_FORTRAN_DIMS); +- +- ndimensions = calc_f77_array_dims (type); +- +- if (nargs != ndimensions) +- error (_("Wrong number of subscripts")); +- +- gdb_assert (nargs > 0); +- +- /* Now that we know we have a legal array subscript expression +- let us actually find out where this element exists in the array. */ +- +- /* Take array indices left to right. */ +- for (i = 0; i < nargs; i++) +- { +- /* Evaluate each subscript; it must be a legal integer in F77. */ +- arg2 = evaluate_subexp_with_coercion (exp, pos, noside); +- +- /* Fill in the subscript array. */ +- +- subscript_array[i] = value_as_long (arg2); +- } +- +- /* Internal type of array is arranged right to left. */ +- for (i = nargs; i > 0; i--) +- { +- struct type *array_type = check_typedef (value_type (array)); +- LONGEST index = subscript_array[i - 1]; +- +- array = value_subscripted_rvalue (array, index, +- f77_get_lowerbound (array_type)); +- } +- +- return array; +- } +- + case BINOP_LOGICAL_AND: + arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + if (noside == EVAL_SKIP) +@@ -3103,6 +3345,9 @@ calc_f77_array_dims (struct type *array_ + int ndimen = 1; + struct type *tmp_type; + ++ if (TYPE_CODE (array_type) == TYPE_CODE_STRING) ++ return 1; ++ + if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY)) + error (_("Can't get dimensions for a non-array type")); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/expprint.c insight-7.12.50.20170416.new/gdb/expprint.c +--- insight-7.12.50.20170416.orig/gdb/expprint.c 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/expprint.c 2017-04-16 14:24:24.095834048 +0100 +@@ -568,12 +568,10 @@ print_subexp_standard (struct expression + *pos += 2; + + fputs_filtered ("RANGE(", stream); +- if (range_type == HIGH_BOUND_DEFAULT +- || range_type == NONE_BOUND_DEFAULT) ++ if ((range_type & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND) + print_subexp (exp, pos, stream, PREC_ABOVE_COMMA); + fputs_filtered ("..", stream); +- if (range_type == LOW_BOUND_DEFAULT +- || range_type == NONE_BOUND_DEFAULT) ++ if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND) + print_subexp (exp, pos, stream, PREC_ABOVE_COMMA); + fputs_filtered (")", stream); + return; +@@ -1055,16 +1053,16 @@ dump_subexp_body_standard (struct expres + + switch (range_type) + { +- case BOTH_BOUND_DEFAULT: ++ case SUBARRAY_NONE_BOUND: + fputs_filtered ("Range '..'", stream); + break; +- case LOW_BOUND_DEFAULT: ++ case SUBARRAY_HIGH_BOUND: + fputs_filtered ("Range '..EXP'", stream); + break; +- case HIGH_BOUND_DEFAULT: ++ case SUBARRAY_LOW_BOUND: + fputs_filtered ("Range 'EXP..'", stream); + break; +- case NONE_BOUND_DEFAULT: ++ case (SUBARRAY_LOW_BOUND | SUBARRAY_HIGH_BOUND): + fputs_filtered ("Range 'EXP..EXP'", stream); + break; + default: +@@ -1072,11 +1070,9 @@ dump_subexp_body_standard (struct expres + break; + } + +- if (range_type == HIGH_BOUND_DEFAULT +- || range_type == NONE_BOUND_DEFAULT) ++ if ((range_type & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND) + elt = dump_subexp (exp, stream, elt); +- if (range_type == LOW_BOUND_DEFAULT +- || range_type == NONE_BOUND_DEFAULT) ++ if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND) + elt = dump_subexp (exp, stream, elt); + } + break; +diff -Naurp insight-7.12.50.20170416.orig/gdb/expression.h insight-7.12.50.20170416.new/gdb/expression.h +--- insight-7.12.50.20170416.orig/gdb/expression.h 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/expression.h 2017-04-16 14:24:24.095834048 +0100 +@@ -154,17 +154,17 @@ extern void dump_raw_expression (struct + struct ui_file *, const char *); + extern void dump_prefix_expression (struct expression *, struct ui_file *); + +-/* In an OP_RANGE expression, either bound could be empty, indicating +- that its value is by default that of the corresponding bound of the +- array or string. So we have four sorts of subrange. This +- enumeration type is to identify this. */ +- ++/* In an OP_RANGE expression, either bound can be provided by the user, or not. ++ In addition to this, the user can also specify a stride value to indicated ++ only certain elements of the array. This enumeration type is to identify ++ this. */ ++ + enum range_type + { +- BOTH_BOUND_DEFAULT, /* "(:)" */ +- LOW_BOUND_DEFAULT, /* "(:high)" */ +- HIGH_BOUND_DEFAULT, /* "(low:)" */ +- NONE_BOUND_DEFAULT /* "(low:high)" */ ++ SUBARRAY_NONE_BOUND = 0x0, /* "( : )" */ ++ SUBARRAY_LOW_BOUND = 0x1, /* "(low:)" */ ++ SUBARRAY_HIGH_BOUND = 0x2, /* "(:high)" */ ++ SUBARRAY_STRIDE = 0x4 /* "(::stride)" */ + }; + + #endif /* !defined (EXPRESSION_H) */ +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-exp.y insight-7.12.50.20170416.new/gdb/f-exp.y +--- insight-7.12.50.20170416.orig/gdb/f-exp.y 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-exp.y 2017-04-16 14:24:24.095834048 +0100 +@@ -254,31 +254,63 @@ arglist : subrange + + arglist : arglist ',' exp %prec ABOVE_COMMA + { arglist_len++; } ++ | arglist ',' subrange %prec ABOVE_COMMA ++ { arglist_len++; } + ; + + /* There are four sorts of subrange types in F90. */ + + subrange: exp ':' exp %prec ABOVE_COMMA +- { write_exp_elt_opcode (pstate, OP_RANGE); +- write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT); ++ { write_exp_elt_opcode (pstate, OP_RANGE); ++ write_exp_elt_longcst (pstate, ++ SUBARRAY_LOW_BOUND | SUBARRAY_HIGH_BOUND); + write_exp_elt_opcode (pstate, OP_RANGE); } + ; + + subrange: exp ':' %prec ABOVE_COMMA + { write_exp_elt_opcode (pstate, OP_RANGE); +- write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT); ++ write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND); + write_exp_elt_opcode (pstate, OP_RANGE); } + ; + + subrange: ':' exp %prec ABOVE_COMMA + { write_exp_elt_opcode (pstate, OP_RANGE); +- write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT); ++ write_exp_elt_longcst (pstate, SUBARRAY_HIGH_BOUND); + write_exp_elt_opcode (pstate, OP_RANGE); } + ; + + subrange: ':' %prec ABOVE_COMMA + { write_exp_elt_opcode (pstate, OP_RANGE); +- write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT); ++ write_exp_elt_longcst (pstate, SUBARRAY_NONE_BOUND); ++ write_exp_elt_opcode (pstate, OP_RANGE); } ++ ; ++ ++/* Each subrange type can have a stride argument. */ ++subrange: exp ':' exp ':' exp %prec ABOVE_COMMA ++ { write_exp_elt_opcode (pstate, OP_RANGE); ++ write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND ++ | SUBARRAY_HIGH_BOUND ++ | SUBARRAY_STRIDE); ++ write_exp_elt_opcode (pstate, OP_RANGE); } ++ ; ++ ++subrange: exp ':' ':' exp %prec ABOVE_COMMA ++ { write_exp_elt_opcode (pstate, OP_RANGE); ++ write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND ++ | SUBARRAY_STRIDE); ++ write_exp_elt_opcode (pstate, OP_RANGE); } ++ ; ++ ++subrange: ':' exp ':' exp %prec ABOVE_COMMA ++ { write_exp_elt_opcode (pstate, OP_RANGE); ++ write_exp_elt_longcst (pstate, SUBARRAY_HIGH_BOUND ++ | SUBARRAY_STRIDE); ++ write_exp_elt_opcode (pstate, OP_RANGE); } ++ ; ++ ++subrange: ':' ':' exp %prec ABOVE_COMMA ++ { write_exp_elt_opcode (pstate, OP_RANGE); ++ write_exp_elt_longcst (pstate, SUBARRAY_STRIDE); + write_exp_elt_opcode (pstate, OP_RANGE); } + ; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-valprint.c insight-7.12.50.20170416.new/gdb/f-valprint.c +--- insight-7.12.50.20170416.orig/gdb/f-valprint.c 2017-04-16 14:23:22.963275825 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-valprint.c 2017-04-16 14:24:24.096834057 +0100 +@@ -121,8 +121,14 @@ f77_print_array_1 (int nss, int ndimensi + + if (nss != ndimensions) + { +- size_t dim_size = TYPE_LENGTH (TYPE_TARGET_TYPE (type)); ++ size_t dim_size; + size_t offs = 0; ++ LONGEST byte_stride = abs (TYPE_BYTE_STRIDE (range_type)); ++ ++ if (byte_stride) ++ dim_size = byte_stride; ++ else ++ dim_size = TYPE_LENGTH (TYPE_TARGET_TYPE (type)); + + for (i = lowerbound; + (i < upperbound + 1 && (*elts) < options->print_max); +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbtypes.c insight-7.12.50.20170416.new/gdb/gdbtypes.c +--- insight-7.12.50.20170416.orig/gdb/gdbtypes.c 2017-04-16 14:23:22.893275182 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbtypes.c 2017-04-16 14:24:24.097834067 +0100 +@@ -862,7 +862,8 @@ allocate_stub_method (struct type *type) + struct type * + create_range_type (struct type *result_type, struct type *index_type, + const struct dynamic_prop *low_bound, +- const struct dynamic_prop *high_bound) ++ const struct dynamic_prop *high_bound, ++ const struct dynamic_prop *stride) + { + if (result_type == NULL) + result_type = alloc_type_copy (index_type); +@@ -877,6 +878,7 @@ create_range_type (struct type *result_t + TYPE_ZALLOC (result_type, sizeof (struct range_bounds)); + TYPE_RANGE_DATA (result_type)->low = *low_bound; + TYPE_RANGE_DATA (result_type)->high = *high_bound; ++ TYPE_RANGE_DATA (result_type)->stride = *stride; + + if (low_bound->kind == PROP_CONST && low_bound->data.const_val >= 0) + TYPE_UNSIGNED (result_type) = 1; +@@ -905,7 +907,7 @@ struct type * + create_static_range_type (struct type *result_type, struct type *index_type, + LONGEST low_bound, LONGEST high_bound) + { +- struct dynamic_prop low, high; ++ struct dynamic_prop low, high, stride; + + low.kind = PROP_CONST; + low.data.const_val = low_bound; +@@ -913,7 +915,11 @@ create_static_range_type (struct type *r + high.kind = PROP_CONST; + high.data.const_val = high_bound; + +- result_type = create_range_type (result_type, index_type, &low, &high); ++ stride.kind = PROP_CONST; ++ stride.data.const_val = 0; ++ ++ result_type = create_range_type (result_type, index_type, ++ &low, &high, &stride); + + return result_type; + } +@@ -1110,16 +1116,20 @@ create_array_type_with_stride (struct ty + && (!type_not_associated (result_type) + && !type_not_allocated (result_type))) + { +- LONGEST low_bound, high_bound; ++ LONGEST low_bound, high_bound, byte_stride; + + if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) + low_bound = high_bound = 0; + element_type = check_typedef (element_type); ++ byte_stride = abs (TYPE_BYTE_STRIDE (range_type)); ++ + /* Be careful when setting the array length. Ada arrays can be + empty arrays with the high_bound being smaller than the low_bound. + In such cases, the array length should be zero. */ + if (high_bound < low_bound) + TYPE_LENGTH (result_type) = 0; ++ else if (byte_stride > 0) ++ TYPE_LENGTH (result_type) = byte_stride * (high_bound - low_bound + 1); + else if (bit_stride > 0) + TYPE_LENGTH (result_type) = + (bit_stride * (high_bound - low_bound + 1) + 7) / 8; +@@ -1912,12 +1922,12 @@ resolve_dynamic_range (struct type *dyn_ + CORE_ADDR value; + struct type *static_range_type, *static_target_type; + const struct dynamic_prop *prop; +- struct dynamic_prop low_bound, high_bound; ++ struct dynamic_prop low_bound, high_bound, stride; + + gdb_assert (TYPE_CODE (dyn_range_type) == TYPE_CODE_RANGE); + + prop = &TYPE_RANGE_DATA (dyn_range_type)->low; +- if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) ++ if (dwarf2_evaluate_property_signed (prop, NULL, addr_stack, &value, 1)) + { + low_bound.kind = PROP_CONST; + low_bound.data.const_val = value; +@@ -1929,7 +1939,7 @@ resolve_dynamic_range (struct type *dyn_ + } + + prop = &TYPE_RANGE_DATA (dyn_range_type)->high; +- if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) ++ if (dwarf2_evaluate_property_signed (prop, NULL, addr_stack, &value, 1)) + { + high_bound.kind = PROP_CONST; + high_bound.data.const_val = value; +@@ -1944,12 +1954,20 @@ resolve_dynamic_range (struct type *dyn_ + high_bound.data.const_val = 0; + } + ++ prop = &TYPE_RANGE_DATA (dyn_range_type)->stride; ++ if (dwarf2_evaluate_property_signed (prop, NULL, addr_stack, &value, 1)) ++ { ++ stride.kind = PROP_CONST; ++ stride.data.const_val = value; ++ } ++ + static_target_type + = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (dyn_range_type), + addr_stack, 0); + static_range_type = create_range_type (copy_type (dyn_range_type), + static_target_type, +- &low_bound, &high_bound); ++ &low_bound, &high_bound, &stride); ++ + TYPE_RANGE_DATA (static_range_type)->flag_bound_evaluated = 1; + return static_range_type; + } +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbtypes.h insight-7.12.50.20170416.new/gdb/gdbtypes.h +--- insight-7.12.50.20170416.orig/gdb/gdbtypes.h 2017-04-16 14:23:22.894275191 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbtypes.h 2017-04-16 14:24:24.098834076 +0100 +@@ -553,6 +553,10 @@ struct range_bounds + + struct dynamic_prop high; + ++ /* * Stride of range. */ ++ ++ struct dynamic_prop stride; ++ + /* True if HIGH range bound contains the number of elements in the + subrange. This affects how the final hight bound is computed. */ + +@@ -715,7 +719,6 @@ struct main_type + /* * Union member used for range types. */ + + struct range_bounds *bounds; +- + } flds_bnds; + + /* * Slot to point to additional language-specific fields of this +@@ -1230,6 +1233,15 @@ extern void allocate_gnat_aux_type (stru + TYPE_RANGE_DATA(range_type)->high.kind + #define TYPE_LOW_BOUND_KIND(range_type) \ + TYPE_RANGE_DATA(range_type)->low.kind ++#define TYPE_BYTE_STRIDE(range_type) \ ++ TYPE_RANGE_DATA(range_type)->stride.data.const_val ++#define TYPE_BYTE_STRIDE_BLOCK(range_type) \ ++ TYPE_RANGE_DATA(range_type)->stride.data.locexpr ++#define TYPE_BYTE_STRIDE_LOCLIST(range_type) \ ++ TYPE_RANGE_DATA(range_type)->stride.data.loclist ++#define TYPE_BYTE_STRIDE_KIND(range_type) \ ++ TYPE_RANGE_DATA(range_type)->stride.kind ++ + + /* Property accessors for the type data location. */ + #define TYPE_DATA_LOCATION(thistype) \ +@@ -1264,6 +1276,9 @@ extern void allocate_gnat_aux_type (stru + TYPE_HIGH_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype)) + #define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \ + TYPE_LOW_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype)) ++#define TYPE_ARRAY_STRIDE_IS_UNDEFINED(arraytype) \ ++ (TYPE_BYTE_STRIDE(TYPE_INDEX_TYPE(arraytype)) == 0) ++ + + #define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \ + (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype)))) +@@ -1781,6 +1796,7 @@ extern struct type *create_array_type_wi + + extern struct type *create_range_type (struct type *, struct type *, + const struct dynamic_prop *, ++ const struct dynamic_prop *, + const struct dynamic_prop *); + + extern struct type *create_array_type (struct type *, struct type *, +diff -Naurp insight-7.12.50.20170416.orig/gdb/parse.c insight-7.12.50.20170416.new/gdb/parse.c +--- insight-7.12.50.20170416.orig/gdb/parse.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/parse.c 2017-04-16 14:24:24.098834076 +0100 +@@ -1007,22 +1007,20 @@ operator_length_standard (const struct e + + case OP_RANGE: + oplen = 3; ++ args = 0; + range_type = (enum range_type) + longest_to_int (expr->elts[endpos - 2].longconst); + +- switch (range_type) +- { +- case LOW_BOUND_DEFAULT: +- case HIGH_BOUND_DEFAULT: +- args = 1; +- break; +- case BOTH_BOUND_DEFAULT: +- args = 0; +- break; +- case NONE_BOUND_DEFAULT: +- args = 2; +- break; +- } ++ /* Increment the argument counter for each argument ++ provided by the user. */ ++ if ((range_type & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND) ++ args++; ++ ++ if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND) ++ args++; ++ ++ if ((range_type & SUBARRAY_STRIDE) == SUBARRAY_STRIDE) ++ args++; + + break; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/rust-exp.y insight-7.12.50.20170416.new/gdb/rust-exp.y +--- insight-7.12.50.20170416.orig/gdb/rust-exp.y 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/rust-exp.y 2017-04-16 14:24:24.099834085 +0100 +@@ -2409,23 +2409,17 @@ convert_ast_to_expression (struct parser + + case OP_RANGE: + { +- enum range_type kind = BOTH_BOUND_DEFAULT; ++ enum range_type kind = SUBARRAY_NONE_BOUND; + + if (operation->left.op != NULL) + { + convert_ast_to_expression (state, operation->left.op, top); +- kind = HIGH_BOUND_DEFAULT; ++ kind = SUBARRAY_LOW_BOUND; + } + if (operation->right.op != NULL) + { + convert_ast_to_expression (state, operation->right.op, top); +- if (kind == BOTH_BOUND_DEFAULT) +- kind = LOW_BOUND_DEFAULT; +- else +- { +- gdb_assert (kind == HIGH_BOUND_DEFAULT); +- kind = NONE_BOUND_DEFAULT; +- } ++ kind = (range_type) (kind | SUBARRAY_HIGH_BOUND); + } + write_exp_elt_opcode (state, OP_RANGE); + write_exp_elt_longcst (state, kind); +diff -Naurp insight-7.12.50.20170416.orig/gdb/rust-lang.c insight-7.12.50.20170416.new/gdb/rust-lang.c +--- insight-7.12.50.20170416.orig/gdb/rust-lang.c 2017-04-16 14:23:22.906275302 +0100 ++++ insight-7.12.50.20170416.new/gdb/rust-lang.c 2017-04-16 14:24:24.099834085 +0100 +@@ -1314,9 +1314,9 @@ rust_range (struct expression *exp, int + kind = (enum range_type) longest_to_int (exp->elts[*pos + 1].longconst); + *pos += 3; + +- if (kind == HIGH_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT) ++ if ((kind & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND) + low = evaluate_subexp (NULL_TYPE, exp, pos, noside); +- if (kind == LOW_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT) ++ if ((kind & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND) + high = evaluate_subexp (NULL_TYPE, exp, pos, noside); + + if (noside == EVAL_SKIP) +@@ -1405,7 +1405,7 @@ rust_compute_range (struct type *type, s + + *low = 0; + *high = 0; +- *kind = BOTH_BOUND_DEFAULT; ++ *kind = SUBARRAY_NONE_BOUND; + + if (TYPE_NFIELDS (type) == 0) + return; +@@ -1413,15 +1413,14 @@ rust_compute_range (struct type *type, s + i = 0; + if (strcmp (TYPE_FIELD_NAME (type, 0), "start") == 0) + { +- *kind = HIGH_BOUND_DEFAULT; ++ *kind = SUBARRAY_LOW_BOUND; + *low = value_as_long (value_field (range, 0)); + ++i; + } + if (TYPE_NFIELDS (type) > i + && strcmp (TYPE_FIELD_NAME (type, i), "end") == 0) + { +- *kind = (*kind == BOTH_BOUND_DEFAULT +- ? LOW_BOUND_DEFAULT : NONE_BOUND_DEFAULT); ++ *kind = (range_type) (*kind | SUBARRAY_HIGH_BOUND); + *high = value_as_long (value_field (range, i)); + } + } +@@ -1436,7 +1435,7 @@ rust_subscript (struct expression *exp, + struct type *rhstype; + LONGEST low, high_bound; + /* Initialized to appease the compiler. */ +- enum range_type kind = BOTH_BOUND_DEFAULT; ++ enum range_type kind = SUBARRAY_NONE_BOUND; + LONGEST high = 0; + int want_slice = 0; + +@@ -1498,7 +1497,7 @@ rust_subscript (struct expression *exp, + error (_("Cannot subscript non-array type")); + + if (want_slice +- && (kind == BOTH_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT)) ++ && ((kind & SUBARRAY_LOW_BOUND) != SUBARRAY_LOW_BOUND)) + low = low_bound; + if (low < 0) + error (_("Index less than zero")); +@@ -1516,7 +1515,7 @@ rust_subscript (struct expression *exp, + CORE_ADDR addr; + struct value *addrval, *tem; + +- if (kind == BOTH_BOUND_DEFAULT || kind == HIGH_BOUND_DEFAULT) ++ if ((kind & SUBARRAY_HIGH_BOUND) != SUBARRAY_HIGH_BOUND) + high = high_bound; + if (high < 0) + error (_("High index less than zero")); +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/static-arrays.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/static-arrays.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/static-arrays.exp 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/static-arrays.exp 2017-04-16 14:24:24.100834094 +0100 +@@ -0,0 +1,421 @@ ++# Copyright 2015 Free Software Foundation, Inc. ++# ++# Contributed by Intel Corp. ++# ++# 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 . ++ ++standard_testfile static-arrays.f90 ++ ++if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}] } { ++ return -1 ++} ++ ++if ![runto MAIN__] then { ++ perror "couldn't run to breakpoint MAIN__" ++ continue ++} ++ ++gdb_breakpoint [gdb_get_line_number "BP1"] ++gdb_continue_to_breakpoint "BP1" ".*BP1.*" ++ ++# Tests subarrays of one dimensional arrays with subrange variations ++gdb_test "print ar1" "\\$\[0-9\]+ = \\(1, 2, 3, 4, 5, 6, 7, 8, 9\\)" \ ++ "print ar1." ++gdb_test "print ar1\(4:7\)" "\\$\[0-9\]+ = \\(4, 5, 6, 7\\)" \ ++ "print ar1\(4:7\)" ++gdb_test "print ar1\(8:\)" "\\$\[0-9\]+ = \\(8, 9\\).*" \ ++ "print ar1\(8:\)" ++gdb_test "print ar1\(:3\)" "\\$\[0-9\]+ = \\(1, 2, 3\\).*" \ ++ "print ar1\(:3\)" ++gdb_test "print ar1\(:\)" "\\$\[0-9\]+ = \\(1, 2, 3, 4, 5, 6, 7, 8, 9\\)" \ ++ "print ar1\(:\)" ++ ++# Check assignment ++gdb_test_no_output "set \$my_ary = ar1\(3:8\)" ++gdb_test "print \$my_ary" \ ++ "\\$\[0-9\]+ = \\(3, 4, 5, 6, 7, 8\\)" \ ++ "Assignment of subarray to variable" ++gdb_test_no_output "set ar1\(5\) = 42" ++ gdb_test "print ar1\(3:8\)" \ ++ "\\$\[0-9\]+ = \\(3, 4, 42, 6, 7, 8\\)" \ ++ "print ar1\(3:8\) after assignment" ++gdb_test "print \$my_ary" \ ++ "\\$\[0-9\]+ = \\(3, 4, 5, 6, 7, 8\\)" \ ++ "Assignment of subarray to variable after original array changed" ++ ++# Test for subarrays of one dimensional arrays with literals ++ gdb_test "print ar1\(3\)" "\\$\[0-9\]+ = 3" \ ++ "print ar1\(3\)" ++ ++# Tests for subranges of 2 dimensional arrays with subrange variations ++gdb_test "print ar2\(2:3, 3:4\)" \ ++ "\\$\[0-9\]+ = \\(\\( 23, 33\\) \\( 24, 34\\) \\)" \ ++ "print ar2\(2:3, 3:4\)." ++gdb_test "print ar2\(8:9,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \ ++ "print ar2\(8:9,8:\)" ++gdb_test "print ar2\(8:9,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 81, 91\\) \\( 82, 92\\) \\)" \ ++ "print ar2\(8:9,:2\)" ++ ++gdb_test "print ar2\(8:,8:9\)" \ ++ "\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \ ++ "print ar2\(8:,8:9\)" ++gdb_test "print ar2\(8:,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \ ++ "print ar2\(8:,8:\)" ++gdb_test "print ar2\(8:,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 81, 91\\) \\( 82, 92\\) \\)" \ ++ "print ar2\(8:,:2\)" ++ ++gdb_test "print ar2\(:2,2:3\)" \ ++ "\\$\[0-9\]+ = \\(\\( 12, 22\\) \\( 13, 23\\) \\)" \ ++ "print ar2\(:2,2:3\)" ++gdb_test "print ar2\(:2,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 18, 28\\) \\( 19, 29\\) \\)" \ ++ "print ar2\(:2,8:\)" ++gdb_test "print ar2\(:2,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 11, 21\\) \\( 12, 22\\) \\)" \ ++ "print ar2\(:2,:2\)" ++ ++# Test subranges of 2 dimensional arrays with literals and subrange variations ++gdb_test "print ar2\(7, 3:6\)" \ ++ "\\$\[0-9\]+ = \\(73, 74, 75, 76\\)" \ ++ "print ar2\(7, 3:6\)" ++gdb_test "print ar2\(7,8:\)" \ ++ "\\$\[0-9\]+ = \\(78, 79\\)" \ ++ "print ar2\(7,8:\)" ++gdb_test "print ar2\(7,:2\)" \ ++ "\\$\[0-9\]+ = \\(71, 72\\)" \ ++ "print ar2\(7,:2\)" ++ ++gdb_test "print ar2\(7:8,4\)" \ ++ "\\$\[0-9\]+ = \\(74, 84\\)" \ ++ "print ar2(7:8,4\)" ++gdb_test "print ar2\(8:,4\)" \ ++ "\\$\[0-9\]+ = \\(84, 94\\)" \ ++ "print ar2\(8:,4\)" ++gdb_test "print ar2\(:2,4\)" \ ++ "\\$\[0-9\]+ = \\(14, 24\\)" \ ++ "print ar2\(:2,4\)" ++gdb_test "print ar2\(3,4\)" \ ++ "\\$\[0-9\]+ = 34" \ ++ "print ar2\(3,4\)" ++ ++# Test subarrays of 3 dimensional arrays with literals and subrange variations ++gdb_test "print ar3\(2:4,3:4,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 237, 337, 437\\) \\( 247, 347, 447\\)\ ++ \\) \\( \\( 238, 338, 438\\) \\( 248, 348, 448\\) \\) \\)" \ ++ "print ar3\(2:4,3:4,7:8\)" ++gdb_test "print ar3\(2:3,4:5,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 248, 348\\) \\( 258, 358\\) \\) \\(\ ++ \\( 249, 349\\) \\( 259, 359\\) \\) \\)" \ ++ "print ar3\(2:3,4:5,8:\)" ++gdb_test "print ar3\(2:3,4:5,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 241, 341\\) \\( 251, 351\\) \\) \\(\ ++ \\( 242, 342\\) \\( 252, 352\\) \\) \\)" \ ++ "print ar3\(2:3,4:5,:2\)" ++ ++gdb_test "print ar3\(2:3,8:,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 287, 387\\) \\( 297, 397\\) \\) \\(\ ++ \\( 288, 388\\) \\( 298, 398\\) \\) \\)" \ ++ "print ar3\(2:3,8:,7:8\)" ++gdb_test "print ar3\(2:3,8:,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 288, 388\\) \\( 298, 398\\) \\) \\(\ ++ \\( 289, 389\\) \\( 299, 399\\) \\) \\)" \ ++ "print ar3\(2:3,8:,8:\)" ++gdb_test "print ar3\(2:3,8:,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 281, 381\\) \\( 291, 391\\) \\) \\(\ ++ \\( 282, 382\\) \\( 292, 392\\) \\) \\)" \ ++ "print ar3\(2:3,8:,:2\)" ++ ++gdb_test "print ar3\(2:3,:2,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 217, 317\\) \\( 227, 327\\) \\) \\(\ ++ \\( 218, 318\\) \\( 228, 328\\) \\) \\)" \ ++ "print ar3\(2:3,:2,7:8\)" ++gdb_test "print ar3\(2:3,:2,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 218, 318\\) \\( 228, 328\\) \\) \\(\ ++ \\( 219, 319\\) \\( 229, 329\\) \\) \\)" \ ++ "print ar3\(2:3,:2,8:\)" ++gdb_test "print ar3\(2:3,:2,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 211, 311\\) \\( 221, 321\\) \\) \\(\ ++ \\( 212, 312\\) \\( 222, 322\\) \\) \\)" \ ++ "print ar3\(2:3,:2,:2\)" ++ ++gdb_test "print ar3\(8:,3:4,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 837, 937\\) \\( 847, 947\\) \\) \\(\ ++ \\( 838, 938\\) \\( 848, 948\\) \\) \\)" \ ++ "print ar3\(8:,3:4,7:8\)" ++gdb_test "print ar3\(8:,4:5,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 848, 948\\) \\( 858, 958\\) \\) \\(\ ++ \\( 849, 949\\) \\( 859, 959\\) \\) \\)" \ ++ "print ar3\(8:,4:5,8:\)" ++gdb_test "print ar3\(8:,4:5,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 841, 941\\) \\( 851, 951\\) \\) \\(\ ++ \\( 842, 942\\) \\( 852, 952\\) \\) \\)" \ ++ "print ar3\(8:,4:5,:2\)" ++ ++gdb_test "print ar3\(8:,8:,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 887, 987\\) \\( 897, 997\\) \\) \\(\ ++ \\( 888, 988\\) \\( 898, 998\\) \\) \\)" \ ++ "print ar3\(8:,8:,7:8\)" ++gdb_test "print ar3\(8:,8:,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 888, 988\\) \\( 898, 998\\) \\) \\(\ ++ \\( 889, 989\\) \\( 899, 999\\) \\) \\)" \ ++ "print ar3\(8:,8:,8:\)" ++gdb_test "print ar3\(8:,8:,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 881, 981\\) \\( 891, 991\\) \\) \\(\ ++ \\( 882, 982\\) \\( 892, 992\\) \\) \\)" \ ++ "print ar3\(8:,8:,:2\)" ++ ++gdb_test "print ar3\(8:,:2,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 817, 917\\) \\( 827, 927\\) \\) \\(\ ++ \\( 818, 918\\) \\( 828, 928\\) \\) \\)" \ ++ "print ar3\(8:,:2,7:8\)" ++gdb_test "print ar3\(8:,:2,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 818, 918\\) \\( 828, 928\\) \\) \\(\ ++ \\( 819, 919\\) \\( 829, 929\\) \\) \\)" \ ++ "print ar3\(8:,:2,8:\)" ++gdb_test "print ar3\(8:,:2,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 811, 911\\) \\( 821, 921\\) \\) \\(\ ++ \\( 812, 912\\) \\( 822, 922\\) \\) \\)" \ ++ "print ar3\(8:,:2,:2\)" ++ ++ ++gdb_test "print ar3\(:2,3:4,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 137, 237\\) \\( 147, 247\\) \\) \\(\ ++ \\( 138, 238\\) \\( 148, 248\\) \\) \\)" \ ++ "print ar3 \(:2,3:4,7:8\)." ++gdb_test "print ar3\(:2,3:4,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 138, 238\\) \\( 148, 248\\) \\) \\(\ ++ \\( 139, 239\\) \\( 149, 249\\) \\) \\)" \ ++ "print ar3\(:2,3:4,8:\)" ++gdb_test "print ar3\(:2,3:4,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 131, 231\\) \\( 141, 241\\) \\) \\(\ ++ \\( 132, 232\\) \\( 142, 242\\) \\) \\)" \ ++ "print ar3\(:2,3:4,:2\)" ++ ++gdb_test "print ar3\(:2,8:,7:8\)" "\\$\[0-9\]+ = \\(\\( \\( 187, 287\\) \\(\ ++ 197, 297\\) \\) \\( \\( 188, 288\\) \\( 198, 298\\) \\) \\)" \ ++ "print ar3\(:2,8:,7:8\)" ++gdb_test "print ar3\(:2,8:,8:\)" "\\$\[0-9\]+ = \\(\\( \\( 188, 288\\) \\( 198,\ ++ 298\\) \\) \\( \\( 189, 289\\) \\( 199, 299\\) \\) \\)" \ ++ "print ar3\(:2,8:,8:\)" ++gdb_test "print ar3\(:2,8:,:2\)" "\\$\[0-9\]+ = \\(\\( \\( 181, 281\\) \\( 191,\ ++ 291\\) \\) \\( \\( 182, 282\\) \\( 192, 292\\) \\) \\)" \ ++ "print ar3\(:2,8:,:2\)" ++ ++gdb_test "print ar3\(:2,:2,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 117, 217\\) \\( 127, 227\\) \\) \\(\ ++ \\( 118, 218\\) \\( 128, 228\\) \\) \\)" \ ++ "print ar3\(:2,:2,7:8\)" ++gdb_test "print ar3\(:2,:2,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 118, 218\\) \\( 128, 228\\) \\) \\(\ ++ \\( 119, 219\\) \\( 129, 229\\) \\) \\)" \ ++ "print ar3\(:2,:2,8:\)" ++gdb_test "print ar3\(:2,:2,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 111, 211\\) \\( 121, 221\\) \\) \\(\ ++ \\( 112, 212\\) \\( 122, 222\\) \\) \\)" \ ++ "print ar3\(:2,:2,:2\)" ++ ++#Tests for subarrays of 3 dimensional arrays with literals and subranges ++gdb_test "print ar3\(3,3:4,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( 337, 347\\) \\( 338, 348\\) \\)" \ ++ "print ar3\(3,3:4,7:8\)" ++gdb_test "print ar3\(3,4:5,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 348, 358\\) \\( 349, 359\\) \\)" \ ++ "print ar3\(3,4:5,8:\)" ++gdb_test "print ar3\(3,4:5,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 341, 351\\) \\( 342, 352\\) \\)" \ ++ "print ar3\(3,4:5,:2\)" ++gdb_test "print ar3\(3,4:5,3\)" \ ++ "\\$\[0-9\]+ = \\(343, 353\\)" \ ++ "print ar3\(3,4:5,3\)" ++ ++gdb_test "print ar3\(2,8:,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( 287, 297\\) \\( 288, 298\\) \\)" \ ++ "print ar3\(2,8:,7:8\)" ++gdb_test "print ar3\(2,8:,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 288, 298\\) \\( 289, 299\\) \\)" \ ++ "print ar3\(2,8:,8:\)" ++gdb_test "print ar3\(2,8:,:2\)"\ ++ "\\$\[0-9\]+ = \\(\\( 281, 291\\) \\( 282, 292\\) \\)" \ ++ "print ar3\(2,8:,:2\)" ++gdb_test "print ar3\(2,8:,3\)" \ ++ "\\$\[0-9\]+ = \\(283, 293\\)" \ ++ "print ar3\(2,8:,3\)" ++ ++gdb_test "print ar3\(2,:2,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( 217, 227\\) \\( 218, 228\\) \\)" \ ++ "print ar3\(2,:2,7:8\)" ++gdb_test "print ar3\(2,:2,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 218, 228\\) \\( 219, 229\\) \\)" \ ++ "print ar3\(2,:2,8:\)" ++gdb_test "print ar3\(2,:2,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 211, 221\\) \\( 212, 222\\) \\)" \ ++ "print ar3\(2,:2,:2\)" ++gdb_test "print ar3\(2,:2,3\)" \ ++ "\\$\[0-9\]+ = \\(213, 223\\)" \ ++ "print ar3\(2,:2,3\)" ++ ++gdb_test "print ar3\(3,4,7:8\)" \ ++ "\\$\[0-9\]+ = \\(347, 348\\)" \ ++ "print ar3\(3,4,7:8\)" ++gdb_test "print ar3\(3,4,8:\)" \ ++ "\\$\[0-9\]+ = \\(348, 349\\)" \ ++i "print ar3\(3,4,8:\)" ++gdb_test "print ar3\(3,4,:2\)" \ ++ "\\$\[0-9\]+ = \\(341, 342\\)" \ ++ "print ar3\(3,4,:2\)" ++gdb_test "print ar3\(5,6,7\)" \ ++ "\\$\[0-9\]+ = 567" \ ++ "print ar3\(5,6,7\)" ++ ++gdb_test "print ar3\(3:4,6,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( 367, 467\\) \\( 368, 468\\) \\)" \ ++ "print ar3\(3:4,6,7:8\)" ++gdb_test "print ar3\(3:4,6,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 368, 468\\) \\( 369, 469\\) \\)" \ ++ "print ar3\(3:4,6,8:\)" ++gdb_test "print ar3\(3:4,6,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 361, 461\\) \\( 362, 462\\) \\)" \ ++ "print ar3\(3:4,6,:2\)" ++gdb_test "print ar3\(3:4,6,5\)" \ ++ "\\$\[0-9\]+ = \\(365, 465\\)" \ ++ "print ar3\(3:4,6,5\)" ++ ++gdb_test "print ar3\(8:,6,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( 867, 967\\) \\( 868, 968\\) \\)" \ ++ "print ar3\(8:,6,7:8\)" ++gdb_test "print ar3\(8:,6,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 868, 968\\) \\( 869, 969\\) \\)" \ ++ "print ar3\(8:,6,8:\)" ++gdb_test "print ar3\(8:,6,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 861, 961\\) \\( 862, 962\\) \\)" \ ++ "print ar3\(8:,6,:2\)" ++gdb_test "print ar3\(8:,6,5\)" \ ++ "\\$\[0-9\]+ = \\(865, 965\\)" \ ++ "print ar3\(8:,6,5\)" ++ ++gdb_test "print ar3\(:2,6,7:8\)" \ ++ "\\$\[0-9\]+ = \\(\\( 167, 267\\) \\( 168, 268\\) \\)" \ ++ "print ar3\(:2,6,7:8\)" ++gdb_test "print ar3\(:2,6,8:\)" \ ++ "\\$\[0-9\]+ = \\(\\( 168, 268\\) \\( 169, 269\\) \\)" \ ++ "print ar3\(:2,6,8:\)" ++gdb_test "print ar3\(:2,6,:2\)" \ ++ "\\$\[0-9\]+ = \\(\\( 161, 261\\) \\( 162, 262\\) \\)" \ ++ "print ar3\(:2,6,:2\)" ++gdb_test "print ar3\(:2,6,5\)" \ ++ "\\$\[0-9\]+ = \\(165, 265\\)" \ ++ "print ar3\(:2,6,5\)" ++ ++gdb_test "print ar3\(3:4,5:6,4\)" \ ++ "\\$\[0-9\]+ = \\(\\( 354, 454\\) \\( 364, 464\\) \\)" \ ++ "print ar2\(3:4,5:6,4\)" ++gdb_test "print ar3\(8:,5:6,4\)" \ ++ "\\$\[0-9\]+ = \\(\\( 854, 954\\) \\( 864, 964\\) \\)" \ ++ "print ar2\(8:,5:6,4\)" ++gdb_test "print ar3\(:2,5:6,4\)" \ ++ "\\$\[0-9\]+ = \\(\\( 154, 254\\) \\( 164, 264\\) \\)" \ ++ "print ar2\(:2,5:6,4\)" ++ ++# Stride > 1 ++gdb_test "print ar1\(2:6:2\)" \ ++ "\\$\[0-9\]+ = \\(2, 4, 6\\)" \ ++ "print ar1\(2:6:2\)" ++gdb_test "print ar2\(2:6:2,3:4\)" \ ++ "\\$\[0-9\]+ = \\(\\( 23, 43, 63\\) \\( 24, 44, 64\\) \\)" \ ++ "print ar2\(2:6:2,3:4\)" ++gdb_test "print ar2\(2:6:2,3\)" \ ++ "\\$\[0-9\]+ = \\(23, 43, 63\\)" \ ++ "print ar2\(2:6:2,3\)" ++gdb_test "print ar3\(2:6:2,3:5:2,4:7:3\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 234, 434, 634\\) \\( 254, 454, 654\\)\ ++ \\) \\( \\( 237, 437, 637\\) \\( 257, 457, 657\\) \\) \\)" \ ++ "print ar3\(2:6:2,3:5:2,4:7:3\)" ++gdb_test "print ar3\(2:6:2,5,4:7:3\)" \ ++ "\\$\[0-9\]+ = \\(\\( 254, 454, 654\\) \\( 257, 457, 657\\)\ ++ \\)" \ ++ "print ar3\(2:6:2,5,4:7:3\)" ++ ++# Stride < 0 ++gdb_test "print ar1\(8:2:-2\)" \ ++ "\\$\[0-9\]+ = \\(8, 6, 4, 2\\)" \ ++ "print ar1\(8:2:-2\)" ++gdb_test "print ar2\(8:2:-2,3:4\)" \ ++ "\\$\[0-9\]+ = \\(\\( 83, 63, 43, 23\\) \\( 84, 64, 44, 24\\)\ ++ \\)" \ ++ "print ar2\(8:2:-2,3:4\)" ++gdb_test "print ar2\(2:6:2,3\)" \ ++ "\\$\[0-9\]+ = \\(23, 43, 63\\)" \ ++ "print ar2\(2:6:2,3\)" ++gdb_test "print ar3\(2:3,7:3:-4,4:7:3\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 274, 374\\) \\( 234, 334\\) \\) \\(\ ++ \\( 277, 377\\) \\( 237, 337\\) \\) \\)" \ ++ "print ar3\(2:3,7:3:-4,4:7:3\)" ++gdb_test "print ar3\(2:6:2,5,7:4:-3\)" \ ++ "\\$\[0-9\]+ = \\(\\( 257, 457, 657\\) \\( 254, 454, 654\\)\ ++ \\)" \ ++ "print ar3\(2:6:2,5,7:4:-3\)" ++ ++# Tests with negative and mixed indices ++gdb_test "p ar4\(2:4, -2:1, -15:-14\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 261, 361, 461\\) \\( 271, 371, 471\\)\ ++ \\( 281, 381, 481\\) \\( 291, 391, 491\\) \\) \\( \\( 262,\ ++ 362, 462\\) \\( 272, 372, 472\\) \\( 282, 382, 482\\) \\( 292,\ ++ 392, 492\\) \\) \\)" \ ++ "print ar4(2:4, -2:1, -15:-14)" ++ ++gdb_test "p ar4\(7,-6:2:3,-7\)" \ ++ "\\$\[0-9\]+ = \\(729, 759, 789\\)" \ ++ "print ar4(7,-6:2:3,-7)" ++ ++gdb_test "p ar4\(9:2:-2, -6:2:3, -6:-15:-3\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 930, 730, 530, 330\\) \\( 960, 760,\ ++ 560, 360\\) \\( 990, 790, 590, 390\\) \\) \\( \\( 927, 727,\ ++ 527, 327\\) \\( 957, 757, 557, 357\\) \\( 987, 787, 587,\ ++ 387\\) \\) \\( \\( 924, 724, 524, 324\\) \\( 954, 754, 554,\ ++ 354\\) \\( 984, 784, 584, 384\\) \\) \\( \\( 921, 721, 521,\ ++ 321\\) \\( 951, 751, 551, 351\\) \\( 981, 781, 581, 381\\) \\)\ ++ \\)" \ ++ "print ar4(9:2:-2, -6:2:3, -6:-15:-3)" ++ ++gdb_test "p ar4\(:,:,:\)" \ ++ "\\$\[0-9\]+ = \\(\\( \\( 111, 211, 311, 411, 511, 611, 711,\ ++ 811, .*" \ ++ "print ar4(:,:,:)" ++ ++# Provoke error messages for bad user input ++gdb_test "print ar1\(0:4\)" \ ++ "provided bound\\(s\\) outside array bound\\(s\\)" \ ++ "print ar1\(0:4\)" ++gdb_test "print ar1\(8:12\)" \ ++ "provided bound\\(s\\) outside array bound\\(s\\)" \ ++ "print ar1\(8:12\)" ++gdb_test "print ar1\(8:2:\)" \ ++ "A syntax error in expression, near `\\)'." \ ++ "print ar1\(8:2:\)" ++gdb_test "print ar1\(8:2:2\)" \ ++ "Wrong value provided for stride and boundaries" \ ++ "print ar1\(8:2:2\)" ++gdb_test "print ar1\(2:8:-2\)" \ ++ "Wrong value provided for stride and boundaries" \ ++ "print ar1\(2:8:-2\)" ++gdb_test "print ar1\(2:7:0\)" \ ++ "Stride must not be 0" \ ++ "print ar1\(2:7:0\)" ++gdb_test "print ar1\(3:7\) = 42" \ ++ "Invalid cast." \ ++ "Assignment of value to subarray" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/static-arrays.f90 insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/static-arrays.f90 +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/static-arrays.f90 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/static-arrays.f90 2017-04-16 14:24:24.100834094 +0100 +@@ -0,0 +1,55 @@ ++! Copyright 2015 Free Software Foundation, Inc. ++! ++! Contributed by Intel Corp. ++! ++! 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 . ++ ++subroutine sub ++ integer, dimension(9) :: ar1 ++ integer, dimension(9,9) :: ar2 ++ integer, dimension(9,9,9) :: ar3 ++ integer, dimension(10,-7:3, -15:-5) :: ar4 ++ integer :: i,j,k ++ ++ ar1 = 1 ++ ar2 = 1 ++ ar3 = 1 ++ ar4 = 4 ++ ++ ! Resulting array ar3 looks like ((( 111, 112, 113, 114,...))) ++ do i = 1, 9, 1 ++ ar1(i) = i ++ do j = 1, 9, 1 ++ ar2(i,j) = i*10 + j ++ do k = 1, 9, 1 ++ ar3(i,j,k) = i*100 + j*10 + k ++ end do ++ end do ++ end do ++ ++ do i = 1, 10, 1 ++ do j = -7, 3, 1 ++ do k = -15, -5, 1 ++ ar4(i,j,k) = i*100 + (j+8)*10 + (k+16) ++ end do ++ end do ++ end do ++ ++ ar1(1) = 11 !BP1 ++ return ++end ++ ++program testprog ++ call sub ++end +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla.f90 insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla.f90 +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla.f90 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla.f90 2017-04-16 14:24:24.100834094 +0100 +@@ -54,4 +54,14 @@ program vla + + allocate (vla3 (2,2)) ! vla2-deallocated + vla3(:,:) = 13 ++ ++ allocate (vla1 (-2:1, -5:4, -3:-1)) ++ l = allocated(vla1) ++ ++ vla1(:, :, :) = 1 ++ vla1(-2, -3, -1) = -231 ++ ++ deallocate (vla1) ! vla1-neg-bounds ++ l = allocated(vla1) ++ + end program vla +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-ptype.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-ptype.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-ptype.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-ptype.exp 2017-04-16 14:24:24.100834094 +0100 +@@ -98,3 +98,7 @@ gdb_test "ptype vla2" "type = . ++ ++standard_testfile ".f90" ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ ++ {debug f90 quiet}] } { ++ return -1 ++} ++ ++if ![runto MAIN__] then { ++ perror "couldn't run to breakpoint MAIN__" ++ continue ++} ++ ++gdb_breakpoint [gdb_get_line_number "re-reverse-elements"] ++gdb_continue_to_breakpoint "re-reverse-elements" ++gdb_test "print pvla" " = \\\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10\\\)" \ ++ "print re-reverse-elements" ++gdb_test "print pvla(1)" " = 1" "print first re-reverse-element" ++gdb_test "print pvla(10)" " = 10" "print last re-reverse-element" ++ ++gdb_breakpoint [gdb_get_line_number "odd-elements"] ++gdb_continue_to_breakpoint "odd-elements" ++gdb_test "print pvla" " = \\\(1, 3, 5, 7, 9\\\)" "print odd-elements" ++gdb_test "print pvla(1)" " = 1" "print first odd-element" ++gdb_test "print pvla(5)" " = 9" "print last odd-element" ++ ++gdb_breakpoint [gdb_get_line_number "single-element"] ++gdb_continue_to_breakpoint "single-element" ++gdb_test "print pvla" " = \\\(5\\\)" "print single-element" ++gdb_test "print pvla(1)" " = 5" "print one single-element" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-stride.f90 insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-stride.f90 +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-stride.f90 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-stride.f90 2017-04-16 14:24:24.101834103 +0100 +@@ -0,0 +1,29 @@ ++! Copyright 2016 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 . ++ ++program vla_stride ++ integer, target, allocatable :: vla (:) ++ integer, pointer :: pvla (:) ++ ++ allocate(vla(10)) ++ vla = (/ (I, I = 1,10) /) ++ ++ pvla => vla(10:1:-1) ++ pvla => pvla(10:1:-1) ++ pvla => vla(1:10:2) ! re-reverse-elements ++ pvla => vla(5:4:-2) ! odd-elements ++ ++ pvla => null() ! single-element ++end program vla_stride +diff -Naurp insight-7.12.50.20170416.orig/gdb/valarith.c insight-7.12.50.20170416.new/gdb/valarith.c +--- insight-7.12.50.20170416.orig/gdb/valarith.c 2017-04-16 14:23:22.911275347 +0100 ++++ insight-7.12.50.20170416.new/gdb/valarith.c 2017-04-16 14:24:24.101834103 +0100 +@@ -193,10 +193,16 @@ value_subscripted_rvalue (struct value * + struct type *array_type = check_typedef (value_type (array)); + struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); + ULONGEST elt_size = type_length_units (elt_type); +- ULONGEST elt_offs = elt_size * (index - lowerbound); ++ LONGEST elt_offs = index - lowerbound; ++ LONGEST elt_stride = TYPE_BYTE_STRIDE (TYPE_INDEX_TYPE (array_type)); ++ ++ if (elt_stride != 0) ++ elt_offs *= elt_stride; ++ else ++ elt_offs *= elt_size; + + if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) +- && elt_offs >= type_length_units (array_type))) ++ && abs (elt_offs) >= type_length_units (array_type))) + { + if (type_not_associated (array_type)) + error (_("no such vector element (vector not associated)")); +diff -Naurp insight-7.12.50.20170416.orig/gdb/valops.c insight-7.12.50.20170416.new/gdb/valops.c +--- insight-7.12.50.20170416.orig/gdb/valops.c 2017-04-16 14:23:22.923275458 +0100 ++++ insight-7.12.50.20170416.new/gdb/valops.c 2017-04-16 14:24:24.102834112 +0100 +@@ -3787,55 +3787,194 @@ value_of_this_silent (const struct langu + struct value * + value_slice (struct value *array, int lowbound, int length) + { ++ /* Pass unaltered arguments to VALUE_SLICE_1, plus a default stride ++ value of '1', which returns every element between LOWBOUND and ++ (LOWBOUND + LENGTH). We also provide a default CALL_COUNT of '1' ++ as we are only considering the highest dimension, or we are ++ working on a one dimensional array. So we call VALUE_SLICE_1 ++ exactly once. */ ++ return value_slice_1 (array, lowbound, length, 1, 1); ++} ++ ++/* VALUE_SLICE_1 is called for each array dimension to calculate the number ++ of elements as defined by the subscript expression. ++ CALL_COUNT is used to determine if we are calling the function once, e.g. ++ we are working on the current dimension of ARRAY, or if we are calling ++ the function repeatedly. In the later case we need to take elements ++ from the TARGET_TYPE of ARRAY. ++ With a CALL_COUNT greater than 1 we calculate the offsets for every element ++ that should be in the result array. Then we fetch the contents and then ++ copy them into the result array. The result array will have one dimension ++ less than the input array, so later on we need to recreate the indices and ++ ranges in the calling function. */ ++ ++struct value * ++value_slice_1 (struct value *array, int lowbound, int length, ++ int stride_length, int call_count) ++{ + struct type *slice_range_type, *slice_type, *range_type; +- LONGEST lowerbound, upperbound; +- struct value *slice; +- struct type *array_type; ++ struct type *array_type = check_typedef (value_type (array)); ++ struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); ++ unsigned int elt_size, elt_offs; ++ LONGEST ary_high_bound, ary_low_bound; ++ struct value *v; ++ int slice_range_size, i = 0, row_count = 1, elem_count = 1; + +- array_type = check_typedef (value_type (array)); ++ /* Check for legacy code if we are actually dealing with an array or ++ string. */ + if (TYPE_CODE (array_type) != TYPE_CODE_ARRAY + && TYPE_CODE (array_type) != TYPE_CODE_STRING) + error (_("cannot take slice of non-array")); + +- range_type = TYPE_INDEX_TYPE (array_type); +- if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0) +- error (_("slice from bad array or bitstring")); +- +- if (lowbound < lowerbound || length < 0 +- || lowbound + length - 1 > upperbound) +- error (_("slice out of range")); ++ ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (array_type)); ++ ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (array_type)); ++ ++ /* When we are working on a multi-dimensional array, we need to get the ++ attributes of the underlying type. */ ++ if (call_count > 1) ++ { ++ ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (elt_type)); ++ ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (elt_type)); ++ elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type)); ++ row_count = TYPE_LENGTH (array_type) ++ / TYPE_LENGTH (TYPE_TARGET_TYPE (array_type)); ++ } ++ ++ /* With a stride of '1', the number of elements per result row is equal to ++ the LENGTH of the subarray. With non-default stride values, we skip ++ elements, but have to add the start element to the total number of ++ elements per row. */ ++ if (stride_length == 1) ++ elem_count = length; ++ else ++ elem_count = ((length - 1) / stride_length) + 1; ++ ++ elt_size = TYPE_LENGTH (elt_type); ++ elt_offs = lowbound - ary_low_bound; ++ ++ elt_offs *= elt_size; ++ ++ /* Check for valid user input. In case of Fortran this was already done ++ in the calling function. */ ++ if (call_count == 1 ++ && (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) ++ && elt_offs >= TYPE_LENGTH (array_type))) ++ error (_("no such vector element")); ++ ++ /* CALL_COUNT is 1 when we are dealing either with the highest dimension ++ of the array, or a one dimensional array. Set RANGE_TYPE accordingly. ++ In both cases we calculate how many rows/elements will be in the output ++ array by setting slice_range_size. */ ++ if (call_count == 1) ++ { ++ range_type = TYPE_INDEX_TYPE (array_type); ++ slice_range_size = ary_low_bound + elem_count - 1; ++ ++ /* Check if the array bounds are valid. */ ++ if (get_discrete_bounds (range_type, &ary_low_bound, &ary_high_bound) < 0) ++ error (_("slice from bad array or bitstring")); ++ } ++ /* When CALL_COUNT is greater than 1, we are dealing with an array of arrays. ++ So we need to get the type below the current one and set the RANGE_TYPE ++ accordingly. */ ++ else ++ { ++ range_type = TYPE_INDEX_TYPE (TYPE_TARGET_TYPE (array_type)); ++ slice_range_size = ary_low_bound + (row_count * elem_count) - 1; ++ ary_low_bound = TYPE_LOW_BOUND (range_type); ++ } + + /* FIXME-type-allocation: need a way to free this type when we are +- done with it. */ +- slice_range_type = create_static_range_type ((struct type *) NULL, +- TYPE_TARGET_TYPE (range_type), +- lowbound, +- lowbound + length - 1); ++ done with it. */ + ++ slice_range_type = create_static_range_type (NULL, TYPE_TARGET_TYPE (range_type), ++ ary_low_bound, slice_range_size); + { +- struct type *element_type = TYPE_TARGET_TYPE (array_type); +- LONGEST offset +- = (lowbound - lowerbound) * TYPE_LENGTH (check_typedef (element_type)); +- +- slice_type = create_array_type ((struct type *) NULL, +- element_type, +- slice_range_type); +- TYPE_CODE (slice_type) = TYPE_CODE (array_type); ++ struct type *element_type; ++ ++ /* When both CALL_COUNT and STRIDE_LENGTH equal 1, we can use the legacy ++ code for subarrays. */ ++ if (call_count == 1 && stride_length == 1) ++ { ++ element_type = TYPE_TARGET_TYPE (array_type); ++ ++ slice_type = create_array_type (NULL, element_type, slice_range_type); ++ ++ TYPE_CODE (slice_type) = TYPE_CODE (array_type); ++ ++ if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) ++ v = allocate_value_lazy (slice_type); ++ else ++ { ++ v = allocate_value (slice_type); ++ value_contents_copy (v, ++ value_embedded_offset (v), ++ array, ++ value_embedded_offset (array) + elt_offs, ++ elt_size * longest_to_int (length)); ++ } + +- if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) +- slice = allocate_value_lazy (slice_type); ++ } ++ /* With a CALL_COUNT or STRIDE_LENGTH are greater than 1 we are working ++ on a range of ranges. So we copy the relevant elements into the ++ new array we return. */ + else + { +- slice = allocate_value (slice_type); +- value_contents_copy (slice, 0, array, offset, +- type_length_units (slice_type)); ++ int j, offs_store = elt_offs; ++ LONGEST dst_offset = 0; ++ LONGEST src_row_length = TYPE_LENGTH (TYPE_TARGET_TYPE (array_type)); ++ ++ if (call_count == 1) ++ { ++ /* When CALL_COUNT is equal to 1 we are working on the current range ++ and use these elements directly. */ ++ element_type = TYPE_TARGET_TYPE (array_type); ++ } ++ else ++ { ++ /* Working on an array of arrays, the type of the elements is the type ++ of the subarrays' type. */ ++ element_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (array_type)); ++ } ++ ++ slice_type = create_array_type (NULL, element_type, slice_range_type); ++ ++ /* If we have a one dimensional array, we copy its TYPE_CODE. For a ++ multi dimensional array we copy the embedded type's TYPE_CODE. */ ++ if (call_count == 1) ++ TYPE_CODE (slice_type) = TYPE_CODE (array_type); ++ else ++ TYPE_CODE (slice_type) = TYPE_CODE (TYPE_TARGET_TYPE (array_type)); ++ ++ v = allocate_value (slice_type); ++ ++ /* Iterate through the rows of the outer array and set the new offset ++ for each row. */ ++ for (i = 0; i < row_count; i++) ++ { ++ elt_offs = offs_store + i * src_row_length; ++ ++ /* Iterate through the elements in each row to copy only those. */ ++ for (j = 1; j <= elem_count; j++) ++ { ++ /* Fetches the contents of ARRAY and copies them into V. */ ++ value_contents_copy (v, dst_offset, array, elt_offs, elt_size); ++ elt_offs += elt_size * stride_length; ++ dst_offset += elt_size; ++ } ++ } + } + +- set_value_component_location (slice, array); +- set_value_offset (slice, value_offset (array) + offset); ++ set_value_component_location (v, array); ++ if (VALUE_LVAL (v) == lval_register) ++ { ++ VALUE_REGNUM (v) = VALUE_REGNUM (array); ++ VALUE_NEXT_FRAME_ID (v) = VALUE_NEXT_FRAME_ID (array); ++ } ++ set_value_offset (v, value_offset (array) + elt_offs); + } + +- return slice; ++ return v; + } + + /* Create a value for a FORTRAN complex number. Currently most of the +diff -Naurp insight-7.12.50.20170416.orig/gdb/value.h insight-7.12.50.20170416.new/gdb/value.h +--- insight-7.12.50.20170416.orig/gdb/value.h 2017-04-16 14:23:22.913275366 +0100 ++++ insight-7.12.50.20170416.new/gdb/value.h 2017-04-16 14:24:24.103834122 +0100 +@@ -1106,6 +1106,8 @@ extern struct value *varying_to_slice (s + + extern struct value *value_slice (struct value *, int, int); + ++extern struct value *value_slice_1 (struct value *, int, int, int, int); ++ + extern struct value *value_literal_complex (struct value *, struct value *, + struct type *); + diff --git a/insight-7.12-gdb-vla-intel-fortran-vla-strings.patch b/insight-7.12-gdb-vla-intel-fortran-vla-strings.patch new file mode 100644 index 0000000..05ee56f --- /dev/null +++ b/insight-7.12-gdb-vla-intel-fortran-vla-strings.patch @@ -0,0 +1,1443 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/c-valprint.c insight-7.12.50.20170416.new/gdb/c-valprint.c +--- insight-7.12.50.20170416.orig/gdb/c-valprint.c 2017-04-16 15:15:34.729718519 +0100 ++++ insight-7.12.50.20170416.new/gdb/c-valprint.c 2017-04-16 15:16:27.465186960 +0100 +@@ -650,6 +650,28 @@ c_value_print (struct value *val, struct + else + { + /* normal case */ ++ if (TYPE_CODE (type) == TYPE_CODE_PTR ++ && 1 == is_dynamic_type (type)) ++ { ++ CORE_ADDR addr; ++ if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE (type))) ++ addr = value_address (val); ++ else ++ addr = value_as_address (val); ++ ++ /* We resolve the target-type only when the ++ pointer is associated. */ ++ if ((addr != 0) ++ && (0 == type_not_associated (type))) ++ TYPE_TARGET_TYPE (type) = ++ resolve_dynamic_type (TYPE_TARGET_TYPE (type), ++ NULL, addr); ++ } ++ else ++ { ++ /* Do nothing. References are already resolved from the beginning, ++ only pointers are resolved when we actual need the target. */ ++ } + fprintf_filtered (stream, "("); + type_print (value_type (val), "", stream, -1); + fprintf_filtered (stream, ") "); +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2read.c insight-7.12.50.20170416.new/gdb/dwarf2read.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2read.c 2017-04-16 15:15:34.798719132 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2read.c 2017-04-16 15:18:18.202170620 +0100 +@@ -1873,7 +1873,8 @@ static void read_signatured_type (struct + + static int attr_to_dynamic_prop (const struct attribute *attr, + struct die_info *die, struct dwarf2_cu *cu, +- struct dynamic_prop *prop); ++ struct dynamic_prop *prop, const gdb_byte *additional_data, ++ int additional_data_size); + + /* memory allocation interface */ + +@@ -11579,7 +11580,7 @@ read_func_scope (struct die_info *die, s + { + newobj->static_link + = XOBNEW (&objfile->objfile_obstack, struct dynamic_prop); +- attr_to_dynamic_prop (attr, die, cu, newobj->static_link); ++ attr_to_dynamic_prop (attr, die, cu, newobj->static_link, NULL, 0); + } + + cu->list_in_scope = &local_symbols; +@@ -14813,29 +14814,94 @@ read_tag_string_type (struct die_info *d + struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct type *type, *range_type, *index_type, *char_type; + struct attribute *attr; +- unsigned int length; ++ unsigned int length = UINT_MAX; + ++ index_type = objfile_type (objfile)->builtin_int; ++ range_type = create_static_range_type (NULL, index_type, 1, length); ++ ++ /* If DW_AT_string_length is defined, the length is stored in memory. */ + attr = dwarf2_attr (die, DW_AT_string_length, cu); + if (attr) + { +- length = DW_UNSND (attr); ++ if (attr_form_is_block (attr)) ++ { ++ struct attribute *byte_size, *bit_size; ++ struct dynamic_prop high; ++ ++ byte_size = dwarf2_attr (die, DW_AT_byte_size, cu); ++ bit_size = dwarf2_attr (die, DW_AT_bit_size, cu); ++ ++ /* DW_AT_byte_size should never occur in combination with ++ DW_AT_bit_size. */ ++ if (byte_size != NULL && bit_size != NULL) ++ complaint (&symfile_complaints, ++ _("DW_AT_byte_size AND " ++ "DW_AT_bit_size found together at the same time.")); ++ ++ /* If DW_AT_string_length AND DW_AT_byte_size exist together, ++ DW_AT_byte_size describes the number of bytes that should be read ++ from the length memory location. */ ++ if (byte_size != NULL) ++ { ++ /* Build new dwarf2_locexpr_baton structure with additions to the ++ data attribute, to reflect DWARF specialities to get address ++ sizes. */ ++ const gdb_byte append_ops[] = ++ { ++ /* DW_OP_deref_size: size of an address on the target machine ++ (bytes), where the size will be specified by the next ++ operand. */ ++ DW_OP_deref_size, ++ /* Operand for DW_OP_deref_size. */ ++ DW_UNSND(byte_size) }; ++ ++ if (!attr_to_dynamic_prop (attr, die, cu, &high, append_ops, ++ ARRAY_SIZE(append_ops))) ++ complaint (&symfile_complaints, ++ _("Could not parse DW_AT_byte_size")); ++ } ++ else if (bit_size != NULL) ++ complaint (&symfile_complaints, ++ _("DW_AT_string_length AND " ++ "DW_AT_bit_size found but not supported yet.")); ++ /* If DW_AT_string_length WITHOUT DW_AT_byte_size exist, the default ++ is the address size of the target machine. */ ++ else ++ { ++ const gdb_byte append_ops[] = ++ { DW_OP_deref }; ++ ++ if (!attr_to_dynamic_prop (attr, die, cu, &high, append_ops, ++ ARRAY_SIZE(append_ops))) ++ complaint (&symfile_complaints, ++ _("Could not parse DW_AT_string_length")); ++ } ++ ++ TYPE_RANGE_DATA (range_type)->high = high; ++ } ++ else ++ { ++ TYPE_HIGH_BOUND (range_type) = DW_UNSND(attr); ++ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST; ++ } + } + else + { +- /* Check for the DW_AT_byte_size attribute. */ ++ /* Check for the DW_AT_byte_size attribute, which represents the length ++ in this case. */ + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr) +- { +- length = DW_UNSND (attr); +- } ++ { ++ TYPE_HIGH_BOUND (range_type) = DW_UNSND(attr); ++ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST; ++ } + else +- { +- length = 1; +- } ++ { ++ TYPE_HIGH_BOUND (range_type) = 1; ++ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST; ++ } + } + +- index_type = objfile_type (objfile)->builtin_int; +- range_type = create_static_range_type (NULL, index_type, 1, length); + char_type = language_string_char_type (cu->language_defn, gdbarch); + type = create_string_type (NULL, char_type, range_type); + +@@ -15185,7 +15251,8 @@ read_base_type (struct die_info *die, st + + static int + attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die, +- struct dwarf2_cu *cu, struct dynamic_prop *prop) ++ struct dwarf2_cu *cu, struct dynamic_prop *prop, ++ const gdb_byte *additional_data, int additional_data_size) + { + struct dwarf2_property_baton *baton; + struct obstack *obstack = &cu->objfile->objfile_obstack; +@@ -15195,14 +15262,33 @@ attr_to_dynamic_prop (const struct attri + + if (attr_form_is_block (attr)) + { +- baton = XOBNEW (obstack, struct dwarf2_property_baton); ++ baton = XOBNEW(obstack, struct dwarf2_property_baton); + baton->referenced_type = NULL; + baton->locexpr.per_cu = cu->per_cu; +- baton->locexpr.size = DW_BLOCK (attr)->size; +- baton->locexpr.data = DW_BLOCK (attr)->data; ++ ++ if (additional_data != NULL && additional_data_size > 0) ++ { ++ gdb_byte *data; ++ ++ data = (gdb_byte *) obstack_alloc( ++ &cu->objfile->objfile_obstack, ++ DW_BLOCK (attr)->size + additional_data_size); ++ memcpy (data, DW_BLOCK (attr)->data, DW_BLOCK (attr)->size); ++ memcpy (data + DW_BLOCK (attr)->size, additional_data, ++ additional_data_size); ++ ++ baton->locexpr.data = data; ++ baton->locexpr.size = DW_BLOCK (attr)->size + additional_data_size; ++ } ++ else ++ { ++ baton->locexpr.data = DW_BLOCK (attr)->data; ++ baton->locexpr.size = DW_BLOCK (attr)->size; ++ } ++ + prop->data.baton = baton; + prop->kind = PROP_LOCEXPR; +- gdb_assert (prop->data.baton != NULL); ++ gdb_assert(prop->data.baton != NULL); + } + else if (attr_form_is_ref (attr)) + { +@@ -15235,8 +15321,28 @@ attr_to_dynamic_prop (const struct attri + baton = XOBNEW (obstack, struct dwarf2_property_baton); + baton->referenced_type = die_type (target_die, target_cu); + baton->locexpr.per_cu = cu->per_cu; +- baton->locexpr.size = DW_BLOCK (target_attr)->size; +- baton->locexpr.data = DW_BLOCK (target_attr)->data; ++ ++ if (additional_data != NULL && additional_data_size > 0) ++ { ++ gdb_byte *data; ++ ++ data = (gdb_byte *) obstack_alloc (&cu->objfile->objfile_obstack, ++ DW_BLOCK (target_attr)->size + additional_data_size); ++ memcpy (data, DW_BLOCK (target_attr)->data, ++ DW_BLOCK (target_attr)->size); ++ memcpy (data + DW_BLOCK (target_attr)->size, ++ additional_data, additional_data_size); ++ ++ baton->locexpr.data = data; ++ baton->locexpr.size = (DW_BLOCK (target_attr)->size ++ + additional_data_size); ++ } ++ else ++ { ++ baton->locexpr.data = DW_BLOCK (target_attr)->data; ++ baton->locexpr.size = DW_BLOCK (target_attr)->size; ++ } ++ + prop->data.baton = baton; + prop->kind = PROP_LOCEXPR; + gdb_assert (prop->data.baton != NULL); +@@ -15347,24 +15453,24 @@ read_subrange_type (struct die_info *die + + attr = dwarf2_attr (die, DW_AT_byte_stride, cu); + if (attr) +- if (!attr_to_dynamic_prop (attr, die, cu, &stride)) ++ if (!attr_to_dynamic_prop (attr, die, cu, &stride, NULL, 0)) + complaint (&symfile_complaints, _("Missing DW_AT_byte_stride " + "- DIE at 0x%x [in module %s]"), + to_underlying (die->sect_off), objfile_name (cu->objfile)); + + attr = dwarf2_attr (die, DW_AT_lower_bound, cu); + if (attr) +- attr_to_dynamic_prop (attr, die, cu, &low); ++ attr_to_dynamic_prop (attr, die, cu, &low, NULL, 0); + else if (!low_default_is_valid) + complaint (&symfile_complaints, _("Missing DW_AT_lower_bound " + "- DIE at 0x%x [in module %s]"), + to_underlying (die->sect_off), objfile_name (cu->objfile)); + + attr = dwarf2_attr (die, DW_AT_upper_bound, cu); +- if (!attr_to_dynamic_prop (attr, die, cu, &high)) ++ if (!attr_to_dynamic_prop (attr, die, cu, &high, NULL, 0)) + { + attr = dwarf2_attr (die, DW_AT_count, cu); +- if (attr_to_dynamic_prop (attr, die, cu, &high)) ++ if (attr_to_dynamic_prop (attr, die, cu, &high, NULL, 0)) + { + /* If bounds are constant do the final calculation here. */ + if (low.kind == PROP_CONST && high.kind == PROP_CONST) +@@ -23009,7 +23115,7 @@ set_die_type (struct die_info *die, stru + attr = dwarf2_attr (die, DW_AT_allocated, cu); + if (attr_form_is_block (attr)) + { +- if (attr_to_dynamic_prop (attr, die, cu, &prop)) ++ if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0)) + add_dyn_prop (DYN_PROP_ALLOCATED, prop, type, objfile); + } + else if (attr != NULL) +@@ -23024,7 +23130,7 @@ set_die_type (struct die_info *die, stru + attr = dwarf2_attr (die, DW_AT_associated, cu); + if (attr_form_is_block (attr)) + { +- if (attr_to_dynamic_prop (attr, die, cu, &prop)) ++ if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0)) + add_dyn_prop (DYN_PROP_ASSOCIATED, prop, type, objfile); + } + else if (attr != NULL) +@@ -23037,7 +23143,7 @@ set_die_type (struct die_info *die, stru + + /* Read DW_AT_data_location and set in type. */ + attr = dwarf2_attr (die, DW_AT_data_location, cu); +- if (attr_to_dynamic_prop (attr, die, cu, &prop)) ++ if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0)) + add_dyn_prop (DYN_PROP_DATA_LOCATION, prop, type, objfile); + + if (dwarf2_per_objfile->die_type_hash == NULL) +diff -Naurp insight-7.12.50.20170416.orig/gdb/f-typeprint.c insight-7.12.50.20170416.new/gdb/f-typeprint.c +--- insight-7.12.50.20170416.orig/gdb/f-typeprint.c 2017-04-16 15:15:34.786719025 +0100 ++++ insight-7.12.50.20170416.new/gdb/f-typeprint.c 2017-04-16 15:31:51.465394712 +0100 +@@ -37,7 +37,7 @@ static void f_type_print_args (struct ty + #endif + + static void f_type_print_varspec_suffix (struct type *, struct ui_file *, int, +- int, int, int); ++ int, int, int, int); + + void f_type_print_varspec_prefix (struct type *, struct ui_file *, + int, int); +@@ -53,18 +53,6 @@ f_print_type (struct type *type, const c + { + enum type_code code; + +- if (type_not_associated (type)) +- { +- val_print_not_associated (stream); +- return; +- } +- +- if (type_not_allocated (type)) +- { +- val_print_not_allocated (stream); +- return; +- } +- + f_type_print_base (type, stream, show, level); + code = TYPE_CODE (type); + if ((varstring != NULL && *varstring != '\0') +@@ -89,7 +77,7 @@ f_print_type (struct type *type, const c + + demangled_args = (*varstring != '\0' + && varstring[strlen (varstring) - 1] == ')'); +- f_type_print_varspec_suffix (type, stream, show, 0, demangled_args, 0); ++ f_type_print_varspec_suffix (type, stream, show, 0, demangled_args, 0, 0); + } + } + +@@ -159,7 +147,7 @@ f_type_print_varspec_prefix (struct type + static void + f_type_print_varspec_suffix (struct type *type, struct ui_file *stream, + int show, int passed_a_ptr, int demangled_args, +- int arrayprint_recurse_level) ++ int arrayprint_recurse_level, int print_rank_only) + { + LONGEST upper_bound, lower_bound; + +@@ -183,34 +171,50 @@ f_type_print_varspec_suffix (struct type + fprintf_filtered (stream, "("); + + if (type_not_associated (type)) +- val_print_not_associated (stream); ++ print_rank_only = 1; + else if (type_not_allocated (type)) +- val_print_not_allocated (stream); ++ print_rank_only = 1; ++ else if ((TYPE_ASSOCIATED_PROP (type) ++ && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ASSOCIATED_PROP (type))) ++ || (TYPE_ALLOCATED_PROP (type) ++ && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ALLOCATED_PROP (type))) ++ || (TYPE_DATA_LOCATION (type) ++ && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_DATA_LOCATION (type)))) ++ /* This case exist when we ptype a typename which has the ++ dynamic properties but cannot be resolved as there is ++ no object. */ ++ print_rank_only = 1; ++ ++ if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY) ++ f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, ++ 0, 0, arrayprint_recurse_level, ++ print_rank_only); ++ ++ if (print_rank_only == 1) ++ fprintf_filtered (stream, ":"); + else +- { +- if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY) +- f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, +- 0, 0, arrayprint_recurse_level); +- +- lower_bound = f77_get_lowerbound (type); +- if (lower_bound != 1) /* Not the default. */ +- fprintf_filtered (stream, "%s:", plongest (lower_bound)); +- +- /* Make sure that, if we have an assumed size array, we +- print out a warning and print the upperbound as '*'. */ +- +- if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) +- fprintf_filtered (stream, "*"); +- else +- { +- upper_bound = f77_get_upperbound (type); +- fprintf_filtered (stream, "%s", plongest (upper_bound)); +- } +- +- if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY) +- f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, +- 0, 0, arrayprint_recurse_level); +- } ++ { ++ lower_bound = f77_get_lowerbound (type); ++ if (lower_bound != 1) /* Not the default. */ ++ fprintf_filtered (stream, "%s:", plongest (lower_bound)); ++ ++ /* Make sure that, if we have an assumed size array, we ++ print out a warning and print the upperbound as '*'. */ ++ ++ if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) ++ fprintf_filtered (stream, "*"); ++ else ++ { ++ upper_bound = f77_get_upperbound (type); ++ fprintf_filtered (stream, "%s", plongest (upper_bound)); ++ } ++ } ++ ++ if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY) ++ f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, ++ 0, 0, arrayprint_recurse_level, ++ print_rank_only); ++ + if (arrayprint_recurse_level == 1) + fprintf_filtered (stream, ")"); + else +@@ -221,13 +225,14 @@ f_type_print_varspec_suffix (struct type + case TYPE_CODE_PTR: + case TYPE_CODE_REF: + f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0, +- arrayprint_recurse_level); ++ arrayprint_recurse_level, 0); + fprintf_filtered (stream, ")"); + break; + + case TYPE_CODE_FUNC: + f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, +- passed_a_ptr, 0, arrayprint_recurse_level); ++ passed_a_ptr, 0, arrayprint_recurse_level, ++ 0); + if (passed_a_ptr) + fprintf_filtered (stream, ")"); + +@@ -378,7 +383,7 @@ f_type_print_base (struct type *type, st + fputs_filtered (" :: ", stream); + fputs_filtered (TYPE_FIELD_NAME (type, index), stream); + f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index), +- stream, show - 1, 0, 0, 0); ++ stream, show - 1, 0, 0, 0, 0); + fputs_filtered ("\n", stream); + } + fprintfi_filtered (level, stream, "End Type "); +diff -Naurp insight-7.12.50.20170416.orig/gdb/gdbtypes.c insight-7.12.50.20170416.new/gdb/gdbtypes.c +--- insight-7.12.50.20170416.orig/gdb/gdbtypes.c 2017-04-16 15:15:34.806719203 +0100 ++++ insight-7.12.50.20170416.new/gdb/gdbtypes.c 2017-04-16 15:16:27.473187031 +0100 +@@ -1840,7 +1840,8 @@ is_dynamic_type_internal (struct type *t + type = check_typedef (type); + + /* We only want to recognize references at the outermost level. */ +- if (top_level && TYPE_CODE (type) == TYPE_CODE_REF) ++ if (top_level && ++ (TYPE_CODE (type) == TYPE_CODE_REF || TYPE_CODE (type) == TYPE_CODE_PTR)) + type = check_typedef (TYPE_TARGET_TYPE (type)); + + /* Types that have a dynamic TYPE_DATA_LOCATION are considered +@@ -1874,6 +1875,7 @@ is_dynamic_type_internal (struct type *t + } + + case TYPE_CODE_ARRAY: ++ case TYPE_CODE_STRING: + { + gdb_assert (TYPE_NFIELDS (type) == 1); + +@@ -1986,7 +1988,8 @@ resolve_dynamic_array (struct type *type + struct type *ary_dim; + struct dynamic_prop *prop; + +- gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY); ++ gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY ++ || TYPE_CODE (type) == TYPE_CODE_STRING); + + type = copy_type (type); + +@@ -2011,13 +2014,17 @@ resolve_dynamic_array (struct type *type + + ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type)); + +- if (ary_dim != NULL && TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY) ++ if (ary_dim != NULL && (TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY ++ || TYPE_CODE (ary_dim) == TYPE_CODE_STRING)) + elt_type = resolve_dynamic_array (ary_dim, addr_stack); + else + elt_type = TYPE_TARGET_TYPE (type); + +- return create_array_type_with_stride (type, elt_type, range_type, +- TYPE_FIELD_BITSIZE (type, 0)); ++ if (TYPE_CODE (type) == TYPE_CODE_STRING) ++ return create_string_type (type, elt_type, range_type); ++ else ++ return create_array_type_with_stride (type, elt_type, range_type, ++ TYPE_FIELD_BITSIZE (type, 0)); + } + + /* Resolve dynamic bounds of members of the union TYPE to static +@@ -2147,6 +2154,28 @@ resolve_dynamic_struct (struct type *typ + return resolved_type; + } + ++/* Worker for pointer types. */ ++ ++static struct type * ++resolve_dynamic_pointer (struct type *type, ++ struct property_addr_info *addr_stack) ++{ ++ struct dynamic_prop *prop; ++ CORE_ADDR value; ++ ++ type = copy_type (type); ++ ++ /* Resolve associated property. */ ++ prop = TYPE_ASSOCIATED_PROP (type); ++ if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) ++ { ++ TYPE_DYN_PROP_ADDR (prop) = value; ++ TYPE_DYN_PROP_KIND (prop) = PROP_CONST; ++ } ++ ++ return type; ++} ++ + /* Worker for resolved_dynamic_type. */ + + static struct type * +@@ -2195,7 +2224,12 @@ resolve_dynamic_type_internal (struct ty + break; + } + ++ case TYPE_CODE_PTR: ++ resolved_type = resolve_dynamic_pointer (type, addr_stack); ++ break; ++ + case TYPE_CODE_ARRAY: ++ case TYPE_CODE_STRING: + resolved_type = resolve_dynamic_array (type, addr_stack); + break; + +diff -Naurp insight-7.12.50.20170416.orig/gdb/NEWS insight-7.12.50.20170416.new/gdb/NEWS +--- insight-7.12.50.20170416.orig/gdb/NEWS 2017-04-09 01:11:01.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/NEWS 2017-04-16 15:16:27.475187049 +0100 +@@ -109,6 +109,8 @@ maint print arc arc-instruction address + Alpha running FreeBSD alpha*-*-freebsd* + Alpha running GNU/kFreeBSD alpha*-*-kfreebsd*-gnu + ++* Fortran: Support pointers to dynamic types. ++ + *** Changes in GDB 7.12 + + * GDB and GDBserver now build with a C++ compiler by default. +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.cp/vla-cxx.cc insight-7.12.50.20170416.new/gdb/testsuite/gdb.cp/vla-cxx.cc +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.cp/vla-cxx.cc 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.cp/vla-cxx.cc 2017-04-16 15:16:27.475187049 +0100 +@@ -15,6 +15,10 @@ + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + ++extern "C" { ++#include ++} ++ + struct container; + + struct element +@@ -40,11 +44,16 @@ int main(int argc, char **argv) + typedef typeof (vla) &vlareftypedef; + vlareftypedef vlaref2 (vla); + container c; ++ typeof (vla) *ptr = NULL; ++ ++ // Before pointer assignment ++ ptr = &vla; + + for (int i = 0; i < z; ++i) + vla[i] = 5 + 2 * i; + + // vlas_filled + vla[0] = 2 * vla[0]; ++ + return vla[2]; + } +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.cp/vla-cxx.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.cp/vla-cxx.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.cp/vla-cxx.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.cp/vla-cxx.exp 2017-04-16 15:16:27.476187058 +0100 +@@ -23,6 +23,12 @@ if ![runto_main] { + return -1 + } + ++gdb_breakpoint [gdb_get_line_number "Before pointer assignment"] ++gdb_continue_to_breakpoint "Before pointer assignment" ++gdb_test "ptype ptr" "int \\(\\*\\)\\\[variable length\\\]" "ptype ptr, Before pointer assignment" ++gdb_test "print ptr" "\\(int \\(\\*\\)\\\[variable length\\\]\\) 0x0" "print ptr, Before pointer assignment" ++gdb_test "print *ptr" "Cannot access memory at address 0x0" "print *ptr, Before pointer assignment" ++ + gdb_breakpoint [gdb_get_line_number "vlas_filled"] + gdb_continue_to_breakpoint "vlas_filled" + +@@ -33,3 +39,6 @@ gdb_test "print vlaref" " = \\(int \\(&\ + # bug being tested, it's better not to depend on the exact spelling. + gdb_test "print vlaref2" " = \\(.*\\) @$hex: \\{5, 7, 9\\}" + gdb_test "print c" " = \\{e = \\{c = @$hex\\}\\}" ++gdb_test "ptype ptr" "int \\(\\*\\)\\\[3\\\]" ++gdb_test "print ptr" "\\(int \\(\\*\\)\\\[3\\\]\\) $hex" ++gdb_test "print *ptr" " = \\{5, 7, 9\\}" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/pointers.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/pointers.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/pointers.exp 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/pointers.exp 2017-04-16 15:16:27.476187058 +0100 +@@ -0,0 +1,143 @@ ++# Copyright 2016 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 . ++ ++standard_testfile "pointers.f90" ++load_lib fortran.exp ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ ++ {debug f90 quiet}] } { ++ return -1 ++} ++ ++if ![runto_main] { ++ untested "could not run to main" ++ return -1 ++} ++ ++# Depending on the compiler being used, the type names can be printed differently. ++set logical [fortran_logical4] ++set real [fortran_real4] ++set int [fortran_int4] ++set complex [fortran_complex4] ++ ++ ++gdb_breakpoint [gdb_get_line_number "Before pointer assignment"] ++gdb_continue_to_breakpoint "Before pointer assignment" ++gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) 0x0" "print logp, not associated" ++gdb_test "print *logp" "Cannot access memory at address 0x0" "print *logp, not associated" ++gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) 0x0" "print comp, not associated" ++gdb_test "print *comp" "Cannot access memory at address 0x0" "print *comp, not associated" ++gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) 0x0" "print charp, not associated" ++gdb_test "print *charp" "Cannot access memory at address 0x0" "print *charp, not associated" ++gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) 0x0" "print charap, not associated" ++gdb_test "print *charap" "Cannot access memory at address 0x0" "print *charap, not associated" ++gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0" "print intp, not associated" ++gdb_test "print *intp" "Cannot access memory at address 0x0" "print *intp, not associated" ++set test "print intap, not associated" ++gdb_test_multiple "print intap" $test { ++ -re " = \\(PTR TO -> \\( $int \\(:,:\\)\\)\\) \r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re " = \r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) 0x0" "print realp, not associated" ++gdb_test "print *realp" "Cannot access memory at address 0x0" "print *realp, not associated" ++gdb_test "print \$my_var = intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0" ++set test "print cyclicp1, not associated" ++gdb_test_multiple "print cyclicp1" $test { ++ -re "= \\( i = -?\\d+, p = 0x0 \\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "= \\( i = -?\\d+, p = \\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++set test "print cyclicp1%p, not associated" ++gdb_test_multiple "print cyclicp1%p" $test { ++ -re "= \\(PTR TO -> \\( Type typewithpointer \\)\\) 0x0\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "= \\(PTR TO -> \\( Type typewithpointer \\)\\) \r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++ ++ ++gdb_breakpoint [gdb_get_line_number "Before value assignment"] ++gdb_continue_to_breakpoint "Before value assignment" ++gdb_test "print *(twop)%ivla2" "= " ++ ++ ++gdb_breakpoint [gdb_get_line_number "After value assignment"] ++gdb_continue_to_breakpoint "After value assignment" ++gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) $hex\( <.*>\)?" ++gdb_test "print *logp" "= \\.TRUE\\." ++gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) $hex\( <.*>\)?" ++gdb_test "print *comp" "= \\(1,2\\)" ++gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) $hex\( <.*>\)?" ++gdb_test "print *charp" "= 'a'" ++gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) $hex\( <.*>\)?" ++gdb_test "print *charap" "= 'abc'" ++gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) $hex\( <.*>\)?" ++gdb_test "print *intp" "= 10" ++set test_name "print intap, associated" ++gdb_test_multiple "print intap" $test_name { ++ -re "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)\r\n$gdb_prompt $" { ++ pass $test_name ++ } ++ -re "= \\(PTR TO -> \\( $int \\(10,2\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" { ++ gdb_test "print *intap" "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)" ++ pass $test_name ++ } ++} ++set test_name "print intvlap, associated" ++gdb_test_multiple "print intvlap" $test_name { ++ -re "= \\(2, 2, 2, 4(, 2){6}\\)\r\n$gdb_prompt $" { ++ pass $test_name ++ } ++ -re "= \\(PTR TO -> \\( $int \\(10\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" { ++ gdb_test "print *intvlap" "= \\(2, 2, 2, 4(, 2){6}\\)" ++ pass $test_name ++ } ++} ++gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) $hex\( <.*>\)?" ++gdb_test "print *realp" "= 3\\.14000\\d+" ++gdb_test "print arrayOfPtr(2)%p" "= \\(PTR TO -> \\( Type two \\)\\) $hex\( <.*>\)?" ++gdb_test "print *(arrayOfPtr(2)%p)" "= \\( ivla1 = \\(11, 12, 13\\), ivla2 = \\(\\( 211, 221\\) \\( 212, 222\\) \\) \\)" ++set test_name "print arrayOfPtr(3)%p" ++gdb_test_multiple $test_name $test_name { ++ -re "= \\(PTR TO -> \\( Type two \\)\\) \r\n$gdb_prompt $" { ++ pass $test_name ++ } ++ -re "= \\(PTR TO -> \\( Type two \\)\\) 0x0\r\n$gdb_prompt $" { ++ pass $test_name ++ } ++} ++set test_name "print *(arrayOfPtr(3)%p), associated" ++gdb_test_multiple "print *(arrayOfPtr(3)%p)" $test_name { ++ -re "Cannot access memory at address 0x0\r\n$gdb_prompt $" { ++ pass $test_name ++ } ++ -re "Attempt to take contents of a not associated pointer.\r\n$gdb_prompt $" { ++ pass $test_name ++ } ++} ++gdb_test "print cyclicp1" "= \\( i = 1, p = $hex\( <.*>\)? \\)" ++gdb_test "print cyclicp1%p" "= \\(PTR TO -> \\( Type typewithpointer \\)\\) $hex\( <.*>\)?" ++gdb_test "print *((integer*) &inta + 2)" "= 3" "print temporary pointer, array" ++gdb_test "print *((integer*) &intvla + 3)" "= 4" "print temporary pointer, allocated vla" ++gdb_test "print \$pc" "= \\(PTR TO -> \\( void \\(\\)\\(\\)\\)\\) $hex " "Print program counter" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/pointers.f90 insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/pointers.f90 +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/pointers.f90 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/pointers.f90 2017-04-16 15:16:27.476187058 +0100 +@@ -0,0 +1,109 @@ ++! Copyright 2016 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 . ++ ++program pointers ++ ++ type :: two ++ integer, allocatable :: ivla1 (:) ++ integer, allocatable :: ivla2 (:, :) ++ end type two ++ ++ type :: typeWithPointer ++ integer i ++ type(typeWithPointer), pointer:: p ++ end type typeWithPointer ++ ++ type :: twoPtr ++ type (two), pointer :: p ++ end type twoPtr ++ ++ logical, target :: logv ++ complex, target :: comv ++ character, target :: charv ++ character (len=3), target :: chara ++ integer, target :: intv ++ integer, target, dimension (10,2) :: inta ++ integer, target, allocatable, dimension (:) :: intvla ++ real, target :: realv ++ type(two), target :: twov ++ type(twoPtr) :: arrayOfPtr (3) ++ type(typeWithPointer), target:: cyclicp1,cyclicp2 ++ ++ logical, pointer :: logp ++ complex, pointer :: comp ++ character, pointer:: charp ++ character (len=3), pointer:: charap ++ integer, pointer :: intp ++ integer, pointer, dimension (:,:) :: intap ++ integer, pointer, dimension (:) :: intvlap ++ real, pointer :: realp ++ type(two), pointer :: twop ++ ++ nullify (logp) ++ nullify (comp) ++ nullify (charp) ++ nullify (charap) ++ nullify (intp) ++ nullify (intap) ++ nullify (intvlap) ++ nullify (realp) ++ nullify (twop) ++ nullify (arrayOfPtr(1)%p) ++ nullify (arrayOfPtr(2)%p) ++ nullify (arrayOfPtr(3)%p) ++ nullify (cyclicp1%p) ++ nullify (cyclicp2%p) ++ ++ logp => logv ! Before pointer assignment ++ comp => comv ++ charp => charv ++ charap => chara ++ intp => intv ++ intap => inta ++ intvlap => intvla ++ realp => realv ++ twop => twov ++ arrayOfPtr(2)%p => twov ++ cyclicp1%i = 1 ++ cyclicp1%p => cyclicp2 ++ cyclicp2%i = 2 ++ cyclicp2%p => cyclicp1 ++ ++ logv = associated(logp) ! Before value assignment ++ comv = cmplx(1,2) ++ charv = "a" ++ chara = "abc" ++ intv = 10 ++ inta(:,:) = 1 ++ inta(3,1) = 3 ++ allocate (intvla(10)) ++ intvla(:) = 2 ++ intvla(4) = 4 ++ intvlap => intvla ++ realv = 3.14 ++ ++ allocate (twov%ivla1(3)) ++ allocate (twov%ivla2(2,2)) ++ twov%ivla1(1) = 11 ++ twov%ivla1(2) = 12 ++ twov%ivla1(3) = 13 ++ twov%ivla2(1,1) = 211 ++ twov%ivla2(2,1) = 221 ++ twov%ivla2(1,2) = 212 ++ twov%ivla2(2,2) = 222 ++ ++ intv = intv + 1 ! After value assignment ++ ++end program pointers +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/print_type.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/print_type.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/print_type.exp 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/print_type.exp 2017-04-16 15:16:27.476187058 +0100 +@@ -0,0 +1,100 @@ ++# Copyright 2016 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 . ++ ++standard_testfile "pointers.f90" ++load_lib fortran.exp ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ ++ {debug f90 quiet}] } { ++ return -1 ++} ++ ++ ++if ![runto_main] { ++ untested "could not run to main" ++ return -1 ++} ++ ++# Depending on the compiler being used, the type names can be printed differently. ++set logical [fortran_logical4] ++set real [fortran_real4] ++set int [fortran_int4] ++set complex [fortran_complex4] ++ ++gdb_breakpoint [gdb_get_line_number "Before pointer assignment"] ++gdb_continue_to_breakpoint "Before pointer assignment" ++gdb_test "ptype logp" "type = PTR TO -> \\( $logical \\)" "ptype logp, not associated" ++gdb_test "ptype comp" "type = PTR TO -> \\( $complex \\)" "ptype comp, not associated" ++gdb_test "ptype charp" "type = PTR TO -> \\( character\\*1 \\)" "ptype charp, not associated" ++gdb_test "ptype charap" "type = PTR TO -> \\( character\\*3 \\)" "ptype charap, not associated" ++gdb_test "ptype intp" "type = PTR TO -> \\( $int \\)" "ptype intp, not associated" ++set test "ptype intap, not associated" ++gdb_test_multiple "ptype intap" $test { ++ -re "type = PTR TO -> \\( $int \\(:,:\\)\\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "type = $int \\(:,:\\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++gdb_test "ptype realp" "type = PTR TO -> \\( $real \\)" "ptype realp, not associated" ++gdb_test "ptype twop" \ ++ [multi_line "type = PTR TO -> \\( Type two" \ ++ " $int :: ivla1\\(:\\)" \ ++ " $int :: ivla2\\(:,:\\)" \ ++ "End Type two \\)"] \ ++ "ptype twop, not associated" ++gdb_test "ptype two" \ ++ [multi_line "type = Type two" \ ++ " $int :: ivla1\\(:\\)" \ ++ " $int :: ivla2\\(:,:\\)" \ ++ "End Type two"] ++ ++ ++gdb_breakpoint [gdb_get_line_number "Before value assignment"] ++gdb_continue_to_breakpoint "Before value assignment" ++gdb_test "ptype twop" \ ++ [multi_line "type = PTR TO -> \\( Type two" \ ++ " $int :: ivla1\\(:\\)" \ ++ " $int :: ivla2\\(:,:\\)" \ ++ "End Type two \\)"] ++ ++ ++gdb_breakpoint [gdb_get_line_number "After value assignment"] ++gdb_continue_to_breakpoint "After value assignment" ++gdb_test "ptype logv" "type = $logical" ++gdb_test "ptype comv" "type = $complex" ++gdb_test "ptype charv" "type = character\\*1" ++gdb_test "ptype chara" "type = character\\*3" ++gdb_test "ptype intv" "type = $int" ++gdb_test "ptype inta" "type = $int \\(10,2\\)" ++gdb_test "ptype realv" "type = $real" ++ ++ ++gdb_test "ptype logp" "type = PTR TO -> \\( $logical \\)" ++gdb_test "ptype comp" "type = PTR TO -> \\( $complex \\)" ++gdb_test "ptype charp" "type = PTR TO -> \\( character\\*1 \\)" ++gdb_test "ptype charap" "type = PTR TO -> \\( character\\*3 \\)" ++gdb_test "ptype intp" "type = PTR TO -> \\( $int \\)" ++set test "ptype intap" ++gdb_test_multiple $test $test { ++ -re "type = $int \\(10,2\\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "type = PTR TO -> \\( $int \\(10,2\\)\\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++gdb_test "ptype realp" "type = PTR TO -> \\( $real \\)" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-ptype.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-ptype.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-ptype.exp 2017-04-16 15:15:34.808719221 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-ptype.exp 2017-04-16 15:16:27.477187066 +0100 +@@ -32,9 +32,9 @@ set real [fortran_real4] + # Check the ptype of various VLA states and pointer to VLA's. + gdb_breakpoint [gdb_get_line_number "vla1-init"] + gdb_continue_to_breakpoint "vla1-init" +-gdb_test "ptype vla1" "type = " "ptype vla1 not initialized" +-gdb_test "ptype vla2" "type = " "ptype vla2 not initialized" +-gdb_test "ptype pvla" "type = " "ptype pvla not initialized" ++gdb_test "ptype vla1" "type = $real \\(:,:,:\\)" "ptype vla1 not initialized" ++gdb_test "ptype vla2" "type = $real \\(:,:,:\\)" "ptype vla2 not initialized" ++gdb_test "ptype pvla" "type = $real \\(:,:,:\\)" "ptype pvla not initialized" + gdb_test "ptype vla1(3, 6, 9)" "no such vector element \\\(vector not allocated\\\)" \ + "ptype vla1(3, 6, 9) not initialized" + gdb_test "ptype vla2(5, 45, 20)" \ +@@ -81,20 +81,20 @@ gdb_test "ptype vla2(5, 45, 20)" "type = + + gdb_breakpoint [gdb_get_line_number "pvla-deassociated"] + gdb_continue_to_breakpoint "pvla-deassociated" +-gdb_test "ptype pvla" "type = " "ptype pvla deassociated" ++gdb_test "ptype pvla" "type = $real \\(:,:,:\\)" "ptype pvla deassociated" + gdb_test "ptype pvla(5, 45, 20)" \ + "no such vector element \\\(vector not associated\\\)" \ + "ptype pvla(5, 45, 20) not associated" + + gdb_breakpoint [gdb_get_line_number "vla1-deallocated"] + gdb_continue_to_breakpoint "vla1-deallocated" +-gdb_test "ptype vla1" "type = " "ptype vla1 not allocated" ++gdb_test "ptype vla1" "type = $real \\(:,:,:\\)" "ptype vla1 not allocated" + gdb_test "ptype vla1(3, 6, 9)" "no such vector element \\\(vector not allocated\\\)" \ + "ptype vla1(3, 6, 9) not allocated" + + gdb_breakpoint [gdb_get_line_number "vla2-deallocated"] + gdb_continue_to_breakpoint "vla2-deallocated" +-gdb_test "ptype vla2" "type = " "ptype vla2 not allocated" ++gdb_test "ptype vla2" "type = $real \\(:,:,:\\)" "ptype vla2 not allocated" + gdb_test "ptype vla2(5, 45, 20)" \ + "no such vector element \\\(vector not allocated\\\)" \ + "ptype vla2(5, 45, 20) not allocated" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-strings.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-strings.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-strings.exp 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-strings.exp 2017-04-16 15:16:27.477187066 +0100 +@@ -0,0 +1,103 @@ ++# Copyright 2016 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 . ++ ++standard_testfile ".f90" ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ ++ {debug f90 quiet}] } { ++ return -1 ++} ++ ++# check that all fortran standard datatypes will be ++# handled correctly when using as VLA's ++ ++if ![runto_main] { ++ untested "could not run to main" ++ return -1 ++} ++ ++gdb_breakpoint [gdb_get_line_number "var_char-allocated-1"] ++gdb_continue_to_breakpoint "var_char-allocated-1" ++set test "whatis var_char first time" ++gdb_test_multiple "whatis var_char" $test { ++ -re "type = PTR TO -> \\( character\\*10 \\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "type = character\\*10\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++set test "ptype var_char first time" ++gdb_test_multiple "ptype var_char" $test { ++ -re "type = PTR TO -> \\( character\\*10 \\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "type = character\\*10\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++ ++ ++gdb_test "next" "\\d+.*var_char = 'foo'.*" \ ++ "next to allocation status of var_char" ++gdb_test "print l" " = \\.TRUE\\." "print allocation status first time" ++ ++ ++gdb_breakpoint [gdb_get_line_number "var_char-filled-1"] ++gdb_continue_to_breakpoint "var_char-filled-1" ++set test "print var_char, var_char-filled-1" ++gdb_test_multiple "print var_char" $test { ++ -re "= \\(PTR TO -> \\( character\\*3 \\)\\) $hex\r\n$gdb_prompt $" { ++ gdb_test "print *var_char" "= 'foo'" "print *var_char, var_char-filled-1" ++ pass $test ++ } ++ -re "= 'foo'\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++set test "ptype var_char, var_char-filled-1" ++gdb_test_multiple "ptype var_char" $test { ++ -re "type = PTR TO -> \\( character\\*3 \\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "type = character\\*3\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++gdb_test "print var_char(1)" " = 102 'f'" "print var_char(1)" ++gdb_test "print var_char(3)" " = 111 'o'" "print var_char(3)" ++ ++ ++gdb_breakpoint [gdb_get_line_number "var_char-filled-2"] ++gdb_continue_to_breakpoint "var_char-filled-2" ++set test "print var_char, var_char-filled-2" ++gdb_test_multiple "print var_char" $test { ++ -re "= \\(PTR TO -> \\( character\\*6 \\)\\) $hex\r\n$gdb_prompt $" { ++ gdb_test "print *var_char" "= 'foobar'" "print *var_char, var_char-filled-2" ++ pass $test ++ } ++ -re "= 'foobar'\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++set test "ptype var_char, var_char-filled-2" ++gdb_test_multiple "ptype var_char" $test { ++ -re "type = PTR TO -> \\( character\\*6 \\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "type = character\\*6\r\n$gdb_prompt $" { ++ pass $test ++ } ++} +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-strings.f90 insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-strings.f90 +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-strings.f90 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-strings.f90 2017-04-16 15:16:27.477187066 +0100 +@@ -0,0 +1,39 @@ ++! Copyright 2016 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 . ++ ++program vla_strings ++ character(len=:), target, allocatable :: var_char ++ character(len=:), pointer :: var_char_p ++ logical :: l ++ ++ allocate(character(len=10) :: var_char) ++ l = allocated(var_char) ! var_char-allocated-1 ++ var_char = 'foo' ++ deallocate(var_char) ! var_char-filled-1 ++ l = allocated(var_char) ! var_char-deallocated ++ allocate(character(len=42) :: var_char) ++ l = allocated(var_char) ++ var_char = 'foobar' ++ var_char = '' ! var_char-filled-2 ++ var_char = 'bar' ! var_char-empty ++ deallocate(var_char) ++ allocate(character(len=21) :: var_char) ++ l = allocated(var_char) ! var_char-allocated-3 ++ var_char = 'johndoe' ++ var_char_p => var_char ++ l = associated(var_char_p) ! var_char_p-associated ++ var_char_p => null() ++ l = associated(var_char_p) ! var_char_p-not-associated ++end program vla_strings +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-type.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-type.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-type.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-type.exp 2017-04-16 15:16:27.477187066 +0100 +@@ -132,7 +132,10 @@ gdb_test "ptype fivearr(2)%tone" \ + "End Type one" ] + + # Check allocation status of dynamic array and it's dynamic members +-gdb_test "ptype fivedynarr" "type = " ++gdb_test "ptype fivedynarr" \ ++ [multi_line "type = Type five" \ ++ " Type one :: tone" \ ++ "End Type five \\(:\\)" ] + gdb_test "next" "" + gdb_test "ptype fivedynarr(2)" \ + [multi_line "type = Type five" \ +@@ -141,7 +144,7 @@ gdb_test "ptype fivedynarr(2)" \ + "ptype fivedynarr(2), tone is not allocated" + gdb_test "ptype fivedynarr(2)%tone" \ + [multi_line "type = Type one" \ +- " $int :: ivla\\(\\)" \ ++ " $int :: ivla\\(:,:,:\\)" \ + "End Type one" ] \ + "ptype fivedynarr(2)%tone, not allocated" + +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-value.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-value.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/vla-value.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/vla-value.exp 2017-04-16 15:16:27.477187066 +0100 +@@ -14,6 +14,7 @@ + # along with this program. If not, see . + + standard_testfile "vla.f90" ++load_lib "fortran.exp" + + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ + {debug f90 quiet}] } { +@@ -25,12 +26,15 @@ if ![runto_main] { + return -1 + } + ++# Depending on the compiler being used, the type names can be printed differently. ++set real [fortran_real4] ++ + # Try to access values in non allocated VLA + gdb_breakpoint [gdb_get_line_number "vla1-init"] + gdb_continue_to_breakpoint "vla1-init" + gdb_test "print vla1" " = " "print non-allocated vla1" + gdb_test "print &vla1" \ +- " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(\\\)\\\)\\\) $hex" \ ++ " = \\\(PTR TO -> \\\( $real \\\(:,:,:\\\)\\\)\\\) $hex" \ + "print non-allocated &vla1" + gdb_test "print vla1(1,1,1)" "no such vector element \\\(vector not allocated\\\)" \ + "print member in non-allocated vla1 (1)" +@@ -51,7 +55,7 @@ with_timeout_factor 15 { + "step over value assignment of vla1" + } + gdb_test "print &vla1" \ +- " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \ ++ " = \\\(PTR TO -> \\\( $real \\\(10,10,10\\\)\\\)\\\) $hex" \ + "print allocated &vla1" + gdb_test "print vla1(3, 6, 9)" " = 1311" "print allocated vla1(3,6,9)" + gdb_test "print vla1(1, 3, 8)" " = 1311" "print allocated vla1(1,3,8)" +@@ -71,7 +75,7 @@ gdb_test "print vla1(9, 9, 9)" " = 999" + # Try to access values in undefined pointer to VLA (dangling) + gdb_test "print pvla" " = " "print undefined pvla" + gdb_test "print &pvla" \ +- " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(\\\)\\\)\\\) $hex" \ ++ " = \\\(PTR TO -> \\\( $real \\\(:,:,:\\\)\\\)\\\) $hex" \ + "print non-associated &pvla" + gdb_test "print pvla(1, 3, 8)" "no such vector element \\\(vector not associated\\\)" \ + "print undefined pvla(1,3,8)" +@@ -80,7 +84,7 @@ gdb_test "print pvla(1, 3, 8)" "no such + gdb_breakpoint [gdb_get_line_number "pvla-associated"] + gdb_continue_to_breakpoint "pvla-associated" + gdb_test "print &pvla" \ +- " = \\\(PTR TO -> \\\( real\\\(kind=4\\\) \\\(10,10,10\\\)\\\)\\\) $hex" \ ++ " = \\\(PTR TO -> \\\( $real \\\(10,10,10\\\)\\\)\\\) $hex" \ + "print associated &pvla" + gdb_test "print pvla(3, 6, 9)" " = 42" "print associated pvla(3,6,9)" + gdb_test "print pvla(1, 3, 8)" " = 1001" "print associated pvla(1,3,8)" +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.mi/mi-var-child-f.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.mi/mi-var-child-f.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.mi/mi-var-child-f.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.mi/mi-var-child-f.exp 2017-04-16 15:16:27.478187075 +0100 +@@ -17,6 +17,7 @@ + + load_lib mi-support.exp + set MIFLAGS "-i=mi" ++load_lib "fortran.exp" + + if { [skip_fortran_tests] } { return -1 } + +@@ -40,10 +41,8 @@ mi_runto MAIN__ + mi_create_varobj "array" "array" "create local variable array" + + +-# Depending on the compiler version being used, the name of the 4-byte integer +-# and real types can be printed differently. For instance, gfortran-4.1 uses +-# "int4" whereas gfortran-4.3 uses "integer(kind=4)". +-set int4 "(int4|integer\\(kind=4\\))" ++# Depending on the compiler being used, the type names can be printed differently. ++set int4 [fortran_int4] + + set children [list [list "array.-1" "-1" 2 "$int4 \\(2\\)"] \ + [list "array.0" "0" 2 "$int4 \\(2\\)"] \ +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.mi/mi-vla-fortran.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.mi/mi-vla-fortran.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.mi/mi-vla-fortran.exp 2017-01-03 17:36:55.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.mi/mi-vla-fortran.exp 2017-04-16 15:16:27.478187075 +0100 +@@ -17,7 +17,9 @@ + # Array (VLA). + + load_lib mi-support.exp ++load_lib fortran.exp + set MIFLAGS "-i=mi" ++load_lib "fortran.exp" + + gdb_exit + if [mi_gdb_start] { +@@ -32,6 +34,9 @@ if { [gdb_compile "${srcdir}/${subdir}/$ + return -1 + } + ++# Depending on the compiler being used, the type names can be printed differently. ++set real [fortran_real4] ++ + mi_delete_breakpoints + mi_gdb_reinitialize_dir $srcdir/$subdir + mi_gdb_load ${binfile} +@@ -46,10 +51,10 @@ mi_expect_stop "breakpoint-hit" "vla" "" + mi_gdb_test "500-data-evaluate-expression vla1" \ + "500\\^done,value=\"\"" "evaluate not allocated vla" + +-mi_create_varobj_checked vla1_not_allocated vla1 "" \ ++mi_create_varobj_checked vla1_not_allocated vla1 "$real \\(:\\)" \ + "create local variable vla1_not_allocated" + mi_gdb_test "501-var-info-type vla1_not_allocated" \ +- "501\\^done,type=\"\"" \ ++ "501\\^done,type=\"$real \\(:\\)\"" \ + "info type variable vla1_not_allocated" + mi_gdb_test "502-var-show-format vla1_not_allocated" \ + "502\\^done,format=\"natural\"" \ +@@ -58,7 +63,7 @@ mi_gdb_test "503-var-evaluate-expression + "503\\^done,value=\"\\\[0\\\]\"" \ + "eval variable vla1_not_allocated" + mi_list_array_varobj_children_with_index "vla1_not_allocated" "0" "1" \ +- "real\\\(kind=4\\\)" "get children of vla1_not_allocated" ++ "$real" "get children of vla1_not_allocated" + + + +@@ -71,10 +76,10 @@ mi_expect_stop "breakpoint-hit" "vla" "" + mi_gdb_test "510-data-evaluate-expression vla1" \ + "510\\^done,value=\"\\(.*\\)\"" "evaluate allocated vla" + +-mi_create_varobj_checked vla1_allocated vla1 "real\\\(kind=4\\\) \\\(5\\\)" \ ++mi_create_varobj_checked vla1_allocated vla1 "$real \\\(5\\\)" \ + "create local variable vla1_allocated" + mi_gdb_test "511-var-info-type vla1_allocated" \ +- "511\\^done,type=\"real\\\(kind=4\\\) \\\(5\\\)\"" \ ++ "511\\^done,type=\"$real \\\(5\\\)\"" \ + "info type variable vla1_allocated" + mi_gdb_test "512-var-show-format vla1_allocated" \ + "512\\^done,format=\"natural\"" \ +@@ -83,7 +88,7 @@ mi_gdb_test "513-var-evaluate-expression + "513\\^done,value=\"\\\[5\\\]\"" \ + "eval variable vla1_allocated" + mi_list_array_varobj_children_with_index "vla1_allocated" "5" "1" \ +- "real\\\(kind=4\\\)" "get children of vla1_allocated" ++ "$real" "get children of vla1_allocated" + + + set bp_lineno [gdb_get_line_number "vla1-filled"] +@@ -136,10 +141,10 @@ gdb_expect { + -re "580\\^done,value=\"\".*${mi_gdb_prompt}$" { + pass $test + +- mi_create_varobj_checked pvla2_not_associated pvla2 "" \ ++ mi_create_varobj_checked pvla2_not_associated pvla2 "$real \\(:,:\\)" \ + "create local variable pvla2_not_associated" + mi_gdb_test "581-var-info-type pvla2_not_associated" \ +- "581\\^done,type=\"\"" \ ++ "581\\^done,type=\"$real \\(:,:\\)\"" \ + "info type variable pvla2_not_associated" + mi_gdb_test "582-var-show-format pvla2_not_associated" \ + "582\\^done,format=\"natural\"" \ +@@ -148,7 +153,7 @@ gdb_expect { + "583\\^done,value=\"\\\[0\\\]\"" \ + "eval variable pvla2_not_associated" + mi_list_array_varobj_children_with_index "pvla2_not_associated" "0" "1" \ +- "real\\\(kind=4\\\)" "get children of pvla2_not_associated" ++ "$real" "get children of pvla2_not_associated" + } + -re "580\\^error,msg=\"value contents too large \\(\[0-9\]+ bytes\\).*${mi_gdb_prompt}$" { + # Undefined behaviour in gfortran. +@@ -173,9 +178,9 @@ mi_gdb_test "590-data-evaluate-expressio + "evaluate associated vla" + + mi_create_varobj_checked pvla2_associated pvla2 \ +- "real\\\(kind=4\\\) \\\(5,2\\\)" "create local variable pvla2_associated" ++ "$real \\\(5,2\\\)" "create local variable pvla2_associated" + mi_gdb_test "591-var-info-type pvla2_associated" \ +- "591\\^done,type=\"real\\\(kind=4\\\) \\\(5,2\\\)\"" \ ++ "591\\^done,type=\"$real \\\(5,2\\\)\"" \ + "info type variable pvla2_associated" + mi_gdb_test "592-var-show-format pvla2_associated" \ + "592\\^done,format=\"natural\"" \ +diff -Naurp insight-7.12.50.20170416.orig/gdb/typeprint.c insight-7.12.50.20170416.new/gdb/typeprint.c +--- insight-7.12.50.20170416.orig/gdb/typeprint.c 2017-03-25 10:42:37.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/typeprint.c 2017-04-16 15:16:27.478187075 +0100 +@@ -474,6 +474,25 @@ whatis_exp (char *exp, int show) + printf_filtered (" */\n"); + } + ++ /* Resolve any dynamic target type, as we might print ++ additional information about the target. ++ For example, in Fortran and C we are printing the dimension of the ++ dynamic array the pointer is pointing to. */ ++ if (TYPE_CODE (type) == TYPE_CODE_PTR ++ && is_dynamic_type (type) == 1) ++ { ++ CORE_ADDR addr; ++ if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE(type))) ++ addr = value_address (val); ++ else ++ addr = value_as_address (val); ++ ++ if (addr != 0 ++ && type_not_associated (type) == 0) ++ TYPE_TARGET_TYPE (type) = resolve_dynamic_type (TYPE_TARGET_TYPE (type), ++ NULL, addr); ++ } ++ + LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags); + printf_filtered ("\n"); + +diff -Naurp insight-7.12.50.20170416.orig/gdb/valops.c insight-7.12.50.20170416.new/gdb/valops.c +--- insight-7.12.50.20170416.orig/gdb/valops.c 2017-04-16 15:15:34.809719230 +0100 ++++ insight-7.12.50.20170416.new/gdb/valops.c 2017-04-16 15:16:27.479187084 +0100 +@@ -1574,6 +1574,19 @@ value_ind (struct value *arg1) + if (TYPE_CODE (base_type) == TYPE_CODE_PTR) + { + struct type *enc_type; ++ CORE_ADDR addr; ++ ++ if (type_not_associated (base_type)) ++ error (_("Attempt to take contents of a not associated pointer.")); ++ ++ if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE (base_type))) ++ addr = value_address (arg1); ++ else ++ addr = value_as_address (arg1); ++ ++ if (addr != 0) ++ TYPE_TARGET_TYPE (base_type) = ++ resolve_dynamic_type (TYPE_TARGET_TYPE (base_type), NULL, addr); + + /* We may be pointing to something embedded in a larger object. + Get the real type of the enclosing object. */ +@@ -1589,8 +1602,7 @@ value_ind (struct value *arg1) + else + /* Retrieve the enclosing object pointed to. */ + arg2 = value_at_lazy (enc_type, +- (value_as_address (arg1) +- - value_pointed_to_offset (arg1))); ++ (addr - value_pointed_to_offset (arg1))); + + enc_type = value_type (arg2); + return readjust_indirect_value_type (arg2, enc_type, base_type, arg1); +diff -Naurp insight-7.12.50.20170416.orig/gdb/valprint.c insight-7.12.50.20170416.new/gdb/valprint.c +--- insight-7.12.50.20170416.orig/gdb/valprint.c 2017-04-16 15:15:34.746718670 +0100 ++++ insight-7.12.50.20170416.new/gdb/valprint.c 2017-04-16 15:16:27.480187093 +0100 +@@ -1166,12 +1166,6 @@ value_check_printable (struct value *val + return 0; + } + +- if (type_not_associated (value_type (val))) +- { +- val_print_not_associated (stream); +- return 0; +- } +- + if (type_not_allocated (value_type (val))) + { + val_print_not_allocated (stream); diff --git a/insight-7.12-gdb-vla-intel-stringbt-fix.patch b/insight-7.12-gdb-vla-intel-stringbt-fix.patch new file mode 100644 index 0000000..4a907b2 --- /dev/null +++ b/insight-7.12-gdb-vla-intel-stringbt-fix.patch @@ -0,0 +1,141 @@ +diff -Naurp insight-7.12.50.20170416.orig/gdb/dwarf2loc.c insight-7.12.50.20170416.new/gdb/dwarf2loc.c +--- insight-7.12.50.20170416.orig/gdb/dwarf2loc.c 2017-04-16 13:23:04.683298600 +0100 ++++ insight-7.12.50.20170416.new/gdb/dwarf2loc.c 2017-04-16 13:24:55.140258427 +0100 +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include + #include "common/underlying.h" + + extern int dwarf_always_disassemble; +@@ -2369,6 +2370,18 @@ dwarf2_evaluate_loc_desc_full (struct ty + ctx.per_cu = per_cu; + ctx.obj_address = 0; + ++struct frame_info *old_frame (deprecated_safe_get_selected_frame ()); ++class RestoreCall { ++private: ++ const std::function func; ++public: ++ RestoreCall(std::function func_):func(func_) {} ++ ~RestoreCall() { func(); } ++} restore_frame([&]() { ++ select_frame (old_frame); ++}); ++if (frame != NULL) select_frame (frame); ++ + scoped_value_mark free_values; + + ctx.gdbarch = get_objfile_arch (objfile); +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp 2017-04-16 13:23:54.445731016 +0100 +@@ -0,0 +1,39 @@ ++# Copyright 2010 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 2 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, write to the Free Software ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++set testfile "dynamic-other-frame" ++set srcfile1 ${testfile}.f90 ++set srcfile2 ${testfile}-stub.f90 ++set objfile2 [standard_output_file ${testfile}-stub.o] ++set executable ${testfile} ++set binfile [standard_output_file ${executable}] ++ ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${objfile2}" object {f90}] != "" ++ || [gdb_compile "${srcdir}/${subdir}/${srcfile1} ${objfile2}" "${binfile}" executable {debug f90}] != "" } { ++ untested "Couldn't compile ${srcfile1} or ${srcfile2}" ++ return -1 ++} ++ ++clean_restart ${executable} ++ ++gdb_test_no_output "set print frame-arguments all" ++ ++if ![runto bar_] then { ++ perror "couldn't run to bar_" ++ continue ++} ++ ++gdb_test "bt" {foo \(string='hello'.*} +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 2017-04-16 13:23:54.445731016 +0100 +@@ -0,0 +1,36 @@ ++! Copyright 2010 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 2 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, write to the Free Software ++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++! ++! Ihis file is the Fortran source file for dynamic.exp. ++! Original file written by Jakub Jelinek . ++! Modified for the GDB testcase by Jan Kratochvil . ++ ++subroutine foo (string) ++ interface ++ subroutine bar ++ end subroutine ++ end interface ++ character string*(*) ++ call bar ! stop-here ++end subroutine foo ++program test ++ interface ++ subroutine foo (string) ++ character string*(*) ++ end subroutine ++ end interface ++ call foo ('hello') ++end +diff -Naurp insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 +--- insight-7.12.50.20170416.orig/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 1970-01-01 01:00:00.000000000 +0100 ++++ insight-7.12.50.20170416.new/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 2017-04-16 13:23:54.444731007 +0100 +@@ -0,0 +1,24 @@ ++! Copyright 2010 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 2 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, write to the Free Software ++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++! ++! Ihis file is the Fortran source file for dynamic.exp. ++! Original file written by Jakub Jelinek . ++! Modified for the GDB testcase by Jan Kratochvil . ++ ++subroutine bar ++ real :: dummy ++ dummy = 1 ++end subroutine bar diff --git a/insight.spec b/insight.spec index e2a9845..ec356f8 100644 --- a/insight.spec +++ b/insight.spec @@ -1,6 +1,6 @@ -%global ver 7.10.50 -%global snap 20160208 -%global gnulibsnap 20150822 +%global ver 7.12.50 +%global snap 20170416 +%global gnulibsnap 20160112 %global __python %{__python3} @@ -20,7 +20,7 @@ Name: insight Version: %(echo %{ver} | tr - .)%{?snap:.%{snap}} -Release: 4%{?dist} +Release: 1%{?dist} Summary: Graphical debugger based on GDB License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain and GFDL Group: Development/Debuggers @@ -45,11 +45,11 @@ BuildRequires: python3-devel BuildRequires: xz-devel%{?_isa} BuildRequires: zlib-devel%{?_isa} BuildRequires: desktop-file-utils%{?_isa} -BuildRequires: autogen%{?_isa} +BuildRequires: autogen BuildRequires: automake BuildRequires: autoconf -BuildRequires: bison%{?_isa} -BuildRequires: flex%{?_isa} +BuildRequires: bison +BuildRequires: flex BuildRequires: texinfo-tex BuildRequires: perl-podlators BuildRequires: libbabeltrace-devel @@ -73,72 +73,74 @@ Patch2: insight-7.4.50-readline-system.patch # Some patches from gdb. See gdb spec file for info. -Patch101: gdb-6.3-ppc64syscall-20040622.patch -Patch102: gdb-6.3-ppc64displaysymbol-20041124.patch -Patch103: gdb-6.6-scheduler_locking-step-is-default.patch -Patch104: gdb-6.3-gstack-20050411.patch -Patch105: gdb-archer-pie-addons.patch -Patch106: gdb-archer-pie-addons-keep-disabled.patch -Patch107: gdb-6.3-readnever-20050907.patch -Patch108: gdb-6.5-bz203661-emit-relocs.patch -Patch109: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch -Patch110: gdb-6.5-bz216711-clone-is-outermost.patch -Patch111: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch -Patch112: gdb-6.6-bz235197-fork-detach-info.patch -Patch113: gdb-6.6-buildid-locate.patch -Patch114: gdb-6.6-buildid-locate-solib-missing-ids.patch -Patch115: insight-7.10.50-buildid-locate-rpm.patch -Patch116: gdb-6.6-buildid-locate-core-as-arg.patch -Patch117: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch -Patch118: gdb-6.6-buildid-locate-rpm-scl.patch -Patch119: gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch -Patch120: gdb-6.8-sparc64-silence-memcpy-check.patch -Patch121: gdb-6.8-bz436037-reg-no-longer-active.patch -Patch122: gdb-6.8-quit-never-aborts.patch -Patch123: gdb-6.8-attach-signalled-detach-stopped.patch -Patch124: gdb-archer.patch -Patch125: gdb-core-open-vdso-warning.patch -Patch126: gdb-x86_64-i386-syscall-restart.patch -Patch127: gdb-bz533176-fortran-omp-step.patch -Patch128: gdb-follow-child-stale-parent.patch -Patch129: insight-7.10.50-bz541866-rwatch-before-run.patch -Patch130: gdb-moribund-utrace-workaround.patch -Patch131: gdb-gdb-add-index-script.patch -Patch132: gdb-bz568248-oom-is-error.patch -Patch133: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch -Patch134: gdb-glibc-vdso-workaround.patch -Patch135: gdb-readline62-ask-more-rh.patch -Patch136: gdb-attach-fail-reasons-5of5.patch -Patch137: gdb-stale-frame_info.patch -Patch138: gdb-glibc-strstr-workaround.patch -Patch139: insight-7.10.50-rhbz795424-bitpos-20of25.patch -Patch140: insight-7.10.50-rhbz795424-bitpos-21of25.patch -Patch141: gdb-rhbz795424-bitpos-22of25.patch -Patch142: gdb-rhbz795424-bitpos-23of25.patch -Patch143: insight-7.10.50-rhbz795424-bitpos-25of25.patch -Patch144: gdb-rhbz795424-bitpos-25of25-test.patch +Patch101: gdb-6.3-rh-dummykfail-20041202.patch +Patch102: gdb-6.3-rh-testversion-20041202.patch +Patch103: gdb-6.3-ppc64syscall-20040622.patch +Patch104: gdb-6.3-ppc64displaysymbol-20041124.patch +Patch105: gdb-6.6-scheduler_locking-step-is-default.patch +Patch106: gdb-6.3-gstack-20050411.patch +Patch107: gdb-archer-pie-addons.patch +Patch108: insight-7.12-gdb-archer-pie-addons-keep-disabled.patch +Patch109: insight-7.12-gdb-6.3-readnever-20050907.patch +Patch110: gdb-6.5-bz203661-emit-relocs.patch +Patch111: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch +Patch112: gdb-6.5-bz216711-clone-is-outermost.patch +Patch113: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch +Patch114: gdb-6.6-bz235197-fork-detach-info.patch +Patch115: insight-7.12-gdb-6.6-buildid-locate.patch +Patch116: gdb-6.6-buildid-locate-solib-missing-ids.patch +Patch117: insight-7.12-gdb-6.6-buildid-locate-rpm.patch +Patch118: insight-7.12-gdb-6.6-buildid-locate-core-as-arg.patch +Patch119: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch +Patch120: gdb-6.6-buildid-locate-rpm-scl.patch +Patch121: gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch +Patch122: gdb-6.8-sparc64-silence-memcpy-check.patch +Patch123: gdb-6.8-quit-never-aborts.patch +Patch124: insight-7.12-gdb-6.8-attach-signalled-detach-stopped.patch +Patch125: insight-7.12-gdb-archer.patch +Patch126: gdb-core-open-vdso-warning.patch +Patch127: gdb-x86_64-i386-syscall-restart.patch +Patch128: gdb-bz533176-fortran-omp-step.patch +Patch129: gdb-follow-child-stale-parent.patch +Patch130: gdb-bz541866-rwatch-before-run.patch +Patch131: gdb-moribund-utrace-workaround.patch +Patch132: gdb-gdb-add-index-script.patch +Patch133: gdb-bz568248-oom-is-error.patch +Patch134: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch +Patch135: gdb-glibc-vdso-workaround.patch +Patch136: gdb-readline62-ask-more-rh.patch +Patch137: gdb-attach-fail-reasons-5of5.patch +Patch138: gdb-stale-frame_info.patch +Patch139: gdb-glibc-strstr-workaround.patch +Patch140: insight-7.12-gdb-rhbz795424-bitpos-20of25.patch +Patch141: gdb-rhbz795424-bitpos-21of25.patch +Patch142: gdb-rhbz795424-bitpos-22of25.patch +Patch143: insight-7.12-gdb-rhbz795424-bitpos-23of25.patch +Patch144: insight-7.12-gdb-rhbz795424-bitpos-25of25.patch Patch145: gdb-rhbz795424-bitpos-lazyvalue.patch -Patch146: gdb-gnat-dwarf-crash-3of3.patch -Patch147: gdb-fortran-stride-intel-1of6.patch -Patch148: gdb-fortran-stride-intel-2of6.patch -Patch149: gdb-fortran-stride-intel-3of6.patch -Patch150: gdb-fortran-stride-intel-4of6.patch -Patch151: gdb-fortran-stride-intel-5of6.patch -Patch152: gdb-fortran-stride-intel-6of6.patch -Patch153: gdb-fortran-stride-intel-6of6-testcasefix.patch -Patch154: insight-7.10.50-vla-intel.patch -Patch155: gdb-vla-intel-logical-not.patch -Patch156: gdb-vla-intel-stringbt-fix.patch -Patch157: insight-7.10.50-vla-intel-04of23-fix.patch -Patch158: gdb-archer-vla-tests.patch -Patch159: gdb-fortran-stride-intel-6of6-nokfail.patch -Patch160: gdb-btrobust.patch -Patch161: gdb-fortran-frame-string.patch -Patch162: gdb-python-gil.patch -Patch163: gdb-jit-reader-multilib.patch -Patch164: gdb-pahole-python2.patch -Patch165: insight-7.10.50-fedora-libncursesw.patch -Patch166: gdb-opcodes-clflushopt-test.patch +Patch146: gdb-dts-rhel6-python-compat.patch +Patch147: gdb-gnat-dwarf-crash-3of3.patch +Patch148: gdb-rhbz1007614-memleak-infpy_read_memory-test.patch +Patch149: insight-7.12-gdb-vla-intel-fortran-strides.patch +Patch150: insight-7.12-gdb-vla-intel-fortran-vla-strings.patch +Patch151: insight-7.12-gdb-vla-intel-stringbt-fix.patch +Patch152: gdb-archer-vla-tests.patch +Patch153: gdb-vla-intel-tests.patch +Patch154: gdb-btrobust.patch +Patch155: gdb-fortran-frame-string.patch +Patch156: insight-7.12-gdb-python-gil.patch +Patch157: gdb-jit-reader-multilib.patch +Patch158: gdb-rhbz1350436-type-printers-error.patch +Patch159: gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch +Patch160: gdb-bz1219747-attach-kills.patch +Patch161: gdb-pahole-python2.patch +Patch162: insight-7.12-gdb-fedora-libncursesw.patch +Patch163: gdb-container-rh-pkg.patch +Patch164: gdb-linux_perf-bundle.patch +Patch165: gdb-tls-1of2.patch +Patch166: gdb-tls-2of2.patch +Patch167: gdb-libexec-add-index.patch +Patch168: gdb-add-index-chmod.patch %description @@ -223,6 +225,8 @@ GDB version 7.x. %patch164 -p1 %patch165 -p1 %patch166 -p1 +%patch167 -p1 +%patch168 -p1 #------------------------------------------------------------------------------- @@ -410,6 +414,13 @@ rm -rf "${RPM_BUILD_ROOT}" #------------------------------------------------------------------------------- %changelog +#------------------------------------------------------------------------------- + +* Sun Apr 16 2017 Patrick Monnerat 7.12.50.20170416-1 +- New upstream release. +- Fixes BZ #1409768. +- Fixes BZ #1423741. + * Fri Feb 10 2017 Fedora Release Engineering - 7.10.50.20160208-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild @@ -419,8 +430,6 @@ rm -rf "${RPM_BUILD_ROOT}" * Mon Dec 19 2016 Miro HronĨok - 7.10.50.20160208-2 - Rebuild for Python 3.6 -#------------------------------------------------------------------------------- - * Mon Feb 8 2016 Patrick Monnerat 7.10.50.20160208-1 - New snapshot. diff --git a/sources b/sources index da9594b..9c4b82c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -05d42291b71be318351d7ba7e93fe00d insight-7.10.50.20160208.tar.xz +SHA512 (insight-7.12.50.20170416.tar.xz) = c8607823dedf4f02e7df540135723300e19c1f0cced8ac86d997bd019930213d4241f949eba6ac775c0cdfa2a0653b52e2e5cf71ac04c7130a34d9ea3f730a90