Skip to content

Commit 4c2bb08

Browse files
committed
[libc] Implement getitimer and setitimer, add proxy headers for itimerval
1 parent ac42b08 commit 4c2bb08

File tree

17 files changed

+332
-1
lines changed

17 files changed

+332
-1
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: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//===-- Definition of struct itimerval
2+
//-------------------------------------===//
3+
//
4+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5+
// See https://llvm.org/LICENSE.txt for license information.
6+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#ifndef LLVM_LIBC_TYPES_STRUCT_ITIMERVAL_H
11+
#define LLVM_LIBC_TYPES_STRUCT_ITIMERVAL_H
12+
13+
#include "struct_timeval.h"
14+
15+
struct itimerval {
16+
struct timeval it_interval; /* Interval for periodic timer */
17+
struct timeval it_value; /* Time until next expiration */
18+
};
19+
20+
#endif // LLVM_LIBC_TYPES_STRUCT_ITIMERVAL_H

libc/include/sys/time.yaml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,29 @@ standards: Linux
44
macros: []
55
types:
66
- type_name: struct_timeval
7+
- type_name: struct_itimerval
78
enums: []
8-
objects: []
99
functions:
1010
- name: utimes
1111
return_type: int
1212
arguments:
1313
- type: const char*
1414
- type: const struct timeval*
15+
16+
- name: setitimer
17+
standards:
18+
- POSIX
19+
return_type: int
20+
arguments:
21+
- type: int
22+
- type: const struct itimerval *
23+
- type: struct itimerval *
24+
25+
- name: getitimer
26+
standards:
27+
- POSIX
28+
return_type: int
29+
arguments:
30+
- type: int
31+
- type: struct itimerval *
32+
objects: []

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

0 commit comments

Comments
 (0)