*BSD News Article 4484


Return to BSD News archive

Newsgroups: comp.unix.bsd
Path: sserve!manuel!munnari.oz.au!uunet!wupost!usc!venice!gumby.dsd.trw.com!eel.dsd.trw.com!gottloeb
From: gottloeb@eel.dsd.trw.com
Subject: GDB under 386bsd 0.1
Message-ID: <1992Sep4.005417.3876@gumby.dsd.trw.com>
Originator: gottloeb@eel.dsd.trw.com
Keywords: gdb, ptrace
Sender: news@gumby.dsd.trw.com
Reply-To: gottloeb@eel.dsd.trw.com
Organization: TRW Space & Defense
Date: Fri, 4 Sep 1992 00:54:17 GMT
Lines: 56

I have noticed a problem using gdb under 386bsd 0.1.

When at least one breakpoint has been set and the program terminates,
e.g. executes exit(), the breakpoint is not removed from the process's
text image.  When the program is subsequently re-executed under gdb,
gdb remembers that a breakpoint is supposed to at the memory location
and puts one there again.  However this time it shadows the breakpoint
instruction from the previous run rather than the original instruction.
When execution begins after reaching the breakpoint, various traps occur.

If the program is run after quitting gdb, a Trace/BPT trap occurs.

I think the problem is that gdb assumes that when ptrace modifies the
process's image the kernel either makes a private copy of the text image
or it will throw away the text image after the process terminates.
However, this is not the case - the kernel keeps the modified text image
around and executes it rather than a fresh copy from the original file.

This can be demonstrated with the following program:


#include <stdio.h>

void main() {
    printf("hello world\n");
    exit(1);
}


Compile the program:
    cc -g main.c

Start gdb
    gdb a.out

Set a breakpoint at the first line in main:
    break main

Start program execution:
    run

Continue program execution:
    cont

Quit gdb

Execute the program again:
    a.out


Does anybody have a fix or any suggestions on how to fix this?


Thanks in advance,
Jeff Gottloeb
gottloeb@gumby.dsd.trw.com