Core dump: Arch/ppc/boot/mkprep.c and Cross Compilers on IRIX/Solaris

Grant Erickson erick205 at tc.umn.edu
Wed Aug 4 10:02:07 EST 1999


I recently completed Linux/PPC cross compilers running on both IRIX 6.5 
and on Solaris 2.7 and ran into a core dump in arch/ppc/boot while 
building 'make zImage' on both w/ the 2.2.10 source tree. I tracked down 
the build process and the core dump occured during the following command: 
'mkprep -pbp zvmlinux zImage'. Examples:

     grant at teddy% uname -a
     SunOS teddy 5.7 Generic sun4u sparc SUNW,Ultra-5_10
     
     grant at teddy% mkprep -pbp zvmlinux zImage
     Bus error (core dumped)

Visually, the code "looks" OK; however, on IRIX, I ran it through Purify 
and came up with the following analysis:

     grant at danube% uname -a
     IRIX danube 6.5 11051214 IP32
     
     grant at danube% 
     ****  Purify instrumented ./mkprep.pure (pid 64174 at Wed Aug  4 
01:17:31 1999)
      * Command-line: ./mkprep.pure -pbp zvmlinux zImage
      * Options settings: -cache-dir=/tmp -purify \
        -purify-home=/usr/local/pure/purify-4.0.1-irix6

     ****  Purify instrumented ./mkprep.pure (pid 64174)  ****
     COR: Fatal core dump:
       * This is occurring while in:
             write_prep_partition [mkprep.c:208]
                    #else
                      /* This has to be 0 on the PowerStack? */
                    #ifdef __i386__
                      pe->beginning_sector  = 0;
                    #else
                --->  pe->beginning_sector  = cpu_to_le32(0);
                    #endif /* __i386__ */
                    #endif
                    
                    #ifdef __i386__
                      pe->number_of_sectors = 2*18*80-1;

             main           [mkprep.c:134]
                      /*if ( !prep )*/
                      lseek(in_fd, elfhdr_size, SEEK_SET);
                    
                      /* write prep partition if necessary */
                      if ( prep )
                --->          write_prep_partition( in_fd, out_fd );

                      /* write input image to bootimage */
                      if ( asmoutput )
                              write_asm_data( in_fd, out_fd );
                      else

             __istart       [crt1tinit.s]
      * Received signal 10 (SIGBUS - Bus error)
      * Handler function: SIG_DFL
      * Faulting address = 0x4030b8
      * Signal mask: (SIGBUS)
      * Pending signals:
        Bus error (core dumped)

I suspect there are some endian (although, this does* run fine on 
Linux/PPC and Linux/x86) or structure packing issues.

Anyone else run into this yet in a cross-development environment? If so 
and you've found a fix please e-mail me or the list any patches you may 
have created. Otherwise, I'm off to find a fix!

It seems like what's being done here is that a PREP disk "block" is being 
generated (not sure what that is exactly though). It might make more 
sense to just write out the whole block in memory first and then byte 
swap it as appropriate for the machine on which the command is being run.

     

[[ This message was sent via the linuxppc-dev mailing list.  Replies are ]]
[[ not  forced  back  to the list, so be sure to Cc linuxppc-dev if your ]]
[[ reply is of general interest. Please check http://lists.linuxppc.org/ ]]
[[ and http://www.linuxppc.org/ for useful information before posting.   ]]





More information about the Linuxppc-dev mailing list