Прекомпилятор Oracle 9 ProC segfault при чтении pcsus.msb - PullRequest
1 голос
/ 26 июля 2011

Я пытаюсь скомпилировать старый программный продукт, который включает использование прекомпилятора ProC для Oracle.

Это программное обеспечение работает с использованием Oracle 9 под Solaris 10 и использует инструмент proc для преобразования файлов .proc в файлы .c до запуска реального компилятора для преобразования .c в .o

Когда я пытаюсь запустить proc для любого из файлов .proc, это происходит.

# /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun  define=PRE_COMP  code=ansi_c  mode=oracle  def_sqlcode=yes  threads=yes  include=/usr/include  include=../../../../../include  include=../../../../../include/rpcsvc  include=../../../../../aam/include  include=../../../../../aam/libs/libavaora/include datahost.proc

Pro*C/C++: Release 9.2.0.6.0 - Production on Tue Jul 26 19:06:20 2011

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

System default option values taken from: /avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/admin/pcscfg.cfg

Segmentation Fault (core dumped)

Затем я пытаюсь использовать truss, чтобы увидеть, что на самом деле происходит.

   # truss -vall -wall -fall /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun  define=PRE_COMP  code=ansi_c  mode=oracle  def_sqlcode=yes  threads=yes  include=/usr/include  include=../../../../../include  include=../../../../../include/rpcsvc  include=../../../../../aam/include  include=../../../../../aam/libs/libavaora/include datahost.proc

И это последняя пара строк:

15775/1:        close(10)                                       = 0
15775/1:        open("sys/uio.h", O_RDONLY)                     Err#2 ENOENT
15775/1:        open("/usr/include/sys/uio.h", O_RDONLY)        = 10
15775/1:        fstat64(10, 0xFFBFB578)                         = 0
15775/1:            d=0x00800000 i=16783 m=0100644 l=1  u=0     g=2     sz=2885
15775/1:                at = Jul 26 18:50:45 GMT 2011  [ 1311706245 ]
15775/1:                mt = Mar 13 10:41:10 GMT 2009  [ 1236940870 ]
15775/1:                ct = May 10 19:03:47 GMT 2011  [ 1305054227 ]
15775/1:            bsz=8192  blks=6     fs=ufs
15775/1:        brk(0x00A475B0)                                 = 0
15775/1:        brk(0x00A495B0)                                 = 0
15775/1:        fstat64(10, 0xFFBFB420)                         = 0
15775/1:            d=0x00800000 i=16783 m=0100644 l=1  u=0     g=2     sz=2885
15775/1:                at = Jul 26 18:50:45 GMT 2011  [ 1311706245 ]
15775/1:                mt = Mar 13 10:41:10 GMT 2009  [ 1236940870 ]
15775/1:                ct = May 10 19:03:47 GMT 2011  [ 1305054227 ]
15775/1:            bsz=8192  blks=6     fs=ufs
15775/1:        ioctl(10, TCGETA, 0xFFBFB504)                   Err#25 ENOTTY
15775/1:        read(10, " / *\t C o p y r i g h t".., 8192)    = 2885
15775/1:        brk(0x00A495B0)                                 = 0
15775/1:        brk(0x00A4B5B0)                                 = 0
15775/1:        brk(0x00A4B5B0)                                 = 0
15775/1:        brk(0x00A4D5B0)                                 = 0
15775/1:        brk(0x00A4D5B0)                                 = 0
15775/1:        brk(0x00A4F5B0)                                 = 0
15775/1:        read(10, 0x00A45A9C, 8192)                      = 0
15775/1:        llseek(10, 0, SEEK_CUR)                         = 2885
15775/1:        close(10)                                       = 0
15775/1:        open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/mesg/pcpus.msb", O_RDONLY) = 10
15775/1:        fcntl(10, F_SETFD, 0x00000001)                  = 0
15775/1:        lseek(10, 0, SEEK_SET)                          = 0
15775/1:        read(10, "1513 "011303\t\t\0\0\0\0".., 256)     = 256
15775/1:        open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//slax/mesg/pxus.msb", O_RDONLY) Err#2 ENOENT
15775/1:        open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//slax/mesg/pxus.msb", O_RDONLY) Err#2 ENOENT
15775/1:        close(10)                                       = 0
15775/1:        close(9)                                        = 0
15775/1:        close(8)                                        = 0
15775/1:        open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/mesg/pcsus.msb", O_RDONLY) = 8
15775/1:        fcntl(8, F_SETFD, 0x00000001)                   = 0
15775/1:        lseek(8, 0, SEEK_SET)                           = 0
15775/1:        read(8, "1513 "011303\t\t\0\0\0\0".., 256)      = 256
15775/1:            Incurred fault #6, FLTBOUNDS  %pc = 0x0004CED8
15775/1:              siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000
15775/1:            Received signal #11, SIGSEGV [default]
15775/1:              siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000

Что я понимаю по этому поводу, так это то, что при чтении файла pcsus.msb некоторая обработка строк прошла неправильно и произошла ошибка.

Я пытался использовать разные pcsus.msb файлы, которые я нашел в Интернете, и некоторые выдавали разные ошибки, но я не могу заставить его работать.

Вывод pstrack файла ядра также не сильно помогает.

# pstack core
core 'core' of 15803:   /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun 
 0004ced8 pcs      (0, ffbfeae4, 0, 1, ffbfd788, 2) + 37c
 00044dfc pc2main  (ffbfeb94, ffbff0ac, 1, 0, 544668, fe6ba518) + 1030
 00416d70 lpmcall  (51bac0, 51f660, 51bb68, c, ffbff780, 51b7a0) + 46c
 004129a4 lpmpmai  (4, ffbff534, d, ffbff74c, ff000000, 80808080) + 178
 0003e688 main     (d, ffbff74c, ffbff784, 513c00, ff2a0100, 0) + f0
 0003e570 _start   (0, 0, 0, 0, 0, 0) + 108

Какие-нибудь указатели, которые я могу попытаться исправить это?

Спасибо, Хавьер

1 Ответ

1 голос
/ 28 июля 2011

Мне удалось получить новую установку Oracle 9i, и ее процесс вернул ошибку, касающуюся "lloff_t":

PCC-S-02201, Encountered the symbol "lloff_t" when expecting one of the following

И я нашел решение здесь:

http://www.orafaq.com/forum/t/59837/2/

Что добавить -D__sparc в командную строку proc.

Хавьер

...