[haiku-commits] Change in haiku[master]: strace: shows values for create_pipe and socketpair.

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 20 Jun 2022 14:30:53 +0000

From Jérôme Duval <jerome.duval@xxxxxxxxx>:

Jérôme Duval has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/5390 ;)


Change subject: strace: shows values for create_pipe and socketpair.
......................................................................

strace: shows values for create_pipe and socketpair.
---
M src/bin/debug/strace/Syscall.h
M src/bin/debug/strace/TypeHandler.cpp
M src/bin/debug/strace/strace.cpp
3 files changed, 43 insertions(+), 14 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/90/5390/1

diff --git a/src/bin/debug/strace/Syscall.h b/src/bin/debug/strace/Syscall.h
index 6b81b4e..b8af16e 100644
--- a/src/bin/debug/strace/Syscall.h
+++ b/src/bin/debug/strace/Syscall.h
@@ -19,7 +19,7 @@
 class Type {
 public:
        Type(string typeName, TypeHandler *handler)
-               : fTypeName(typeName), fHandler(handler) {}
+               : fTypeName(typeName), fHandler(handler), fCount(1) {}

        const string &TypeName() const  { return fTypeName; }
 
@@ -31,9 +31,13 @@

        TypeHandler     *Handler() const        { return fHandler; }
 
+       uint32 Count() const                    { return fCount; }
+       void SetCount(uint32 count)             { fCount = count; }
+
 private:
        string          fTypeName;
        TypeHandler     *fHandler;
+       uint32          fCount;
 };

 // Parameter
diff --git a/src/bin/debug/strace/TypeHandler.cpp 
b/src/bin/debug/strace/TypeHandler.cpp
index 4275f81..2d2d1ad 100644
--- a/src/bin/debug/strace/TypeHandler.cpp
+++ b/src/bin/debug/strace/TypeHandler.cpp
@@ -225,24 +225,39 @@

 template<typename Type>
 static string
-format_signed_integer_pointer(Context &context, void *address)
+format_signed_integer_pointer(Context &context, void *address, uint32 count)
 {
        Type data;

-       if (obtain_pointer_data(context, &data, address, 
Context::POINTER_VALUES))
-               return "[" + context.FormatSigned(data, sizeof(Type)) + "]";
-
+       if (obtain_pointer_data(context, &data, address, 
Context::POINTER_VALUES)) {
+               string formatted = "[" + context.FormatSigned(data);
+               for (uint32 i = 1; i < count; i++) {
+                       address = (void*)((Type*)address + 1);
+                       obtain_pointer_data(context, &data, address, 
Context::POINTER_VALUES);
+                       formatted += ", " + context.FormatSigned(data);
+               }
+               formatted += "]";
+               return formatted;
+       }
        return context.FormatPointer(address);
 }

 template<typename Type>
 static string
-format_unsigned_integer_pointer(Context &context, void *address)
+format_unsigned_integer_pointer(Context &context, void *address, uint32 count)
 {
        Type data;

-       if (obtain_pointer_data(context, &data, address, 
Context::POINTER_VALUES))
-               return "[" + context.FormatUnsigned(data) + "]";
+       if (obtain_pointer_data(context, &data, address, 
Context::POINTER_VALUES)) {
+               string formatted = "[" + context.FormatUnsigned(data);
+               for (uint32 i = 1; i < count; i++) {
+                       address = (void*)((Type*)address + 1);
+                       obtain_pointer_data(context, &data, address, 
Context::POINTER_VALUES);
+                       formatted += ", " + context.FormatUnsigned(data);
+               }
+               formatted += "]";
+               return formatted;
+       }

        return context.FormatPointer(address);
 }
@@ -279,29 +294,31 @@

 template<typename Type>
 class SignedIntegerPointerTypeHandler : public TypeHandler {
-       string GetParameterValue(Context &context, Parameter *,
+       string GetParameterValue(Context &context, Parameter *parameter,
                                 const void *address)
        {
-               return format_signed_integer_pointer<Type>(context, *(void 
**)address);
+               return format_signed_integer_pointer<Type>(context, *(void 
**)address,
+                       parameter->Count());
        }

        string GetReturnValue(Context &context, uint64 value)
        {
-               return format_signed_integer_pointer<Type>(context, (void 
*)value);
+               return format_signed_integer_pointer<Type>(context, (void 
*)value, 1);
        }
 };

 template<typename Type>
 class UnsignedIntegerPointerTypeHandler : public TypeHandler {
-       string GetParameterValue(Context &context, Parameter *,
+       string GetParameterValue(Context &context, Parameter *parameter,
                                 const void *address)
        {
-               return format_unsigned_integer_pointer<Type>(context, *(void 
**)address);
+               return format_unsigned_integer_pointer<Type>(context, *(void 
**)address,
+                       parameter->Count());
        }

        string GetReturnValue(Context &context, uint64 value)
        {
-               return format_unsigned_integer_pointer<Type>(context, (void 
*)value);
+               return format_unsigned_integer_pointer<Type>(context, (void 
*)value, 1);
        }
 };

diff --git a/src/bin/debug/strace/strace.cpp b/src/bin/debug/strace/strace.cpp
index 431bd64..5a23008 100644
--- a/src/bin/debug/strace/strace.cpp
+++ b/src/bin/debug/strace/strace.cpp
@@ -277,6 +277,14 @@
        Syscall *wait = get_syscall("_kern_wait_for_child");
        wait->ParameterAt(2)->SetOut(true);
        wait->ParameterAt(3)->SetOut(true);
+
+       Syscall *createPipe = get_syscall("_kern_create_pipe");
+       createPipe->ParameterAt(0)->SetOut(true);
+       createPipe->ParameterAt(0)->SetCount(2);
+
+       Syscall *socketPair = get_syscall("_kern_socketpair");
+       socketPair->ParameterAt(3)->SetOut(true);
+       socketPair->ParameterAt(3)->SetCount(2);
 }



--
To view, visit https://review.haiku-os.org/c/haiku/+/5390
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I45ee381044b2e3d4ff0ed1daa61ac5bab949bcdb
Gerrit-Change-Number: 5390
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: strace: shows values for create_pipe and socketpair. - Gerrit