qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] elf: Calculate symbol size if needed


From: Stefan Weil
Subject: Re: [Qemu-devel] [PATCH] elf: Calculate symbol size if needed
Date: Wed, 11 Aug 2010 20:03:49 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.10) Gecko/20100620 Iceowl/1.0b1 Icedove/3.0.5

Am 11.08.2010 18:21, schrieb Blue Swirl:
On Mon, Aug 9, 2010 at 2:43 PM, Stefan Weil<address@hidden>  wrote:
Symbols with a size of 0 are unusable for the disassembler.

Example:

While running an arm linux kernel, no symbolic names are
used in qemu.log when the cpu is executing an assembler function.
That is a problem of the assembler function, it should use '.size'
directive like what happens when C code is compiled. And why just ARM?

It's not just ARM. ARM is just an example.

But I stumbled upon this problem when running the linux
start code from arch/arm/kernel/head.S.

Assume that the size of such symbols is the difference to the
next symbol value.

Signed-off-by: Stefan Weil<address@hidden>
---
  hw/elf_ops.h |    5 +++++
  1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/hw/elf_ops.h b/hw/elf_ops.h
index 27d1ab9..0bd7235 100644
--- a/hw/elf_ops.h
+++ b/hw/elf_ops.h
@@ -153,6 +153,11 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int 
fd, int must_swab,
         syms = qemu_realloc(syms, nsyms * sizeof(*syms));

         qsort(syms, nsyms, sizeof(*syms), glue(symcmp, SZ));
+        for (i = 0; i<  nsyms - 1; i++) {
+            if (syms[i].st_size == 0) {
+                syms[i].st_size = syms[i + 1].st_value - syms[i].st_value;
+            }
+        }
The size of the last symbol is not guesstimated, it could be assumed
to be _etext - syms[nsyms].st_value.

Or better
syms[nsyms - 1].st_size = _etext - syms[nsyms - 1].st_value

Even that would be wrong if the last symbol is not in the
text segment but data.

Programming that special case just to get perhaps one
last symbol size seems too much perfectionism.

Most symbols have a size != 0, so let's hope the last symbol
has one, too :-)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]