48 #define i386_num_regs 16
84 const unsigned char *buf)
93 regval = *(
short *) (((
char *) buf) + i386_ft_collect_regmap[i]);
95 regval = *(
int *) (((
char *) buf) + i386_ft_collect_regmap[i]);
111 return *(
short *) (raw_regs + i386_ft_collect_regmap[regnum]);
113 return *(
int *) (raw_regs + i386_ft_collect_regmap[regnum]);
118 #include <ust/processor.h>
125 #define ST_REGENTRY(REG) \
127 offsetof (struct registers, REG), \
128 sizeof (((struct registers *) NULL)->REG) \
135 } i386_st_collect_regmap[] =
151 #define i386_NUM_ST_COLLECT_GREGS \
152 (sizeof (i386_st_collect_regmap) / sizeof (i386_st_collect_regmap[0]))
155 supply_static_tracepoint_registers (
struct regcache *regcache,
156 const unsigned char *buf,
160 unsigned int newpc = pc;
164 for (i = 0; i < i386_NUM_ST_COLLECT_GREGS; i++)
165 if (i386_st_collect_regmap[i].
offset != -1)
167 switch (i386_st_collect_regmap[i].size)
172 + i386_st_collect_regmap[i].
offset);
177 = * (
short *) (((
char *) buf)
178 + i386_st_collect_regmap[i].offset);
184 internal_error (__FILE__, __LINE__,
"unhandled register size: %d",
185 i386_st_collect_regmap[i].size);
206 const int min_buffer_size = 1024;
208 CORE_ADDR mmap_min_addr = buffer_end + 1;
210 FILE *f = fopen (
"/proc/sys/vm/mmap_min_addr",
"r");
214 snprintf (buf,
sizeof (buf),
"mmap_min_addr open failed: %s",
216 set_trampoline_buffer_space (0, 0, buf);
221 sscanf (buf,
"%llu", &mmap_min_addr);
225 buffer_size = buffer_end - mmap_min_addr;
227 if (buffer_size >= min_buffer_size)
229 if (mmap ((
void *) (uintptr_t) mmap_min_addr, buffer_size,
230 PROT_READ | PROT_EXEC | PROT_WRITE,
231 MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
234 set_trampoline_buffer_space (mmap_min_addr, buffer_end, NULL);
237 snprintf (buf,
IPA_BUFSIZ,
"low-64K-buffer mmap() failed: %s",
239 set_trampoline_buffer_space (0, 0, buf);
244 snprintf (buf,
IPA_BUFSIZ,
"mmap_min_addr is %d, must be %d or less",
245 (
int) mmap_min_addr, (
int) buffer_end - min_buffer_size);
246 set_trampoline_buffer_space (0, 0, buf);
#define IP_AGENT_EXPORT_FUNC
void supply_fast_tracepoint_registers(struct regcache *regcache, const unsigned char *buf)
void internal_error(const char *file, int line, const char *fmt,...)
void init_registers_i386_linux(void)
static const int i386_ft_collect_regmap[]
const char * gdbserver_xmltarget
const struct target_desc * tdesc_i386_linux
void initialize_low_tracepoint(void)
unsigned long long ULONGEST
IP_AGENT_EXPORT_FUNC ULONGEST gdb_agent_get_raw_reg(const unsigned char *raw_regs, int regnum)
static void initialize_fast_tracepoint_trampoline_buffer(void)
void supply_register(struct regcache *regcache, int n, const void *buf)