[Top] [All Lists]

Re: Relocation problem with MIPS kernel modules

To: David Daney <>
Subject: Re: Relocation problem with MIPS kernel modules
From: David VomLehn <>
Date: Mon, 3 Aug 2009 13:15:21 -0700
Authentication-results: sj-dkim-2;; dkim=pass ( sig from verified; );
Cc: Ralf Baechle <>, GCC Help Mailing List <>, Linux MIPS Mailing List <>
Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; l=1679; t=1249330521; x=1250194521; c=relaxed/simple; s=sjdkim2002; h=Content-Type:From:Subject:Content-Transfer-Encoding:MIME-Version;;; z=From:=20David=20VomLehn=20<> |Subject:=20Re=3A=20Relocation=20problem=20with=20MIPS=20ke rnel=20modules |Sender:=20; bh=BwBoOYZ+vAhB+JoOza2wTtXVaHbwKtUkr8bFGcLJrbc=; b=SOeBVKorXGsXUOXnGJpcu1PJAGV+hEa0VkSvYdchQwp800eQ2GQgBNIzFp fqPCCMpqz6cELYqnxxZu101XJdnkLgLVUDzCQEfEztCuRfbsAOk78RZWfetx WIUaQpRCqj;
In-reply-to: <>
Original-recipient: rfc822;
References: <> <> <>
User-agent: Mutt/1.5.18 (2008-05-17)
On Mon, Aug 03, 2009 at 12:33:25PM -0700, David Daney wrote:
> Ralf Baechle wrote:
>> On Thu, Jul 30, 2009 at 11:49:23AM -0700, David VomLehn wrote:
>>> To: GCC Help Mailing List <>,
>>>     Linux MIPS Mailing List <>
>>> Subject: Relocation problem with MIPS kernel modules
>>> Content-Type: text/plain; charset=us-ascii
>>> I have a MIPS loadable kernel module that, when I try to insmod it, causes 
>>> the
>>> kernel to emit the message:
>>>     module xyz: dangerous relocation
>> The GNU tools as an extension over the MIPS ABI allows an arbitrary number of
>> R_MIPS_HI16 relocations to be followed by a R_MIPS_LO16 symbol.  All
>> relocations of this sequence must use the same symbol, of course.  This is
>> a very old extension; I think it predates the Linux/MIPS port.
> Actually I think it is the opposite:
> OFFSET   TYPE              VALUE
> 00000000 R_MIPS_HI16       .bss+0x00000004
> 00000008 R_MIPS_LO16       .bss+0x00000004
> 00000014 R_MIPS_LO16       .bss+0x00000004
> We load the hi16 value into a register and then use multiple lo16  
> offsets for the follow loads and stores to the same location.  On a  
> read-modify-write we only want to load the base address one time.

This particular case is covered by the old MIPS Processor psABI:

        R_MIPS_LO16 entries without an R_MIPS_HI16 entry immediately preceding
        are orphaned and the previously defined R_MIPS_HI16 is used for
        computing the addend.

The code in module.c looks like it implements the extension to which Ralf

> David Daney

David VomLehn

<Prev in Thread] Current Thread [Next in Thread>