All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brendan J Simon <Brendan.Simon@ctam.com.au>
To: linuxppc-dev <linuxppc-dev@lists.linuxppc.org>
Subject: Linux ABI documents and powerpc supplements.
Date: Wed, 05 Jan 2000 10:00:28 +1100	[thread overview]
Message-ID: <38727B8B.2FBD0B8@ctam.com.au> (raw)


To linuxppc developers,

Kai Ruottu (who contributes a hell of a lot on the crossgcc mailing list and who
cross-compiles for many targets including i586-cygwin, i586-mingw, powerpc-linux,
powerpc-eabi, sparc-linux, arm-linux, etc) had some questions about Linux ABIs and powerpc
supplements.  I have forwarded the entire email.  Hopefully someone can point him to any
relevant docs and/or answer his questions.  Most of his questions are towards the end of this
email.

Thanks,
Brendan Simon.



Kai Ruottu wrote:

> Brendan J Simon wrote:
> >
> > Kai Ruottu wrote:
> >
> > > 1. Using 'strings' to see the 'hard-wired' name of the dynamic linker in
> > >    the executable:
> > >
> > >         E:\usr\local\samples>strings tst_ppc-linux.x | more
> > >         /lib/ld.so.1    <------- !!!
> > >         __gmon_start__
> > >         libc.so.6
> >
> > The output of "powerpc-linux-strings bjs1-shared" looks OK to me.
> > $ powerpc-linux-strings bjs1-shared
> > _DYNAMIC
> > _GLOBAL_OFFSET_TABLE_
> > __gmon_start__
>
>  When your output from 'strings' didn't show the 'ld.so.1' (didn't it really?)
> I tried removing the '--dynamic-linker xxxxx' from my specs, and got then :
>
>         E:\usr\local\samples>strings tst_ppc-linux.x | more
>         /usr/lib/ld.so.1    <------- !!!!
>         __gmon_start__
>         libc.so.6
>
>  This could be the right place for 'ld.so.1' in a Linux/PPC-system and my
> powerpc-linux executables have been this far just insane... (I should never guess
> these things or trust my memory...)
>
> > I'm not sure how to interpret the output of "powerpc-linux-objdump -p bjs1-shared".
> > The output  is :
> > $ powerpc-linux-objdump -p bjs1-shared
> > <snip>
> > Dynamic Section:
> >   NEEDED      libc.so.6
> >   INIT        0x610   <----- !!!!
> >   FINI        0x634   <----- !!!!
> >   HASH        0x94
> >   STRTAB      0x310
> >   SYMTAB      0x150
> >   PLTGOT      0x40748
> >   JMPREL      0x48c
> >   RELA        0x420
> >   VERNEED     0x400
> >   VERSYM      0x3c8
>
>  The addresses look to be too small, those from my 'ppc-linux-gnu' are all over
> '0x10000000' :
>
>         Dynamic Section:
>           NEEDED      libc.so.6
>           NEEDED      ld.so.1
>           INIT        0x100011f0
>           FINI        0x10001214
>           HASH        0x10000150
>           STRTAB      0x1000027c
>           SYMTAB      0x1000019c
>           PLTGOT      0x10011990
>           JMPREL      0x10000368
>           RELA        0x10000368
>           VERNEED     0x10000348
>           VERSYM      0x1000032a
>
> which is the result of the default linker script (elf32ppclinux.x) :
>
>         SECTIONS
>         {
>           /* Read-only sections, merged into text segment: */
>           . = 0x10000000 + SIZEOF_HEADERS;
>           .interp   : { *(.interp) }
>           .hash           : { *(.hash)          }
>
>  What should the base address be for a Linux/PPC executable?
>
> > I don't see anything strange here.   I did the same for libc.so.6
> > $ powerpc-linux-objdump -p lib/libc.so.6
> > <snip>
> > Version definitions:
> > 1 0x01 0x0865f4e6 libc.so.6
> > 2 0x00 0x0d696910 GLIBC_2.0
> > 3 0x00 0x0d696911 GLIBC_2.1
> >         GLIBC_2.0
> >
> > Version References:
> >   required from ld.so.1:
> >     0x0d696911 0x00 05 GLIBC_2.1
> >     0x0d696910 0x00 04 GLIBC_2.0
> >
> > And again for ld.so.1
> > $ powerpc-linux-objdump -p lib/ld.so.1
> > <snip>
> > Version definitions:
> > 1 0x01 0x0275a261 ld.so.1
> > 2 0x00 0x0d696910 GLIBC_2.0
> > 3 0x00 0x0d696911 GLIBC_2.1
> >         GLIBC_2.0
> >
> > I don't see anything glaringly wrong but I don't exactly know what I would be looking
> > for.  Can you see any problems ?
>
>  Do you have just the same 'libc.so.6', 'ld.so.1' etc. in the cross-tools and in the
> run-time environment?  Your executable seems to be linked using some glibc-2.1.x libs,
> but do you have the same libs in the run-time target board?  Or just some smaller and
> older ones ? (Recently someone somewhere wondered why the glibc-2.1.x libs are so big
> when the older 2.0.6 ones were much smaller...).
>
>  Better to use the older ones at least when linking...
>
>  The generic rule is that one cannot run executables which were linked against newer
> shared libs, using older shared libs at run-time.  No forwards-compatibility expected.
> But all executables linked against older libs should run with newer shared libs. This
> kind of backwards-compatability is always expected... At least between two releases.
>
> > >  Perhaps the new 'readelf' utility in binutils can be used for sanity checks
> > > of the same kind...
> > Never heard of it.  Is it part of binutils-2.9.1 or newer cvs and snapshots ?
>
>  It is included with the new snapshots (perhaps almost a year now) :
>
> E:\usr\local\ppc-linux-gnu\bin>readelf --version
> GNU readelf 991116
> Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
> This program is free software; you may redistribute it under the terms of
> the GNU General Public License.  This program has absolutely no warranty.
>
>  And the 'elf32ppclinux' support appeared to them some time ago :
>
> E:\usr\local\ppc-linux-gnu\bin>ld -V
> GNU ld version 2.9.5 (with BFD 991116)
>   Supported emulations:
>    elf32ppclinux
>    elf32ppc
>
>  The difference between 'elf32ppc' and 'elf32ppclinux' was discussed some time ago,
> but the only difference seems to be the base address, here is a clip from the default
> linker script for elf32ppc :
>
>         SECTIONS
>         {
>           /* Read-only sections, merged into text segment: */
>           . = 0x01800000 + SIZEOF_HEADERS;
>           .interp   : { *(.interp) }
>           .hash           : { *(.hash)          }
>
>  If the default linker script for 'elf32ppclinux' says in the same lines :
>
>         SECTIONS
>         {
>           /* Read-only sections, merged into text segment: */
>           . = 0x10000000 + SIZEOF_HEADERS;
>           .interp   : { *(.interp) }
>           .hash           : { *(.hash)          }
>
>  So I'll repeat my question: "What should the base address to be for a Linux/PPC
> executable?"
>
>  Or doesn't it really matter if there is a '. = 0', '. = 0x01800000' or a '. = 0x10000000'
> in the line after the comment?
>
>  For all ELF/x86-systems the base address seems to be the same, but for MIPS, SPARC
> etc. it seems to vary between different ELF-systems... The SVR4/PowerPC ABI Supplement
> talks about '0x02000000' as the base address and the '/usr/lib/ld.so.1' is also the
> 'program interpreter' or the 'dynamic linker' there...
>
>   BTW, is there something equivalent for Linux/PPC as there is for the never-seen
> SVR4/PPC, the "System V Application Binary Interface, PowerPC Processor Supplement",
> by Steve Zucker and Kari Karhi?  Sometimes it sounds very funny when there seems to
> be no free docs for the "Free Linux" (only those "For Dummies" things), but quite a
> lot for the commercial SVR4 (e.g. via 'www.sco.com/developer/devspecs').
>
>  A document with the name "Linux Application Binary Interface,  PowerPC Processor
> Supplement" seems to be still missing... For Linux/ARM, Linux/Alpha, Linux/MIPS,
> Linux/M68K too... Isn't there any yet for Linux/x86? (Who said that MS tries to hide
> the Windows ABI...). Some day all the money went to RedHat & Co. should be converted
> into some docs... Meanwhile the SVR4-ABI docs, the ARM-ELF-ABI, DWARF etc. docs seem
> to be the only for Linux. And the GNU sources of course, but who really likes to read
> everything from the sources...
>
>  Ok, if there were some nice PDF etc. docs for Linux/* ABIs, there could be much less
> misunderstandings and much less trouble to find these 'base' things... But surely more
> answers with the advice about 'RTFM'....


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

             reply	other threads:[~2000-01-04 23:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-01-04 23:00 Brendan J Simon [this message]
2000-01-05  0:23 ` Linux ABI documents and powerpc supplements Franz Sirl
2000-01-05  5:08   ` Brendan J Simon
2000-01-05  6:46     ` Momchil 'Velco' Velikov
2000-01-05  6:21       ` Brendan J Simon
2000-01-05 10:19         ` Michael Schmitz
2000-01-05  7:04       ` dynamic binaries not working Brendan J Simon
2000-01-05  8:34         ` Daniel Jacobowitz
2000-01-05 12:47         ` Kenneth Johansson
2000-01-05 22:24           ` MPC860 patches for glibc Brendan J Simon
2000-01-05 23:36             ` Graham Stoney
2000-01-06 13:18               ` Jesper Skov
2000-01-07  1:44                 ` Brendan J Simon
2000-01-08  8:46                   ` Jesper Skov

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=38727B8B.2FBD0B8@ctam.com.au \
    --to=brendan.simon@ctam.com.au \
    --cc=linuxppc-dev@lists.linuxppc.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.