mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:24:31 +01:00
tools/nolibc: add abs() and friends
This is used in various selftests and will be handy when integrating those with nolibc. Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://lore.kernel.org/r/20250428-nolibc-misc-v2-6-3c043eeab06c@linutronix.de Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
This commit is contained in:
parent
801f020b5f
commit
bf5e8a78be
5 changed files with 53 additions and 0 deletions
|
|
@ -35,6 +35,7 @@ all_files := \
|
|||
fcntl.h \
|
||||
getopt.h \
|
||||
limits.h \
|
||||
math.h \
|
||||
nolibc.h \
|
||||
poll.h \
|
||||
signal.h \
|
||||
|
|
|
|||
31
tools/include/nolibc/math.h
Normal file
31
tools/include/nolibc/math.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
|
||||
/*
|
||||
* math definitions for NOLIBC
|
||||
* Copyright (C) 2025 Thomas Weißschuh <thomas.weissschuh@linutronix.de>
|
||||
*/
|
||||
|
||||
/* make sure to include all global symbols */
|
||||
#include "nolibc.h"
|
||||
|
||||
#ifndef _NOLIBC_SYS_MATH_H
|
||||
#define _NOLIBC_SYS_MATH_H
|
||||
|
||||
static __inline__
|
||||
double fabs(double x)
|
||||
{
|
||||
return x >= 0 ? x : -x;
|
||||
}
|
||||
|
||||
static __inline__
|
||||
float fabsf(float x)
|
||||
{
|
||||
return x >= 0 ? x : -x;
|
||||
}
|
||||
|
||||
static __inline__
|
||||
long double fabsl(long double x)
|
||||
{
|
||||
return x >= 0 ? x : -x;
|
||||
}
|
||||
|
||||
#endif /* _NOLIBC_SYS_MATH_H */
|
||||
|
|
@ -116,6 +116,7 @@
|
|||
#include "fcntl.h"
|
||||
#include "getopt.h"
|
||||
#include "poll.h"
|
||||
#include "math.h"
|
||||
|
||||
/* Used by programs to avoid std includes */
|
||||
#define NOLIBC
|
||||
|
|
|
|||
|
|
@ -32,6 +32,24 @@ static __attribute__((unused)) char itoa_buffer[21];
|
|||
* As much as possible, please keep functions alphabetically sorted.
|
||||
*/
|
||||
|
||||
static __inline__
|
||||
int abs(int j)
|
||||
{
|
||||
return j >= 0 ? j : -j;
|
||||
}
|
||||
|
||||
static __inline__
|
||||
long labs(long j)
|
||||
{
|
||||
return j >= 0 ? j : -j;
|
||||
}
|
||||
|
||||
static __inline__
|
||||
long long llabs(long long j)
|
||||
{
|
||||
return j >= 0 ? j : -j;
|
||||
}
|
||||
|
||||
/* must be exported, as it's used by libgcc for various divide functions */
|
||||
void abort(void);
|
||||
__attribute__((weak,unused,noreturn,section(".text.nolibc_abort")))
|
||||
|
|
|
|||
|
|
@ -1318,6 +1318,8 @@ int run_stdlib(int min, int max)
|
|||
CASE_TEST(tolower_noop); EXPECT_EQ(1, tolower('a'), 'a'); break;
|
||||
CASE_TEST(toupper); EXPECT_EQ(1, toupper('a'), 'A'); break;
|
||||
CASE_TEST(toupper_noop); EXPECT_EQ(1, toupper('A'), 'A'); break;
|
||||
CASE_TEST(abs); EXPECT_EQ(1, abs(-10), 10); break;
|
||||
CASE_TEST(abs_noop); EXPECT_EQ(1, abs(10), 10); break;
|
||||
|
||||
case __LINE__:
|
||||
return ret; /* must be last */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue