FILE : Makefile
-----------------

CC = arm-elf-gcc
AS = arm-elf-as
LD = arm-elf-ld
od = arm-elf-objdump
RM = rm

TARGET_MACH = -mno-fpu -march=armv4t -mcpu=arm7tdmi -mthumb-interwork -EL
TARGET_ARCH = -march=armv4t -mcpu=arm7tdmi -mthumb-interwork -mthumb
CPPFLAGS =
CFLAGS = -O0
ASFLAGS = 
LDFLAGS  = --gc-sections --entry=_istart --defsym ResetHandler=0x400c0000
LDFLAGS += -Ttext 0x20000080
LDFLAGS += -Tdata 0x20000000

OBJ = FirstAsm.o SecondAsm.o ThirdC.o
ELF = FinalProgram.elf
LST = FinalProgram.lst
SYM = FinalProgram.sym

.PHONY: all
all: $(OBJ)
	$(LD) $(LDFLAGS) -o $(ELF) $(OBJ)
	$(od) -S $(ELF) > $(LST)
	$(od) --all $(ELF) > $(SYM)

.PHONY: clean
clean:
	$(RM) -f $(ELF) *.lst *.o *.sym

FILE : FirstAsm.s
-----------------

.data
.align

FirstSectionCode:
.word 10
.word 20

EndOfFirstSectionCode:
.word 30

.global FirstSectionCode
.global EndOfFirstSectionCode

FILE : SecondAsm.s
-----------------

.text
.align
.arm

_istart:

LDR R1, =FirstSectionCode

BL f

.func af, _af

_af:

  STMDB sp!, { lr }
  LDMIA sp!, { lr }

  BX LR

.endfunc

.global _af
.global _istart

FILE : ThirdC.c
-----------------

void af( void );

int r;

int f( void )
{
  r = 10;
  _af();
  return r;
}

RESULTS FinalProgram.lst: Interworking code ZERO
------------------------------------------------

[...]

200000b8 <___af_from_thumb>:
200000b8:	4778      	bx	pc
200000ba:	46c0      	nop			(mov r8, r8)

200000bc <___af_change_to_arm>:
200000bc:	eafffff1 	b	20000088 <_af>

200000c0 <__f_from_arm>:
200000c0:	e59fc000 	ldr	ip, [pc, #0]	; 200000c8 <__f_from_arm+0x8>
200000c4:	e12fff1c 	bx	ip
200000c8:	20000099 	mulcs	r0, r9, r0

