From mboxrd@z Thu Jan 1 00:00:00 1970 From: mjn3@codepoet.org (Manuel Novoa III) Subject: Re: C compiler, assembler and linker Date: Mon, 22 Jul 2002 18:46:11 -0600 Sender: linux-8086-owner@vger.kernel.org Message-ID: <20020723004611.GA9657@codepoet.org> References: <20020715170205.GA12650@codepoet.org> <1c289c8ad98ba628@mayday.cix.co.uk> Mime-Version: 1.0 Return-path: Content-Disposition: inline In-Reply-To: <1c289c8ad98ba628@mayday.cix.co.uk> List-Id: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Robert de Bath Cc: Riley Williams , Harry Kalogirou , Linux-8086 Hello Robert, On Tue, Jul 23, 2002 at 12:26:52AM +0100, Robert de Bath wrote: > On Mon, 15 Jul 2002, Manuel Novoa III wrote: > > 3) Support asm() at file scope. This is to allow the equivalent > > of #asm/#endasm in macros. > > Hmm, interesting, I'll have to look at this ... carefully. I mainly use this for defining aliases for functions. For example, in an object file for the labs function I could write #define strong_alias(Y,X) asm("export _" "X" "\n_" "X" " = _" "Y"); strong_alias(labs,imaxabs) long int labs(long int j) { return (j >= 0) ? j : -j; } which would make imaxabs an alias for labs (at least when optimizing). I also use this with bcc auto-run functions. I'm sure you'll recognize the following. Allowing asm() at file scope, I can hide the implementation details with a macro where I couldn't with #asm/#endasm. #ifdef __AS386_16__ #define __BCC_CTOR(X) asm( \ " loc 1\n" /* Make sure the pointer is in the correct segment */ \ "auto_func:\n" /* Label for bcc -M to work. */ \ ".word _" "X" "\n" /* Pointer to the autorun function */ \ ".word no_op\n" /* Space filler cause segs are padded to 4 bytes. */ \ ".text\n" /* So the function after is also in the correct seg. */ \ ) #endif #ifdef __AS386_32__ #define __BCC_CTOR(X) asm( \ " loc 1\n" /* Make sure the pointer is in the correct segment */ \ "auto_func:\n" /* Label for bcc -M to work. */ \ ".long _" "X" "\n" /* Pointer to the autorun function */ \ ".text\n" /* So the function after is also in the correct seg. */ \ ) #endif > > 4) Limited support for things like "#define stdio stdio". Stock bcc > > goes into an infinite loop when encounting this. The implementation > > has flaws, but it does what I needed. You see this a lot in the > > glibc headers we're using with uClibc (yes I'm working on a port). > > I don't like the way this is done; I think it'd be better to 'smudge' > the definition of the current macro so that the search can't find the > word for recursion. I don't like the way it is done either... but it was quick and it allowed me to avoid special-casing lots of uClibc (glibc) headers. > > 5) Improved condition wrapping of the floating point related code in > > the bcc source (working towards building bcc for elks). As I said, > > the code generator dies... at least using elksemu. > > I'd suspect the dtype or fltype variables. I still haven't had time to investigate this. :-( Manuel