Thread View: gnu.g++
1 messages
1 total messages
Started by Rodney Peck II
Fri, 01 Dec 1989 02:20
argument mixup -- register name typo?
Author: Rodney Peck II
Date: Fri, 01 Dec 1989 02:20
Date: Fri, 01 Dec 1989 02:20
78 lines
2803 bytes
2803 bytes
Help!
I think I unwittingly found a program (maybe a typo?) in the argument passing
in g++. Here's what happens...(I've got a conditional bkpt to catch the problem
here)
Starting program: /home/rodney/courses/paradigm/bank/main
Bpt 1, enqueue_PSbqueue_PScitizen ($this=(struct bqueue *) 0x140ac, patron=(struct citizen *) 0x14) (bqueue.cc line 76)
(gdb) up
Reading in symbols for citizen.cc...done.
#1 0x2788 in enter_bank_PScitizen ($this=(struct citizen *) 0x15ed8) (citizen.cc line 71)
(gdb) print this
$1 = (struct citizen *) 0x15ed8
(gdb) down
#0 enqueue_PSbqueue_PScitizen ($this=(struct bqueue *) 0x140ac, patron=(struct citizen *) 0x14) (bqueue.cc line 76)
(gdb) print patron
$2 = (struct citizen *) 0x14
(gdb) print $i1
$3 = 89816
(gdb) print/x $i1
$4 = 0x00015ed8
(gdb) print/x $l1
$5 = 0x00000014
(gdb)
---
portion of program...
bqueue.cc which is the code for bqueue::enqueue
void bqueue::enqueue(citizen *patron)
{
=>if (head == 0) tail = 0;
for(node *P=tail;1;P=P->prev) {
if ((P==0) || !condition((void *)patron,(void *)P->info))
break;
}
insert_before(P,new node(patron));
tickle_queue();
}
The breakpoint is where the arrow is pointing above.
void citizen::enter_bank() {
if (type <= KNIGHT) schedule_entrance();
// get in line
entrance_time = Events.time; // set the time this one came in to now
// now, get in line. The queue will alert the teller that I'm here
=>entrance.enqueue(this);
}
The part of citizen.cc which calls bqueue::enqueue. Again, the arrow points
to the part in question.
As you can see from the prints and backtraces, when in enter_bank, `this' has
a proper value and should be passed to entrance.enqueue properly. In enqueue,
however, it actually gets a 0x14. This corresponds to register $i1 but
register $l1 has the actual value that should have been passed. In fact, if
I put a conditional breakpoint in there and have it assign $l1 to $i1 and
continue, everything works fine. Oddly, this problem doesn't always appear.
Sometimes, to make things worse, the program executes perfectly, but not often.
HELP!!!
Here's the version info:
dali.ipl.rpi.edu% g++ -v
g++ version 1.35.1-
dali.ipl.rpi.edu% gcc -v
gcc version 1.36
dali.ipl.rpi.edu%
Please reply quickly if you have any idea what is happening, this project is
due tomorrow!
--
Rodney
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads