MAKE 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
TARGET_ARCH = -march=armv4t -mcpu=arm7tdmi -mthumb-interwork -mthumb
CPPFLAGS =
CFLAGS = -O0
ASFLAGS = 
LDFLAGS = --gc-sections

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

FIRST FILE  : FirstAsm.s
----- ----    ----------

.data
.align

FirstSectionCode:

.word 1
.word 2
.word _start

EndOfFirstSectionCode:

.word 3

.global FirstSectionCode
.global EndOfFirstSectionCode

SECOND FILE : SecondAsm.s
------ ----   -----------

.text
.align
.arm

_start:
BL f

.global _start

THIRD FILE  : ThirdC.c
----- ----    --------

int r;

int f( void )
{
  r = 10;
  return r;
}

RESULTS : no error once _start is defined globally

arm-elf-as  -mno-fpu -march=armv4t -mcpu=arm7tdmi -mthumb-interwork -o FirstAsm.o FirstAsm.s
arm-elf-as  -mno-fpu -march=armv4t -mcpu=arm7tdmi -mthumb-interwork -o SecondAsm.o SecondAsm.s
arm-elf-ld --gc-sections -o FinalProgram.elf FirstAsm.o SecondAsm.o ThirdC.o
arm-elf-objdump -S FinalProgram.elf > FinalProgram.lst
arm-elf-objdump --all FinalProgram.elf > FinalProgram.sym

