From 95850e058132453bdb829fb34fea79c4c9c4307e Mon Sep 17 00:00:00 2001 From: Mathieu Maret Date: Thu, 19 Jul 2018 13:26:28 +0200 Subject: [PATCH] Folder reorg --- Makefile | 15 +++++++++------ exception.c => core/exception.c | 0 core/exception.d | 2 ++ exception.h => core/exception.h | 0 core/exception.o | Bin 0 -> 1056 bytes exception_handler.c => core/exception_handler.c | 0 core/exception_handler.d | 2 ++ core/exception_handler.o | Bin 0 -> 1160 bytes gdt.c => core/gdt.c | 0 core/gdt.d | 1 + gdt.h => core/gdt.h | 0 core/gdt.o | Bin 0 -> 984 bytes idt.c => core/idt.c | 0 core/idt.d | 1 + idt.h => core/idt.h | 0 core/idt.o | Bin 0 -> 1384 bytes interrupt.h => core/interrupt.h | 0 io.h => core/io.h | 0 irq.c => core/irq.c | 0 core/irq.d | 2 ++ irq.h => core/irq.h | 0 core/irq.o | Bin 0 -> 1240 bytes irq_handler.c => core/irq_handler.c | 0 core/irq_handler.d | 2 ++ core/irq_handler.o | Bin 0 -> 1420 bytes klibc.c => core/klibc.c | 0 core/klibc.d | 1 + klibc.h => core/klibc.h | 0 core/klibc.o | Bin 0 -> 896 bytes main.c => core/main.c | 0 core/main.d | 2 ++ core/main.o | Bin 0 -> 1764 bytes segment.h => core/segment.h | 0 types.h => core/types.h | 0 pic.c => drivers/pic.c | 0 drivers/pic.d | 2 ++ pic.h => drivers/pic.h | 0 drivers/pic.o | Bin 0 -> 1644 bytes pit.c => drivers/pit.c | 0 drivers/pit.d | 1 + pit.h => drivers/pit.h | 0 drivers/pit.o | Bin 0 -> 1016 bytes vga.c => drivers/vga.c | 0 drivers/vga.d | 2 ++ vga.h => drivers/vga.h | 0 drivers/vga.o | Bin 0 -> 2936 bytes 46 files changed, 27 insertions(+), 6 deletions(-) rename exception.c => core/exception.c (100%) create mode 100644 core/exception.d rename exception.h => core/exception.h (100%) create mode 100644 core/exception.o rename exception_handler.c => core/exception_handler.c (100%) create mode 100644 core/exception_handler.d create mode 100644 core/exception_handler.o rename gdt.c => core/gdt.c (100%) create mode 100644 core/gdt.d rename gdt.h => core/gdt.h (100%) create mode 100644 core/gdt.o rename idt.c => core/idt.c (100%) create mode 100644 core/idt.d rename idt.h => core/idt.h (100%) create mode 100644 core/idt.o rename interrupt.h => core/interrupt.h (100%) rename io.h => core/io.h (100%) rename irq.c => core/irq.c (100%) create mode 100644 core/irq.d rename irq.h => core/irq.h (100%) create mode 100644 core/irq.o rename irq_handler.c => core/irq_handler.c (100%) create mode 100644 core/irq_handler.d create mode 100644 core/irq_handler.o rename klibc.c => core/klibc.c (100%) create mode 100644 core/klibc.d rename klibc.h => core/klibc.h (100%) create mode 100644 core/klibc.o rename main.c => core/main.c (100%) create mode 100644 core/main.d create mode 100644 core/main.o rename segment.h => core/segment.h (100%) rename types.h => core/types.h (100%) rename pic.c => drivers/pic.c (100%) create mode 100644 drivers/pic.d rename pic.h => drivers/pic.h (100%) create mode 100644 drivers/pic.o rename pit.c => drivers/pit.c (100%) create mode 100644 drivers/pit.d rename pit.h => drivers/pit.h (100%) create mode 100644 drivers/pit.o rename vga.c => drivers/vga.c (100%) create mode 100644 drivers/vga.d rename vga.h => drivers/vga.h (100%) create mode 100644 drivers/vga.o diff --git a/Makefile b/Makefile index 861baf0..87de96c 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,15 @@ AS=nasm ASFLAGS += -f elf32 LDFLAGS += -m32 -nostdlib -static -fno-common -fno-use-cxa-atexit -fno-exceptions -fno-non-call-exceptions -fno-weak -fno-rtti -fno-stack-protector CFLAGS += -m32 -Wall -Wextra -Werror -ffreestanding -fno-exceptions -fno-pie -fno-stack-protector -CXXFLAGS += -m32 -Wall -Wextra -Werror -ffreestanding -fno-exceptions -fno-rtti -fno-pie +CXXFLAGS += -m32 -Wall -Wextra -Werror -ffreestanding -fno-exceptions -fno-rtti -fno-pie +SUBDIRS := core drivers + +CPPFLAGS += $(foreach dir, $(SUBDIRS), -I$(dir)) asmsrc=$(wildcard *.asm) asmobj=$(asmsrc:%.asm=%.o) -csrc=$(wildcard *.c) +csrc=$(shell find $(SUBDIRS) -type f -name "*.c")# $(wildcard *.c) cobj=$(csrc:%.c=%.o) deps = $(csrc:%.c=%.d) @@ -21,10 +24,10 @@ fd.img: kernel dd if=$< of=$@ conv=notrunc #https://gcc.gnu.org/onlinedocs/gcc/x86-Function-Attributes.html#x86-Function-Attributes -exception_handler.o:exception_handler.c - $(CC) $(CPPFLAGS) $(CFLAGS) -mgeneral-regs-only -c $< -irq_handler.o:irq_handler.c - $(CC) $(CPPFLAGS) $(CFLAGS) -mgeneral-regs-only -c $< +core/exception_handler.o:core/exception_handler.c + $(CC) $(CPPFLAGS) $(CFLAGS) -mgeneral-regs-only -c $< -o $@ +core/irq_handler.o:core/irq_handler.c + $(CC) $(CPPFLAGS) $(CFLAGS) -mgeneral-regs-only -c $< -o $@ %.o:%.asm $(AS) $(ASFLAGS) -o $@ $< diff --git a/exception.c b/core/exception.c similarity index 100% rename from exception.c rename to core/exception.c diff --git a/core/exception.d b/core/exception.d new file mode 100644 index 0000000..fe80462 --- /dev/null +++ b/core/exception.d @@ -0,0 +1,2 @@ +core/exception.o: core/exception.c core/exception.h core/interrupt.h \ + core/types.h core/idt.h core/irq.h diff --git a/exception.h b/core/exception.h similarity index 100% rename from exception.h rename to core/exception.h diff --git a/core/exception.o b/core/exception.o new file mode 100644 index 0000000000000000000000000000000000000000..e11db9222bd368c0b1a782d5fb2e0e0f865189cb GIT binary patch literal 1056 zcma)5O=}ZT6umP^+fh?#r3;}#XCp+!AyEs_Rkg$*ejt^gyD&|jB-$ip<^@tw8;Au% zeuDKsxa?kCxO3qTa3d7#M(9d}c+O-VnRMlW`|j6yciw&X&2I7j9m}%Bz><_qJdrhf zoVgyUtYqYjlm|ciN9X&m9qG|1*`vgVbnSPaKPl(Pa>uD^_yK&d$_k?md?TOzr_< zwBz4L_F)$iJoBpVB9`p;2R8A%jPYfeev`EjmhX^{5R5qDlV|S9^oo$Y#YTR^fOUvP PNRoGm#FHp9UJUOa3*UH` literal 0 HcmV?d00001 diff --git a/exception_handler.c b/core/exception_handler.c similarity index 100% rename from exception_handler.c rename to core/exception_handler.c diff --git a/core/exception_handler.d b/core/exception_handler.d new file mode 100644 index 0000000..4861b41 --- /dev/null +++ b/core/exception_handler.d @@ -0,0 +1,2 @@ +core/exception_handler.o: core/exception_handler.c core/exception.h \ + core/interrupt.h core/types.h drivers/vga.h diff --git a/core/exception_handler.o b/core/exception_handler.o new file mode 100644 index 0000000000000000000000000000000000000000..35919bfcb1da69fa38b05da2135e68335461e974 GIT binary patch literal 1160 zcma)5&1(};5T8vpakbk}MIlhZ1wV+`E{R_RPsU_h15(p!unHw?)2B&IHf8e;RRpVx zUNSG<;={$(b43BeRDm#4*1hsRB-U^U^pBGd)DAj za)OdIj=$LvKbIfeUkUc~&(3n$sokyKUI3Ucm#vn~QIj<*$jjNpPOSkzL30NgsjfcM5 z71;kjp=R1lx%Cqph4JM&w-fx7- Bgl_-< literal 0 HcmV?d00001 diff --git a/gdt.c b/core/gdt.c similarity index 100% rename from gdt.c rename to core/gdt.c diff --git a/core/gdt.d b/core/gdt.d new file mode 100644 index 0000000..18f7804 --- /dev/null +++ b/core/gdt.d @@ -0,0 +1 @@ +core/gdt.o: core/gdt.c core/segment.h core/types.h core/gdt.h diff --git a/gdt.h b/core/gdt.h similarity index 100% rename from gdt.h rename to core/gdt.h diff --git a/core/gdt.o b/core/gdt.o new file mode 100644 index 0000000000000000000000000000000000000000..8eb0902d6d1afb350e7230a734041f3f5fb949f6 GIT binary patch literal 984 zcma)4&r4KM6h3#}Sd&^!B4ije8$ppSGyQ<6RVkAM)xsEB%5!|>FN8W@tJ4!iBi>8Y^8LoT&b4t-mZuY`$OiPm9T;OcA8n4CxnJ_j$h`?~GId3e`JeM_TG^vb$u z&52zIT_|?G+ZEebZnvW)a7)WBvY6}5t_vG4#Zn!$=9-i=Z&Q(DTF$rU=x(&ox=y%H?8PgLRFxH~r9_^m@ z%5Q1lz25iK>o|I18&*xCbkX1IG16?mpKt-|CC5KN`{liQ7ee_C+ky4NsHINlq`iU? Xhl9fmJhZ+m$g{c~Y`jnryz2e|s;*g~ literal 0 HcmV?d00001 diff --git a/idt.c b/core/idt.c similarity index 100% rename from idt.c rename to core/idt.c diff --git a/core/idt.d b/core/idt.d new file mode 100644 index 0000000..583e8c3 --- /dev/null +++ b/core/idt.d @@ -0,0 +1 @@ +core/idt.o: core/idt.c core/idt.h core/types.h diff --git a/idt.h b/core/idt.h similarity index 100% rename from idt.h rename to core/idt.h diff --git a/core/idt.o b/core/idt.o new file mode 100644 index 0000000000000000000000000000000000000000..6d4e41f0928490adbc8536c606b4a8df1409f393 GIT binary patch literal 1384 zcma)5L2DC16n>lCO}90gC?1pw%|W43ToSEN#Y0Tl7C|K_MK4m)bVG|xE6EB~jI}I6 zV!*#p&z?NhUKCT2X#av9LQ$|NSUu&i7{9kWlWuQ5n0fDe@0+*t&CIS?S0@xjA!!P! zw18DG!pZhNi&V=W80p08o+3AX)X zgc}4J;RB69U1$`5H3|VNEU?M(@r%jf$?H?6lVfJuOefE#(qpOf=h8$+1x0yygOo>x zG8oge8ZP$)@;ul!dAfYacpAwb)FW>{fa2FKiCS}C{f%GeRM^7rMWf$*nmyb9nh38; zJSf3XNuxf=HVAJ|lgRff;mSj%?y*H($BPV%wH!eQ*3B{RoiWYNI%a`q9ye|0{yh$+ zE4DK|mtUM+u*-BDTm_$gDg0mIlkkxUQAT(&D-TLeeg@tt2YyaQWqZMN>}7|{*}Rh{ zbEZ-uv#?Yu*^9_6E;+V|dpc8b@`bx(GTWY;E|&8p8_oaIhQQke?W)__mK+Kd+=~zumqshZ;vrgMt!OEcVDVtsBrAy~8?%`}D@G4X z(a?*3fP#NU!AtPR!M{NdUIf7$D)b;Ctl!(6sY_2jnEBrO-ZyXN?aV$a+`Oh~8Y$B# zN&h0EUx_HQ7(#{&I!2|zH-Dsm{}TkkF4Ldhhs>Pc*J*Pc^YNz>yGRB6!w4b z6!e{vF-UK-+V2}Aa!jSdc<>IsKQ#SO>H!tk!?ON|=|N%7@9$A>${!g)FWL=s(A$44 zH|1hPE6dAEW@crrblS{WSu1OvU&!VbE?&qIr6UDtkBg)|(Y1Lam3o2ZPJrjZHp|nM zDSbO}b#iR&BNS2Yvds13`9voYFc-7<_e#;vAeK7xH3@Mto<@WXW0s`xSj75?L-E)F z!)KqxZB54%?9a(K51c{$GeFjIFRaf2m9hT13V>m)hS#yGg!#53dXK2#HpF@(B+7N$ ztu-C5Y&o+-rX`$BK~~KcHd&Q!m#k{L)pA^LZd*7O-o?4Du&WQr zVzpB*-}mg6gW~^bC!yo}RkyxMslp-Th=j7VQ{Qo!CUxo zQ}xb*WWCZ2;pZ`wnbKJR@)}0AAqJmC8RvLhlBoF4%8{t{y(M)xerR7XZ%Cg(z1CIu z@qS-o0lyvQ_^wsITvyeCON$`B0`UaG{#d8hsa`=*8jFhTNK@yVK^)h;f$okH0hR7A Dxa6H{ literal 0 HcmV?d00001 diff --git a/irq_handler.c b/core/irq_handler.c similarity index 100% rename from irq_handler.c rename to core/irq_handler.c diff --git a/core/irq_handler.d b/core/irq_handler.d new file mode 100644 index 0000000..396327a --- /dev/null +++ b/core/irq_handler.d @@ -0,0 +1,2 @@ +core/irq_handler.o: core/irq_handler.c core/interrupt.h core/types.h \ + core/io.h core/irq.h drivers/pic.h drivers/vga.h diff --git a/core/irq_handler.o b/core/irq_handler.o new file mode 100644 index 0000000000000000000000000000000000000000..de621bd795846746b95068fd256198cfce5da53c GIT binary patch literal 1420 zcma)5O-vI}5T0!ptx{=GOh~}k111n~ZT*R0I8b3FO;C_X6cdA6SkjiZ$o3t?5JVdj z8iV2N&6@`fCMFmYV-$Z9x#-!mCLDUe#3M=lrhTtn(1VlA&dm3HJMYcDxA)DVOPZ#U zGL5`ctBBUT73OR?w3DCeX{_)wUu=48`lbtJG4RSP7B-5@W+||4mcD!dd3AIo|6@B} z46m4aVW6!wU-YN6ovocxsg(a1{5;ThiWs`R^|FEl*1rYb0`1ul9Tnnfg;)l-v;g^H zV_5)lM73F6v47vVIezQw-wSqe6RIxwjJLirq7{yE!d!EzDMcw=^$JycfgkMezYuC4 zyfW4i>NX-qBy>6)=?iAL>hW9_w9nBl$rC#+f!S$DM};yMaf zbF+SU4^K&FZX#i2r_#1#Oj0r%Cy~t9{aIl|!aWh1vFGEnmNTU^WDdt-&K%uwl35YU zin7|NvI-usg_TU_h|Xg@Pd(8hM?cYXS-(KkF#c;9HyLlB@_Zf-Q6JZcX&K4L&1Zxa zM-)yaCRFCwX+zj|1sPM8u*it#a%4=-W->PRXJluEZQ$;m%n569h74BQiHT{)%GhZB zpLQHNz6#(mft;cneE6xYj4<)L(c00isWUjP6A literal 0 HcmV?d00001 diff --git a/klibc.c b/core/klibc.c similarity index 100% rename from klibc.c rename to core/klibc.c diff --git a/core/klibc.d b/core/klibc.d new file mode 100644 index 0000000..f52007a --- /dev/null +++ b/core/klibc.d @@ -0,0 +1 @@ +core/klibc.o: core/klibc.c core/klibc.h core/types.h diff --git a/klibc.h b/core/klibc.h similarity index 100% rename from klibc.h rename to core/klibc.h diff --git a/core/klibc.o b/core/klibc.o new file mode 100644 index 0000000000000000000000000000000000000000..e638fd2ed9368fbcc81538edbd7bc12b7611f3f0 GIT binary patch literal 896 zcma)4PfG$(5TB?0; z@)2@Xu&SD_>aVKCqpDN>J?y3%wH1MgtD3bnQQd3~-Hlv@DylAARbN!0!YkH2-$N>y zT!=(dTj|M2LdIo0G82m@V)L_cY%|(A3qYK2gSZHaaDO0hg>#G{PD+xb&+=gK(zi0u zRenGQ0qx?wM*u#*yxI0!0^Zu^O=Iluh`T!C?v6MBJsP3eMrez<{9(qFCfJs3o|GVh zxQ~vJ#ggq98MIE}$7b1ctTPAXzTp@kGsPlE^VqhnBgBr59ZTZEri+eY=0Fy#ytJ}= z2L;2nu;)J|j6B*4PfzdK+NG}NosDZAZ{bwu*)VScfgtK%yeZ^RO$?QU`q3;blp~$j zmhl^QwB>WxHIHBI7UP76%fEv{jNWBQ=knNq<|U;a5RZK7%e~Nr7u0K1s--;fLOSNV YVhFofNH`16H;jOn=U`%oNobk(4Oh@sbpQYW literal 0 HcmV?d00001 diff --git a/main.c b/core/main.c similarity index 100% rename from main.c rename to core/main.c diff --git a/core/main.d b/core/main.d new file mode 100644 index 0000000..b210ef6 --- /dev/null +++ b/core/main.d @@ -0,0 +1,2 @@ +core/main.o: core/main.c core/exception.h core/interrupt.h core/types.h \ + core/gdt.h core/idt.h core/io.h core/irq.h drivers/pit.h drivers/vga.h diff --git a/core/main.o b/core/main.o new file mode 100644 index 0000000000000000000000000000000000000000..01f4334f7ed5a5bd77362e0bb897728cd2316f82 GIT binary patch literal 1764 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 Bxq<)y literal 0 HcmV?d00001