[Bug gdb/22616] New: gdb will not set program counter $pc to mmap()ed region

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[Bug gdb/22616] New: gdb will not set program counter $pc to mmap()ed region


            Bug ID: 22616
           Summary: gdb will not set program counter $pc to mmap()ed
           Product: gdb
           Version: HEAD
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: gdb
          Assignee: unassigned at sourceware dot org
          Reporter: jreiser at BitWagon dot com
  Target Milestone: ---

gdb won't set the program counter $pc to point to an mmap()ed region.

Reproducible test case under Linux on armv7l (RaspberryPi-3B in 32-bit mode):
===== gdbbug.c
#include <sys/types.h>
#include <sys/mman.h>

main(int argc, char *argv[])
    int *addr = mmap(0, 4096, PROT_EXEC|PROT_WRITE|PROT_READ,
    *addr = 0xe24dd004;  // sub sp,sp,#4
    return 0;
===== end gdbbug.c
$ uname -a
Linux host.domain 4.14.5-300.fc27.armv7hl #1 SMP Mon Dec 11 17:29:37 UTC 2017
armv7l armv7l armv7l GNU/Linux
$ gcc --version
gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)
$ gcc -g -o gdbbug gdbbug.c

$ gdb gdbbug
GNU gdb (GDB)
(gdb) b main
Breakpoint 1 at 0x10418: file gdbbug.c, line 7.
(gdb) run
Starting program: /path/to/gdbbug
Cannot parse expression `.L1199 4@r4'.
warning: Probes-based dynamic linker interface failed.
Reverting to original interface.

Breakpoint 1, main (argc=0x1, argv=0xbefff464) at gdbbug.c:7
7           int *addr = mmap(0, 4096, PROT_EXEC|PROT_WRITE|PROT_READ,
(gdb) n
9           *addr = 0xe24dd004;  // sub sp,sp,#4
(gdb) n
10          return 0;

(gdb) x/i $pc  ## current value
=> 0x10450 <main+76>:   mov     r3, #0
(gdb) x/i addr   ## mmap()ed region
   0xb6ffa000:  sub     sp, sp, #4
(gdb) set $pc = $_   ## attempt to set $pc; no complaint
(gdb) x/i $pc   ## but value did not change
=> 0x1043c <main+56>:   str     r0, [r11, #-8]
(gdb) set $pc = 0xb6ffa000   ## stronger attempt to set $pc
Attempt to assign to an unmodifiable value.   ## very strange
(gdb) x/i $pc   ## value did not change
=> 0x1043c <main+56>:   str     r0, [r11, #-8]

gdb was built from git tip:
$ git log
commit 09da3ecf04d75084ea7d9c43e3cc0b18b2443ea3 (HEAD -> master, origin/master,
Author: GDB Administrator <[hidden email]>
Date:   Sat Dec 16 00:00:33 2017 +0000

    Automatic date update in version.in

A preliminary version of this bugzilla report was filed as

You are receiving this mail because:
You are on the CC list for the bug.