From bf18c61798d1ae9197ae087ed85e94eef55e8678 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Wed, 4 Mar 2015 10:31:29 -0800 Subject: [PATCH] Add a sys/procfs.h. Needed for building gdbserver out of the box. Bug: http://b/21695943 Bug: https://code.google.com/p/android/issues/detail?id=86712 Change-Id: Ieadda2b595f08bfddfa61fcd68006b8e7c1a438d --- libc/include/sys/procfs.h | 47 +++++++++++++++++++++++++++++++++++++ libc/include/sys/ucontext.h | 8 +++++++ tests/Android.mk | 1 + tests/sys_procfs_test.cpp | 39 ++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 libc/include/sys/procfs.h create mode 100644 tests/sys_procfs_test.cpp diff --git a/libc/include/sys/procfs.h b/libc/include/sys/procfs.h new file mode 100644 index 000000000..ef5b25ff8 --- /dev/null +++ b/libc/include/sys/procfs.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _SYS_PROCFS_H_ +#define _SYS_PROCFS_H_ + +#include +#include + +__BEGIN_DECLS + +typedef unsigned long elf_greg_t; +typedef elf_greg_t elf_gregset_t[NGREG]; + +typedef fpregset_t elf_fpregset_t; + +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; + +__END_DECLS + +#endif /* _SYS_PROCFS_H_ */ diff --git a/libc/include/sys/ucontext.h b/libc/include/sys/ucontext.h index b68d704b0..8bd8c3bf1 100644 --- a/libc/include/sys/ucontext.h +++ b/libc/include/sys/ucontext.h @@ -59,6 +59,7 @@ enum { typedef int greg_t; typedef greg_t gregset_t[NGREG]; +typedef struct user_fpregs fpregset_t; #include typedef struct sigcontext mcontext_t; @@ -82,6 +83,13 @@ typedef struct ucontext { typedef unsigned long greg_t; typedef greg_t gregset_t[NGREG]; +struct user_fpsimd_state { + long double vregs[32]; + uint32_t fpsr; + uint32_t fpcr; +}; +typedef struct user_fpsimd_state fpregset_t; + #include typedef struct sigcontext mcontext_t; diff --git a/tests/Android.mk b/tests/Android.mk index 29e9e1ef6..964a34aec 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -96,6 +96,7 @@ libBionicStandardTests_src_files := \ sys_epoll_test.cpp \ sys_mman_test.cpp \ sys_personality_test.cpp \ + sys_procfs_test.cpp \ sys_resource_test.cpp \ sys_select_test.cpp \ sys_sendfile_test.cpp \ diff --git a/tests/sys_procfs_test.cpp b/tests/sys_procfs_test.cpp new file mode 100644 index 000000000..8054869eb --- /dev/null +++ b/tests/sys_procfs_test.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed 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. + */ + +#include + +#include + +TEST(sys_procfs, smoke) { + elf_greg_t reg; + memset(®, 0, sizeof(reg)); + + elf_gregset_t regs; + memset(®s, 0, sizeof(regs)); + + elf_fpregset_t fp_regs; + memset(&fp_regs, 0, sizeof(fp_regs)); + + prgregset_t pr_g_regs; + memset(&pr_g_regs, 0, sizeof(pr_g_regs)); + + prfpregset_t pr_fp_regs; + memset(&pr_fp_regs, 0, sizeof(pr_fp_regs)); + + static_assert(sizeof(prgregset_t) == sizeof(elf_gregset_t), ""); + static_assert(sizeof(prfpregset_t) == sizeof(elf_fpregset_t), ""); +}