[net.micro.6809] Strange C-Linker Errors-Help!

knudsen@ihwpt.UUCP (mike knudsen) (03/17/86)

Has anyone using Microware's Level I 6809 C Compiler
ever seen anything like this?
The Linker reads the .r files and the Library,
then prints out a dozen lines of the form:

Missing Symbol	Ref'ed in	In file
_11		mused_c		mused.r
_52		mused_c		mused.r
_123		mused_c		mused.r

etc.

Now, mused.c is the file containing only my main() program
and nothing else (the word "mused" doesn't even appear
inside it).

I've seen lots of legitimate linker errors, when a function
or external variable couldn't be found (these were listed
by name and easily recognized), but never any
_<number> symbols.  I know the intermediate Assembler
code uses labels in the underscore-number format.
Some theories:

(1) These are calls to mult, divide, etc. routines
and the library is braindamaged and doesn't supply them.

(2) These are external constants made up by the compiler
that somehow got lost.

(3) One of the compiler phases screwed up and put out
a bogus intermediate file.  Sometimes the phases
do mis-load from CMDS/ and when that happens they either
crash or sometimes write bad output that the next phase
*usually* chokes on.  Funny, OS9 isn't supposed to load
disk files with bad CRCs -- the bytes must get hosed
during or after being written to RAM.

I'd appreciate hearing from anyone who has seen this style
of error and can save me from re-inventing the wheel.

I plan to re-compile the main program (mused.c) and try
again.  It had been only slightly modified since the last
good compile/link.

Also, is "ident" supposed to work on C libraries?
It always gives me "incorrect header" error.
Is that normal?  Ident works fine on "os9boot".

Thanks, mike k

brad@laidbak.UUCP (Bradley Bosch) (03/18/86)

I decided to post this since it seems like one of the nastier
problems one can have with the Microware compiler.

In article <765@ihwpt.UUCP> knudsen@ihwpt.UUCP (mike knudsen) writes:
>Has anyone using Microware's Level I 6809 C Compiler
>ever seen anything like this?
>The Linker reads the .r files and the Library,
>then prints out a dozen lines of the form:
>
>Missing Symbol	Ref'ed in	In file
>_11		mused_c		mused.r
>_52		mused_c		mused.r
>_123		mused_c		mused.r
>

You probably ran out of disk space for the assembly output
file The second pass seems not to recognize disk errors.  This
causes the output file to be truncated, causing references to
undefined symbols.  I have seen this before and increasing the
free space on the disk always solved the problem.

> ...
>Some theories:
> ...
>(2) These are external constants made up by the compiler
>that somehow got lost.

Thats right, these are labels (constants) used in the assembly stage.

> ...
>Also, is "ident" supposed to work on C libraries?

Use the rdump command which is supplied in source form with
the C disk.  Ident only works on executable modules, not
relocatable library files.

> ...
>Thanks, mike k

Brad Bosch
...ihnp4!laidbak!brad

emjej@uokvax.UUCP (03/20/86)

/* Written 12:29 pm  Mar 17, 1986 by knudsen@ihwpt.UUCP in net.micro.6809 */
Also, is "ident" supposed to work on C libraries?
It always gives me "incorrect header" error.
Is that normal?  Ident works fine on "os9boot".
/* End of text from net.micro.6809 */

C libraries are concatenations of .r files, which are NOT OS-9 modules,
even though the compiler docs misnames them "modules." (WOOF! on the
doc writer for that.)  You can see what's in there with the "rdump"
utility that should come with the compiler.

The reason .r files aren't modules is that they are designed to work
with a woofish, old-fashioned static linker of a kind that a language
that TRULY uses OS-9's advantages over Unix would not use.  Someone
needs to fix that, preferably by doing a Modula-2 or Ada or Russell
compiler RIGHT for OS-9.

						James Jones

latham@bsdpkh.UUCP (Ken Latham) (03/23/86)

Sender:

In article <765@ihwpt.UUCP> knudsen@ihwpt.UUCP writes:
>Has anyone using Microware's Level I 6809 C Compiler
>ever seen anything like this?
>The Linker reads the .r files and the Library,
>then prints out a dozen lines of the form:
>
>Missing Symbol	Ref'ed in	In file
>_11		mused_c		mused.r
>_52		mused_c		mused.r
>_123		mused_c		mused.r
>
>(3) One of the compiler phases screwed up and put out
>a bogus intermediate file.
>

 Bingo!

Assembly language output ( if you check it ) is truncated!
So the resolution to some of its own labels are missing!
Yours doesn't look too long, seems like you JUST didn't quite make it.

Occurs when the compiler decides theres not enough room in memory to finish
the job ( Unresolved label list gets too big I guess )

	...... geeesh I wish it would TELL YOU!

I had OS9 on a 64K CoCo that had to be loaded stupid ( NOTHING ADDED ) in order
to have enough room to compile some ( well ... MOST ) things.

I finally wrote a little shell to Unlink all the little utilities I loaded in
directly after boot ( I never put any thing in the boot itself ). And then
do the compile and load them back in again.... is that what you call
swapping ?  :-) .


					Ken Latham