delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/02/04/19:27:10

From: (Ravi)
Newsgroups: comp.os.msdos.djgpp
Subject: Declaring external assembly procedures
Date: Wed, 04 Feb 1998 23:55:32 GMT
Organization: Home
Lines: 43
Message-ID: <6bav9a$mlo@camel18.mindspring.com>
NNTP-Posting-Host: user-38ld9cs.dialup.mindspring.com
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I'm trying to link in some external assembler stuff with DJGPP, and am
getting some results I didn't expect. The asm file is compiled with
NASM into COFF format:

---external.asm---
global _Test

bits 32

SECTION .text Use32

; int Test(void)
_Test
   mov eax, 5
   ret



The C++ test file is

-----test.cpp------
#include <stdio.h>

// extern int Test (void);
int x;

main()
{
   x = 1;
   x = Test();
   printf ("%i", x);
}


This works, but of course gives the implicit declaration warning. When
I uncomment the extern statement, however, I get a SIGSEGV error,
which can be fixed by removing the parenthesis from the call to Test.
I then get a warning that I need to type cast the procedure, and
inevitably get 0 in x. I keep thinking there's a dumb mistake I've
overlooked, but can't find it. I've also installed RSXNTDJ, if that
does anything funky to the compiler. Thanks for any help,
      Ravi.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019