Bug#609371: linux-image-2.6.37-trunk-sparc64: module scsi_mod: Unknown relocation: 36
From: Richard Mortimer <richm@oldelvet.org.uk>
Date: Thu, 13 Jan 2011 23:34:01 +0000
> On Wed, 2011-01-12 at 00:37 +0000, Ben Hutchings wrote:
>> On Wed, 2011-01-12 at 00:27 +0000, Richard Mortimer wrote:
>> >
>> > On 09/01/2011 03:46, David Miller wrote:
>> > > From: Ben Hutchings<ben@decadent.org.uk>
>> > > Date: Sun, 09 Jan 2011 03:00:40 +0000
>> > >
>> > >> On Sun, 2011-01-09 at 01:05 +0000, Richard Mortimer wrote:
>> > >>> Package: linux-2.6
>> > >>> Version: 2.6.37-1~experimental.1
>> > >>> Severity: normal
>> > >>>
>> > >>> Boot of linux-image-2.6.37-trunk-sparc64 fails to find the disks and drops
>> > >>> to the initramfs prompt. When I try to load the sym53c8xx driver it fails
>> > >>> as follows
>> > >>>
>> > >>> (initramfs) modprobe sym53c8xx
>> > >>> [ 122.470284] module scsi_mod: Unknown relocation: 36
>> > >>> FATAL: Error inserting sym53c8xx (/lib/modules/2.6.37-trunk-sparc64/kernel/drive
>> > >>> rs/scsi/sym53c8xx_2/sym53c8xx.ko): Invalid module format
>> > >>> (initramfs)
>> > >>
>> > >> David, do you have any idea how this could happen?
>> > >>
>> > >>> A quick web search finds a similar issue
>> > >>> http://kerneltrap.org/mailarchive/linux-kernel/2010/6/16/4583942
>> > >>> but I have not looked into this any further yet.
>> > >> [...]
>> > >>
>> > >> That was apparently a bug in the build scripts for a separate module.
>> > >
>> > > And like that case bad build flags are causing this problem too. It
>> > > means that "-mcode-model=medlow" is not making it into the module
>> > > build cflags somehow.
>> > >
>> > > This relocation can only occur for sparc64 code models other than
>> > > "medlow".
>> >
>> > I did a test Debian build using my Sun Fire V120 running to double check
>> > the build with the 2.6.27-1@experimental.1 sources. This fails in the
>> > same way that the official build fails.
>> >
>> > Looking at the build output it seems to end up building setup_sparc but
>> > I think it should be building setup_sparc64 in the rules.
>> [...]
>> > I will try a package build forcing DEB_HOST_ARCH to sparc64 and see if
>> > that builds the right packages.
>>
>> No, this is correct behaviour. $DEB_HOST_ARCH is the Debian userland
>> architecture (as used in the package metadata) and may differ from the
>> kernel architecture. All the defined kernel flavours for sparc are
>> 64-bit.
>>
> Thanks Ben. I've started looking at a few other potential causes...
>
> Looking at the relocation symbols in scsi_mod.ko as reported by objdump
> it looks to me that the R_SPARC_13 and R_SPARC_UA64 are the unsupported
> relocation types that are stopping the driver getting loaded.
>
> richm@shirehall:/usr/src/linux-2.6-2.6.37/debian/build/build_sparc_none_sparc64$ objdump -r /lib/modules/2.6.37-trunk-sparc64/kernel/drivers/scsi/scsi_mod.ko | cut -d' ' -f 2 | sort | uniq -c
> 51
> 16 RECORDS
> 53 R_SPARC_13
> 129 R_SPARC_32
> 2352 R_SPARC_64
> 825 R_SPARC_HI22
> 869 R_SPARC_LO10
> 20 R_SPARC_UA64
> 1011 R_SPARC_WDISP30
The original error report shows:
>> > >>> (initramfs) modprobe sym53c8xx
>> > >>> [ 122.470284] module scsi_mod: Unknown relocation: 36
^^^^^^^^^^^^^^^^^^^^^^
>> > >>> FATAL: Error inserting sym53c8xx (/lib/modules/2.6.37-trunk-sparc64/kernel/drive
>> > >>> rs/scsi/sym53c8xx_2/sym53c8xx.ko): Invalid module format
>> > >>> (initramfs)
So you didn't need to analyze the binary with objdump to
work on this bug.
Relocation type 36 is R_SPARC_LM22.
Reply to: