On Thursday 31 December 2009 17:32:02, Danny Backx wrote:
> On Thu, 2009-12-31 at 16:11 +0000, Pedro Alves wrote:
> > And, I'm using ld's --defsym switch to define it.
> 
> > It looks like Windows Mobile 6.1's loader is darn strict WRT
> > to base relocations, and we'll have to figure out a different
> > way to get at the runtime image base.
> 
> A variation of what both you and I have tried should do the trick,
> shouldn't it ?
> 
> Based on the values in your example :
> - we can't pass __image_base__ = 0x010000
> - but we can pass 0x011000 == &DllMainCRTStartup
> then all the additional info we need is 0x01000 (BaseOfCode).

Yes, but this patch instead should be quite upstreamable:

Index: binutils/ld/scripttempl/pe.sc
===================================================================
--- binutils.orig/ld/scripttempl/pe.sc  2009-12-31 17:50:54.000000000 +0000
+++ binutils/ld/scripttempl/pe.sc       2009-12-31 17:52:29.000000000 +0000
@@ -70,6 +70,7 @@ SECTIONS
   ${RELOCATING+. = ALIGN(__section_alignment__);}
   .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < 
${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
   {
+    ${RELOCATING+__text_start__ = . ;}
     ${RELOCATING+ *(.init)}
     *(.text)
     ${R_TEXT}
@@ -85,6 +86,7 @@ SECTIONS
     ${RELOCATING+ *(.gcc_exc)}
     ${RELOCATING+PROVIDE (etext = .);}
     ${RELOCATING+ *(.gcc_except_table)}
+    ${RELOCATING+__text_end__ = . ;}
   }

   /* The Cygwin32 library uses a section to avoid copying certain data

There are already __data_start__, __data_end__ and 
__bss_start__, __bss_end__ symbols, only text range is missing.

For the 0x01000, we could just hardcode it.  In practice, this is
the usual size of the PE headers.  Can an image have a bigger header
than that, in practice?  Or are the variable size bits all in
idata, edata, etc., which end up in allocated section?  I know that
gdb hardcodes the 0x1000 (src/gdb/windows-nat.c).

I don't think it is possible on Windows CE to read the
IMAGE_OPTIONAL_HEADER and friends from DllMainCRTStartup, starting from
the passed in handle?  We could get at the image base that way, but
I think that's only possible on non-CE Windows.  Am I wrong?

-- 
Pedro Alves

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Cegcc-devel mailing list
Cegcc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cegcc-devel

Reply via email to