Heads up: build now checks sun4u modules for possible failure with older OBP version


Date: Wed, 29 Apr 2009 16:23:20 -0700 (PDT)
From: Jerry Gilliam <jg at jurassic dot eng dot sun dot com>
To: onnv-gate at onnv dot eng dot sun dot com, on-all at eng dot sun dot com
Subject: Heads up: build now checks sun4u modules for possible failure with older OBP version

The putback to 6831697 introduces a new tool run as part of a build
to check the symbol table sizes of certain sun4u bootable
modules.  Unix modules for all sun4u machines other than serengeti
and OPL, and bootables including cprboot and bootlst, can be
subject to this problem.  The chk4ubin tool is run on each
such binary during a build, and will cause the build to fail
if any module's symbol table falls within the susceptible range.

Versions of OBP older than 4.12.1 contain a bug in the memory
allocator that result in failure when allocating memory for a
symbol table size in a certain range.  The OBP bug is CR 4777088,
fixed in OBP versions 4.12.1 and forward, and ON's recent discovery
of this problem is CR 6828121.

If a build fails, booting that binary on an affected sun4u machine
will fail.  There is no work-around possible other than updating or
patching the OBP.  The only known way to generate a working binary
is to add or remove symbols to move the symbol table size outside
the failing range.

If a build fails, you will see messages like this:

chk4ubin: ERROR: platform/sun4u/kernel/sparcv9/unix
ERROR: symbol table size 0x41fe8 is in toxic range (0x1fe2 - 0x1ff0)!
ERROR: This binary will not boot on any machine with an older
ERROR: version of OBP.  See CR 4777088 and 6828121 for more details.
ERROR: No work-around is possible other than making changes to
ERROR: add/remove symbols from the module to move the symbol
ERROR: table size outside the toxic range.

The failure mode when booting is:

	Executing last command: boot
	Boot device: /pci@1f,0/pci@1/scsi@8/disk@0,0:a	File and args: kmdb

	Error in Fcode execution !!!
	Evaluating: to load-base init-program
	Out of memory
	Warning: Fcode sequence resulted in a net stack depth change of 1

	Error in Fcode execution !!!
	Evaluating: to load-base init-program

	Evaluating: to load-base init-program
	The file just loaded does not appear to be executable.
	ok

The OBP memory allocator for the memory into which the module's
symbol table is read fails for a specific memory range on
each page, where the size &= 0x1fff is > 0x1fe1 && <= 0x1ff0.
Note the symbol table size is the size of both the SYMTAB
and the STRTAB ELF sections.

Each sun4u bootable module is in theory affected by this, including
cprboot, bootlst, and each unix module.  Although the serengeti
(Sun-Fire) and opl (SPARC-Enterprise) OBP implementations never
included this bug.  The bug only occurs for allocations
pagesize or greater, and the only such OBP allocation is for a
module's symbol table, for the sum of the SYMTAB and STRTAB
sections.  The wanboot and inetboot binaries do not include
these sections and are therefore also unaffected.

-jg

last modified by alanbur on 2009/11/20 23:48
Collectives
Project


© Sun Microsystems Inc. 2009
XWiki Enterprise 1.8.2.19075 - Documentation
Terms Of Use | Privacy | Trademarks | Copyright Policy | Site Guidelines | Site map | Help
Your use of this web site or any of its content or software indicates your agreement to be bound by these Terms of Use.