From: Dave Anderson <anderson@redhat.com>
To: linux-ia64@vger.kernel.org
Subject: [Linux-ia64] Re: insmod bug causes kernel unwind failures for module text
Date: Tue, 30 Jul 2002 13:35:12 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105590701905854@msgid-missing> (raw)
In-Reply-To: <marc-linux-ia64-105590701905853@msgid-missing>
Keith,
Unfortunately the patch won't work, at least in the context of the current
kernel code, because the following range check in ia64_module_init() causes
the insmod to fail:
if (!mod_bound(archdata->segment_base, 0, mod))
{
printk(KERN_ERR "module_arch_init: archdata->unw_table out of bounds.\n");
return 1;
}
mod_bound() doesn't include the module struct as part of the module:
#define mod_bound(p, n, m) ((unsigned long)(p) >= ((unsigned long)(m) +
((m)->size_of_struct)) && \
(unsigned long)((p)+(n)) <= (unsigned long)(m) + (m)->size)
Dave Anderson
Keith Owens wrote:
> On Thu, 25 Jul 2002 13:38:27 -0400,
> Dave Anderson <anderson@redhat.com> wrote:
> >There is a bug in the initialization of the unw_table_entry structures for
> >all kernel modules, such that any unwind operation that comes upon a kernel
> >module text address will fail to find its associated unwind info data in
> >the build_script() routine. (Actually it won't be able to determine what
> >module it belongs to.)
>
> This patch against modutils 2.4.18 fixes it for me. Unless I hear any
> complaints in the next 24 hours, I will roll modutils 2.4.19 with this
> change on July 31 11:00 UTC.
>
> Segment base is pretty arbitrary for modules, changing it from start of
> text to start of module makes it easier to convert offsets to
> addresses. It is also what hppa{64} does for SEGREL.
>
> Index: 18.2/obj/obj_ia64.c
> --- 18.2/obj/obj_ia64.c Fri, 01 Mar 2002 11:39:06 +1100 kaos (modutils-2.4/c/0_obj_ia64.c 1.5 644)
> +++ 19.3(w)/obj/obj_ia64.c Tue, 30 Jul 2002 17:47:02 +1000 kaos (modutils-2.4/c/0_obj_ia64.c 1.7 644)
> @@ -911,12 +911,8 @@ arch_apply_relocation(struct obj_file *f
>
> case R_IA64_SEGREL32LSB : /* @segrel(sym + add), data4 LSB */
> case R_IA64_SEGREL64LSB : /* @segrel(sym + add), data8 LSB */
> - if (targsec->header.sh_type & SHT_NOBITS)
> - v = ifile->bss - v;
> - else if (targsec->header.sh_flags & SHF_EXECINSTR)
> - v = ifile->text - v;
> - else
> - v = ifile->data - v;
> + /* Only one segment for modules, see segment_base in arch_archdata */
> + v -= f->baseaddr;
> if (r_info = R_IA64_SEGREL32LSB)
> COPY_32LSB(loc, v);
> else
> @@ -1010,7 +1006,7 @@ arch_archdata (struct obj_file *f, struc
> ad->unw_start = 0;
> ad->unw_end = 0;
> ad->unw_table = 0;
> - ad->segment_base = f->sections[1]->header.sh_addr;
> + ad->segment_base = f->baseaddr;
> for (i = 0; i < f->header.e_shnum; ++i)
> {
> sec = f->sections[i];
next prev parent reply other threads:[~2002-07-30 13:35 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-30 8:28 [Linux-ia64] Re: insmod bug causes kernel unwind failures for module text Keith Owens
2002-07-30 13:35 ` Dave Anderson [this message]
2002-07-30 14:03 ` Dave Anderson
2002-07-31 1:09 ` Keith Owens
2002-07-31 17:33 ` Dave Anderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=marc-linux-ia64-105590701905854@msgid-missing \
--to=anderson@redhat.com \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.