On Fri, 06 Nov 2009 02:03:41 +0000, Dave Korn <dave.korn.cyg...@googlemail.com> wrote: > Vincent R. wrote: > >>> So Dave, question coundn't we manually change .idata section >>> characteristics for instance instead of disabling auto-import ? >> >> >> Ok I just tried to modify .idata section characteristics by removing >> write >> attributes and of course now I don't even have an error message, nothing >> happens. > > Yep; if you are using auto-import, you have to have writeable .rodata > sections, and since WM/CE doesn't allow that, it looks like auto-import is > screwed on WMCE and your choices are either 1) annotate all w32api headers > with dllimport, or 2) get v2 pseudo-relocs working. >
Anyway for the moment I am focusing on a simple sample application loading a dll that exports a single function and I am using declspec >> .idata section BUT IAT needs to have write access. In french we have an >> expression that could be translated by "a snake swallowing its own >> tail"... > > In Liverpool we talk about Our Rob or Ross ... > >> Second issue is .bss and from my limited knowledge of low level stuff >> this >> is the place where should go uninitialized data but of course they might >> be >> received a value during program execution so once again they need write >> attribute. So I would recommend to put .bss in .data. Of course I cannot >> guarantee it will sove our issue but this is the only thing I can propose >> for now. > > The real problem here (I think, without having recently built cegcc and > tested it) is that auto-import works by scattering little import tables > throughout the .text, .data and even (and this is a particular part of the > problem) .rodata section(s) of your exe. That means they have to be made > writable, otherwise when the run-time loader tries to fix up all the IAT > entries, it will SEGV - it knows enough to make the .idata section > writeable, > but that doesn't help because auto-import works by putting import tables in > other places. > > That's not a problem on (e.g.) the windows PE platforms, because the > runtime > loader there is less strict, but what I think we've all found out over the > past little while is that the WMCE loader is much more rigorous about the > executable image file format. > > Pseudo-relocs v2. solves this problem by not (ab)using the runtime > loader's > import resolution facility at all, but by keeping track of all the imported > addresses in a list, and running a bit of code at CRT startup time that > switches the relevant pages into read/write mode before relocating the > imports, thus avoiding the access violation that crashes the runtime > loader. > I would expect that to solve the problem on WMCE too. > I would like to use pseudo-reloc v2 and I have even enabled it as the default mechanism in emultempl/pe.em L171: link_info.pei386_runtime_pseudo_reloc = 2; /* Use by default version 2. */ ... L731: case OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC: link_info.pei386_runtime_pseudo_reloc = 2; break; I have also applied another patch that I think is supposed to fill IAT value and I have recompiled binutils but when I clean/recompile my sample application I cannot see any differences in binary code, IAT is still NULL. Do I need to also recompile w32api/mingw ? ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Cegcc-devel mailing list Cegcc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cegcc-devel