[syslinux] [Syslinux-GSoC] Exporting real-mode functions

liu Aleaxander aleaxander at gmail.com
Mon Jun 1 21:59:38 PDT 2009


On Tue, Jun 2, 2009 at 12:55 AM, H. Peter Anvin <hpa at zytor.com> wrote:

> A question was asked on the IRC channel about how to get the address of
> a real-mode symbol -- or any assembly symbol in general.
>
> The answer is that you have to declare it global.
>
> In NASM syntax:
>
>                global func
> func:
>
> In GAS syntax:
>
>                .globl func
> func:
>
>
well,  in fact, I did it but failed.

in diskstart.inc

                global getlinsec
getlinsec:




then in the cache.c
void getoneblk(char *buf, __u32 block, int block_size)
{
        int sec_per_block = block_size / 512; /* 512==sector size */
        uint16_t fun_seg, fun_off;
        com32sys_t regs;

        //extern void (*getlinsec) ();

        regs.eax.l = block * sec_per_block;
        regs.ebp.l = sec_per_block;
        regs.es = SEG(buf);
        regs.ebx.w[0] = OFFS(buf);

        fun_seg = SEG(getlinsec);
        fun_off = OFFS(getlinsec);

        __farcall(fun_seg, fun_off, &regs, NULL);
}

it says getlinsec not defined.



-- 
regards
liu Aleaxander



More information about the Syslinux mailing list