Libgloss is a library for all the details that usually get glossed over.
This library refers to things like startup code, and usually I/O support
for gcc
and C library
. The C library used through out
this manual is newlib
. Newlib is a ANSI conforming C library
developed by Cygnus Support. Libgloss could easily be made to
support other C libraries, and it can be used standalone as well. The
standalone configuration is typically used when bringing up new
hardware, or on small systems.
For a long time, these details were part of newlib. This approach worked well when a complete tool chain only had to support one system. A tool chain refers to the series of compiler passes required to produce a binary file that will run on an embedded system. For C, the passes are cpp, gcc, gas, ld. Cpp is the preprocessor, which process all the header files and macros. Gcc is the compiler, which produces assembler from the processed C files. Gas assembles the code into object files, and then ld combines the object files and binds the code to addresses and produces the final executable image.
Most of the time a tool chain does only have to support one target
execution environment. An example of this would be a tool chain for the
AMD 29k processor family. All of the execution environments for this
processor have the same interface, the same memory map, and the same
I/O code. In this case all of the support code is under newlib/libc/sys.
Libgloss’s creation was forced initially because of the cpu32
processor family. There are many different execution environments for
this line, and they vary wildly. newlib itself has only a few
dependencies that it needs for each target. These are explained later in
this doc. The hardware dependent part of newlib was reorganized into a
separate directory structure within newlib called the stub dirs. It was
initially called this because most of the routines newlib needs for a
target were simple stubs that do nothing, but return a value to the
application. They only exist so the linker can produce a final
executable image. This work was done during the early part of 1993.
After a while it became apparent that this approach of isolating the hardware and systems files together made sense. Around this same time the stub dirs were made to run standalone, mostly so it could also be used to support GDB’s remote debugging needs. At this time it was decided to move the stub dirs out of newlib and into it’s own separate library so it could be used standalone, and be included in various other GNU tools without having to bring in all of newlib, which is large. The new library is called Libgloss, for Gnu Low-level OS support.
• Supported targets: | What targets libgloss currently supports. | |
• Building libgloss: | How to configure and built libgloss for a target. | |
• Board support: | How to add support for a new board. |