- 主题:GCC这是搞啥呢?
void main() {
sint64 data;
read(&data);
}
void read(sint64* data) {
*data = 0;
}
运行时爆ubsan runtime warning,data地址没有按照8字节align.
data后面加__attribute__((aligned(0x10)))也不管用
compiler不知道操作sint64要对齐么?GCC 6.2.0
--
FROM 178.26.114.*
typedef signed long long sint64
真没任何特殊处理
【 在 here080 的大作中提到: 】
: 我猜是你用的sint64定义的问题?
:
--
修改:moudy FROM 213.95.148.*
FROM 213.95.148.*
确实是32位编译。关键这时候ubsan 32位库为啥还要报warning呢?
【 在 vonNeumann 的大作中提到: 】
: 32位系统?
: 很多32位ABI里面int64确实只对齐到4字节
:
--
FROM 213.95.148.*
嵌入式还大把在用啊,本来我们设了所有这类runtime都当fatal error,现在只能开口子了
【 在 vonNeumann 的大作中提到: 】
: 现在没什么人用32位了,可能ubsan开发者都忘了..
:
--
FROM 213.95.148.*
嵌入式c++了解一下
Freestanding mode removes the special semantics for the main function. In the standalone world, main can have any type signature and it is configurable whether it is main or some other function that starts the program. A typical main signature for a freestanding program is simply:
void main(void) // main in bare metal env
【 在 segfault 的大作中提到: 】
: 他跟谭浩强学的,别学他
--
FROM 178.26.114.*