LPC2103 - Migrated from gcc-4.2.0 to gcc-4.3.3 - Broken!!

So I’ve just got a new desktop PC put together and I wanted to develop with my ARM tools. I figured I’d pull the latest GCC, et cetera and build those, which puts me at gcc 4.3.3 (I was previously at 4.2.0)

I managed to get everything to build (though it was fussy about compiling with interwork enabled) and things even installed. I rebuilt a project I’d previously done on version 4.2.0, and though everything seems ok, my new code load isn’t working. I’m getting software interrupts all over the place and nothing seems to behave.

Looking at my .lss file, it seems that there’s some new stuff linked in right at the beginning of the file. (Presumably some CRT stuff for better interwork support) My old listing file looked like this:

00000000 <_boot>:

// Runtime Interrupt Vectors
// -------------------------
Vectors:
        b     _start                    // reset - _start
       0:	ea000012 	b	50 <_mainCRTStartup>
        ldr   pc,_undf                  // undefined - _undf
       4:	e59ff014 	ldr	pc, [pc, #20]	; 20 <_undf>
        ldr   pc,_swi                   // SWI - _swi
       8:	e59ff014 	ldr	pc, [pc, #20]	; 24 <_swi>
        ldr   pc,_pabt                  // program abort - _pabt
       c:	e59ff014 	ldr	pc, [pc, #20]	; 28 <_pabt>
        ldr   pc,_dabt                  // data abort - _dabt
      10:	e59ff014 	ldr	pc, [pc, #20]	; 2c <_dabt>
        nop                             // reserved
      14:	e1a00000 	nop			(mov r0,r0)

Where as my new one looks like this:

00000000 <__disableIRQ_from_thumb>:
       0:	4778      	bx	pc
       2:	46c0      	nop			(mov r8, r8)
       4:	ea0000c2 	b	314 <disableIRQ>

00000008 <__restoreIRQ_from_thumb>:
       8:	4778      	bx	pc
       a:	46c0      	nop			(mov r8, r8)
       c:	ea0000e5 	b	3a8 <restoreIRQ>

00000010 <_boot>:
_boot:

// Runtime Interrupt Vectors
// -------------------------
Vectors:
        b     _start                    // reset - _start
      10:	ea000012 	b	60 <_mainCRTStartup>
        ldr   pc,_undf                  // undefined - _undf
      14:	e59ff014 	ldr	pc, [pc, #20]	; 30 <_undf>
        ldr   pc,_swi                   // SWI - _swi
      18:	e59ff014 	ldr	pc, [pc, #20]	; 34 <_swi>

What gives? Is that stuff supposed to be there? Do I have to link differently now, or is this the intended behavior? Has anyone else made this migration, and if so… how’s it working out? Are there tricks to getting things working correctly?

I’m completely content to roll back to an older version and just do things that way, but based on http://gcc.gnu.org/gcc-4.3/changes.html … It looks like someone has worked hard to make interworking easier with these things, and if I can take advantage of it, I’d really like to.

Thanks!

-R