草庐IT

没有 libstdc++ 的 C++ RTTI。可能吗?

我想研究如何在没有libstdc++但支持rtti的情况下链接C++程序。我尝试按照下面描述的方式编译它。我可以在示例中定义任何必要但不存在的符号,如函数strcmp,但是是否可以在没有显式mangle/demangle魔法的情况下定义typeinfo符号?如果可能的话,怎么做?cd/tmp&&catrtti.cpp&&g++-nodefaultlibs-lcrtti.cppextern"C"intstrcmp(constchar*s1,constchar*s2){return0;};#include"typeinfo"intmain(){returntypeid(int)==type

linux - ARM 上 TLS 的代码序列

ELFHandlingForThread-LocalStorage文档给出了各种体系结构的各种模型(本地执行/初始执行/一般动态)的汇编序列。但不是ARM——在任何地方我都可以看到这样的ARM代码序列吗?我正在开发一个编译器,并希望生成能够与平台链接器(程序链接器和动态链接器)一起正常运行的代码。为清楚起见,我们假设一个ARMv7CPU和一个相当新的内核和glibc(例如3.13+/2.19+),但如果这很容易解释的话,我也会对旧硬件/软件必须更改的内容感兴趣。 最佳答案 我不太明白你想要什么。然而,汇编程序序列(针对ARMv6+和

linux - ARM 上 TLS 的代码序列

ELFHandlingForThread-LocalStorage文档给出了各种体系结构的各种模型(本地执行/初始执行/一般动态)的汇编序列。但不是ARM——在任何地方我都可以看到这样的ARM代码序列吗?我正在开发一个编译器,并希望生成能够与平台链接器(程序链接器和动态链接器)一起正常运行的代码。为清楚起见,我们假设一个ARMv7CPU和一个相当新的内核和glibc(例如3.13+/2.19+),但如果这很容易解释的话,我也会对旧硬件/软件必须更改的内容感兴趣。 最佳答案 我不太明白你想要什么。然而,汇编程序序列(针对ARMv6+和

linux - 为什么 golang clone syscall abi 与 x86-64 上的 linux 内核克隆不同

在glibc/sysdeps/unix/sysv/linux/x86_64/clone.S的linux内核克隆abi定义:Thekernelexpects:rax:systemcallnumberrdi:flagsrsi:child_stackrdx:TIDfieldinparentr10:TIDfieldinchildr8:threadpointer在go1.11.5/src/runtime/sys_linux_amd64.s的golang克隆系统调用://int32clone(int32flags,void*stk,M*mp,G*gp,void(*fn)(void));TEXTru

linux - 为什么 golang clone syscall abi 与 x86-64 上的 linux 内核克隆不同

在glibc/sysdeps/unix/sysv/linux/x86_64/clone.S的linux内核克隆abi定义:Thekernelexpects:rax:systemcallnumberrdi:flagsrsi:child_stackrdx:TIDfieldinparentr10:TIDfieldinchildr8:threadpointer在go1.11.5/src/runtime/sys_linux_amd64.s的golang克隆系统调用://int32clone(int32flags,void*stk,M*mp,G*gp,void(*fn)(void));TEXTru

linux - 哪些 <4GB 的工作负载在 Linux x32 ABI 中的性能会比 x64 差?

有一个比较newLinuxABIreferredtoasx32,其中x86-64处理器以32位模式运行,因此指针仍然只有32位,但仍然使用64位架构特定的寄存器。所以你仍然限制在正常32位中使用4GB最大内存,但是你的指针使用的缓存空间比在64位中少,你可以有效地进行64位算术,并且你可以访问更多寄存器(16)比普通32位(8)中的要多。假设您的工作负载正好适合4GB,x32的性能是否会比x86-64差?在我看来,如果您不需要额外的内存空间,则不会丢失任何东西——您应该始终获得相同的性能(当您已经适合缓存时)或更好(当指针空间节省让您适合更多时)在缓存中)。但如果有分页/TLB/等,我

linux - 哪些 <4GB 的工作负载在 Linux x32 ABI 中的性能会比 x64 差?

有一个比较newLinuxABIreferredtoasx32,其中x86-64处理器以32位模式运行,因此指针仍然只有32位,但仍然使用64位架构特定的寄存器。所以你仍然限制在正常32位中使用4GB最大内存,但是你的指针使用的缓存空间比在64位中少,你可以有效地进行64位算术,并且你可以访问更多寄存器(16)比普通32位(8)中的要多。假设您的工作负载正好适合4GB,x32的性能是否会比x86-64差?在我看来,如果您不需要额外的内存空间,则不会丢失任何东西——您应该始终获得相同的性能(当您已经适合缓存时)或更好(当指针空间节省让您适合更多时)在缓存中)。但如果有分页/TLB/等,我

linux - 为什么我需要在 linux 内核升级后重新编译 vmware 内核模块?

Linux内核升级后,我的VMWare服务器无法启动,直到使用vmware-config.pl进行一些重新配置工作(包括构建一些内核模块)。如果我用最新的WindowsServicePack更新我的WindowsVMWare主机,我通常不需要做任何事情来运行VMWare。为什么VMWare在Linux和Windows之间的工作方式不同?与Windows相比,此重新编译操作是否会在Linux平台上带来任何好处? 最佳答案 去读TheLinuxKernelDriverInterface.Thisisbeingwrittentotryto

linux - 为什么我需要在 linux 内核升级后重新编译 vmware 内核模块?

Linux内核升级后,我的VMWare服务器无法启动,直到使用vmware-config.pl进行一些重新配置工作(包括构建一些内核模块)。如果我用最新的WindowsServicePack更新我的WindowsVMWare主机,我通常不需要做任何事情来运行VMWare。为什么VMWare在Linux和Windows之间的工作方式不同?与Windows相比,此重新编译操作是否会在Linux平台上带来任何好处? 最佳答案 去读TheLinuxKernelDriverInterface.Thisisbeingwrittentotryto

linux - arm-none-eabi 和 arm-linux-gnueabi 之间的区别?

arm-none-eabi和arm-linux-gnueabi有什么区别?我知道如何使用它们的区别(一个用于裸机软件,另一个用于在linux上运行的软件)。但是技术背景是什么?我发现ABI有所不同,据我所知,它类似于API,但在二进制级别。它确保了不同应用程序的互操作性。但我真的不明白拥有或不拥有操作系统会以何种方式影响我的工具链。我唯一想到的是,在编译裸机软件时,库可能必须静态链接(是吗?),因为没有操作系统动态提供它们。我发现与该主题相关的大多数页面只是回答了如何使用工具链,而不是技术背景。我是机电一体化专业的学生,​​刚接触嵌入式系统,所以我在这个领域的经验有些有限。