Bug 692579 - allocation of profile default_gray.icc handle failed, core dump
Summary: allocation of profile default_gray.icc handle failed, core dump
Status: RESOLVED FIXED
Alias: None
Product: Ghostscript
Classification: Unclassified
Component: Build Process (show other bugs)
Version: 9.04
Hardware: HP HP-UX
: P4 normal
Assignee: Chris Liddell (chrisl)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-10-10 19:04 UTC by Greg Wooledge
Modified: 2011-12-21 14:16 UTC (History)
2 users (show)

See Also:
Customer:
Word Size: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Greg Wooledge 2011-10-10 19:04:44 UTC
Built ghostscript 9.04 from source on HP-UX 11.11 (PA-RISC, not Itanium), using ./configure and make and make install.  gs dumps core no matter what I do (other than --version or --help):

megview1:/var/tmp/ghostscript-9.04# gs
GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
| ./base/gsicc_manage.c:733: gsicc_set_profile(): allocation of profile default_gray.icc handle failed
| ./base/gsicc_manage.c:1273: gsicc_init_iccmanager(): cannot find default icc profile
Segmentation fault (core dumped)

Normally I'd try to run it under gdb and see what's going on, but gdb doesn't seem to be working correctly for me on this machine at the moment. :(

megview1:/var/tmp/ghostscript-9.04# gs --help
GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 Artifex Software, Inc.  All rights reserved.
Usage: gs [switches] [file1.ps file2.ps ...]
Most frequently used switches: (you can use # in place of =)
 -dNOPAUSE           no pause after page   | -q       `quiet', fewer messages
 -g<width>x<height>  page size in pixels   | -r<res>  pixels/inch resolution
 -sDEVICE=<devname>  select device         | -dBATCH  exit after last file
 -sOutputFile=<file> select output file: - for stdout, |command for pipe,
                                         embed %d or %ld for page #
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF
Default output device: x11alpha
Available devices:
   alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 ap3250 appledmp
   atx23 atx24 atx38 bbox bit bitcmyk bitrgb bitrgbtags bj10e bj10v bj10vh
   bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono bmp16 bmp16m
   bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 ccr cdeskjet cdj1600 cdj500
   cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono cdnj500 cfax
   cgm24 cgm8 cgmmono chp2200 cif cljet5 cljet5c cljet5pr coslw2p coslwxl
   cp50 declj250 deskjet devicen dfaxhigh dfaxlow dj505j djet500 djet500c
   dl2100 dnj650c epl2050 epl2050p epl2120 epl2500 epl2750 epl5800 epl5900
   epl6100 epl6200 eplcolor eplmono eps9high eps9mid epson epsonc epswrite
   escp escpage faxg3 faxg32d faxg4 fmlbp fmpr fs600 gdi hl1240 hl1250 hl7x0
   hpdj1120c hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510
   hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c
   hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdjplus hpdjportable ibmpro
   ijs imagen imdi inferno iwhi iwlo iwlq jetp3852 jj100 jpeg jpegcmyk
   jpeggray la50 la70 la75 la75plus laserjet lbp310 lbp320 lbp8 lex2050
   lex3200 lex5700 lex7000 lips2p lips3 lips4 lips4v lj250 lj3100sw lj4dith
   lj4dithp lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 ljet4d ljet4pjl
   ljetplus ln03 lp1800 lp1900 lp2000 lp2200 lp2400 lp2500 lp2563 lp3000c
   lp7500 lp7700 lp7900 lp8000 lp8000c lp8100 lp8200c lp8300c lp8300f
   lp8400f lp8500c lp8600 lp8600f lp8700 lp8800c lp8900 lp9000b lp9000c
   lp9100 lp9200b lp9200c lp9300 lp9400 lp9500c lp9600 lp9600s lp9800c
   lps4500 lps6500 lq850 lx5000 lxm3200 lxm5700m m8510 mag16 mag256 md1xMono
   md2k md50Eco md50Mono md5k mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono
   miff24 mj500c mj6000c mj700v2c mj8000c ml600 necp6 npdl nullpage oce9050
   oki182 oki4w okiibm oprp opvp paintjet pam pbm pbmraw pcl3 pcx16 pcx24b
   pcx256 pcx2up pcxcmyk pcxgray pcxmono pdfwrite pgm pgmraw pgnm pgnmraw
   photoex picty180 pj pjetxl pjxl pjxl300 pkm pkmraw pksm pksmraw plan9bm
   png16 png16m png256 png48 pngalpha pnggray pngmono pnm pnmraw ppm ppmraw
   pr1000 pr1000_4 pr150 pr201 ps2write psdcmyk psdrgb psgray psmono psrgb
   pswrite pxlcolor pxlmono r4081 rinkj rpdl samsunggdi sgirgb sj48 spotcmyk
   st800 stcolor sunhmono t4693d2 t4693d4 t4693d8 tek4696 tiff12nc tiff24nc
   tiff32nc tiff48nc tiff64nc tiffcrle tiffg3 tiffg32d tiffg4 tiffgray
   tifflzw tiffpack tiffscaled tiffscaled24 tiffscaled8 tiffsep tiffsep1
   uniprint wtscmyk wtsimdi x11 x11alpha x11cmyk x11cmyk2 x11cmyk4 x11cmyk8
   x11gray2 x11gray4 x11mono x11rg16x x11rg32x xcf xes
Search path:
   %rom%Resource/Init/ : %rom%lib/ :
   /usr/local/share/ghostscript/9.04/Resource/Init :
   /usr/local/share/ghostscript/9.04/lib :
   /usr/local/share/ghostscript/9.04/Resource/Font :
   /usr/local/share/ghostscript/fonts :
   /usr/local/share/fonts/default/ghostscript :
   /usr/local/share/fonts/default/Type1 :
   /usr/local/share/fonts/default/TrueType : /usr/lib/DPS/outline/base :
   /usr/openwin/lib/X11/fonts/Type1 : /usr/openwin/lib/X11/fonts/TrueType
Initialization files are compiled into the executable.
For more information, see /usr/local/share/ghostscript/9.04/doc/Use.htm.
Please report bugs to bugs.ghostscript.com.
Comment 1 Greg Wooledge 2011-10-10 19:34:33 UTC
Actually gdb is working, but gs was compiled without -g.  I removed some obj/*.o files and manually built them with -g, and tracked the problem down to here:

cmsOpenProfileFromMem (MemPtr=0x40a44170, dwSize=416)
    at lcms/src/cmsio1.c:2599
2599           NewIcc = _cmsCreateProfileFromMemPlaceholder(MemPtr, dwSize); 
(gdb) n
2600           if (!NewIcc) return NULL;
(gdb) n
2602           if (!ReadHeader(NewIcc, TRUE)) return NULL;
(gdb) print NewIcc
$1 = (LPLCMSICCPROFILE) 0x40a44518
(gdb) n
2608    }

_cmsCreateProfileFromMemPlaceholder returns what I assume is a valid pointer, but ReadHeader fails.  Restarting with a breakpoint on ReadHeader, we get:

289            if (Header.magic != icMagicNumber) goto ErrorCleanup;
(gdb) n
356            Icc ->Close(Icc);

I won't even try to guess why the comparison failed.
Comment 2 Chris Liddell (chrisl) 2011-10-11 08:10:52 UTC
This could be problematic to reproduce and debug since we don't have easy access to an HP-UX machine.

The problem *might* be related to the issue with finding ICC profiles in this bug:

http://bugs.ghostscript.com/show_bug.cgi?id=692532

Although, obviously, the crash is in a different place.

The patch for gs_lev2.ps from the above bug just might help.
Comment 3 Chris Liddell (chrisl) 2011-10-11 08:14:07 UTC
Oh, based on Greg's second comment, ignore above.

Greg, the second thing that springs to mind is are we getting the endianness right for the hardware?
Comment 4 Greg Wooledge 2011-10-11 12:35:34 UTC
The machine is big endian.  I'm not sure how the Ghostscript code is checking it, but if I step through the code, it appears to be applying the little endian transformation:

Breakpoint 1, ReadHeader (Icc=0x40a44518, lIsFromMemory=1)
    at lcms/src/cmsio1.c:271
271            if (Icc -> Read(&Header, sizeof(icHeader), 1, Icc) != 1) 
(gdb) n
276            AdjustEndianess32((LPBYTE) &Header.size);
(gdb) step
AdjustEndianess32 (pByte=0x7a0027dc "") at lcms/src/cmsio1.c:104
104             temp1 = *pByte++;

So yes, it appears to think the machine is the wrong endianness.
Comment 5 Chris Liddell (chrisl) 2011-10-11 13:01:21 UTC
It looks like lcms.h has some stuff to detect big endian systems, but maybe HP-UX defeats it.

Could you perhaps try (after a "make clean debugclean"):
CC="gcc -DUSE_BIG_ENDIAN=1" ./configure

Then build, and test.

If that works, I'll reassign the bug to me as a build problem.

Thanks.
Comment 6 Greg Wooledge 2011-10-11 13:32:28 UTC
Success.  I was able to run it and see the tiger from the examples directory.  Thanks. :)
Comment 7 Chris Liddell (chrisl) 2011-10-11 13:35:41 UTC
Great, thanks for trying it.

Reassigning to me as a build issue: lcms doesn't get the Ghostscript endian setting. Not usually a problem as lcms.h has code to spot SPARC and PPC builds, but (clearly!) not HP UX/PA-RISC.
Comment 8 Chris Liddell (chrisl) 2011-12-21 14:16:37 UTC
Fixed in:

http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4bcc3737