From mboxrd@z Thu Jan 1 00:00:00 1970 From: MFLD Subject: [PATCH PROPOSAL] Bcc: output an import directive on external function declaration Date: Sat, 11 Apr 2015 21:33:13 +0200 Message-ID: <552976F9.4070800@gmail.com> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :content-type:content-transfer-encoding; bh=AFpJjn5Bg1zZszkaeBSE6urAQr6iGD0Qb7fe0eBSaBM=; b=yRJ4txOyXF1H4/jTiUfHvrdZbAild9ZdUMTgHwMZmJ3y8dzwWRKXXkX0mj7sU6txXx zWZ+D1CyeEpTh4OQnxhKDjl2d2BLr5sN/QHTiKBmrapGs+mHdNQ+/E811uflaPzGCq6+ +uki3Yo9VCNdCif9XC4kffTRoy6Ku8YPRIZh8zQONRS3pLy3QtTD/VxsXd/2Za3Ct1uR 8NRsOWF628PWcwDoXA44G7KqunTxnVE3c+dTsmntWXLmSyvpt2LOduddKAiZcafM1M8C gu/xBcIXUd+GZjDC0aBIVboQ51TuTiDSMjOs0t8gjV4wk9F7mjGC0HCiEDvIoA0YHE7J 6MlQ== Sender: linux-8086-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii"; format="flowed" To: ELKS Cc: Robert de Bath <"robert$"@debath.co.uk>, lkundrak@v3.sk Hello, This patch tries to solve the problem described in the "Question on import symbols generated by BCC " topic (see earlier in the mailing list archive). When parsing an external function declaration, Bcc outputs an assembler import directive in the code segment. So that in the object symbol table, the external function is flagged 'T' (= symbol in code segment) in place of 'U' (= undefined segment). Unit test result (to be compared with the one in the referenced topic): mfld@mfldhome ~/advantech/dev86/bcc $ bcc -c -o test2.o test2.c mfld@mfldhome ~/advantech/dev86/bcc $ objdump86 test2.o OBJECTFILE 'test2.o' MODULE 'test2' BYTEPOS 00000038 BINLEN 0000000c STRINGS 0025 +0013 VERSION 0.0 SEG0 0000000c SYMS 2 SYM 0 00000000 ..E.T _main SYM 1 00000000 ...IT _entry text data bss dec hex filename 12 0 0 12 c test2.o BYTECODE SEG 0 : 55 89 e5 57 56 e8 U..WV. RELSZ 2 DW _entry-PC : 5e 5f 5d c3 ^_]. SEG 3 ----- diff --git a/bcc/declare.c b/bcc/declare.c index 1f0aae2..2fd7239 100644 --- a/bcc/declare.c +++ b/bcc/declare.c @@ -834,7 +834,15 @@ gvarsymptr->flags = DIRECTPAGE; #endif if (gvarsc == EXTERNDECL) - gvarsymptr->flags |= EXTERNAL; + { + gvarsymptr->flags |= EXTERNAL; + if (gvartype->constructor == FUNCTION) + { + /* Output an assembler import directive in code segment */ + cseg (); + import (gvarname); + } + } } else {