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 -