Assembly, GCC and the linker
C. M. Heard/VVNET, Inc.
heard@vvnet.com
Sat Feb 1 22:59:00 GMT 1997
> I have a few #define in a .h file that are needed by C, asm
> and linker. Is there a way to do this without declaring them in
> 3 files.
It is definitely possible to share .h files between C and assembler;
almost _all_ of the header files in the system I'm now working on
are used that way. What I do is to hide the C-specific stuff under
an #if defined(_LANGUAGE_C) clause, and make the assembler-specific
stuff under the #else, as in the following file:
/*
* gdb_stub.h - interface to gdb stub (debug agent)
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* The following software is offered for use in the public domain.
* There is no warranty with regard to this software or its performance
* and the user must accept the software "AS IS" with all faults.
*
* THE CONTRIBUTORS DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, WITH
* REGARD TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef _GDB_STUB_H
#define _GDB_STUB_H
#if defined(_LANGUAGE_C)
void handle_debug_exception (long long *saved_registers);
#else /* if !defined(_LANGUAGE_C) */
.globl handle_debug_exception
#endif /* defined(_LANGUAGE_C) */
#endif /* _GDB_STUB_H */
In the general case (though not in this example) there would be #defines
outside the #if defined(_LANGUAGE_C) clause, and these would be visible
to both the C and assembler modules.
> I tried to #include the .h file in the assembley file and feed it to
> the c preprocessor. The output had the #include file data in it, so 'as'
> choked.
>
> What parameters should I pass to the preprocessor to get it to output
> something that can be fed to AS?
> or How can I do the above step in 1 shot.
gcc recognizes the suffix .S (upper case S) as meaning an assembler file
which should go through the preprocessor, and will process that correctly.
> I am compiling in a dos box under NT and make (or NT) doesn't see .S and
> .s files as different, it treats both as assembler. Is this an issue?
YES IT MOST DEFINITELY IS. Although I use x86 Solaris, my partner refuses
to use Unix of any flavour, so I set up a compiler for him which runs in
a dos box under Windows 3.11. On the latter system we change all of the
suffixes from .S (which can't be represented under dos -- go32 lowers the
case of all 8+3 filenames) to .asm (which _can_ be represented) and add
the switch
-x assembler-with-cpp
to the gcc invocation line. Not elegant, but it does the trick.
> I need to allocate a block of memory in the linker file.
> The size of the block is a function of values declared in the .h
> file but the location must be specified by the linker
>
> Can I pass a value from a 'c' style #include file to the linker?
If you find out how to do this please tell me how you did it.
Mike
--
C. M. Heard
VVNET, Inc. phone: +1 408 247 9376
4040 Moorpark Ave. Suite 206 fax: +1 408 244 3651
San Jose, CA 95117 USA e-mail: heard@vvnet.com
More information about the crossgcc
mailing list