- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 clang -> llc -> s2wasm
从 C 编译到 WebAssembly还有clang -> lld
.因为没有提供 c 库,所以我编写了自己的分配器。但我不确定最好的方法是找到空闲内存的开始。
lld 和 s2wasm 似乎都有内存布局:| globals | stack | free memory |
.使用 s2wasm 的堆栈指针位于内存地址,使用 lld 它位于全局(不能从 C 访问?)。
我发现的一种方法是在 wasm 执行开始时使用此 hack 读取堆栈指针:
int stacktop()
{
int a;
return (int)(&a+1);
}
最佳答案
您需要获取__heap_base
的地址lld 创建的符号:
$ cat wasm-heap.c
extern unsigned char __heap_base;
__attribute__ ((visibility("default")))
void * get_heap_base(void) {
return &__heap_base;
}
__heap_base
相同的值导出到 JavaScript 的 WASM 变量:
$ cat wasm-heap.js
var imports = {memory: new WebAssembly.Memory({initial:2})};
const module = new WebAssembly.Module(read('wasm-heap.wasm', 'binary'));
const instance = new WebAssembly.Instance(module, { "env" : imports }).exports;
var u8_data = new Uint8Array(imports["memory"]["buffer"]);
print("Heap base in WASM: " + instance.get_heap_base());
print("Heap base exported to JS: " + instance.__heap_base);
$ js52 wasm-heap.js
Heap base in WASM: 66560
Heap base exported to JS: 66560
关于memory-management - 使用 lld 和 s2wasm 查找堆的开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49980381/
我试图通过 Uva Online Judge 解决一个问题。问题编号是 10302。我接受的代码如下。 #include int main() { long long int num
我正在尝试为一个简单的 c 程序发送链接描述文件。我在 Ubuntu 和 Windows 上都试过了。 On Ubuntu 经过一些研究,我发现它正在使用 GNU-ld ,所以使用 clang 命令行
lld 是否有一个选项可以告诉它不执行重定位。我不想要 PIC 代码,我只想不执行重定位。 (是的,我知道这会导致无法运行的可执行文件。) 最佳答案 事实证明这是一个简单且相当明显的解决方案 - 只需
我正在尝试使用 stack 构建一些 Haskell 包(特别是 haskell-ide-engine 和 hlint),但它们都失败了很多 ld.lld错误消息,均与 R_X86_64_32S 相关
你能向我解释一下这些线的作用吗? printf("%lld\n", (long long) time(NULL)); printf("%.2x", (unsigned char)key[i]); 最佳
当我尝试为 webasm 编译时,出现错误“rust-lld not found”。我该怎么办? 我一直在按照 rust webasm 书中的说明使用虚拟程序进行操作,直到初始编译为止一切正常,但由于
尝试在 Mac OS Sierra 上使用 LLVM 4.0.0 版本(Clang、LLD)链接一个简单程序。请注意,这在 Linux 中是完全可以实现的。 我当前的路径以 LLVM 的 bin 目录
LLVM 的 lld 的命令行选项文档在哪里? 我看过 https://lld.llvm.org/index.html并且似乎找不到任何东西。 最佳答案 LLD - The LLVM Linker有这
在从 ffmpeg_decoding_loop 添加一些对 ffmpeg 的调用之后,在 Windows 上编译时出现错误(直接在 Windows 上和从 linux 交叉编译时)。 我不明白的是它在
为什么这段代码: #include int main(int argc, char** argv) { printf("%lld\n", 4294967296LL); } 为 Windows
这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 8 年前。 long long temp_number; float input = 0
我正在尝试使用 LLVM lld 链接器,而不是我之前使用的 GNU ld 链接器。 ld --version LLD 8.0.0 (compatible with GNU linkers) 我在 /
为什么这段代码: #include int main(int argc, char** argv) { printf("%lld\n", 4294967296LL); } 为 Windows
我的 cpp 代码: int main(int argc, char** argv) {} 我使用以下命令来编译和链接它: // I want to read the result ir clang
以下使用 clang 6.0 编译命令: LDFLAGS="-L/usr/local/opt/myllvm6.0rc1/lib -fuse-ld=lld" CPPFLAGS="-I/usr/local
我想在window操作系统中链接test.ll和libstdc++.a。 我有像这样的简单测试 IR 代码。 @.str = internal constant [14 x i8] c"hello,
有一个项目有一个预构建的依赖项(一堆静态库),所有这些库都有以默认工具链格式生成的调试信息部分 - DWARF-4。我正在尝试使用 -gdwarf-5 编译我的源代码,但链接器无法链接最终的可加载二进
我正在使用 gcc (-std=gnu99) 开发嵌入式工具链 (Myriota),但我在 printf 方面遇到了问题。 当我尝试以下代码时: long long int time = TimeGe
我正在尝试使用 llvm-lld 链接已使用 -flto 编译的对象。 我在路径调用 lld 中有 ld 以及提供的所有参数。我创建了一个简单的 C++ 程序,我用 clang++ 编译它: #inc
我正在将 rlib 的 Rust 代码编译为 LLVM IR,然后使用 Clang 将其编译并与 C 程序链接。这一直有效,直到我的代码包含 panic ,此时我收到链接器错误: ld.lld: er
我是一名优秀的程序员,十分优秀!