1a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin/* 2a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org> 339bac055674d23770b9a724221b728e443196ea7Elliott Hughes * Copyright (c) 2015-2017 The strace developers. 4a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * All rights reserved. 5a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 6a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * Redistribution and use in source and binary forms, with or without 7a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * modification, are permitted provided that the following conditions 8a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * are met: 9a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright 10a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * notice, this list of conditions and the following disclaimer. 11a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright 12a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * notice, this list of conditions and the following disclaimer in the 13a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * documentation and/or other materials provided with the distribution. 14a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products 15a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * derived from this software without specific prior written permission. 16a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 17a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin */ 28a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin 29a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin#include "defs.h" 30a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin#include "stat.h" 31a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin 32a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levinstatic void 33d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesdecode_struct_stat64(struct tcb *const tcp, const kernel_ulong_t addr) 34a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{ 35a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin struct strace_stat st; 36a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin 37a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin if (fetch_struct_stat64(tcp, addr, &st)) 38a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin print_struct_stat(tcp, &st); 39a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin} 40a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin 41a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. LevinSYS_FUNC(stat64) 42a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{ 43a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin if (entering(tcp)) { 44a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin printpath(tcp, tcp->u_arg[0]); 45a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprints(", "); 46a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin } else { 47a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin decode_struct_stat64(tcp, tcp->u_arg[1]); 48a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin } 49a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin return 0; 50a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin} 51a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin 52a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. LevinSYS_FUNC(fstat64) 53a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{ 54a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin if (entering(tcp)) { 55a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 56a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprints(", "); 57a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin } else { 58a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin decode_struct_stat64(tcp, tcp->u_arg[1]); 59a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin } 60a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin return 0; 61a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin} 62a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin 63a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. LevinSYS_FUNC(fstatat64) 64a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{ 65a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin if (entering(tcp)) { 66a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin print_dirfd(tcp, tcp->u_arg[0]); 67a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin printpath(tcp, tcp->u_arg[1]); 68a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprints(", "); 69a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin } else { 70a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin decode_struct_stat64(tcp, tcp->u_arg[2]); 71a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprints(", "); 72a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin printflags(at_flags, tcp->u_arg[3], "AT_???"); 73a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin } 74a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin return 0; 75a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin} 76