diff options
author | peter <peter@FreeBSD.org> | 1996-05-05 07:56:21 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1996-05-05 07:56:21 +0000 |
commit | 4b7195c99191637bf59fd4ad626297296bf3610f (patch) | |
tree | bea8a07c70223c0e39939063c6dbbdf8eb9d0f17 /lib/libc/i386/DEFS.h | |
parent | 93f1aa601a7bda9bd9b83bf5098c3f05f6edd744 (diff) | |
download | FreeBSD-src-4b7195c99191637bf59fd4ad626297296bf3610f.zip FreeBSD-src-4b7195c99191637bf59fd4ad626297296bf3610f.tar.gz |
Add support to enable libc to be compiled in ELF format. (#ifdef __ELF__)
In a nutshell, this macroizes the local/global symbol scoping rules
that are different in a.out and ELF. It also makes the i386 assembler
stubs conform to i386 PIC calling conventions - the a.out ld.so didn't
object, but the ELF one needs it as it implements PIC jumps via PLT's as
well as calls. The a.out rtld only worked because it was accidently
snooping the grandparent calling function's return address off the stack..
This also affects the libc_r code a little, because of cpp macro nesting.
Diffstat (limited to 'lib/libc/i386/DEFS.h')
-rw-r--r-- | lib/libc/i386/DEFS.h | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/lib/libc/i386/DEFS.h b/lib/libc/i386/DEFS.h index 6df18a1..2ec3019 100644 --- a/lib/libc/i386/DEFS.h +++ b/lib/libc/i386/DEFS.h @@ -35,9 +35,27 @@ * * from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90 * - * $Id: DEFS.h,v 1.4 1994/05/03 16:29:13 jkh Exp $ + * $Id: DEFS.h,v 1.2 1994/08/05 01:17:56 wollman Exp $ */ +#include <sys/cdefs.h> + +/* + * CNAME and HIDENAME manage the relationship between symbol names in C + * and the equivalent assembly language names. CNAME is given a name as + * it would be used in a C program. It expands to the equivalent assembly + * language name. HIDENAME is given an assembly-language name, and expands + * to a possibly-modified form that will be invisible to C programs. + */ +#if defined(__ELF__) /* { */ +#define CNAME(csym) csym +#define HIDENAME(asmsym) __CONCAT(.,asmsym) +#else /* } { */ +#define CNAME(csym) __CONCAT(_,csym) +#define HIDENAME(asmsym) asmsym +#endif /* } */ + + /* XXX should use align 4,0x90 for -m486. */ #define _START_ENTRY .align 2,0x90; #if 0 @@ -51,30 +69,30 @@ #ifdef PROF #define ALTENTRY(x) _START_ENTRY \ - .globl _/**/x; .type _/**/x,@function; _/**/x:; \ + .globl CNAME(x); .type CNAME(x),@function; CNAME(x):; \ _MID_ENTRY \ - call mcount; jmp 9f + call HIDENAME(mcount); jmp 9f -#define ENTRY(x) _START_ENTRY \ - .globl _/**/x; .type _/**/x,@function; _/**/x:; \ +#define ENTRY(x) _START_ENTRY \ + .globl CNAME(x); .type CNAME(x),@function; CNAME(x):; \ _MID_ENTRY \ - call mcount; 9: + call HIDENAME(mcount); 9: #define ALTASENTRY(x) _START_ENTRY \ .globl x; .type x,@function; x:; \ _MID_ENTRY \ - call mcount; jmp 9f + call HIDENAME(mcount); jmp 9f #define ASENTRY(x) _START_ENTRY \ .globl x; .type x,@function; x:; \ _MID_ENTRY \ - call mcount; 9: + call HIDENAME(mcount); 9: #else /* !PROF */ -#define ENTRY(x) _START_ENTRY .globl _/**/x; .type _/**/x,@function; \ - _/**/x: +#define ENTRY(x) _START_ENTRY .globl CNAME(x); .type CNAME(x),@function; \ + CNAME(x): #define ALTENTRY(x) ENTRY(x) #define ASENTRY(x) _START_ENTRY .globl x; .type x,@function; x: |