mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-21 04:44:29 +02:00
Fix ASMCFUNC (FAR) functions for ia16-elf-gcc.
We need to use make the functions vararg (,...) to make them cdecl. For FAR functions we need wrappers.
This commit is contained in:
parent
9b5b2e7d60
commit
89d97b18de
@ -483,14 +483,14 @@ extern request /* I/O Request packets */
|
|||||||
ASM CharReqHdr, ASM IoReqHdr, ASM MediaReqHdr;
|
ASM CharReqHdr, ASM IoReqHdr, ASM MediaReqHdr;
|
||||||
|
|
||||||
/* dsk.c */
|
/* dsk.c */
|
||||||
COUNT ASMCFUNC FAR blk_driver(rqptr rp);
|
COUNT ASMCFUNC FAR blk_driver(rqptr rp, ...);
|
||||||
ddt * getddt(int dev);
|
ddt * getddt(int dev);
|
||||||
|
|
||||||
/* error.c */
|
/* error.c */
|
||||||
COUNT char_error(request * rq, struct dhdr FAR * lpDevice);
|
COUNT char_error(request * rq, struct dhdr FAR * lpDevice);
|
||||||
COUNT block_error(request * rq, COUNT nDrive, struct dhdr FAR * lpDevice, int mode);
|
COUNT block_error(request * rq, COUNT nDrive, struct dhdr FAR * lpDevice, int mode);
|
||||||
/* sysclk.c */
|
/* sysclk.c */
|
||||||
WORD ASMCFUNC FAR clk_driver(rqptr rp);
|
WORD ASMCFUNC FAR clk_driver(rqptr rp, ...);
|
||||||
|
|
||||||
/* execrh.asm */
|
/* execrh.asm */
|
||||||
#if defined(__WATCOMC__) && _M_IX86 >= 300
|
#if defined(__WATCOMC__) && _M_IX86 >= 300
|
||||||
|
@ -630,7 +630,7 @@ struct memdiskinfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* query_memdisk() based on similar subroutine in Eric Auer's public domain getargs.asm which is based on IFMEMDSK */
|
/* query_memdisk() based on similar subroutine in Eric Auer's public domain getargs.asm which is based on IFMEMDSK */
|
||||||
struct memdiskinfo FAR * ASMCFUNC query_memdisk(UBYTE drive);
|
struct memdiskinfo FAR * ASMCFUNC query_memdisk(UBYTE drive, ...);
|
||||||
|
|
||||||
struct memdiskopt {
|
struct memdiskopt {
|
||||||
BYTE * name;
|
BYTE * name;
|
||||||
|
@ -170,7 +170,7 @@ static dsk_proc * const dispatch[NENTRY] =
|
|||||||
/* F U N C T I O N S --------------------------------------------------- */
|
/* F U N C T I O N S --------------------------------------------------- */
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
COUNT ASMCFUNC FAR blk_driver(rqptr rp)
|
COUNT ASMCFUNC FAR blk_driver(rqptr rp, ...)
|
||||||
{
|
{
|
||||||
if (rp->r_unit >= blk_dev.dh_name[0] && rp->r_command != C_INIT)
|
if (rp->r_unit >= blk_dev.dh_name[0] && rp->r_command != C_INIT)
|
||||||
return failure(E_UNIT);
|
return failure(E_UNIT);
|
||||||
|
@ -363,7 +363,7 @@ VOID ASMCFUNC FAR cpm_entry(VOID)
|
|||||||
/*INRPT FAR handle_break(VOID) */ ;
|
/*INRPT FAR handle_break(VOID) */ ;
|
||||||
COUNT ASMCFUNC
|
COUNT ASMCFUNC
|
||||||
CriticalError(COUNT nFlag, COUNT nDrive, COUNT nError,
|
CriticalError(COUNT nFlag, COUNT nDrive, COUNT nError,
|
||||||
struct dhdr FAR * lpDevice);
|
struct dhdr FAR * lpDevice, ...);
|
||||||
|
|
||||||
VOID ASMCFUNC FAR CharMapSrvc(VOID);
|
VOID ASMCFUNC FAR CharMapSrvc(VOID);
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -198,11 +198,9 @@ void ASMPASCAL set_DTA(void far *dta);
|
|||||||
|
|
||||||
/* irqstack.asm */
|
/* irqstack.asm */
|
||||||
VOID ASMCFUNC init_stacks(VOID FAR * stack_base, COUNT nStacks,
|
VOID ASMCFUNC init_stacks(VOID FAR * stack_base, COUNT nStacks,
|
||||||
WORD stackSize);
|
WORD stackSize, ...);
|
||||||
|
|
||||||
/* inthndlr.c */
|
/* inthndlr.c */
|
||||||
VOID ASMCFUNC FAR int21_entry(iregs UserRegs);
|
|
||||||
VOID ASMCFUNC int21_service(iregs far * r);
|
|
||||||
VOID ASMCFUNC FAR int0_handler(void);
|
VOID ASMCFUNC FAR int0_handler(void);
|
||||||
VOID ASMCFUNC FAR int6_handler(void);
|
VOID ASMCFUNC FAR int6_handler(void);
|
||||||
VOID ASMCFUNC FAR int19_handler(void);
|
VOID ASMCFUNC FAR int19_handler(void);
|
||||||
@ -224,7 +222,11 @@ VOID ASMCFUNC FAR cpm_entry(void);
|
|||||||
#define int29_handler DOSTEXT(int29_handler)
|
#define int29_handler DOSTEXT(int29_handler)
|
||||||
|
|
||||||
/* kernel.asm */
|
/* kernel.asm */
|
||||||
|
#ifdef __GNUC__
|
||||||
|
VOID ASMCFUNC init_call_p_0(struct config FAR *Config, ...) asm("init_call_p_0");
|
||||||
|
#else
|
||||||
VOID ASMCFUNC FAR init_call_p_0(struct config FAR *Config); /* P_0, actually */
|
VOID ASMCFUNC FAR init_call_p_0(struct config FAR *Config); /* P_0, actually */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* main.c */
|
/* main.c */
|
||||||
VOID ASMCFUNC FreeDOSmain(void);
|
VOID ASMCFUNC FreeDOSmain(void);
|
||||||
|
@ -63,7 +63,7 @@ struct HugeSectorBlock {
|
|||||||
/* variables needed for the rest of the handler. */
|
/* variables needed for the rest of the handler. */
|
||||||
/* this here works on the users stack !! and only very few functions
|
/* this here works on the users stack !! and only very few functions
|
||||||
are allowed */
|
are allowed */
|
||||||
VOID ASMCFUNC int21_syscall(iregs FAR * irp)
|
VOID ASMCFUNC int21_syscall(iregs FAR * irp, ...)
|
||||||
{
|
{
|
||||||
Int21AX = irp->AX;
|
Int21AX = irp->AX;
|
||||||
|
|
||||||
@ -376,7 +376,7 @@ int int21_fat32(lregs *r)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VOID ASMCFUNC int21_service(iregs FAR * r)
|
VOID ASMCFUNC int21_service(iregs FAR * r, ...)
|
||||||
{
|
{
|
||||||
COUNT rc;
|
COUNT rc;
|
||||||
long lrc;
|
long lrc;
|
||||||
@ -1625,7 +1625,7 @@ struct int25regs {
|
|||||||
/*
|
/*
|
||||||
this function is called from an assembler wrapper function
|
this function is called from an assembler wrapper function
|
||||||
*/
|
*/
|
||||||
VOID ASMCFUNC int2526_handler(WORD mode, struct int25regs FAR * r)
|
VOID ASMCFUNC int2526_handler(WORD mode, struct int25regs FAR * r, ...)
|
||||||
{
|
{
|
||||||
ULONG blkno;
|
ULONG blkno;
|
||||||
UWORD nblks;
|
UWORD nblks;
|
||||||
@ -1734,7 +1734,7 @@ struct int2f12regs {
|
|||||||
/* WARNING: modifications in `r' are used outside of int2F_12_handler()
|
/* WARNING: modifications in `r' are used outside of int2F_12_handler()
|
||||||
* On input r.AX==0x12xx, 0x4A01 or 0x4A02
|
* On input r.AX==0x12xx, 0x4A01 or 0x4A02
|
||||||
*/
|
*/
|
||||||
VOID ASMCFUNC int2F_12_handler(struct int2f12regs r)
|
VOID ASMCFUNC int2F_12_handler(struct int2f12regs r, ...)
|
||||||
{
|
{
|
||||||
COUNT rc;
|
COUNT rc;
|
||||||
long lrc;
|
long lrc;
|
||||||
|
@ -276,6 +276,29 @@ cpu_abort:
|
|||||||
%endif ; XCPU != 86
|
%endif ; XCPU != 86
|
||||||
|
|
||||||
|
|
||||||
|
%ifdef gcc
|
||||||
|
global init_call_p_0
|
||||||
|
init_call_p_0:
|
||||||
|
pop ax
|
||||||
|
push cs
|
||||||
|
push ax
|
||||||
|
jmp DGROUP:_init_call_p_0
|
||||||
|
|
||||||
|
global __EnableA20
|
||||||
|
__EnableA20:
|
||||||
|
pop ax
|
||||||
|
push cs
|
||||||
|
push ax
|
||||||
|
jmp DGROUP:_ENABLEA20
|
||||||
|
|
||||||
|
global __DisableA20
|
||||||
|
__DisableA20:
|
||||||
|
pop ax
|
||||||
|
push cs
|
||||||
|
push ax
|
||||||
|
jmp DGROUP:_DISABLEA20
|
||||||
|
%endif
|
||||||
|
|
||||||
segment INIT_TEXT_END
|
segment INIT_TEXT_END
|
||||||
|
|
||||||
|
|
||||||
@ -915,6 +938,18 @@ global %1lshrsi3
|
|||||||
; reserve space for far jump to cp/m routine
|
; reserve space for far jump to cp/m routine
|
||||||
times 5 db 0
|
times 5 db 0
|
||||||
|
|
||||||
|
%ifdef gcc
|
||||||
|
blk_driver_wrap:mov ax, _blk_driver
|
||||||
|
jmp short blkclk
|
||||||
|
clk_driver_wrap:mov ax, _clk_driver
|
||||||
|
blkclk: pop si
|
||||||
|
pop di
|
||||||
|
call ax
|
||||||
|
push di
|
||||||
|
push si
|
||||||
|
retf
|
||||||
|
%endif
|
||||||
|
|
||||||
;End of HMA segment
|
;End of HMA segment
|
||||||
segment HMA_TEXT_END
|
segment HMA_TEXT_END
|
||||||
global __HMATextEnd
|
global __HMATextEnd
|
||||||
@ -1007,13 +1042,21 @@ _cpm_entry: jmp 0:reloc_call_cpm_entry
|
|||||||
global _reloc_call_blk_driver
|
global _reloc_call_blk_driver
|
||||||
extern _blk_driver
|
extern _blk_driver
|
||||||
_reloc_call_blk_driver:
|
_reloc_call_blk_driver:
|
||||||
|
%ifdef gcc
|
||||||
|
jmp 0:blk_driver_wrap
|
||||||
|
%else
|
||||||
jmp 0:_blk_driver
|
jmp 0:_blk_driver
|
||||||
|
%endif
|
||||||
call near forceEnableA20
|
call near forceEnableA20
|
||||||
|
|
||||||
global _reloc_call_clk_driver
|
global _reloc_call_clk_driver
|
||||||
extern _clk_driver
|
extern _clk_driver
|
||||||
_reloc_call_clk_driver:
|
_reloc_call_clk_driver:
|
||||||
|
%ifdef gcc
|
||||||
|
jmp 0:clk_driver_wrap
|
||||||
|
%else
|
||||||
jmp 0:_clk_driver
|
jmp 0:_clk_driver
|
||||||
|
%endif
|
||||||
call near forceEnableA20
|
call near forceEnableA20
|
||||||
|
|
||||||
global _CharMapSrvc ; in _DATA (see AARD)
|
global _CharMapSrvc ; in _DATA (see AARD)
|
||||||
|
@ -158,8 +158,6 @@ SECTIONS
|
|||||||
_set_DTA = SET_DTA;
|
_set_DTA = SET_DTA;
|
||||||
_DetectXMSDriver = DETECTXMSDRIVER;
|
_DetectXMSDriver = DETECTXMSDRIVER;
|
||||||
_init_call_XMScall = INIT_CALL_XMSCALL;
|
_init_call_XMScall = INIT_CALL_XMSCALL;
|
||||||
__EnableA20 = _ENABLEA20;
|
|
||||||
__DisableA20 = _DISABLEA20;
|
|
||||||
*(.text)
|
*(.text)
|
||||||
*(INIT_TEXT_END)
|
*(INIT_TEXT_END)
|
||||||
ASSERT(. <= 0x10000,
|
ASSERT(. <= 0x10000,
|
||||||
|
@ -509,7 +509,7 @@ VOID DosUpMem(VOID FAR * str, unsigned len)
|
|||||||
* the HiByte of the first argument must remain unchanged.
|
* the HiByte of the first argument must remain unchanged.
|
||||||
* See NLSSUPT.ASM -- 2000/03/30 ska
|
* See NLSSUPT.ASM -- 2000/03/30 ska
|
||||||
*/
|
*/
|
||||||
unsigned char ASMCFUNC DosUpChar(unsigned char ch)
|
unsigned char ASMCFUNC DosUpChar(unsigned char ch, ...)
|
||||||
/* upcase a single character */
|
/* upcase a single character */
|
||||||
{
|
{
|
||||||
log(("NLS: DosUpChar(): in ch=%u (%c)\n", ch, ch > 32 ? ch : ' '));
|
log(("NLS: DosUpChar(): in ch=%u (%c)\n", ch, ch > 32 ? ch : ' '));
|
||||||
@ -667,7 +667,7 @@ VOID FAR *DosGetDBCS(void)
|
|||||||
Return value: AL register to be returned
|
Return value: AL register to be returned
|
||||||
if AL == 0, Carry must be cleared, otherwise set
|
if AL == 0, Carry must be cleared, otherwise set
|
||||||
*/
|
*/
|
||||||
UWORD ASMCFUNC syscall_MUX14(DIRECT_IREGS)
|
UWORD ASMCFUNC syscall_MUX14(DIRECT_IREGS, ...)
|
||||||
{
|
{
|
||||||
struct nlsPackage FAR *nls; /* addressed NLS package */
|
struct nlsPackage FAR *nls; /* addressed NLS package */
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ BYTE DosYesNo(UWORD ch);
|
|||||||
#ifndef DosUpMem
|
#ifndef DosUpMem
|
||||||
VOID DosUpMem(VOID FAR * str, unsigned len);
|
VOID DosUpMem(VOID FAR * str, unsigned len);
|
||||||
#endif
|
#endif
|
||||||
unsigned char ASMCFUNC DosUpChar(unsigned char ch);
|
unsigned char ASMCFUNC DosUpChar(unsigned char ch, ...);
|
||||||
VOID DosUpString(char FAR * str);
|
VOID DosUpString(char FAR * str);
|
||||||
VOID DosUpFMem(VOID FAR * str, unsigned len);
|
VOID DosUpFMem(VOID FAR * str, unsigned len);
|
||||||
unsigned char DosUpFChar(unsigned char ch);
|
unsigned char DosUpFChar(unsigned char ch);
|
||||||
@ -276,7 +276,7 @@ COUNT DosSetCountry(UWORD cntry);
|
|||||||
COUNT DosGetCodepage(UWORD * actCP, UWORD * sysCP);
|
COUNT DosGetCodepage(UWORD * actCP, UWORD * sysCP);
|
||||||
COUNT DosSetCodepage(UWORD actCP, UWORD sysCP);
|
COUNT DosSetCodepage(UWORD actCP, UWORD sysCP);
|
||||||
VOID FAR *DosGetDBCS(void);
|
VOID FAR *DosGetDBCS(void);
|
||||||
UWORD ASMCFUNC syscall_MUX14(DIRECT_IREGS);
|
UWORD ASMCFUNC syscall_MUX14(DIRECT_IREGS, ...);
|
||||||
|
|
||||||
/* prf.c */
|
/* prf.c */
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@ -383,7 +383,7 @@ UWORD get_machine_name(BYTE FAR * netname);
|
|||||||
VOID set_machine_name(BYTE FAR * netname, UWORD name_num);
|
VOID set_machine_name(BYTE FAR * netname, UWORD name_num);
|
||||||
|
|
||||||
/* procsupt.asm */
|
/* procsupt.asm */
|
||||||
VOID ASMCFUNC exec_user(iregs FAR * irp, int disable_a20);
|
VOID ASMCFUNC exec_user(iregs FAR * irp, int disable_a20, ...);
|
||||||
|
|
||||||
/* new by TE */
|
/* new by TE */
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ STATIC void DayToBcd(BYTE * x, unsigned mon, unsigned day, unsigned yr)
|
|||||||
x[2] = ByteToBcd(yr % 100);
|
x[2] = ByteToBcd(yr % 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
WORD ASMCFUNC FAR clk_driver(rqptr rp)
|
WORD ASMCFUNC FAR clk_driver(rqptr rp, ...)
|
||||||
{
|
{
|
||||||
BYTE bcd_days[4], bcd_minutes, bcd_hours, bcd_seconds;
|
BYTE bcd_days[4], bcd_minutes, bcd_hours, bcd_seconds;
|
||||||
|
|
||||||
|
@ -800,7 +800,7 @@ COUNT DosExec(COUNT mode, exec_blk FAR * ep, BYTE FAR * lp)
|
|||||||
#include "config.h" /* config structure definition */
|
#include "config.h" /* config structure definition */
|
||||||
|
|
||||||
/* start process 0 (the shell) */
|
/* start process 0 (the shell) */
|
||||||
VOID ASMCFUNC P_0(struct config FAR *Config)
|
VOID ASMCFUNC P_0(struct config FAR *Config, ...)
|
||||||
{
|
{
|
||||||
BYTE *tailp, *endp;
|
BYTE *tailp, *endp;
|
||||||
exec_blk exb;
|
exec_blk exb;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user