Articles of compiler construction

更改堆栈空间

目前,我试图在集群系统中实现共享堆栈。 这个系统有两个地址空间,一个是私有的,在所有处理器之间共享。 我怎么能改变在C编程堆栈的开始和结束? 也就是说,我想把堆栈放在一个共享空间中,改变程序的stream程来使用它。

在非标准的位置build立gcc-4.3.4时遇到困难

我需要在非标准位置(NFS挂载)中构buildgcc-4.3.4。 我configuration了: ../gcc-4.3.4/configure –prefix={install dir} –with-gmp={install dir} –with-mpfr={install dir} –with-local-prefix={install dir} –disable-shared 我跑了make -j1 。 但我不断收到: checking for suffix of object files… configure: error: cannot compute suffix of object files: cannot compile 在x86_64-unknown-linux-gnu/libgcc/config.log ,我可以看到: /home/panthdev/apps/gcc-4.3.4-compliant/compiler/objdir/./gcc/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory libmpfr.so.1在{install dir}/lib 。 另外,如果我将LD_LIBRARY_PATH设置为{install […]

在哪些平台上,libc将堆栈cookie值存储在除__stack_chk_guard以外的其他位置?

例如,Linux / i386上的glibc将cookie存储在%gs:0x14 。 除了__stack_chk_guard符号之外,是否还有其他需要查找的平台来查找Cookie? (这是gcc -fstack-protector生成的代码在函数序言堆栈中存储的值,并在返回防垛堆栈之前检查)。

编译器的编译可能会影响编译的程序?

也许我的问题听起来很奇怪,但我的观点是:我必须编译一个使用GCC的程序,如果我从源代码编译GCC,我会从用新GCC编译的软件的性能方面略微优先? 我应该期待什么?

gcc可以生成不同大小的目标代码吗?

在gcc中应该启用哪个选项来生成16位或32位或64位目标代码? 是否有单独的选项来生成上述每个对象代码types?

如何通知GCC不使用特定的寄存器

假设我有一个非常大的源代码,并打算在执行过程中完全不使用'rdx'寄存器,即在生成汇编代码时,我只想通知我的编译器(GCC)它根本不应该使用'rdx'。 注意:注册rdx只是一个例子。 我可以使用任何可用的Intel x86寄存器 我甚至很乐意更新编译器的源代码,并使用我的自定义GCC。 但是在源代码中改变的地方呢?

如果一个结构声明没有“__attribute __(align(8))”,如何生成警告

如果结构没有__attribute__(align(8))声明,我希望编译器为我生成警告。 例如,如果一个结构是这样声明的: struct my_float { float number; } __attribute__((aligned(8))); 它不会产生任何警告。 但是如果我声明另一个像这样的结构: struct my_float { float number; }; 编译器会为我生成一个警告。 我的工作环境是linux / GCC。

从gcc的中间文件编译目标文件

通过使用-fdump-tree- *标志,可以在编译源代码文件时转储​​一些中间格式的文件。 我的问题是如果可以使用该中间文件作为input到gcc获取最终的对象文件。 我问这是因为我想添加一些代码到疙瘩的中间文件(通过使用标志-fdump-tree-gimple )格式获得。 当然,我可以使用钩子,并添加自己的通行证,但我不想达到复杂程度。 我只是想给gcc我修改的中间文件,所以它可以从那里开始编译,并给我最终的目标文件。 任何想法如何实现这一目标?

gcc未定义的参考错误在Ubuntu上

我有一个奇怪的问题,我经历了所有类似的问题,但无法find答案。 我试图编译一些代码,即使该库使用-l指定,并且也在LD_LIBRARY_PATH中,仍会抛出未定义的引用错误。 我找不出原因。 这是一个例子 gcc -L / home / sam / gmdb / lib -L ​​/ home / sam / db / add-ons / lib -L ​​/ home / sam / convert / lib -L ​​/ home / sam / rtana / lib -L ​​/ home / sam / rtana / add-ons / lib -o […]

如何告诉“gmake”使用另一个版本的GCC? (Linux)的

我在我的机器(在/ usr / bin / gcc)上有通常的gcc,另外一个(新的)在我为我正在工作的某个框架设置环境时被链接。 我想用旧的/ usr / bin / gcc编译,而不是使用新的。 我必须使用“gmake”命令进行编译(自定义编译设置)。 不改变PATH,我怎么能“告诉”gmake使用不同的gcc?