Providing C++ Runtime support for Kernel

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

I guess I should advise of the second error, silly me ::), In your class definition you have unsigned short *vidmem, but in your class implementation you are using videomem.

I havent finished reading yet, but good stuff anyway.
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

I am getting a parse error from LD:

F:\MINGW\BIN\LD.EXE:link.ld:2: parse error

As I am yet to learn how these scripts work, I cannot compile, so I will wait for your solution, thanks.

I am also getting an undefined reference to __builtin_delete when I try to use LD directly, I am using the -fno-builtin switch so I dont know what is happening, I use the mingw version of the GCC tools.

thanks.
whyme_t

Re:Providing C++ Runtime support for Kernel

Post by whyme_t »

Thanks for pointing out my silly errors :) I've fixed all, except the vidmem, I'll do that later.

As to the parse error, If it's part 2, I'm wondering if it's because you might have put __CTOR_END__ on a new line?
__CTOR__LIST__ should be on one line, ending with __CTOR_END__, it's just the html wraps arround.

Tell me if this fixes the parse error.
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

Sorry, I should have specified where the problem was better, it is in part 1, I have copied the linker script straight from the site, I have no idea about these scripts so I dont know if there are any errors in it or not.

Do you know why I am getting the error about __builtin_delete, I also get an undefined reference error about __main.

Thanks.
whyme_t

Re:Providing C++ Runtime support for Kernel

Post by whyme_t »

ok. I've fixed the mistake in both Video.h and Link.ld :)

PlayOS : Do you still get these undefined references with the updated Link.ld ?
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

No, the error has changed to this

F:\MINGW\BIN\LD.EXE: PE operations on non PE file.

Any ideas?

thanks.
whyme_t

Re:Providing C++ Runtime support for Kernel

Post by whyme_t »

try adding

Code: Select all

/*****************************************************************************
for MinGW32
*****************************************************************************/
#ifdef __WIN32__
int __main(void) { return 0; }
#endif
/*****************************************************************************
*****************************************************************************/
This is taken straight from the OSD source code. It must be there for a reason! ;)
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

Unfortuantely I still get the error about a PE operation on a non PE file.

I am no longer getting the error about undefined references when I use the linker script, I just get the above error.

I was getting this error before when using C, and it was suggested to me to compile to an executable file and then use objcopy to convert to a flat binary, this worked for that, but I dont know how to get an executable file using a liner script, also my when I use -f aout in my nasm command line I get an error from LD (I think) that goes like this:

Loader.o: file not recognized: File format not recognized

I dont what is going on, maybe it is my compiler and linker.

Sorry for being such a headache.
whyme_t

Re:Providing C++ Runtime support for Kernel

Post by whyme_t »

to change to formet change the line

Code: Select all

OUTPUT_FORMAT(" ")
putting the format you need.
"binary", "coff-go32", "elf32-i386", "pei-i386", "pe-i386"
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

And the saga continues.....

Now the undefined references are back :

kernel.o(.text+0x23):kernel.cpp: undefined reference to `__main'
video.o(.text+0x39):video.cpp: undefined reference to `__builtin_delete'

I was looking in my docs for my GCC and it does not mention new and delete being affected by the
-fno-builtin it only mentions these ones

abort, abs, alloca, cos, exit, fabs, ffs, labs, memcmp, memcpy, sin, sqrt, strcmp, strcpy, strlen

So maybe it is the distribution of GCC that I have, I think that I have DJGPP somewhere on disk I might try installing and using it.

thanks again.
whyme_t

Re:Providing C++ Runtime support for Kernel

Post by whyme_t »

;)

If you can't find how to disable __builtin functions, try defining them in your code. (strange, it can't find delete, but it doesn't mention new!)

The undefined reference to __main, might well be the reason the OSD code had that __main function above.
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

Nope, still getting the same errors, stupid thing! >:(

I am putting this my kernel.cpp file

/****************************************
for MinGW32
****************************************/
#ifdef __WIN32__
int __main(void) { return 0; }
#endif

void inline __builtin_delete(void* arg){}; // from the FAQ
/***************************************/

However no luck, the errors dont change at all.

This stuff is going to drive me insane.. :(
whyme_t

Re:Providing C++ Runtime support for Kernel

Post by whyme_t »

???

er...hmm...

try compiling it in a C file (not a CPP file), and then link it with LD.

I noticed in the faq, it mentions compiling with the switch -r , not sure what that does.
PlayOS

Re:Providing C++ Runtime support for Kernel

Post by PlayOS »

For anyone who reads this, DONT USE MINGW32 for a C++ kernel!!!! ;)

I have installed Djgpp and everything went perfect, no problems at all.

Cant wait to continue on with these tutorials, and thanks for all your help.
Post Reply