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
on 2009/11/20 23:48