public inbox for sid@sourceware.org
 help / color / mirror / Atom feed
From: Dave Brolley <brolley@redhat.com>
To: sid@sources.redhat.com
Subject: SID ELF loader using wrong load address?
Date: Mon, 04 Feb 2002 12:30:00 -0000	[thread overview]
Message-ID: <3C5EEF5F.77116D06@redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 988 bytes --]

Hi,

I have a linker script for an application on an ELF target which
contains something like the following:

.reloc_section 0x1000 : AT (LOADADDR(.text)+SIZEOF(.text))
{
   *(.reloc_section)
}

This is a section of code which should be loaded at the end of the .text
section and is intended to be copied (by the application itself) to
address 0x1000 before being executed. However, the SID ELF loader
currently loads this section at address 0x1000 (the VMA) instead of at
the given LMA. Visual inspection of a hex dump of my executable shows
that, for elf32, the address being used at offset 8 of the section
header is indeed the VMA and that the LMA is at offset 12 (can anyone
confirm this?).

The attached patch gets the section loaded at the proper LMA and has
been tested against my port (an internal one) and against xstormy16. I
would not expect any regressions since the LMA and the VMA are the same
unless one plays linker script tricks like the one above.

OK to commit?

Dave

[-- Attachment #2: lma.ChangeLog --]
[-- Type: text/plain, Size: 157 bytes --]

2002-02-04  Dave Brolley  <brolley@redhat.com>

	* elfload.c (readElfFile): Obtain the load address from offset 24 for
	elf64 and from offset 12 for elf32.


[-- Attachment #3: lma.patch.txt --]
[-- Type: text/plain, Size: 1762 bytes --]

Index: sid/component/loader/elfload.c
===================================================================
RCS file: /cvs/src/src/sid/component/loader/elfload.c,v
retrieving revision 1.2
diff -c -p -r1.2 elfload.c
*** sid/component/loader/elfload.c	2001/01/13 14:26:05	1.2
--- sid/component/loader/elfload.c	2002/02/04 20:23:40
*************** readElfFile (PFLOAD func, unsigned* entr
*** 93,99 ****
  	    }
  	  if (fetchWord (psymHdr, littleEndian) == PT_LOAD)
  	    {
! 	      loadAreas[loadAreaCount].loadAddr = fetchQuad(psymHdr+16,
  							    littleEndian);
  	      loadAreas[loadAreaCount].offset = fetchQuad(psymHdr+8, littleEndian);
  	      loadAreas[loadAreaCount].filesize = fetchQuad(psymHdr+32,
--- 93,99 ----
  	    }
  	  if (fetchWord (psymHdr, littleEndian) == PT_LOAD)
  	    {
! 	      loadAreas[loadAreaCount].loadAddr = fetchQuad(psymHdr+24,
  							    littleEndian);
  	      loadAreas[loadAreaCount].offset = fetchQuad(psymHdr+8, littleEndian);
  	      loadAreas[loadAreaCount].filesize = fetchQuad(psymHdr+32,
*************** readElfFile (PFLOAD func, unsigned* entr
*** 111,117 ****
  	    }
  	  if (fetchWord (psymHdr, littleEndian) == PT_LOAD)
  	    {
! 	      loadAreas[loadAreaCount].loadAddr = fetchWord(psymHdr+8,
  								    littleEndian);
  	      loadAreas[loadAreaCount].offset = fetchWord(psymHdr+4, littleEndian);
  	      loadAreas[loadAreaCount].filesize = fetchWord(psymHdr+16,
--- 111,117 ----
  	    }
  	  if (fetchWord (psymHdr, littleEndian) == PT_LOAD)
  	    {
! 	      loadAreas[loadAreaCount].loadAddr = fetchWord(psymHdr+12,
  								    littleEndian);
  	      loadAreas[loadAreaCount].offset = fetchWord(psymHdr+4, littleEndian);
  	      loadAreas[loadAreaCount].filesize = fetchWord(psymHdr+16,

             reply	other threads:[~2002-02-04 20:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-04 12:30 Dave Brolley [this message]
2002-02-04 12:42 ` Frank Ch. Eigler
2002-02-04 14:33   ` Dave Brolley
2002-02-05  8:39 ` Dave Brolley

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=3C5EEF5F.77116D06@redhat.com \
    --to=brolley@redhat.com \
    --cc=sid@sources.redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).