Skip to content

Commit 9e22c92

Browse files
tszhin-swevar-const
authored andcommitted
[libc] Implement getitimer and setitimer, add proxy headers for itimerval (llvm#134773)
llvm#133983
1 parent ec6707c commit 9e22c92

File tree

17 files changed

+348
-0
lines changed

17 files changed

+348
-0
lines changed

libc/config/linux/aarch64/entrypoints.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,10 @@ set(TARGET_LIBC_ENTRYPOINTS
363363
# sys/uio.h entrypoints
364364
libc.src.sys.uio.writev
365365
libc.src.sys.uio.readv
366+
367+
# sys/time.h entrypoints
368+
libc.src.sys.time.setitimer
369+
libc.src.sys.time.getitimer
366370
)
367371

368372
if(LLVM_LIBC_INCLUDE_SCUDO)

libc/config/linux/arm/entrypoints.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ set(TARGET_LIBC_ENTRYPOINTS
185185
# libc.src.sys.epoll.epoll_pwait
186186
# libc.src.sys.epoll.epoll_pwait2
187187

188+
# sys/time.h entrypoints
189+
libc.src.sys.time.setitimer
190+
libc.src.sys.time.getitimer
188191
)
189192

190193
if(LLVM_LIBC_FULL_BUILD)

libc/config/linux/x86_64/entrypoints.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,10 @@ set(TARGET_LIBC_ENTRYPOINTS
368368
# sys/uio.h entrypoints
369369
libc.src.sys.uio.writev
370370
libc.src.sys.uio.readv
371+
372+
# sys/time.h entrypoints
373+
libc.src.sys.time.setitimer
374+
libc.src.sys.time.getitimer
371375
)
372376

373377
if(LLVM_LIBC_INCLUDE_SCUDO)

libc/hdr/types/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,15 @@ add_proxy_header_library(
190190
libc.include.sys_time
191191
)
192192

193+
add_proxy_header_library(
194+
struct_itimerval
195+
HDRS
196+
struct_itimerval.h
197+
FULL_BUILD_DEPENDS
198+
libc.include.llvm-libc-types.struct_itimerval
199+
libc.include.sys_time
200+
)
201+
193202
add_proxy_header_library(
194203
pid_t
195204
HDRS

libc/hdr/types/struct_itimerval.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//===-- Proxy for struct itimerval ----------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
#ifndef LLVM_LIBC_HDR_TYPES_STRUCT_ITIMERVAL_H
9+
#define LLVM_LIBC_HDR_TYPES_STRUCT_ITIMERVAL_H
10+
11+
#ifdef LIBC_FULL_BUILD
12+
13+
#include "include/llvm-libc-types/struct_itimerval.h"
14+
15+
#else
16+
17+
#include <sys/time.h>
18+
19+
#endif // LIBC_FULL_BUILD
20+
21+
#endif // LLVM_LIBC_HDR_TYPES_STRUCT_ITIMERVAL_H

libc/include/llvm-libc-types/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ add_header(struct_pollfd HDR struct_pollfd.h)
7777
add_header(struct_rlimit HDR struct_rlimit.h DEPENDS .rlim_t)
7878
add_header(struct_sched_param HDR struct_sched_param.h)
7979
add_header(struct_timeval HDR struct_timeval.h DEPENDS .suseconds_t .time_t)
80+
add_header(struct_itimerval HDR struct_itimerval.h DEPENDS .struct_timeval)
8081
add_header(struct_rusage HDR struct_rusage.h DEPENDS .struct_timeval)
8182
add_header(union_sigval HDR union_sigval.h)
8283
add_header(siginfo_t HDR siginfo_t.h DEPENDS .union_sigval .pid_t .uid_t .clock_t)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//===-- Definition of struct itimerval ------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIBC_TYPES_STRUCT_ITIMERVAL_H
10+
#define LLVM_LIBC_TYPES_STRUCT_ITIMERVAL_H
11+
12+
#include "struct_timeval.h"
13+
14+
struct itimerval {
15+
struct timeval it_interval; /* Interval for periodic timer */
16+
struct timeval it_value; /* Time until next expiration */
17+
};
18+
19+
#endif // LLVM_LIBC_TYPES_STRUCT_ITIMERVAL_H

libc/include/sys/time.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ standards: Linux
44
macros: []
55
types:
66
- type_name: struct_timeval
7+
- type_name: struct_itimerval
78
enums: []
89
objects: []
910
functions:
@@ -12,3 +13,20 @@ functions:
1213
arguments:
1314
- type: const char*
1415
- type: const struct timeval*
16+
17+
- name: setitimer
18+
standards:
19+
- POSIX
20+
return_type: int
21+
arguments:
22+
- type: int
23+
- type: const struct itimerval *__restrict
24+
- type: struct itimerval *__restrict
25+
26+
- name: getitimer
27+
standards:
28+
- POSIX
29+
return_type: int
30+
arguments:
31+
- type: int
32+
- type: struct itimerval *

libc/src/sys/time/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,17 @@ add_entrypoint_object(
88
DEPENDS
99
.${LIBC_TARGET_OS}.utimes
1010
)
11+
12+
add_entrypoint_object(
13+
setitimer
14+
ALIAS
15+
DEPENDS
16+
.${LIBC_TARGET_OS}.setitimer
17+
)
18+
19+
add_entrypoint_object(
20+
getitimer
21+
ALIAS
22+
DEPENDS
23+
.${LIBC_TARGET_OS}.getitimer
24+
)

libc/src/sys/time/getitimer.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//===-- Implementation header for getitimer -------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIBC_SRC_SYS_TIME_GETITIMER_H
10+
#define LLVM_LIBC_SRC_SYS_TIME_GETITIMER_H
11+
12+
#include "hdr/types/struct_itimerval.h"
13+
#include "src/__support/macros/config.h"
14+
15+
namespace LIBC_NAMESPACE_DECL {
16+
int getitimer(int which, struct itimerval *curr_value);
17+
} // namespace LIBC_NAMESPACE_DECL
18+
19+
#endif // LLVM_LIBC_SRC_SYS_TIME_GETITIMER_H

0 commit comments

Comments
 (0)