GDB cannot access struct member whose offset is larger than 256MB
Issue
- GDB cannot access struct member whose offset is larger than 256MB
- The following is the sample program to reproduce it.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define BSIZE (0x10000000)
struct s {
char buf1[BSIZE];
char buf2[8];
char buf3[8];
char buf4[8];
};int main()
{
struct s *p = malloc(sizeof(struct s));
memset(p,0,sizeof(struct s));
printf("%p %x\n", &p->buf2[0], p->buf2[0]);
return(0);
}
- Compile the program:
[root@localhost test]# gcc -Wall -g test.c
- Run in GDB as follows:
[root@localhost test]# gdb ./a.out
(gdb) b 18
Breakpoint 1 at 0x400554: file test.c, line 18.
(gdb) run
Starting program: /root/gdb/a.out
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x2aaaaaac7000Breakpoint 1, main () at test.c:18
18 printf("%p %x\n", &p->buf2[0], p->buf2[0]);
(gdb) p p->buf2[0]
Cannot access memory at address 0x2aaa9b022010
(gdb)
- This works correctly for any value less than 0x10000000 for BSIZE
Environment
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 6
- gdb-7.0.1-37.el5_7.1
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
