Category: Kernel

Autoconf不能跑得很快的原因

Autoconf不能跑得很快的原因是因為它會為每一個feature去compile一個很小的測試程式去測試那個feature能不能被正確編譯出來,在底層系統的世界,因為歷史原故,我們不能好簡單的判斷在…


2018/06/17 0

I think there is a bug in Intel Manual

In the intel manual “Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B, 2C & 2D): Instruction Set Reference, A-Z”, section 2.1.5, table 2-1, i think it is a bug


2018/05/27 0

What is ISA (Instruction set architecture) ?

From the book Embedded Computing, it has a ISA chapter, below is the summary of “what is ISA” ISA helps compiler’s life easy. Hardware engineer often saving a few gates or some code, but that hurt the design of compiler ISA can both hide and expose key implementation details to the programmer or compiler Process…
Read more


2018/05/22 0

The definition of a toolchain

This book from Shatin Library has a definition of toolchain. A toolchain should contains: Compiler Assembler Libraries Linker Post-link optimizer Run-time program loader simulator Debugger and monitor Automated Test System (Makefile ?) Profiling tools Binary Utilities


2018/05/21 0

Assembler嘅HLA邊界

寫Assembly用到Marco就試過N次,之前都係用到點就學到邊,無了解過佢嘅邊界,而家差唔多去到要為自己嘅assembler研發marco,所以要先睇下HLA嘅Marco大約可以做到啲乜。沙田圖書…


2018/05/17 0

Test cases in antlr grammar file

I am developing an Assembler, i think the best way is to embed the test case into the grammer, all those test cases are just one single line of assembly code. But now no way to do this in Antlr grammar. I am thinking to create a maven plugin to pre-process the grammar file. Add…
Read more


2018/02/24 0

crt{0,i,n}.o

crt{0,i,n}.o


2016/06/07 0

a super skill to help you understand .init and .fini

a super skill to help you understand .init and .fini, just do “LD_DEBUG=libs ./a.out”, read detail http://www.bnikolic.co.uk/blog/linux-ld-debug.html One thing need to remind you, loader pass control to a.out *BEFORE* it calls the fini.


2016/06/03 0

discovered something about .init and .fini sections

discovered something about .init and .fini sections, if you compile your source file into .o, no .init and .fini sections exist. But if you compile your code into target exe, .init and .fini are there. My question is: where does those .init and .fini come from the .o?


2016/06/02 0

i guess this is the reason i die in exception #0

I die in “divide by zero” exception, when i back trace, it was the destructor of class Vector, i guess the root cause is that: my newlib stub failed to work for the free() function.


2016/05/25 0

finally able to print out the fault address in exception 0 handler

finally able to print out the fault address in exception 0 handler, great step tonight


2016/05/25 0

gcc -O3 will auto remove frame pointer

gcc -O3 will auto remove frame pointer


2016/05/25 0

Pure c exception handler

Pure c exception handler


2016/05/22 0

export a function from gnu assembly to c++

export a function from gnu assembly to c++ then you are free to use it in cpp :


2016/05/22 0

In shit again, c++ built-in function got divide by zero exception

In shit again, c++ built-in function got divide by zero exception


2016/05/16 0

Linux创始人畅谈开源操作系统

http://www.infoq.com/cn/news/2015/08/LinuxCon2015 Linux创始人林纳斯·托瓦兹(Linus Torvalds)在今年LinuxCon2015会议上的…


2016/04/28 0

finally made it: installed the resolver address in GOT[2]

finally made it: installed the resolver address in GOT[2], now i am able to load up elf binary to memory, execute it, during dynamic loading, it jump to GOT[2]. What i have to do is to make my own resolver works.


2016/02/10 0

Description of the first few entries in GOT table

Description of the first few entries in GOT table GOT[0] : The table’ s entry zero is reserved to hold the address of the dynamic structure, referenced with the symbol _DYNAMIC . This allows a program, such as the dynamic linker, to fi nd its own dynamic structure without having yet processed its relocation entries. This is especially…
Read more


2016/02/06 0

My kernel crashed after changed from c to c++

My kernel crashed after changed from c to c++, for this bug, a variable value accidentally changed its value, i was not about to know which code changed it. In previous version of GKD, i can turn on the profiling feature to see which memory address has been accessed, but this is not enough because…
Read more


2016/01/10 1

Running peter-dwarf tutorial

This is the tutorial for running testing program for peter-dwarf, there are two programs inside the jar, first one is a command-line program to test peter-dwarf functions, the second one is a program with GUI. 1) Running the command line program This will print out the function name contain the address 0x1600300 in file “kernel”…
Read more


2016/01/03 0

dwarf is too much for c++

One side effect about changing the kernel from c to c++ is that: in the kernel file, the number of dwarf information will increase dramatically from 1,000 to 1,550,000. This let the peter-dwarf parser work slowing to build a tree to display it (But the dwarf parsing still fast). I added the parameter in PeterDwarfPanel…
Read more


2016/01/02 0

bug that super hard to fix, but i fixed it

!!! Nobody can read the dwarf specification and write the dwarf parser without hacking the binutils lab. Dwarf is just too complex and lots of algorithms in it. Now i can use peter-dwarf to parse out my c++ kernel. The dwarf stub that generated by c++ is *MUCH* more complex the c. https://sourceforge.net/p/peter-dwarf/code/358/ fixed these…
Read more


2015/12/16 0

peter-dwarf has bug to decode c++ dwarf file

peter-dwarf has bug to decode c++ dwarf file


2015/12/15 0

Is it a bochs bug? bochs forgets to translate linear addr to physical addr?

Is it a bochs bug? bochs forgets to translate linear addr to physical addr?


2015/11/30 1

describe how to exact bytes from memory

my colleague suggested me to use this method to describe how to exact bytes from memory: using pairs of 2-numbers. The formula is that: So if the formula is “1,2”, then x1 is 1, y1 is 2 . That mean it will exact 1 byte then jump to 2 offset and keep do it repeatedly.…
Read more


2015/11/27 0

Fixed one important bug in grub

I am doing kernel development in mac, my kernel is loaded up by grub because it relay on multiboot spec. I was unable to install grub in a loopback device on mac, so my mac is running a small linux vm in virtual box, i write a simple php to let me upload my kernel,…
Read more


2015/11/14 0

just bought stm32 nucleo

just bought stm32 nucleo, learning Cortex-M. But my final target is Cortex-A, i am more interesting in general-OS than rtos.


2015/11/11 0

newlib linker script summary for you own executable

After i build my newlib by “../newlib-2.1.0/configure –target=$TARGET –prefix=$PREFIX”, except the libc.a and crt0.o, i got these linker scripts. I am still thinking which one i should use for my own executables in my OS. elf_i386.x Default linker script, for normal executables elf_i386.xbn Script for -N: mix text and data on same page; don’t align…
Read more


2015/10/23 0

YEAH, page tables is ok now

After 100 times of failure, i finally loaded a exe into an independent address space (independent pa…


2015/10/22 1

A guide to how the FreeBSD kernel manages the IA32 processors in Protected Mode

Download : A guide to how the FreeBSD kernel manages the IA32 processors in Protected Mode


2015/09/29 0

Kernel can load up all segments to correct v-addr and p-addr now

Kernel can load up all segments to correct v-addr and p-addr now


2015/09/29 0

ported libelf

finally ported libel to my os, my linker script won’t warn me I crossed the kernel boundary. So libelf’s variables becoming exist in a memory area that they shouldn’t be there.


2015/09/13 0

handling exception 7

the easiest way to handle exception 7 is to execute clts then iret. My kernel was crashed because it generated a exception 0x7.


2015/08/19 0

libelf include issue

When you meet this: Just comment out the following line in /toolchain/include/libelf/sys_elf.h When I build the libelf in mac and in linux, the output sys_elf.h is different, in mac, the above line is not exist, so my OS is able to compile. Peter.


2015/06/30 0

I should look at this

I should look at this printf -> _fstat -> _sbrk -> write


2015/02/07 0

libelf.h has bug, it includes a missing header file

I cross compile the libel 0.8.13 on my ubuntu 12.04lts. I used the below command to configure it. The compile process is success and installed it correct. But inside the include/libelf/sys_elf.h, it includes a missing header file (elf.h). Just comment it out, and it will works.


2014/08/23 0

Adding file to newlib’s sys folder and make it compile

Adding file to newlib’s sys folder and make it compile, you need to modify the Makefile.in, see below


2014/08/16 0

newlib sys/*.h will not be copied to output directory

All the .h file in the sys directory will be included when compiling the files in your sys/XXX. They (sys/*.h) will not be copied to the output directoy, that mean they are just used for compile only.


2014/08/09 1