2009-08-26 46 views
0

我們試圖將我們的代碼從HPX移植到AIX,但在運行exe時獲得核心轉儲。進程在ptrgl_64._ptrgl函數中失敗aix

其在某些未知函數ptrgl_64._ptrgl中失敗。

> ptrgl_64._ptrgl() at 0x900000084da0e48 
> dfile_Proc(o_record = 
> 0x0000000400000004, fileType = 
> "^O\377\377\377\377\377TH^O\377\377\377\377\377TQ^O\377\377\377\377\377Ta^O\377\377\377\377\377T}", 
> dist_dest = (nil), indicator = '\0', 
> i_acCounters = (nil)), line 621 in 
> "DISTfile.c" main(i_argc = 4, i_argv = 
> 0x0fffffffffff34e8), line 66 in 
> "main_EXEC.c" 

對這個問題有什麼想法? 在此先感謝。

+0

此問題是由於指針值無效造成的。 – Hemant 2009-08-28 08:27:02

回答

1

這叫做指針膠水,用來通過PowerPC上的指針調用函數。因爲指針可能指向另一個模塊/共享對象中的函數,所以需要使用指針粘合來爲該模塊設置正確的RTOC和環境指針,然後跳轉到函數入口點。如果函數指針無效,那麼它可能會在指針膠水中崩潰,因爲這是指針實際解除引用的地方。

如果您對全部細節感興趣,請參閱PowerPC Compiler Writer's Guide的A.3.3節。

+0

感謝馬克這只是函數指針的問題。 +1用於解釋指針膠水。 – Hemant 2009-08-28 08:23:58

1

在0x900000084da0e48
dfile_Proc(o_record = 0x0000000400000004,
的fileType =「= O \ 377 \ 377 \ 377 \ 377 \ 377 = O \ 377 \ 377 \ 377 \ 377 \ 377TQ ptrgl_64._ptrgl() (0),i_acCounters =(nil)),line(0,0)),line 621 「DISTfile.c」
主(i_argc = 4,i_argv = 0x0fffffffffff34e8),在 「main_EXEC.c」

看DISTfile.c的621行線66。
這條線是幹什麼的?
它是通過函數指針調用函數嗎?
線621可能會導致什麼樣的問題?

+0

是的,我們通過函數指針數組來調用函數。 但是函數指針可以調用什麼問題呢? 相同的代碼在HPX上工作得很好嗎? 我不明白什麼是調用「ptrgl_64._ptrgl」功能。 我無法找到這個功能的谷歌任何東西。 – Hemant 2009-08-27 04:56:44

+0

感謝您的回覆,它只是針對函數指針問題。 – Hemant 2009-08-28 08:24:34