1 --- gdb-7.6/gdb/sparc-sol2-nat.c 2012-12-31 22:32:51.000000000 -0800 |
1 # Patch required for Solaris. |
2 +++ gdb-7.6/gdb/sparc-sol2-nat.c 2013-10-06 14:09:16.962861100 -0700 |
2 # Will contribute upstream if possible. |
3 @@ -24,12 +24,10 @@ |
3 |
|
4 --- gdb-7.11-orig/gdb/sparc-sol2-nat.c Tue Feb 9 19:19:39 2016 |
|
5 +++ gdb-7.11/gdb/sparc-sol2-nat.c Fri Mar 25 14:22:51 2016 |
|
6 @@ -24,13 +24,11 @@ |
4 #include "gregset.h" |
7 #include "gregset.h" |
5 |
8 |
6 #include "sparc-tdep.h" |
9 #include "sparc-tdep.h" |
7 +#include "sparc64-tdep.h" |
10 +#include "sparc64-tdep.h" |
8 #include "target.h" |
11 #include "target.h" |
9 -#include "procfs.h" |
12 + |
|
13 #include "procfs.h" |
10 |
14 |
11 -/* This file provids the (temporary) glue between the Solaris SPARC |
15 -/* This file provids the (temporary) glue between the Solaris SPARC |
12 - target dependent code and the machine independent SVR4 /proc |
16 - target dependent code and the machine independent SVR4 /proc |
13 - support. */ |
17 - support. */ |
14 +#include "procfs.h" |
18 - |
15 |
|
16 /* Solaris 7 (Solaris 2.7, SunOS 5.7) and up support two process data |
19 /* Solaris 7 (Solaris 2.7, SunOS 5.7) and up support two process data |
17 models, the traditional 32-bit data model (ILP32) and the 64-bit |
20 models, the traditional 32-bit data model (ILP32) and the 64-bit |
18 @@ -48,54 +46,67 @@ |
21 data model (LP64). The format of /proc depends on the data model |
|
22 @@ -48,47 +46,51 @@ |
19 Note that a 32-bit GDB won't be able to debug a 64-bit target |
23 Note that a 32-bit GDB won't be able to debug a 64-bit target |
20 process using /proc on Solaris. */ |
24 process using /proc on Solaris. */ |
21 |
25 |
22 -#if (defined (__arch64__) || \ |
26 -#if (defined (__arch64__) || \ |
23 - (defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64))) |
27 - (defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64))) |
24 - |
28 +static int from_corefile = -1; |
|
29 |
25 -#include "sparc64-tdep.h" |
30 -#include "sparc64-tdep.h" |
26 - |
31 - |
27 -#define sparc_supply_gregset sparc64_supply_gregset |
32 -#define sparc_supply_gregset sparc64_supply_gregset |
28 -#define sparc_supply_fpregset sparc64_supply_fpregset |
33 -#define sparc_supply_fpregset sparc64_supply_fpregset |
29 -#define sparc_collect_gregset sparc64_collect_gregset |
34 -#define sparc_collect_gregset sparc64_collect_gregset |
30 -#define sparc_collect_fpregset sparc64_collect_fpregset |
35 -#define sparc_collect_fpregset sparc64_collect_fpregset |
31 - |
36 - |
32 -#define sparc_sol2_gregset sparc64_sol2_gregset |
37 -#define sparc_sol2_gregmap sparc64_sol2_gregmap |
33 -#define sparc_sol2_fpregset sparc64_sol2_fpregset |
38 -#define sparc_sol2_fpregmap sparc64_sol2_fpregmap |
34 - |
39 - |
35 -#else |
40 -#else |
36 - |
41 - |
37 -#define sparc_supply_gregset sparc32_supply_gregset |
42 -#define sparc_supply_gregset sparc32_supply_gregset |
38 -#define sparc_supply_fpregset sparc32_supply_fpregset |
43 -#define sparc_supply_fpregset sparc32_supply_fpregset |
39 -#define sparc_collect_gregset sparc32_collect_gregset |
44 -#define sparc_collect_gregset sparc32_collect_gregset |
40 -#define sparc_collect_fpregset sparc32_collect_fpregset |
45 -#define sparc_collect_fpregset sparc32_collect_fpregset |
41 - |
46 - |
42 -#define sparc_sol2_gregset sparc32_sol2_gregset |
47 -#define sparc_sol2_gregmap sparc32_sol2_gregmap |
43 -#define sparc_sol2_fpregset sparc32_sol2_fpregset |
48 -#define sparc_sol2_fpregmap sparc32_sol2_fpregmap |
44 - |
49 - |
45 -#endif |
50 -#endif |
46 +static int from_corefile = -1; |
51 - |
47 |
|
48 void |
52 void |
49 supply_gregset (struct regcache *regcache, const prgregset_t *gregs) |
53 supply_gregset (struct regcache *regcache, const prgregset_t *gregs) |
50 { |
54 { |
51 - sparc_supply_gregset (&sparc_sol2_gregset, regcache, -1, gregs); |
55 - sparc_supply_gregset (&sparc_sol2_gregmap, regcache, -1, gregs); |
52 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
56 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
53 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
57 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
54 + |
58 + |
55 + if (from_corefile == -1) |
59 + if (from_corefile == -1) |
56 + from_corefile = regcache_from_corefile (regcache); |
60 + from_corefile = regcache_from_corefile (regcache); |
57 + |
61 + |
58 + if ((pointer_size == 32) && (from_corefile == 1)) |
62 + if ((pointer_size == 32) && (from_corefile == 1)) |
59 + sparc32_supply_gregset (&sparc32_sol2_gregset, regcache, -1, gregs); |
63 + sparc32_supply_gregset (&sparc32_sol2_gregmap, regcache, -1, gregs); |
60 + else |
64 + else |
61 + sparc64_supply_gregset (&sparc64_sol2_gregset, regcache, -1, gregs); |
65 + sparc64_supply_gregset (&sparc64_sol2_gregmap, regcache, -1, gregs); |
62 } |
66 } |
63 |
67 |
64 void |
68 void |
65 supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregs) |
69 supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregs) |
66 { |
70 { |
67 - sparc_supply_fpregset (&sparc_sol2_fpregset, regcache, -1, fpregs); |
71 - sparc_supply_fpregset (&sparc_sol2_fpregmap, regcache, -1, fpregs); |
68 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
72 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
69 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
73 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
70 + |
74 + |
71 + if (from_corefile == -1) |
75 + if (from_corefile == -1) |
72 + from_corefile = regcache_from_corefile (regcache); |
76 + from_corefile = regcache_from_corefile (regcache); |
73 + |
77 + |
74 + if ((pointer_size == 32) && (from_corefile == 1)) |
78 + if ((pointer_size == 32) && (from_corefile == 1)) |
75 + sparc32_supply_fpregset (&sparc32_sol2_fpregset, regcache, -1, fpregs); |
79 + sparc32_supply_fpregset (&sparc32_sol2_fpregmap, regcache, -1, fpregs); |
76 + else |
80 + else |
77 + sparc64_supply_fpregset (&sparc64_sol2_fpregset, regcache, -1, fpregs); |
81 + sparc64_supply_fpregset (&sparc64_sol2_fpregmap, regcache, -1, fpregs); |
78 } |
82 } |
79 |
83 |
80 void |
84 void |
81 fill_gregset (const struct regcache *regcache, prgregset_t *gregs, int regnum) |
85 fill_gregset (const struct regcache *regcache, prgregset_t *gregs, int regnum) |
82 { |
86 { |
83 - sparc_collect_gregset (&sparc_sol2_gregset, regcache, regnum, gregs); |
87 - sparc_collect_gregset (&sparc_sol2_gregmap, regcache, regnum, gregs); |
84 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
88 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
85 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
89 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
86 + |
90 + |
87 + if (from_corefile == -1) |
91 + if (from_corefile == -1) |
88 + from_corefile = regcache_from_corefile (regcache); |
92 + from_corefile = regcache_from_corefile (regcache); |
89 + |
93 + |
90 + if ((pointer_size == 32) && (from_corefile == 1)) |
94 + if ((pointer_size == 32) && (from_corefile == 1)) |
91 + sparc32_collect_gregset (&sparc32_sol2_gregset, regcache, regnum, gregs); |
95 + sparc32_collect_gregset (&sparc32_sol2_gregmap, regcache, regnum, gregs); |
92 + else |
96 + else |
93 + sparc64_collect_gregset (&sparc64_sol2_gregset, regcache, regnum, gregs); |
97 + sparc64_collect_gregset (&sparc64_sol2_gregmap, regcache, regnum, gregs); |
94 } |
98 } |
95 |
99 |
96 void |
100 void |
|
101 @@ -95,7 +97,16 @@ |
97 fill_fpregset (const struct regcache *regcache, |
102 fill_fpregset (const struct regcache *regcache, |
98 prfpregset_t *fpregs, int regnum) |
103 prfpregset_t *fpregs, int regnum) |
99 { |
104 { |
100 - sparc_collect_fpregset (&sparc_sol2_fpregset, regcache, regnum, fpregs); |
105 - sparc_collect_fpregset (&sparc_sol2_fpregmap, regcache, regnum, fpregs); |
101 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
106 + struct gdbarch *gdbarch = get_regcache_arch (regcache); |
102 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
107 + int pointer_size = gdbarch_ptr_bit (gdbarch); |
103 + |
108 + |
104 + if (from_corefile == -1) |
109 + if (from_corefile == -1) |
105 + from_corefile = regcache_from_corefile (regcache); |
110 + from_corefile = regcache_from_corefile (regcache); |
106 + |
111 + |
107 + if ((pointer_size == 32) && (from_corefile == 1)) |
112 + if ((pointer_size == 32) && (from_corefile == 1)) |
108 + sparc32_collect_fpregset (&sparc32_sol2_fpregset, regcache, regnum, fpregs); |
113 + sparc32_collect_fpregset (&sparc32_sol2_fpregmap, regcache, regnum, fpregs); |
109 + else |
114 + else |
110 + sparc64_collect_fpregset (&sparc64_sol2_fpregset, regcache, regnum, fpregs); |
115 + sparc64_collect_fpregset (&sparc64_sol2_fpregmap, regcache, regnum, fpregs); |
111 } |
116 } |
112 |
117 |
113 /* Provide a prototype to silence -Wmissing-prototypes. */ |
118 /* Provide a prototype to silence -Wmissing-prototypes. */ |
114 @@ -112,3 +123,4 @@ |
119 @@ -112,3 +123,4 @@ |
115 #endif |
120 #endif |