Hi,

SDCC cannot pass all parameters in registers and it does 
not automatically pass them on the stack. Instead 
parameters are allocated in memory.

For function pointers this can not work so the pointed 
functions must be declared reentrant, either with the 
keyword 'reentrant' or by compiling the whole project 
with --stack-auto.

HTH,
Maarten

> Hi,
> 
> I'm compiling a small test program that consist of two source  files.
> I've uploaded the files as a zip archive to
> 
> http://www.sparetimelabs.com/sdccbug.zip 
> 
> and attached them as well.
> 
> My problem is that I get this error message:
> 
> ?ASlink-Warning-Undefined Global '_putf_PARM_2' referenced by module
> 'printf'
> 
> where '_putf_PARM_2' is a compiler generated variable.
> 
> I'm compiling them with a script (included in the archive as file
> 'makeit' ) as follows :
> 
> ------------------------------------------------------------
> echo Compile hello.c
> sdcc -mhc08 -c hello.c
> 
> echo Compile printf.c
> sdcc -mhc08 -c printf.c
> 
> echo Link hello.c
> sdcc -mhc08 --code-loc 0xE000 --stack-loc 0x00FF --xstack-loc 0x300
> --data-loc 
> 0x0100 --idata-loc 0x080 --xram-loc 0x200 -o hello.S19  hello.rel
> printf.rel
> ------------------------------------------------------------
> 
> This produces a link warning for a compiler generated variable the
> compiler
> uses to pass a parameter. And disassembling the generated code I see
> that indeed the variable is not referenced properly.
> 
> The output from the script above is:
> 
> ------------------------------------------------------------
> Compile hello.c
> Compile printf.c
> Link hello.c
> 
> ?ASlink-Warning-Undefined Global '_putf_PARM_2' referenced by module
> 'printf'
> ------------------------------------------------------------
> 
> 
> My SDCC version is:
> 
> ------------------------------------------------------------
> sdcc -v
> SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08
> 2.7.4 
> #4988 (Jan  9 2008) (Mac OS X i386)
> ------------------------------------------------------------
> 
> 
> Looking at the usage of the putf function  in 'printf.c'
> I see that it is not the most common garden variety function call:
> 
> ------------------------------------------------------------
> typedef void (*putcf) (void*,char);
> ...
> void tfp_format(void* putp,putcf putf,char *fmt, va_list va)
> ...
> putf(putp,ch);
> ------------------------------------------------------------
> 
> So it is a call to a function through a function pointer...
> could this be a compiler bug or am I doing something wrong?
> 
> Needles to say Ive compiled/linked and run this code
> previously without any problems with gcc.
> 
> br Kusti
> 
> 
> 
> 
> 
> 
> 
> 
> s
> 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to