mirror of
https://github.com/apache/nuttx.git
synced 2026-08-27 20:30:38 +00:00
Add word-at-a-time strlcpy using DETECTNULL for both the copy phase and the strlen tail when truncated. The copy loop aligns src and processes a register at a time, falling to bytewise for the last word containing the terminator. When truncated, the remaining src length is measured with a second word-at-a-time loop. strlcpy has 46 call sites in a typical kernel image (more than strcpy) and is not covered by newlib OPTSPEED, making it a high-value target. Assisted-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: ganjing <ganjing@xiaomi.com>
104 lines
2.3 KiB
Text
104 lines
2.3 KiB
Text
############################################################################
|
|
# libs/libc/machine/risc-v/Make.defs
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership. The
|
|
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance with the
|
|
# License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
############################################################################
|
|
|
|
ifeq ($(CONFIG_RISCV_MEMCPY),y)
|
|
ASRCS += arch_memcpy.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_MEMSET),y)
|
|
ASRCS += arch_memset.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_MEMMOVE),y)
|
|
ASRCS += arch_memmove.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_MEMCMP),y)
|
|
ASRCS += arch_memcmp.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_MEMCHR),y)
|
|
ASRCS += arch_memchr.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRCMP),y)
|
|
ASRCS += arch_strcmp.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRLEN),y)
|
|
ASRCS += arch_strlen.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRNLEN),y)
|
|
ASRCS += arch_strnlen.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRCPY),y)
|
|
ASRCS += arch_strcpy.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRNCPY),y)
|
|
ASRCS += arch_strncpy.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STPCPY),y)
|
|
ASRCS += arch_stpcpy.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STPNCPY),y)
|
|
ASRCS += arch_stpncpy.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRCHR),y)
|
|
ASRCS += arch_strchr.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRCHRNUL),y)
|
|
ASRCS += arch_strchrnul.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRRCHR),y)
|
|
ASRCS += arch_strrchr.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRNCMP),y)
|
|
ASRCS += arch_strncmp.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRLCPY),y)
|
|
ASRCS += arch_strlcpy.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_RISCV_STRCAT),y)
|
|
ASRCS += arch_strcat.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_ARCH_SETJMP_H),y)
|
|
ASRCS += arch_setjmp.S
|
|
endif
|
|
|
|
ifeq ($(CONFIG_LIBC_ARCH_ELF),y)
|
|
CSRCS += arch_elf.c
|
|
endif
|
|
|
|
DEPPATH += --dep-path machine/risc-v
|
|
VPATH += :machine/risc-v
|