Newbie errors while compiling - libc.a returns undefs

OP #1172655
Hi all,

I have been trying to port a bytecode interpreter over to the ARM7 for
future use in the Lego NXT. It's also my first time doing work with the
ARM toolchain or other embedded stuff.

I am using the latest Win-ARM (4/2007) which has arm-elf-gcc 4.1.2. The
makefile I am using is based on the example code from
C:\WinARM\examples\at91sam7s64_Hello.

So far I have been able to debug the majority of errors with the
linking, but now I'm getting the following, even after adding a copy of
the syscalls.c from the C:\WinARM\examples\at91sam7s64_cpp example.
1
Source compilations....
2
.
3
.
4
Compiling C: syscalls.c
5
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi  -I. -gdwarf-2 -DROM_RUN
6
-DVECTORS_IN_RAM  -Os -Wall -Wcast-align -Wimplicit  -Wpointer-arith -W
7
switch -Wredundant-decls -Wreturn-type -Wshadow -Wunused
8
-Wa,-adhlns=syscalls.lst  -I./common -MD -MP -MF .dep/syscalls.o.d
9
-Wnested-e
10
xterns  -std=gnu99 syscalls.c -o syscalls.o
11

12
Linking: main.elf
13
arm-elf-gcc -mthumb -mcpu=arm7tdmi  -I. -gdwarf-2 -DROM_RUN
14
-DVECTORS_IN_RAM  -Os -Wall -Wcast-align -Wimplicit  -Wpointer-arith
15
-Wswi
16
tch -Wredundant-decls -Wreturn-type -Wshadow -Wunused
17
-Wa,-adhlns=main.lst  -I./common -MD -MP -MF .dep/main.elf.d    main.o
18
basepath.
19
o foreign.o heap.o info.o iofuncs.o mark.o mutator.o primitive.o
20
profile.o stable.o external.o hashtable.o hsffi.o integer.o jonkers.o
21
 make.o module.o pretty.o process.o sanity.o stopcopy.o Array.o
22
Concurrent.o FFI.o IO.o IORef.o PackedString.o Prelude.o RuntimeAPI.o
23
WrapPrimitive.o System.o syscalls.o     --output main.elf -nostartfiles
24
-Wl,-Map=main.map,--cref -lc  -lm -lc -lgcc     -TAT91SAM7S64-
25
ROM.ld
26
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
27
region CODE is full (main.elf section .text)
28
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
29
section .text [00100000 -> 0011c8c7] overlaps section .rodata [
30
00100000 -> 001052bb]
31
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
32
section .data [001052bc -> 00105e03] overlaps section .text [00
33
100000 -> 0011c8c7]
34
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
35
main.elf: section .text lma 0x100000 overlaps previous sections
36

37
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\libc.a(lib_a-clock.o):
38
In function `clock':
39
clock.c:(.text+0xa): undefined reference to `_times_r'
40
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\libc.a(lib_a-exit.o):
41
In function `exit':
42
exit.c:(.text+0x1a): undefined reference to `_exit'
43
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\libc.a(lib_a-fopen.o):
44
In function `_fopen_r':
45
fopen.c:(.text+0x34): undefined reference to `_open_r'
46
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\libc.a(lib_a-remove.o):
47
In function `_remove_r':
48
remove.c:(.text+0x2): undefined reference to `_unlink_r'
49
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\libc.a(lib_a-rename.o):
50
In function `_rename_r':
51
rename.c:(.text+0x6): undefined reference to `_link_r'
52
rename.c:(.text+0x12): undefined reference to `_unlink_r'
53
c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\libc.a(lib_a-sysstat.o):
54
In function `stat':
55
sysstat.c:(.text+0xc): undefined reference to `_stat_r'
56
collect2: ld returned 1 exit status
57
make: *** [main.elf] Error 1

Does anyone have any suggestions? Thanks very much in advance.
#1172656
Hi, Alex.

Alex Moe wrote:
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
> region CODE is full (main.elf section .text)
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
> section .text [00100000 -> 0011c8c7] overlaps section .rodata [
> 00100000 -> 001052bb]
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
> section .data [001052bc -> 00105e03] overlaps section .text [00
> 100000 -> 0011c8c7]
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
> main.elf: section .text lma 0x100000 overlaps previous sections

maybe, there is no enough space in flash?
 >c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\li 
bc.a(lib_a-clock.o):
> In function `clock':
> clock.c:(.text+0xa): undefined reference to `_times_r'
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-exit.o):
> In function `exit':
> exit.c:(.text+0x1a): undefined reference to `_exit'
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-fopen.o):
> In function `_fopen_r':
> fopen.c:(.text+0x34): undefined reference to `_open_r'
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-remove.o):
> In function `_remove_r':
> remove.c:(.text+0x2): undefined reference to `_unlink_r'
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-rename.o):
> In function `_rename_r':
> rename.c:(.text+0x6): undefined reference to `_link_r'
> rename.c:(.text+0x12): undefined reference to `_unlink_r'
> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-sysstat.o):
> In function `stat':
> sysstat.c:(.text+0xc): undefined reference to `_stat_r'
> collect2: ld returned 1 exit status
> make: *** [main.elf] Error 1

I think, you need to write your own functions that are missed.
_exit is defined in default syscalls.c, but it is defined in #ifdef
section.
All of other functions anren't present in default syscalls.c

Best regards, Den
OP #1172657
Denis Kuzmenko wrote:
> Hi, Alex.
>
> Alex Moe wrote:
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
>> region CODE is full (main.elf section .text)
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
>> section .text [00100000 -> 0011c8c7] overlaps section .rodata [
>> 00100000 -> 001052bb]
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
>> section .data [001052bc -> 00105e03] overlaps section .text [00
>> 100000 -> 0011c8c7]
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe:
>> main.elf: section .text lma 0x100000 overlaps previous sections
>
> maybe, there is no enough space in flash?
>  >c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\li 
bc.a(lib_a-clock.o):
>> In function `clock':
>> clock.c:(.text+0xa): undefined reference to `_times_r'
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-exit.o):
>> In function `exit':
>> exit.c:(.text+0x1a): undefined reference to `_exit'
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-fopen.o):
>> In function `_fopen_r':
>> fopen.c:(.text+0x34): undefined reference to `_open_r'
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-remove.o):
>> In function `_remove_r':
>> remove.c:(.text+0x2): undefined reference to `_unlink_r'
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-rename.o):
>> In function `_rename_r':
>> rename.c:(.text+0x6): undefined reference to `_link_r'
>> rename.c:(.text+0x12): undefined reference to `_unlink_r'
>> c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/thumb\lib 
c.a(lib_a-sysstat.o):
>> In function `stat':
>> sysstat.c:(.text+0xc): undefined reference to `_stat_r'
>> collect2: ld returned 1 exit status
>> make: *** [main.elf] Error 1
>
> I think, you need to write your own functions that are missed.
> _exit is defined in default syscalls.c, but it is defined in #ifdef
> section.
> All of other functions anren't present in default syscalls.c
>
> Best regards, Den

Thanks Den...I'm thinking that perhaps this time I am using the wrong
header files...does anyone know if syscalls.c has an up to date version
with all the bells and whistles?

I heard also that there is an arm-lib out there somewhere. Any
experiences with it?

Cheers
#1172658
Alex Moe wrote:
> Thanks Den...I'm thinking that perhaps this time I am using the wrong
> header files...does anyone know if syscalls.c has an up to date version
> with all the bells and whistles?
>
> I heard also that there is an arm-lib out there somewhere. Any
> experiences with it?
>
> Cheers

syscalls.c from example has functionality, which is needed for example's
purposes.
If you are trying to use filesystem, you need to write low-level file
system functions yourself

About armlib. If you mean armlib, which I'm thinking about, I also tried
to use it. I've found it by the request "armlib" in Google(it wasn't
hard to find it). But I don't like it. Armlib has a less functionality(I
this means a low size in flash), but it has many platform-dependent
functions for AT91 and LPC processors.

As for me, newlib is better.

Denis

Reply

A question of your own? This thread is over 19 years old. Ask it in a thread of its own – more people read along there, and it gets answered more often and sooner.

Start a new thread

A fix, an addition or feedback on this thread? Then reply here.

Formatting
  • [c]C-Code[/c]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.