--- El vie, 10/7/09, Alistair Buxton <a.j.bux...@gmail.com> escribió:
> De: Alistair Buxton <a.j.bux...@gmail.com>
> Asunto: Re: [Sdcc-user] Z80 and custom crt0 - gsinit is pointing to GSFINAL
> instead of GSINIT
> Para: sdcc-user@lists.sourceforge.net
> Fecha: viernes, 10 julio, 2009 11:31
> 2009/7/7 Alistair Buxton <a.j.bux...@gmail.com>:
> > 2009/7/7 <bob...@comcast.net>:
> >>
> >> ----- Alistair Buxton wrote:
> >>
> >>> When I use my custom crt0, in the final
> binary, gsinit: is pointing to
> >>> GSFINAL instead of GSINIT.
> >>
> >> crt0 needs to be the first module in the list of
> modules you link.
> >> If it is not first, then the gsinit label will not
> be ahead of the stuff
> >> the compiler puts in the GSINIT area. This is
> not documented
> >> very well. I think that when you let sdcc
> magically add crt0, it
> >> places it ahead of everything else you link. But
> when you use
> >> the "--no-std-crto", it is up to you to put it
> first.
> >
> > If I place crt0 first in the list of files for the
> linker, it produces
> > no output at all. No error messages, and no IHX file.
> > The linker seems to want the .o file with main()
> first.
>
> After digging deeper this seems to be a problem with the
> sdcc front
> end - the linker produces correct output and then sdcc
> promptly
> deletes it because it expected the linker to use an
> intermediate file
> name, but link-z80 directly uses the name specified by -o.
>
I don't know if this will help you. It has passed many months since I last
worked with a z80 machine, but I have an example of .lnk file that I generate
automatically with makefile and worked for me:
-->START<--
--
-m
-j
-x
-i /home/yakumo/dev/prj/msx/sdk/build/demos/testmake/bin/testmake
-b _CODE = 0x4020
-b _DATA = 0x8000
-k /usr/local/share/sdcc/lib/z80
-l z80
/home/yakumo/dev/prj/msx/sdk/build/libraries/startup/bin/crt0msx_rom.o
/home/yakumo/dev/prj/msx/sdk/build/demos/testmake/obj/psg.o
/home/yakumo/dev/prj/msx/sdk/build/demos/testmake/obj/debug.o
/home/yakumo/dev/prj/msx/sdk/build/demos/testmake/obj/main.o
/home/yakumo/dev/prj/msx/sdk/build/demos/testmake/obj/psgasm.o
/home/yakumo/dev/prj/msx/sdk/build/demos/testmake/obj/test.o
-l z80.lib
-->END<--
As you can see, I link with a custom crt. In case it would be helpful for
you, I'll paste also the contents of the crt file.
-->START<--
; Generic crt0.s for a Z80
.module crt0msx_rom_s
.globl _main
.area _HEADER (ABS)
; Reset vector
.org 0x4000
.db 0x41
.db 0x42 ; "AB" HEADER
.dw init
.dw 0x0000
.dw 0x0000
.dw 0x0000
.dw 0x0000
.dw 0x0000
.dw 0x0000
init:
;
; Stack at the top of memory.
ld sp,(0xfc4a)
; Initialise global variables
call gsinit
call _main
;jp _exit
; Ordering of segments for the linker.
.area _CODE
.area _GSINIT
.area _GSFINAL
.area _DATA
.area _BSS
.area _CODE
; Special RLE decoder used for initializing global data
;__initrleblock::
; ret
.area _GSINIT
gsinit::
.area _GSFINAL
ret
-->END<--
Hope it could help.
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user