From 97f83e4e11e63d135a2c86b7792cc2a9d9f2d93b Mon Sep 17 00:00:00 2001 From: gatieme Date: Thu, 13 Apr 2017 11:39:28 +0800 Subject: [PATCH] todolist and pattern... --- README.md | 8 ++++- study/pattern/build_bug_on/userspace/Makefile | 14 ++++---- .../userspace/build_bug_on_invalid.c | 34 ++++++++++++++++++ .../userspace/build_bug_on_null.c | 26 ++++++++++++++ study/pattern/build_bug_on/userspace/null | Bin 0 -> 8529 bytes 5 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 study/pattern/build_bug_on/userspace/build_bug_on_invalid.c create mode 100644 study/pattern/build_bug_on/userspace/build_bug_on_null.c create mode 100755 study/pattern/build_bug_on/userspace/null diff --git a/README.md b/README.md index ed9e4b4..e594045 100644 --- a/README.md +++ b/README.md @@ -24,5 +24,11 @@ LDD-LinuxDeviceDrivers +#3 TODOLIST--目前在完成的工作 +------- - +| 任务 | 描述 | +|:----:|:----:| +| study/debug | 内核调试工具集锦, 包括debugfs, trace, gdb, systemtap 的介绍和使用 | +| study/pattern | 内核设计的奇技淫巧, 介绍内核中使用的一些高级语法技巧和设计思路 | +| study/kernel/data_structure | 介绍内核中提供的数据结构的用法 | diff --git a/study/pattern/build_bug_on/userspace/Makefile b/study/pattern/build_bug_on/userspace/Makefile index 70c4199..814894e 100644 --- a/study/pattern/build_bug_on/userspace/Makefile +++ b/study/pattern/build_bug_on/userspace/Makefile @@ -1,5 +1,5 @@ CFLAGS = -std=gnu99 -target=not_power_of_2 zero +target=not_power_of_2 zero null all:$(target) @@ -12,19 +12,19 @@ zero : build_bug_on_zero.o @echo "BUILD_BUG_ON_ZERO..." -SCClient : SCClient.o +null : build_bug_on_null.o $(CC) $^ -o $@ $(LDFLAGS) -lpthread - @echo "简单的模拟高并发的客户端..." + @echo "BUILD_BUG_ON_NULL..." -SCMClient : SCMClient.o +invalid : build_bug_on_invalid.o $(CC) $^ -o $@ $(LDFLAGS) -lpthread - @echo "带线程锁的模拟高并发的客户端..." + @echo "BUILD_BUG_ON_INVALID..." %.o : %.c - -$(CC) -c $^ -o $@ $(CFLAGS) $(DEFINES) + $(CC) -c $^ -o $@ $(CFLAGS) $(DEFINES) %.o : %.cpp - -$(CXX) -c $^ -o $@ $(CFLAGS) $(DEFINES) + $(CXX) -c $^ -o $@ $(CFLAGS) $(DEFINES) clean : rm -rf *.o diff --git a/study/pattern/build_bug_on/userspace/build_bug_on_invalid.c b/study/pattern/build_bug_on/userspace/build_bug_on_invalid.c new file mode 100644 index 0000000..f9b9a7e --- /dev/null +++ b/study/pattern/build_bug_on/userspace/build_bug_on_invalid.c @@ -0,0 +1,34 @@ +/************************************************************************* + > File Name: build_bug_on_invalid.c + > Author: GatieMe + > Mail: gatieme@163.com + > Created Time: Thu 13 Apr 2017 11:26:18 AM CST + ************************************************************************/ + +#include +#include + + +#include "bug.h" + +# define __force __attribute__((force)) + +#ifndef BUILD_BUG_ON_INVALID +/* + * BUILD_BUG_ON_INVALID() permits the compiler to check the validity of the + * expression but avoids the generation of any code, even if that expression + * has side-effects. + */ +#define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e)))) +#endif + + +#define NUM 12_$ +int main(int argc, char *argv[]) +{ + BUILD_BUG_ON_INVALID(NUM); + + return EXIT_SUCCESS; +} + + diff --git a/study/pattern/build_bug_on/userspace/build_bug_on_null.c b/study/pattern/build_bug_on/userspace/build_bug_on_null.c new file mode 100644 index 0000000..a10b4ef --- /dev/null +++ b/study/pattern/build_bug_on/userspace/build_bug_on_null.c @@ -0,0 +1,26 @@ +/************************************************************************* + > File Name: build_bug_on_null.c + > Author: GatieMe + > Mail: gatieme@163.com + > Created Time: Thu 13 Apr 2017 11:20:31 AM CST + ************************************************************************/ + +#include +#include + + +#include "bug.h" + +#ifndef BUILD_BUG_ON_NULL +#define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) +#endif + +#define POINT !(NULL) +int main(int argc, char *argv[]) +{ + BUILD_BUG_ON_NULL(POINT); + + return EXIT_SUCCESS; +} + + diff --git a/study/pattern/build_bug_on/userspace/null b/study/pattern/build_bug_on/userspace/null new file mode 100755 index 0000000000000000000000000000000000000000..5ef92a0508022b5082617cc34c494cc22fdfe3b6 GIT binary patch literal 8529 zcmeHMZ){W76~DF<2n8G`&@I4LthGpiEv^$nYSwK$=MTJ~1Uhh9OC4;jL{}lxU60THO z%VbAIp`aGQ$8<(`JI4`aE_Ni6T|3*gvz_n-4otYTkJ?60g8e1@1|*UVVya)KRZhA@ zPhGcDlt0UjJlkjx4B6q`T2e~5*nJsx+;rCX&n(2nhq%6v>X$p*KH)5?$FrI7p6Mrgyr2^7e(_TsgIH zF1umwdy9Yg`GH5tRvu(OHm!wbYaQ)R0}I!|71}XDVfQG@qP$hKlLgzFPG)jICa3c` zMl7{&Xt1}>>WXwlcEOV~us%ddaY}!dHfPpQ+2^>f`^{rIM`OcNLCb9+2VV_|?1jQE z+^uiU-fl9#-#D-?tjy;x+Kr1lVPVc*X}TX?FEqgP|6G3B?bNHgD}$YJLv_ z95Fj$VCL-opjp0te9Jt!r?6T^U!#J`H7K7ZP>o(bN)!?K*Hk`YKKD26;L?Kt9GK-h z=B33wrtfw0%?I|wOWxLsx8|+nN7sMqi_fhMD^+S4f#G5ffsMZ2m;>Z{|1!1rwQ!IE z+oMX2w|)q_C1-cZpt3M}^CWC2U;fs=%yQ|DRv3k?6L0*Pc)1dPda!&iJ~CMTeLOKV zw{5X0jF9I#h#wx>e!cTg=A{nYw^+ek+_8}S?Z7XF@Ab%c_@9DCB7|zC!^>)+5*0S3Z4bef)9a@Bl@3$ zKMQ^Z{5JSHj3%uoBHzhF$~P18ZCSUv>5Ol6h;Z6N+hD(g6qxGkEA<%4Nq_#sN`+!j z!O-4d+y3UY-)uUi_H2G~$Iiz-Lon&|<9QW+^?Hj3LofLI)~^~y#axyGzku>Ixatjt ze&8Pnw!IV>2!`hx27>J`Hk!fc3#-gvYft4Qk-}Jx&&U-``m}>!voKc0Z0n)fSfJezck8HXPT8=sZCr<$r%r$&-A}ZxE~A`M5qhPZQ1i4Pxpco#H;pobCZc zZ4OfpGZ#j84^23Z63N*@pLrn5`H0TvM4xn+n&J8dA7feKmillB&?GXBFS*Ls_ zWgqL^VL8U-4FBJm++)2J-QYOxeMCI_`uaW}ZXX#h1&d$=T_`F%`+> z?Q|sGJJ?|-Cs~@zl_KM%3@)Xal!}lvl`KxFNa{om{v2)>oRZ_|LNSxi)d&{K3h8W; z3^;czYpX~mmqBW$XOJF+fUAvA6uYErX?_q67{pb9KRzJsp#4q23 zWF2ZHBnR-&ULf}KeghKi8=5K8Vfq^nwO#CG-98PB_6o6AvL1K?iLt#fZ~q-Z0j+hh zm-QWEd)db%e$f;D4cOD(A+qcr2HS_ZV)EmTpJ8-%fLf$v!Xo-uPc(d-*1HrqR%?cfPJZ8XYj)syZLQn^xX0 z?!o|i#i*;lMvc|QA6h!+*7{kiWdE+k*D2YTYjNBP8Von2^8xHAvX8n81K25Kf2_qr zOaDJ=@fIcfSuNhWv`^LI8f}k2CJQ z_dTQiSL5_SCOV48rjH z0S{sRc<0F^@YXu(XjnDr~g^t zt+**H+utS%cF`{3kIe*r2k!4XWDN}-PFR*or3>lFOc8fc%bvC-viV%PsOmtLmC9R_ z+5C7iYo+Xbp=c#bGYS{HW7)KwPDP&BwetyhuA^kpRnxgRTDS}rPAKQ9nJP_BpMZ%= zvgn3dqpGjL)_7^s!Vk<`DVx>t?>!VB9GSuN;UE5B5RJRib~5 zDr?`+!QS|gb#U+A!vhH`5$_!uAb0xj=|r)l<5t#SV%Vy7QewD|x+swx&!!dKbe+Gd z%1Y~NFWY$kz#4}8pDTLFWmx-f7G=e}HI>Yz;NKcN2=}Q>&MFntXiPOUY7FYk0p!M5 mxNvjc`RBX;xOIp}wlAA37BQ@rh47`@s9iG7HLcP;rTz_(fDv5) literal 0 HcmV?d00001