[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[open-cobol-list] [GNU Cobol 2.0] crash on Solaris (sparc) while executi
From: |
Paul . Meinhardt |
Subject: |
[open-cobol-list] [GNU Cobol 2.0] crash on Solaris (sparc) while executing SET ADDRESS OF Y2 UP BY 4 |
Date: |
Mon, 15 Dec 2014 11:12:15 +0100 |
Hello,
the following small program causes a
crash (Signal SIGSEGV) on Solaris (sparc). The same program runs without
problems on Windows and shows the expected results.
prog.cob: 16: Attempt to reference unallocated
memory (Signal SIGSEGV)
Abnormal termination - File contents
may be incorrect
I used the gnu cobol branch 2.0 r470
IDENTIFICATION
DIVISION.
PROGRAM-ID.
prog.
DATA
DIVISION.
WORKING-STORAGE
SECTION.
01 XX.
02
XX-1 PIC X(4) VALUE "1234".
02
XX-2 PIC X(4) VALUE "5678".
01 P-XX-1
POINTER.
01 P-XX-2
POINTER.
LINKAGE
SECTION.
01 Y2
PIC X(4).
PROCEDURE
DIVISION.
SET
P-XX-1 TO ADDRESS OF XX-1
SET
P-XX-2 TO ADDRESS OF XX-2
SET
ADDRESS OF Y2 TO ADDRESS OF XX-1
SET
ADDRESS OF Y2 UP BY 4
IF
Y2 NOT = XX-2
DISPLAY "Test 2 '" Y2 "'"
END-DISPLAY
END-IF
IF
ADDRESS OF Y2 NOT= P-XX-2
DISPLAY "Pointer test failed"
END-IF
STOP
RUN.
The crash occurs in the first memcpy
call of
cob_pointer_manip (cob_field *f1, cob_field
*f2, const unsigned int addsub)
{
unsigned
char *tmptr;
memcpy
(&tmptr, f1->data, sizeof(void *));
if
(addsub) {
tmptr -= cob_get_int (f2);
}
else {
tmptr += cob_get_int (f2);
}
memcpy
(f1->data, &tmptr, sizeof(void *));
}
the following call to cob_pointer_manip
in the generated C code shows the problem:
/* Line: 16
: SET : prog.cob
*/
cob_set_location (st_1, 16, NULL,
NULL, st_2);
cob_pointer_manip (b_10, (cob_field
*)&c_1, 0);
the variable b_10 is defined as:
/* LINKAGE SECTION (Items not referenced
by USING clause) */
static unsigned char
*b_10 = NULL; /* Y2 */
but the cob_pointer_manip function expects
a pointer to a cob_field structure and therefore f1->data points to
nowhere.
During compilation I get the following
warnings:
address@hidden: ~/pme-test/cob-address
$ cobc -g -x prog.cob
prog.c: In function 'prog_':
prog.c:124:3: warning: passing argument
1 of 'cob_pointer_manip' from incompatible pointer type
prog.c.h:33:1: note: expected 'struct
cob_field *' but argument is of type 'unsigned char *'
The enclosed ZIP (crash.zip) file contains
the sample program and the generated C source and config.log.zip contains
the configure log file.
Some data about my solaris system:
uname -a
SunOS sol10d 5.10 Generic_142909-17
sun4u sparc SUNW,Sun-Fire-V440
Any suggestions?
Best Regards
Paul Meinhardt
(Development)
crash.zip
Description: Zip archive
config.log.zip
Description: Zip archive
- [open-cobol-list] [GNU Cobol 2.0] crash on Solaris (sparc) while executing SET ADDRESS OF Y2 UP BY 4,
Paul . Meinhardt <=