lkml.org 
[lkml]   [2011]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: R_SPARC_13


    On 18/01/2011 06:50, David Miller wrote:
    > From: David Miller<davem@davemloft.net>
    > Date: Mon, 17 Jan 2011 16:37:09 -0800 (PST)
    >
    >> So we do end up seeing the R_SPARC_LO10 + R_SPARC_13 sequences in the
    >> final module object.
    >>
    >> Therefore, we really should handle R_SPARC_13 in the sparc module loader.
    >
    > Ok, I now feel like I'm hallucinating.
    >
    > davem@sunset:~/src/GIT/linux-2.6-stable$ uname -a
    > Linux sunset 2.6.37 #1 SMP Wed Jan 12 20:14:59 PST 2011 sparc64 GNU/Linux
    > davem@sunset:~/src/GIT/linux-2.6-stable$ objdump --reloc /lib/modules/2.6.37/kernel/net/ipv6/ipv6.ko | grep R_SPARC_13
    > 0000000000000c7c R_SPARC_13 *ABS*+0x0000000000000004
    > 0000000000001ae4 R_SPARC_13 *ABS*+0x0000000000000018
    > 0000000000001b0c R_SPARC_13 *ABS*+0x0000000000000008
    > ...
    > davem@sunset:~/src/GIT/linux-2.6-stable$ lsmod | grep ipv6
    > ipv6 240422 12
    > davem@sunset:~/src/GIT/linux-2.6-stable$
    >
    > I must be missing something obvious.
    >

    I think objdump may be distorting the truth a little. I found the
    following in binutils gas/config/tc-sparc.c tc-gen_reloc(). I wonder if
    it is displaying rewritten records rather than displaying the raw
    contents. I haven't traced it through the code but the fact that it is
    obviously working for you means that something like this is going on.

    /* We expand R_SPARC_OLO10 to R_SPARC_LO10 and R_SPARC_13
    on the same location. */
    if (code == BFD_RELOC_SPARC_OLO10)
    {
    relocs[1] = reloc = (arelent *) xmalloc (sizeof (arelent));
    relocs[2] = NULL;

    reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
    *reloc->sym_ptr_ptr
    = symbol_get_bfdsym (section_symbol (absolute_section));
    reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
    reloc->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_SPARC13);
    reloc->addend = fixp->tc_fix_data;
    }

    I will try your alignment patch without any R_SPARC_13 related changes
    and see how that goes.

    Regards

    Richard


    \
     
     \ /
      Last update: 2011-01-18 11:55    [W:5.801 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site