gnucobol-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [open-cobol-list] [GNU Cobol 2.0] crash on Solaris (sparc) while exe


From: Sergey Kashyrin
Subject: Re: [open-cobol-list] [GNU Cobol 2.0] crash on Solaris (sparc) while executing SET ADDRESS OF Y2 UP BY 4
Date: Wed, 17 Dec 2014 14:41:40 -0500
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0

Hi Paul,

It is also bug.
I think it's better to create tickets for both here:
https://sourceforge.net/p/open-cobol/bugs/

Regards,
Sergey

On 12/15/2014 5:12 AM, address@hidden wrote:
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)



------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk


_______________________________________________
open-cobol-list mailing list
address@hidden
https://lists.sourceforge.net/lists/listinfo/open-cobol-list


reply via email to

[Prev in Thread] Current Thread [Next in Thread]