簡體   English   中英

如何在 xv6 系統調用中返回結構?

[英]How to return a struct in xv6 syscalls?

我目前正在測試 xv6 並實現了一個新的系統調用。

據我所知,xv6 中的所有系統調用都返回一個 int。 這是需要的嗎?為什么?

因為我想返回一個 C 結構。

這可能嗎? 為了實現這一目標,我需要做什么?

系統調用的返回值存儲在eax寄存器中。

源代碼所示:

proc->tf->eax = syscalls[num]();

這意味着返回值將始終是單個 32 位值。

系統調用處理程序的函數類型也定義為返回int並且不采用 arguments:

static int (*syscalls[])(void)

在這種情況下返回結構的正確方法是將用戶空間指針作為系統調用參數傳遞。 在驗證它是否有效后,它將把結構數據存儲在該指針處。 請注意,由於系統調用處理程序本身不使用 arguments,因此您必須使用像argptr這樣的參數 getter,它會為您處理有效性檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM