Re: Question on import symbols generated by BCC
MFLD <[email protected]> Wed, 08 Apr 2015 18:41:29 +0200
| Newsgroups | org.kernel.vger.linux-8086 |
|---|---|
| Message-ID | <[email protected]> |
Hello,
No reply to this one... should I submit that case to another mailing list ?
Regards,
MFLD
On 27/03/2015 18:55, MFLD wrote :
> Hello,
>>
>> While compiling a boot code for my embedded device that will load
>> ELKS from the Flash, I get some trouble while linking several object
>> files together, some of them are .S compiled with AS86, others are .C
>> compiled with BCC. Let me explain with a unit test to insulate the
>> problem:
>>
>> Here is the first source file "test1.s":
>>
>> .extern _main
>> .define _entry
>> .text
>> _entry: br _main
>> end
>>
>> Here is the second souce file "test2.c":
>>
>> extern void entry ();
>> void main () { entry (); }
>>
>> These simple sources make 2 cross references with 2 exports and 2
>> imports in each object files.
>>
>> Here is the object file generated by "as86 -o test1.o test1.s"
>> (objdump86 test1.o):
>>
>> OBJECTFILE 'test1.o'
>> MODULE 'test1'
>> BYTEPOS 00000038
>> BINLEN 00000003
>> STRINGS 0025 +0013
>> VERSION 0.0
>> SEG0 00000003
>>
>> SYMS 2
>> SYM 0 00000000 ...IT _main
>> SYM 1 00000000 ..E.T _entry
>>
>> text data bss dec hex filename
>> 3 0 0 3 3 test1.o
>>
>> BYTECODE
>> SEG 0
>> : e9 .
>> RELSZ 2
>> DW _main-PC
>>
>> In the symbol table, we can see both the public import & text, and
>> the public export & text. That looks correct.
>>
>> Now here is the object file generated by "bcc -ansi -c -o test2.o
>> test2.c" (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 ...IU _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
>>
>> This time, in the symbol table, the public & import symbol _entry has
>> the 'U' flag, not the 'T' as expected.
>>
>> Should not it be flagged 'T' instead ?
>>
>> Thanks for your support,
>>
>> MFLD
>>
>> PS : the "boot code" I am writting is a kind of "coreboot" for 8086,
>> could I name it "boot86" :-) ?