arm-wince-pe's objects are incompatible with WinCE linker

Dmitry Semyonov Dmitry.Semyonov@oktet.ru
Tue Nov 11 16:24:00 GMT 2003


Hello all.

I'm trying to create an object file from a C source with the following
function:

 -- begin --
void str_test(void)
{
    NKDbgPrintfW(L"1\r\n");
    NKDbgPrintfW(L"12\r\n");
}
 -- end --


(arm-wince-pe-gcc -fno-leading-underscore -S str_test.c) produces
the following asm output:

 -- begin --
        .file   "str_test.c"
        .section .rdata
        .align  0
LC0:
        .ascii  "1\000\r\000\n\000\000\000"
        .align  0
LC1:
        .ascii  "1\0002\000\r\000\n\000\000\000"
        .text
        .align  0
        .global str_test
str_test:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 1, uses_anonymous_args = 0
        mov     ip, sp
        stmfd   sp!, {fp, ip, lr, pc}
        sub     fp, ip, #4
        ldr     r0, L2
        bl      NKDbgPrintfW
        ldr     r0, L2+4
        bl      NKDbgPrintfW
        ldmfd   sp, {fp, sp, pc}
L3:
        .align  0
L2:
        .word   LC0
        .word   LC1
 -- end --

Microsoft linker from WinCE 4.2 expects both L2 and L2+4 words to be
zeros in object file. (Actual addresses of LC0 and LC1 strings are
_added_ to L2 and L2+4 words during linking). But L2+4 word contains
value of 8 (offset of LC1 string) instead.

Is there an option to control the behavior of gas in the way MS linker
expects?

If not then it is a bug in gas or bfd. I'm currently trying to determine
the exact place. Any help would be welcome, since I'm not very familiar
with binutils.


P.S.
I'm using latest snapshots of binutils/gcc on linux host for
arm-wince-pe target.


...Bye..Dmitry.


------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com



More information about the crossgcc mailing list