Skip to content

Commit ca0c9bc

Browse files
[libc] Update riscv entrypoints to be on par with x86 (#138597)
This patch updates the riscv entrypoints with almost all functions that are currently supported on x86. I left six functions commented, as I'll send separate PRs to enable them: * poll: needs a new syscall implementation * utimes: needs a new syscall implementation * setitimer: test never finished in rv32 * getitimer: test fails in rv32 * exp10m1f: test case doesn't build but it's an easy fix * sqrtulk: needs to be implemented I also added the 16-bit fp functions, however, they are not enabled due to a cmake check in float16-macros.h. To enable 16-bit fp in riscv, we need to update the buildbots with a clang version that includes the fix from commit PR #119481
1 parent a750893 commit ca0c9bc

File tree

2 files changed

+221
-16
lines changed

2 files changed

+221
-16
lines changed

libc/config/linux/riscv/entrypoints.txt

Lines changed: 204 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,16 @@ set(TARGET_LIBC_ENTRYPOINTS
9191
libc.src.string.strxfrm
9292

9393
# strings.h entrypoints
94-
libc.src.strings.index
95-
libc.src.strings.rindex
9694
libc.src.strings.bcmp
9795
libc.src.strings.bcopy
9896
libc.src.strings.bzero
97+
libc.src.strings.ffs
98+
libc.src.strings.ffsl
99+
libc.src.strings.ffsll
100+
libc.src.strings.index
101+
libc.src.strings.rindex
99102
libc.src.strings.strcasecmp
103+
libc.src.strings.strncasecmp
100104

101105
# inttypes.h entrypoints
102106
libc.src.inttypes.imaxabs
@@ -177,13 +181,15 @@ set(TARGET_LIBC_ENTRYPOINTS
177181
libc.src.stdbit.stdc_trailing_zeros_us
178182

179183
# stdlib.h entrypoints
184+
libc.src.stdlib.a64l
180185
libc.src.stdlib.abs
181186
libc.src.stdlib.atof
182187
libc.src.stdlib.atoi
183188
libc.src.stdlib.atol
184189
libc.src.stdlib.atoll
185190
libc.src.stdlib.bsearch
186191
libc.src.stdlib.div
192+
libc.src.stdlib.l64a
187193
libc.src.stdlib.labs
188194
libc.src.stdlib.ldiv
189195
libc.src.stdlib.llabs
@@ -248,6 +254,7 @@ set(TARGET_LIBC_ENTRYPOINTS
248254
libc.src.sys.mman.mlock2
249255
libc.src.sys.mman.mlockall
250256
libc.src.sys.mman.mmap
257+
libc.src.sys.mman.mremap
251258
libc.src.sys.mman.mprotect
252259
libc.src.sys.mman.msync
253260
libc.src.sys.mman.munlock
@@ -282,6 +289,9 @@ set(TARGET_LIBC_ENTRYPOINTS
282289
libc.src.sys.statvfs.fstatvfs
283290
libc.src.sys.statvfs.statvfs
284291

292+
# sys/utimes.h entrypoints
293+
# libc.src.sys.time.utimes
294+
285295
# sys/utsname.h entrypoints
286296
libc.src.sys.utsname.uname
287297

@@ -322,6 +332,7 @@ set(TARGET_LIBC_ENTRYPOINTS
322332
libc.src.unistd.fsync
323333
libc.src.unistd.ftruncate
324334
libc.src.unistd.getcwd
335+
libc.src.unistd.getentropy
325336
libc.src.unistd.geteuid
326337
libc.src.unistd.getpid
327338
libc.src.unistd.getppid
@@ -351,8 +362,17 @@ set(TARGET_LIBC_ENTRYPOINTS
351362
libc.src.unistd.write
352363

353364
# wchar.h entrypoints
365+
libc.src.wchar.btowc
354366
libc.src.wchar.wcslen
355367
libc.src.wchar.wctob
368+
369+
# sys/uio.h entrypoints
370+
libc.src.sys.uio.writev
371+
libc.src.sys.uio.readv
372+
373+
# sys/time.h entrypoints
374+
# libc.src.sys.time.setitimer
375+
# libc.src.sys.time.getitimer
356376
)
357377

358378
if(LLVM_LIBC_INCLUDE_SCUDO)
@@ -431,6 +451,7 @@ set(TARGET_LIBM_ENTRYPOINTS
431451
libc.src.math.exp
432452
libc.src.math.exp10
433453
libc.src.math.exp10f
454+
# libc.src.math.exp10m1f
434455
libc.src.math.exp2
435456
libc.src.math.exp2f
436457
libc.src.math.exp2m1f
@@ -627,6 +648,130 @@ set(TARGET_LIBM_ENTRYPOINTS
627648
libc.src.math.ufromfpxf
628649
libc.src.math.ufromfpxl
629650
)
651+
if(LIBC_TYPES_HAS_CFLOAT16)
652+
list(APPEND TARGET_LIBM_ENTRYPOINTS
653+
# complex.h C23 _Complex _Float16 entrypoints
654+
libc.src.complex.crealf16
655+
libc.src.complex.cimagf16
656+
libc.src.complex.conjf16
657+
libc.src.complex.cprojf16
658+
)
659+
endif()
660+
661+
if(LIBC_TYPES_HAS_FLOAT16)
662+
list(APPEND TARGET_LIBM_ENTRYPOINTS
663+
# math.h C23 _Float16 entrypoints
664+
libc.src.math.acosf16
665+
libc.src.math.acoshf16
666+
libc.src.math.acospif16
667+
libc.src.math.asinf16
668+
libc.src.math.asinhf16
669+
libc.src.math.atanhf16
670+
libc.src.math.canonicalizef16
671+
libc.src.math.ceilf16
672+
libc.src.math.copysignf16
673+
libc.src.math.cosf16
674+
libc.src.math.coshf16
675+
libc.src.math.cospif16
676+
libc.src.math.exp10f16
677+
libc.src.math.exp10m1f16
678+
libc.src.math.exp2f16
679+
libc.src.math.exp2m1f16
680+
libc.src.math.expf16
681+
libc.src.math.expm1f16
682+
libc.src.math.f16add
683+
libc.src.math.f16addf
684+
libc.src.math.f16addl
685+
libc.src.math.f16div
686+
libc.src.math.f16divf
687+
libc.src.math.f16divl
688+
libc.src.math.f16fma
689+
libc.src.math.f16fmaf
690+
libc.src.math.f16fmal
691+
libc.src.math.f16mul
692+
libc.src.math.f16mulf
693+
libc.src.math.f16mull
694+
libc.src.math.f16sqrt
695+
libc.src.math.f16sqrtf
696+
libc.src.math.f16sqrtl
697+
libc.src.math.f16sub
698+
libc.src.math.f16subf
699+
libc.src.math.f16subl
700+
libc.src.math.fabsf16
701+
libc.src.math.fdimf16
702+
libc.src.math.floorf16
703+
libc.src.math.fmaf16
704+
libc.src.math.fmaxf16
705+
libc.src.math.fmaximum_mag_numf16
706+
libc.src.math.fmaximum_magf16
707+
libc.src.math.fmaximum_numf16
708+
libc.src.math.fmaximumf16
709+
libc.src.math.fminf16
710+
libc.src.math.fminimum_mag_numf16
711+
libc.src.math.fminimum_magf16
712+
libc.src.math.fminimum_numf16
713+
libc.src.math.fminimumf16
714+
libc.src.math.fmodf16
715+
libc.src.math.frexpf16
716+
libc.src.math.fromfpf16
717+
libc.src.math.fromfpxf16
718+
libc.src.math.getpayloadf16
719+
libc.src.math.hypotf16
720+
libc.src.math.ilogbf16
721+
libc.src.math.iscanonicalf16
722+
libc.src.math.issignalingf16
723+
libc.src.math.ldexpf16
724+
libc.src.math.llogbf16
725+
libc.src.math.llrintf16
726+
libc.src.math.llroundf16
727+
libc.src.math.log10f16
728+
libc.src.math.log2f16
729+
libc.src.math.logbf16
730+
libc.src.math.logf16
731+
libc.src.math.lrintf16
732+
libc.src.math.lroundf16
733+
libc.src.math.modff16
734+
libc.src.math.nanf16
735+
libc.src.math.nearbyintf16
736+
libc.src.math.nextafterf16
737+
libc.src.math.nextdownf16
738+
libc.src.math.nexttowardf16
739+
libc.src.math.nextupf16
740+
libc.src.math.remainderf16
741+
libc.src.math.remquof16
742+
libc.src.math.rintf16
743+
libc.src.math.roundevenf16
744+
libc.src.math.roundf16
745+
libc.src.math.scalblnf16
746+
libc.src.math.scalbnf16
747+
libc.src.math.setpayloadf16
748+
libc.src.math.setpayloadsigf16
749+
libc.src.math.sinf16
750+
libc.src.math.sinhf16
751+
libc.src.math.sinpif16
752+
libc.src.math.sqrtf16
753+
libc.src.math.tanf16
754+
libc.src.math.tanhf16
755+
libc.src.math.tanpif16
756+
libc.src.math.totalorderf16
757+
libc.src.math.totalordermagf16
758+
libc.src.math.truncf16
759+
libc.src.math.ufromfpf16
760+
libc.src.math.ufromfpxf16
761+
)
762+
763+
if(LIBC_TYPES_HAS_FLOAT128)
764+
list(APPEND TARGET_LIBM_ENTRYPOINTS
765+
# math.h C23 mixed _Float16 and _Float128 entrypoints
766+
libc.src.math.f16addf128
767+
libc.src.math.f16divf128
768+
libc.src.math.f16fmaf128
769+
libc.src.math.f16mulf128
770+
libc.src.math.f16sqrtf128
771+
libc.src.math.f16subf128
772+
)
773+
endif()
774+
endif()
630775

631776
if(LIBC_TYPES_HAS_CFLOAT128)
632777
list(APPEND TARGET_LIBM_ENTRYPOINTS
@@ -736,6 +881,7 @@ if(LIBC_COMPILER_HAS_FIXED_POINT)
736881
libc.src.stdfix.sqrtuhr
737882
libc.src.stdfix.sqrtuk
738883
libc.src.stdfix.sqrtur
884+
# libc.src.stdfix.sqrtulk
739885
libc.src.stdfix.sqrtulr
740886
libc.src.stdfix.uhksqrtus
741887
libc.src.stdfix.uksqrtui
@@ -749,7 +895,6 @@ if(LIBC_COMPILER_HAS_FIXED_POINT)
749895
libc.src.stdfix.uhkbits
750896
libc.src.stdfix.kbits
751897
libc.src.stdfix.ukbits
752-
# TODO: https://github.com/llvm/llvm-project/issues/115778
753898
libc.src.stdfix.lkbits
754899
libc.src.stdfix.ulkbits
755900
libc.src.stdfix.bitshr
@@ -789,6 +934,39 @@ endif()
789934

790935
if(LLVM_LIBC_FULL_BUILD)
791936
list(APPEND TARGET_LIBC_ENTRYPOINTS
937+
# ctype.h entrypoints
938+
libc.src.ctype.isalnum_l
939+
libc.src.ctype.isalpha_l
940+
libc.src.ctype.isblank_l
941+
libc.src.ctype.iscntrl_l
942+
libc.src.ctype.isdigit_l
943+
libc.src.ctype.isgraph_l
944+
libc.src.ctype.islower_l
945+
libc.src.ctype.isprint_l
946+
libc.src.ctype.ispunct_l
947+
libc.src.ctype.isspace_l
948+
libc.src.ctype.isupper_l
949+
libc.src.ctype.isxdigit_l
950+
libc.src.ctype.tolower_l
951+
libc.src.ctype.toupper_l
952+
953+
# stdlib.h entrypoints
954+
libc.src.stdlib.strtod_l
955+
libc.src.stdlib.strtof_l
956+
libc.src.stdlib.strtol_l
957+
libc.src.stdlib.strtold_l
958+
libc.src.stdlib.strtoll_l
959+
libc.src.stdlib.strtoul_l
960+
libc.src.stdlib.strtoull_l
961+
962+
# string.h entrypoints
963+
libc.src.string.strcoll_l
964+
libc.src.string.strxfrm_l
965+
966+
# strings.h entrypoints
967+
libc.src.strings.strcasecmp_l
968+
libc.src.strings.strncasecmp_l
969+
792970
# assert.h entrypoints
793971
libc.src.assert.__assert_fail
794972

@@ -864,6 +1042,11 @@ if(LLVM_LIBC_FULL_BUILD)
8641042
libc.src.pthread.pthread_rwlockattr_init
8651043
libc.src.pthread.pthread_rwlockattr_setkind_np
8661044
libc.src.pthread.pthread_rwlockattr_setpshared
1045+
libc.src.pthread.pthread_spin_destroy
1046+
libc.src.pthread.pthread_spin_init
1047+
libc.src.pthread.pthread_spin_lock
1048+
libc.src.pthread.pthread_spin_trylock
1049+
libc.src.pthread.pthread_spin_unlock
8671050
libc.src.pthread.pthread_self
8681051
libc.src.pthread.pthread_setname_np
8691052
libc.src.pthread.pthread_setspecific
@@ -998,9 +1181,20 @@ if(LLVM_LIBC_FULL_BUILD)
9981181
libc.src.time.gmtime_r
9991182
libc.src.time.mktime
10001183
libc.src.time.nanosleep
1184+
libc.src.time.strftime
1185+
libc.src.time.strftime_l
10011186
libc.src.time.time
10021187
libc.src.time.timespec_get
10031188

1189+
# locale.h entrypoints
1190+
libc.src.locale.localeconv
1191+
libc.src.locale.duplocale
1192+
libc.src.locale.freelocale
1193+
libc.src.locale.localeconv
1194+
libc.src.locale.newlocale
1195+
libc.src.locale.setlocale
1196+
libc.src.locale.uselocale
1197+
10041198
# unistd.h entrypoints
10051199
libc.src.unistd.__llvm_libc_syscall
10061200
libc.src.unistd._exit
@@ -1020,6 +1214,13 @@ if(LLVM_LIBC_FULL_BUILD)
10201214
# sys/socket.h entrypoints
10211215
libc.src.sys.socket.bind
10221216
libc.src.sys.socket.socket
1217+
libc.src.sys.socket.socketpair
1218+
libc.src.sys.socket.send
1219+
libc.src.sys.socket.sendto
1220+
libc.src.sys.socket.sendmsg
1221+
libc.src.sys.socket.recv
1222+
libc.src.sys.socket.recvfrom
1223+
libc.src.sys.socket.recvmsg
10231224
)
10241225
endif()
10251226

libc/config/linux/riscv/headers.txt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
11
set(TARGET_PUBLIC_HEADERS
2+
libc.include.arpa_inet
23
libc.include.assert
34
libc.include.complex
45
libc.include.ctype
56
libc.include.dirent
67
libc.include.dlfcn
8+
libc.include.elf
9+
libc.include.endian
710
libc.include.errno
811
libc.include.fcntl
912
libc.include.features
1013
libc.include.fenv
1114
libc.include.float
12-
libc.include.stdint
1315
libc.include.inttypes
1416
libc.include.limits
17+
libc.include.link
18+
libc.include.locale
1519
libc.include.malloc
1620
libc.include.math
21+
libc.include.poll
1722
libc.include.pthread
1823
libc.include.sched
24+
libc.include.search
25+
libc.include.setjmp
1926
libc.include.signal
2027
libc.include.spawn
21-
libc.include.setjmp
22-
libc.include.stdckdint
2328
libc.include.stdbit
29+
libc.include.stdckdint
2430
libc.include.stdfix
31+
libc.include.stdint
2532
libc.include.stdio
2633
libc.include.stdlib
2734
libc.include.string
2835
libc.include.strings
29-
libc.include.search
30-
libc.include.termios
31-
libc.include.threads
32-
libc.include.time
33-
libc.include.unistd
34-
libc.include.wchar
35-
libc.include.uchar
36-
37-
libc.include.arpa_inet
38-
3936
libc.include.sys_auxv
4037
libc.include.sys_epoll
4138
libc.include.sys_ioctl
@@ -53,4 +50,11 @@ set(TARGET_PUBLIC_HEADERS
5350
libc.include.sys_types
5451
libc.include.sys_utsname
5552
libc.include.sys_wait
53+
libc.include.sysexits
54+
libc.include.termios
55+
libc.include.threads
56+
libc.include.time
57+
libc.include.uchar
58+
libc.include.unistd
59+
libc.include.wchar
5660
)

0 commit comments

Comments
 (0)