On 17 Jan 2003, Eric W. Biederman wrote:
> > Well:
> >
> > __start___ksymtab = .; \
> > __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \
> > *(__ksymtab) \
> > } \
> > __stop___ksymtab = .; \
> >
> > breaks on some ARM binutils (from a couple of years ago.) The most
> > reliable way we've found in with ARM binutils is to place the symbols
> > inside the section - this appears to work 100% every single time and
> > I've never had any reports of failure (whereas I did with the symbols
> > outside as above.)
>
> That has been roughly my experience on x86 as well with the exception
> of bss sections. For bss sections placing the symbols inside the section
> itself has been deadly.
Can both of you guys elaborate on what "break" means here, I'm trying to
better understand what's going on. One thing is rather obvious, and that's
what causing the current breakage with RH8 binutils:
If "." isn't properly aligned, __kstart___ksymtab will point to an address
which is before the actual start of the section, since that gets aligned
to its requirements. Was that the ARM problem?
Now, what's different for __bss, i.e. what goes wrong there?
Related issue: The linker will actually automatically emit
__{start,stop}_SECTION symbols when SECTION is a C symbol (i.e.
letters,numbers,_), so things should actually work without explicitly
defining those symbols. They do on i386 with my binutils, but I assume
there's some reason why we don't just rely on that?
--Kai
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Thu Jan 23 2003 - 22:00:16 EST