PowerPC g ++在main的末尾生成两个析构函数调用

时间:2018-08-31 21:50:19

标签: c++ oop assembly g++ powerpc

在为最终可能与某个类的目标代码链接的主要功能分解C ++目标代码时,我偶然发现了一个奇怪的情况。

没有显式调用析构函数,并且该对象不是通过复制构造函数构造的。在第30行,通过 bl 调用析构函数,然后在第54行再次调用。但是,主函数应该已经在第48行使用 blr 指令退出了... / p>

  int main(void){
c:  90 01 00 24     stw     r0,36(r1)
10: 93 e1 00 1c     stw     r31,28(r1)
  int temp;
  SimpleMemory mem;
14: 48 00 00 01     bl      14 <main+0x14>
        14: R_PPC_REL24 _ZN12SimpleMemoryC1Ev
  mem.setData(42);
18: 38 61 00 08     addi    r3,r1,8
1c: 38 80 00 2a     li      r4,42
20: 48 00 00 01     bl      20 <main+0x20>
        20: R_PPC_REL24 _ZN12SimpleMemory7setDataEi
  temp = mem.getData();
24: 38 61 00 08     addi    r3,r1,8
28: 48 00 00 01     bl      28 <main+0x28>
        28: R_PPC_REL24 _ZN12SimpleMemory7getDataEv
2c: 38 61 00 08     addi    r3,r1,8
30: 48 00 00 01     bl      30 <main+0x30>
        30: R_PPC_REL24 _ZN12SimpleMemoryD1Ev
  return 0;
34: 80 01 00 24     lwz     r0,36(r1)
38: 38 60 00 00     li      r3,0
3c: 83 e1 00 1c     lwz     r31,28(r1)
40: 38 21 00 20     addi    r1,r1,32
44: 7c 08 03 a6     mtlr    r0
48: 4e 80 00 20     blr
4c: 7c 7f 1b 78     mr      r31,r3
50: 38 61 00 08     addi    r3,r1,8
54: 48 00 00 01     bl      54 <main+0x54>
        54: R_PPC_REL24 _ZN12SimpleMemoryD1Ev
58: 7f e3 fb 78     mr      r3,r31
5c: 48 00 00 01     bl      5c <main+0x5c>
        5c: R_PPC_REL24 _Unwind_Resume

通过混淆对象成员函数调用的不同组合,每当至少有一个成员函数调用(无论它是什么)时,都会引入第二个析构函数调用。

那么基本上,为什么会有两个具有相同重定位符号的间接函数调用?

我正在使用的编译器是GCC DDCI PowerPC ELF 4.6.1-1。

0 个答案:

没有答案