This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Nick & others, Thanks for the input, but the --support-old-code flag doesn't appear to be the answer. And yes I am trying to replace GCC, GAS, and LD at the same time, I'm currently playing with binutils from CVS. No improvement from that either. I did some more digging since my last message, below I'll indicate what I see. The hello.s I use is still the same. As you said, the output pasted in below is from the fully linked exe file, not the .obj file. The executables I create from hello.s lack at least in two areas : - branches are off - references to literal strings are off In the piece below, you'll see that the statement at 11044 branches to an address 8 bytes too far to reach _fopen, also at 1106c and further you'll see three pointers all pointing to the same address. This is wrong too. The piece produced by the new compiler+binutils : 0001101c <_WinMain>: 1101c: e1a0c00d mov ip, sp 11020: e92dd800 stmdb sp!, {fp, ip, lr, pc} 11024: e24cb004 sub fp, ip, #4 ; 0x4 11028: e24dd014 sub sp, sp, #20 ; 0x14 1102c: e50b0010 str r0, [fp, #-16] 11030: e50b1014 str r1, [fp, #-20] 11034: e50b2018 str r2, [fp, #-24] 11038: e50b301c str r3, [fp, #-28] 1103c: e59f0028 ldr r0, [pc, #40] ; 1106c <_WinMain+0x50> 11040: e59f1028 ldr r1, [pc, #40] ; 11070 <_WinMain+0x54> 11044: eb0005da bl 127b4 <_fopen+0x8> 11048: e1a03000 mov r3, r0 1104c: e50b3020 str r3, [fp, #-32] 11050: e51b0020 ldr r0, [fp, #-32] 11054: e59f1018 ldr r1, [pc, #24] ; 11074 <_WinMain+0x58> 11058: eb0005de bl 127d8 <_fprintf+0x8> 1105c: e51b0020 ldr r0, [fp, #-32] 11060: eb0005e4 bl 127f8 <_fclose+0x8> 11064: e3a00000 mov r0, #0 ; 0x0 11068: eb00061b bl 128dc <_exit+0x8> 1106c: 00023000 andeq r3, r2, r0 11070: 00023000 andeq r3, r2, r0 11074: 00023000 andeq r3, r2, r0 For reference, here is a similar piece produced with old compiler +binutils : 0001101c <_WinMain>: 1101c: e1a0c00d mov ip, sp 11020: e92dd800 stmdb sp!, {fp, ip, lr, pc} 11024: e24cb004 sub fp, ip, #4 ; 0x4 11028: e24dd014 sub sp, sp, #20 ; 0x14 1102c: e50b0010 str r0, [fp, #-16] 11030: e50b1014 str r1, [fp, #-20] 11034: e50b2018 str r2, [fp, #-24] 11038: e50b301c str r3, [fp, #-28] 1103c: e59f0028 ldr r0, [pc, #40] ; 1106c <_WinMain+0x50> 11040: e59f1028 ldr r1, [pc, #40] ; 11070 <_WinMain+0x54> 11044: eb0005d8 bl 127ac <_fopen> 11048: e1a03000 mov r3, r0 1104c: e50b3020 str r3, [fp, #-32] 11050: e51b0020 ldr r0, [fp, #-32] 11054: e59f1018 ldr r1, [pc, #24] ; 11074 <_WinMain+0x58> 11058: eb0005dc bl 127d0 <_fprintf> 1105c: e51b0020 ldr r0, [fp, #-32] 11060: eb0005e2 bl 127f0 <_fclose> 11064: e3a00000 mov r0, #0 ; 0x0 11068: eb000619 bl 128d4 <_exit> 1106c: 00023000 andeq r3, r2, r0 11070: 0002301c andeq r3, r2, ip, lsl r0 11074: 00023020 andeq r3, r2, r0, lsr #32 In both cases, the pointers should refer to this : Contents of section .rdata: 23000 2f73746f 72616765 20636172 642f6465 /storage card/de 23010 76656c2f 6c6f672e 74787400 77000000 vel/log.txt.w... 23020 48656c6c 6f0d0a00 57434554 52414345 Hello...WCETRACE There might be other problems with the file produced, these are the ones I discovered. Unfortunately they appear more than enough reason for the executable not to do anything sensible :-( Quite frankly I have just started looking into binutils so its source is still a mystery so all clues are appreciated. I haven't bothered testing the recent pre-release. Danny On Tue, 2006-04-25 at 18:22 +0100, Nick Clifton wrote: > Hi Danny, > > > The old environment is based on gcc 3.4.2, gas 2.13.2, binutils 2.15. > > (Yes there's a mixup there.) The new environment is using gcc 4.1 and > > binutils 2.16. In all versions, the target platform is "arm-wince-pe". > > > > The person who created this distribution explains the mixup by saying > > that the GAS from 2.13 works, whereas the one in newer binutils doesn't. > > > > My personal experience with the 2.16 release appears to confirm that. > > Are you upgrading to the new GCC new GAS and new LD all at the same time > ? If not then that might be the cause. > > Are you aware of the --support-old-code linker switch which is specific > to the arm-wince-pe target ? Using this might help you. > > Using the latest binutils sources from CVS repository might also help. > If not then I would recommend comparing a disassembly of a working > binary and broken binary to see where there are changes. (Do not > compare the object files, but linked binaries. This should allow you to > find out how relocs may have been processed differently). > > Cheers > Nick > -- Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info
Attachment:
signature.asc
Description: This is a digitally signed message part
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |