小编Leo*_*Leo的帖子

任何人都可以解释gcc交叉编译器的命名约定吗?

我试图理解gcc交叉编译器背后的命名约定,但似乎有相互矛盾的答案.我的系统中有以下三个交叉编译器:

  • arm-none-linux-gnueabi(用于linux的CodeSourcery ARM编译器)
  • arm-none-eabi(用于裸机系统的CodeSourcery ARM编译器)
  • arm-eabi(Android ARM编译器)

在阅读GNU libtool手册时,它将交叉编译器命名约定指定为:

cpu-vendor-os(os = system/kernel-system)

对于我的系统中的编译器来说,这似乎并不完全准确.GNU手册中的信息是旧的,还是编译器分销商只是停止了它?

compiler-construction gcc naming-conventions cross-compiling

37
推荐指数
1
解决办法
8805
查看次数

是否可以在Android中设置与sched_setaffinity的亲和力?

是否可以在使用Android NDK编译的本机C代码中设置CPU亲和力?由于系统使用的是Linux内核,因此应该可以使用sched_setaffinity/sched_getaffinity函数,但是当我使用NDK进行编译时,我会收到错误抱怨cpu_set_t类型未知(用作函数的参数) .有没有其他方法可以实现这一目标?当我使用CodeSourcerys ARM编译器(arm-none-linux-gnueabi-gcc)编译时,这似乎不是问题,因此系统显然支持所需的系统调用.

c multithreading multicore android-ndk

13
推荐指数
1
解决办法
1万
查看次数

无符号减去32和64位之间的无符号差

情况:
我有一段代码在编译为32位时有效,但在使用gcc 4.6编译为64位时失败.在确定问题并阅读标准后,我无法理解为什么它适用于32位.我希望有人能解释发生了什么.

代码(稍微简化并减少到有趣的部分):

// tbl: unsigned short *, can be indexed with positive and negative values
// v: unsigned int
// p: unsigned char *
tmp = tbl[(v >> 8) - p[0]]; // Gives segfault when not compiled with -m32
Run Code Online (Sandbox Code Playgroud)

-m32代码编译时编译.在没有-m32它的情况下进行编译会产生段错误.segfault的原因是(v >> 8) - p[0]被解释unsigned int为64位编译时,"负"结果将被关闭.

根据这个问题,C99标准说明如下:
6.2.5c9:A computation involving unsigned operands can never overflow, because a result that cannot be represented by the resulting unsigned integer type …

c unsigned gcc 32bit-64bit

12
推荐指数
1
解决办法
1773
查看次数

Qualcomm Scorpion双核ARM NEON代码存在问题?

我正在为Android开发一个本地库,我使用ARM程序集优化和多线程,以便在双核ARM芯片组MSM8660上获得最大性能.在进行一些测量时,我注意到以下内容:

  1. 单线程与库NEON优化是更快单线程与文库的ARMv6优化(如预期).
  2. 多线程与文库的ARMv6优化是更快单线程与文库的ARMv6优化(如预期).
  3. 多线程与库NEON优化是单线程与库NEON优化(绝对不是预期的!).

我试过在网上搜索一下这个原因的解释,但到目前为止还没找到.几乎所有内核都共享相同的NEON管道或类似内容,但所有原理图似乎都表明每个内核都应该有自己的NEON单元.有谁知道为什么会这样?

performance assembly arm multicore neon

6
推荐指数
1
解决办法
1156
查看次数

为什么`&`用于C中的二进制AND和地址?

这个问题是为了回应C中的什么是&&&操作让我想到&被用作二进制AND和地址.

为什么这些非常不同的任务使用相同的符号?在考虑它时,@似乎是一个更好的符号.

我不认为它会在实践中引起太多问题,因为编译器可能会捕获大多数错误的用法,但它可能会创建涉及宏的代码,看起来它正在执行二进制AND而它实际上正在执行地址.

c syntax

6
推荐指数
2
解决办法
243
查看次数

如何从每个样本中的探查器获取完整的堆栈转储以用于火焰图?

我非常喜欢Flame Graph的概念,因为它有助于消除不必要的函数调用.然而,有一个问题是它需要分析器在每次收集样本时执行完整的堆栈转储.这可以通过DTrace或SystemTap轻松完成,但我需要能够在运行ubuntu的ARM设备上执行此操作(这会消除DTrace).我还想在不重新编译内核的情况下执行此操作(这会消除Sys​​temTap).

是否有可能获得Valgrind/Callgrind或OProfile(或其他可以在Ubuntu中的ARM设备上运行的分析工具)输出类似于:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }

linux profiling valgrind arm stack-trace

3
推荐指数
1
解决办法
1056
查看次数

有没有办法让Phabricator将差异推送到存储库?

我们的团队最近开始尝试使用Phabricator进行代码审查.

除了Phabricator之外,我们还有一个测试系统,可以自动构建和测试推送到主git仓库中特定分支的任何代码.有没有办法arc diff自动将diff推送到特定的分支?测试通常需要几个小时,我希望人们可以在测试时查看代码.它可以以某种方式集成为单元测试,在发送差异之前不必完成审查吗?

git phabricator

2
推荐指数
1
解决办法
1738
查看次数