[LibOS] Implement utime, utimes, utimensat
Description of the changes
This PR implements support for the utime(), utimes(), and utimensat() syscalls in Gramine to provide file timestamp update functionality. The utime() syscall is fully implemented, while utimes() and utimensat() are stubbed with equivalent behavior. These additions enhance Gramine's syscall compatibility and enable several LTP test cases that were previously skipped due to the lack of utimensat() support.
The implementation retains the existing data types for atime, mtime, and ctime in the LibOS file structure, resulting in a timestamp resolution of one second. I took reference of prior discussions (PR #1144 and discussion #942) and implemented with lower resolution to keep the implementation minimal.
How to test this PR?
Tested with LTP Test.
LTP Before PR: 422 passed, 906 skipped
LTP After PR: 436 passed, 892 skipped
Add to whitelist.
Jenkins, retest this please
Retest Jenkins-Direct-22.04, please. Timeout on fdatasync01 I cannot reproduce locally.
Jenkins, retest Jenkins-Direct-22.04 please. Timeout on fdatasync01 I cannot reproduce locally.