博文

TableGen添加指令

修改.td文件,实现指令定义 记得再上面加一个 let hasNoSchedulingInfo = 1 in

使__attribute__((annotate("xxx")))能作用于OC函数

diff -Naur orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CGBlocks.cpp llvm-3.7.0.src/tools/clang/lib/CodeGen/CGBlocks.cpp  --- orig/llvm-3.7.0.src/tools /clang/lib/CodeGen/CGBlocks.cpp    2015-06-23 01:07:51.000000000 +0200  +++ llvm-3.7.0.src/tools/clang/lib/CodeGen/CGBlocks.cpp 2015-11-13 13:05:44.000000000 +0100  @@ -1157,6 +1157,10 @@         fnLLVMType, llvm::GlobalValue::InternalLinkage, name, &CGM.getModule());     CGM.SetInternalFunctionAttributes(blockDecl, fn, fnInfo);  +  // Emit annotation attributes for ObjC blocks.  +  if (blockDecl->hasAttr<AnnotateAttr>())  +    CGM.AddGlobalAnnotations(blockDecl, fn);  +     // Begin generating the function.     StartFunction(blockDecl, fnType->getReturnType(), fn, fnInfo, args,                   blockDecl->getLocation(),  diff -Nau...

ARM64寄存器以及指令Note(持续更新

GPR = General Purpose Register ------------ ARM32中的LDM、STM、PUSH、POP指令,在ARM64中并不存在。取而代之的是LDP、STP指令,如一般在函数开头用来代替PUSH. ARMv8在存储器控制器上下了不少功夫,增加了x86下的类似于MOVNT这种指令,Non-temporal load/store——LDNP/STNP。这就使得像原先的Memory Barrier系操作有了用武之地了~ARMv8中除了原有的ISB(Instruction Synchronization Barrier)与DMB(Data Memory Barrier)之外,还引入了LDAR/STLR(Load-Acquire/Store-Release)指令集。这套指令具有Memory Barrier的作用。如果你在某一点需要做Memory Barrier,而此时正好想读取或写入某个数据,那么直接用LDAR/STLR即可,可以省去一条DMB的指令。而在多核多线程同步中,又引入了LDXP/STXP操作,由原先的单寄存器扩展到了双寄存器

iOS中使用xpc/xpc.h

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/xpc /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/xpc sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/launch.h /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/launch.h #中间的MacOSX的版本号可能会有所不同。#

macOS安装cryptography提示没有OpenSSL的头文件的解决办法

先brew install openssl 然后,重点来了 env ARCHFLAGS= " -arch x86_64 " LDFLAGS= " -L/usr/local/opt/openssl/lib " CFLAGS= " -I/usr/local/opt/openssl/include " pip install cryptography

ARM中CPSR的作用、运算结果会对CSPR造成的改变 以及汇编中的Switch语句

CPSR 是B.EQ等分支指令进行判断的标志位 如果指令中带有"S"则该指令运算会影响CPSR的值 比如在switch的汇编指令中: #include <stdio.h> main() { int a; switch (a) { case 1: a = 11; break; case 2: a = 12; break; default: a = 13; } } _main: ; @main ; BB#0: sub sp, sp, #32 ; =32 mov w8, #0 str w8, [sp, #28] ldr w8, [sp, #24] mov x9, x8 subs w8, w8, #1 ; =1 //把运算结果是否非零写入CSPR中 str w9, [sp, #20] ; 4-byte Folded Spill str w8, [sp, #16] ; 4-byte Folded Spill b.eq LBB0_2 //CSPR的Z==1 那么跳转至LBB0_2 b LBB0_1 LBB0_1: ldr w8, [sp, #20] ; 4-byte Folded Reload subs w9, w8, #2 ; =2 //同上subs指令 str w9, [sp, #12] ; 4-byte Folded Spill b.eq LBB0_3 b LBB0_4 LBB0_2: mov w8, #11 str w8, [sp, #24] b LBB0_5 LBB0_3: orr w8, wzr, #0xc str w8, [sp, #24] b LBB0_5 LBB0_4: mov w8, #13 str w8, [sp,...

libimobiledevice

相信做安卓开发的同学对android开发时的logcat印象很深,可以查看手机应用运行时的实时log输出,但做ios开发时就想有没有这么好的工具呢,其实ios下的logcat已经被大神们通过反向usb数据获取apple的接口做出来了。这就是libimobiledevice. 源码: https://github.com/libimobiledevice/libimobiledevice 可以使用brew来安装 brew install libimobiledevice 在ios 10和xcode8时,使用libimobiledevice中的ideviceinfo或者idevicesyslog时会出现 ERROR: Could not start service com.apple.syslog_relay. 这时可以 执行  sudo chmod 777 /var/db/lockdown 然后问题可以解决,如果是作了ios10和xcode8的升级后出现的错误,这时候可以用 brew reinstall --HEAD libimobiledevice  再重装一下libimobiledevice.之后再运行 sudo chmod 777 /var/db/lockdown 若出现以下报错提示: Error: Cannot write to /usr/local/Cellar  处理方案: 先执行: sudo chown -R $USER /usr/local  libimobiledevice查看log的方法: 连上你的ios设备,在终端下输入命令: idevicesyslog ideviceinstaller 对于android,我们在安装apk时可以使用adb命令行来安装,那ios是不是也有同样的工具,答案也是肯定的,ios下有ideviceinstaller. 源码: https://github.com/libimobiledevice/ideviceinstaller 同样可以使用brew来安装: brew install ideviceinstaller 使用方法, ideviceinstaller -i appn...