Simplify ftrace_hook()

We now have a test to prove that its transitive closure doesn't perform
floating point computations.
This commit is contained in:
Justine Tunney 2023-06-06 11:10:38 -07:00
parent 61b9677c05
commit b6182db813
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
11 changed files with 142 additions and 85 deletions

View file

@ -446,6 +446,7 @@ typedef struct {
#endif
#ifndef optimizespeed
/* warning: corrupts frame pointer; only use on leaf functions */
#if !defined(__STRICT_ANSI__) && \
((__GNUC__ + 0) * 100 + (__GNUC_MINOR__ + 0) >= 407 || \
__has_attribute(__optimize__))

View file

@ -27,16 +27,6 @@ ftrace_hook:
ret
1: push %rbp
mov %rsp,%rbp
and $-16,%rsp
sub $0x80,%rsp
movaps %xmm0,0x00(%rsp)
movaps %xmm1,0x10(%rsp)
movaps %xmm2,0x20(%rsp)
movaps %xmm3,0x30(%rsp)
movaps %xmm4,0x40(%rsp)
movaps %xmm5,0x50(%rsp)
movaps %xmm6,0x60(%rsp)
movaps %xmm7,0x70(%rsp)
push %rax
push %rax
push %rdi
@ -45,11 +35,7 @@ ftrace_hook:
push %rcx
push %r8
push %r9
push %r10
push %r11
call ftracer
pop %r11
pop %r10
pop %r9
pop %r8
pop %rcx
@ -58,15 +44,7 @@ ftrace_hook:
pop %rdi
pop %rax
pop %rax
movaps 0x00(%rsp),%xmm0
movaps 0x10(%rsp),%xmm1
movaps 0x20(%rsp),%xmm2
movaps 0x30(%rsp),%xmm3
movaps 0x40(%rsp),%xmm4
movaps 0x50(%rsp),%xmm5
movaps 0x60(%rsp),%xmm6
movaps 0x70(%rsp),%xmm7
leave
pop %rbp
ret
#elif defined(__aarch64__)

View file

@ -0,0 +1,45 @@
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi
Copyright 2023 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/mem/gc.h"
#include "libc/runtime/runtime.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/testlib/testlib.h"
#include "libc/x/x.h"
char testlib_enable_tmp_setup_teardown;
TEST(ftrace, test) {
const char *ftraceasm;
testlib_extract("/zip/ftraceasm.txt", "ftraceasm.txt", 0755);
ftraceasm = _gc(xslurp("ftraceasm.txt", 0));
#ifdef __x86_64__
if (strstr(ftraceasm, "%xmm") || strstr(ftraceasm, "%ymm")) {
#elif defined(__aarch64__)
if (strstr(ftraceasm, " d0,") || strstr(ftraceasm, " v0.")) {
#else
if (0) {
#endif
fprintf(stderr,
"error: ftrace_hook() depends on floating point code\n"
"you need to objdump o//test/libc/runtime/ftraceasm.elf\n"
"then compile the guilty module with -mgeneral-regs-only\n");
exit(1);
}
}

View file

@ -0,0 +1,23 @@
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi
Copyright 2023 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
void ftrace_hook(void);
void _start(void) {
ftrace_hook();
}

View file

@ -52,6 +52,7 @@ o/$(MODE)/test/libc/runtime/runtime.pkg: \
o/$(MODE)/test/libc/runtime/%.com.dbg: \
$(TEST_LIBC_RUNTIME_DEPS) \
o/$(MODE)/test/libc/mem/prog/life.elf.zip.o \
o/$(MODE)/test/libc/runtime/prog/ftraceasm.txt.zip.o \
o/$(MODE)/test/libc/runtime/%.o \
o/$(MODE)/test/libc/runtime/runtime.pkg \
$(LIBC_TESTMAIN) \
@ -81,6 +82,18 @@ o/$(MODE)/test/libc/runtime/itsatrap_test.o: private \
-fno-sanitize=all \
-ftrapv
o/$(MODE)/test/libc/runtime/prog/ftraceasm.elf: \
$(TEST_LIBC_RUNTIME_DEPS) \
o/$(MODE)/test/libc/runtime/prog/ftraceasm.o \
o/$(MODE)/test/libc/runtime/runtime.pkg
@$(ELFLINK)
o/$(MODE)/test/libc/runtime/prog/ftraceasm.txt: \
o/$(MODE)/test/libc/runtime/prog/ftraceasm.elf
@$(OBJDUMP) -d $< >$@
o/$(MODE)/test/libc/runtime/prog/ftraceasm.txt.zip.o: private \
ZIPOBJ_FLAGS += \
-B
.PHONY: o/$(MODE)/test/libc/runtime
o/$(MODE)/test/libc/runtime: \
$(TEST_LIBC_RUNTIME_BINS) \

View file

@ -5,6 +5,7 @@
https://docs.python.org/3/license.html │
*/
#define PY_SSIZE_T_CLEAN
#include "third_party/python/Include/unicodeobject.h"
#include "libc/assert.h"
#include "libc/errno.h"
#include "libc/fmt/fmt.h"
@ -39,7 +40,6 @@
#include "third_party/python/Include/sliceobject.h"
#include "third_party/python/Include/tupleobject.h"
#include "third_party/python/Include/ucnhash.h"
#include "third_party/python/Include/unicodeobject.h"
#include "third_party/python/Include/warnings.h"
#include "third_party/python/Include/yoink.h"
#include "third_party/python/Modules/unicodedata.h"
@ -4902,7 +4902,7 @@ PyUnicode_DecodeUTF8(const char *s,
# error C 'long' size should be either 4 or 8!
#endif
static optimizespeed Py_ssize_t
static Py_ssize_t
ascii_decode(const char *start, const char *end, Py_UCS1 *dest)
{
const char *p = start;

View file

@ -66,7 +66,7 @@ fixdfa(grammar *g, dfa *d)
fixstate(g, s);
}
static optimizespeed void
static void
fixstate(grammar *g, state *s)
{
arc *a;

View file

@ -4,12 +4,12 @@
Python 3
https://docs.python.org/3/license.html │
*/
#include "third_party/python/Include/parsetok.h"
#include "third_party/python/Include/errcode.h"
#include "third_party/python/Include/graminit.h"
#include "third_party/python/Include/grammar.h"
#include "third_party/python/Include/node.h"
#include "third_party/python/Include/objimpl.h"
#include "third_party/python/Include/parsetok.h"
#include "third_party/python/Include/pgenheaders.h"
#include "third_party/python/Include/pyerrors.h"
#include "third_party/python/Parser/parser.h"
@ -184,7 +184,7 @@ warn(const char *msg, const char *filename, int lineno)
/* Parse input coming from the given tokenizer structure.
Return error code. */
static optimizespeed node *
static node *
parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
int *flags)
{

View file

@ -1031,11 +1031,9 @@ static const unsigned char stbi__jpeg_dezigzag[64 + 15] = {
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63};
// decode one 64-entry block
static optimizespeed int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64],
stbi__huffman *hdc,
stbi__huffman *hac,
int16_t *fac, int b,
uint16_t *dequant) {
static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64],
stbi__huffman *hdc, stbi__huffman *hac,
int16_t *fac, int b, uint16_t *dequant) {
unsigned int zig;
int diff, dc, k, t, c, r, s, rs;
if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);

View file

@ -16,12 +16,12 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "third_party/stb/stb_image_resize.h"
#include "libc/assert.h"
#include "libc/macros.internal.h"
#include "libc/math.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
#include "third_party/stb/stb_image_resize.h"
asm(".ident\t\"\\n\\n\
stb_image_resize (Public Domain)\\n\
@ -853,8 +853,7 @@ static float* stbir__get_decode_buffer(stbir__info* stbir_info) {
#define STBIR__DECODE(type, colorspace) \
((type) * (STBIR_MAX_COLORSPACES) + (colorspace))
static optimizespeed void stbir__decode_scanline(stbir__info* stbir_info,
int n) {
static void stbir__decode_scanline(stbir__info* stbir_info, int n) {
int c;
int channels = stbir_info->channels;
int alpha_channel = stbir_info->alpha_channel;

View file

@ -2868,7 +2868,7 @@ char *str2oem(dst, src)
/* Function memset() */
/*********************/
zvoid *memset(buf, init, len)
zvoid *memset_(buf, init, len)
register zvoid *buf; /* buffer location */
register int init; /* initializer character */
register unsigned int len; /* length of the buffer */