mgorny created this revision. mgorny added reviewers: labath, emaste, krytarowski, jasonmolenda, JDevlieghere, clayborg. mgorny requested review of this revision.
Remove File::eOpenOptionAppend from the mode used by 'platform file open' command. According to POSIX, O_APPEND causes all successive writes to be done at the end of the file. This effectively makes the offset argument to 'platform file write' meaningless. Furthermore, apparently O_APPEND is not implemented reliably everywhere. The Linux manpage for pwrite(2) suggests that Linux does not respect O_APPEND there, so the actual behavior would be dependent on how the vFile:pwrite packet is implemented on the server. Ideally, the mode used for opening flags would be provided via options. However, changing the default mode seems to be a reasonable intermediate solution. https://reviews.llvm.org/D107664 Files: lldb/source/Commands/CommandObjectPlatform.cpp lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py Index: lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py =================================================================== --- lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py +++ lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py @@ -34,7 +34,7 @@ self.match("platform file close 16", [r"file 16 closed."]) self.assertPacketLogContains([ - "vFile:open:2f736f6d652f66696c652e747874,0000020a,000001ed", + "vFile:open:2f736f6d652f66696c652e747874,00000202,000001ed", "vFile:pread:10,d,b", "vFile:pwrite:10,b,teststring", "vFile:close:10", @@ -69,7 +69,7 @@ [r"error: Invalid argument"], error=True) self.assertPacketLogContains([ - "vFile:open:2f736f6d652f66696c652e747874,0000020a,000001ed", + "vFile:open:2f736f6d652f66696c652e747874,00000202,000001ed", "vFile:pread:10,d,b", "vFile:pwrite:10,b,teststring", "vFile:close:10", Index: lldb/source/Commands/CommandObjectPlatform.cpp =================================================================== --- lldb/source/Commands/CommandObjectPlatform.cpp +++ lldb/source/Commands/CommandObjectPlatform.cpp @@ -498,8 +498,7 @@ lldb::eFilePermissionsWorldRead; lldb::user_id_t fd = platform_sp->OpenFile( FileSpec(cmd_line), - File::eOpenOptionReadWrite | File::eOpenOptionAppend | - File::eOpenOptionCanCreate, + File::eOpenOptionReadWrite | File::eOpenOptionCanCreate, perms, error); if (error.Success()) { result.AppendMessageWithFormat("File Descriptor = %" PRIu64 "\n", fd);
Index: lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py =================================================================== --- lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py +++ lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py @@ -34,7 +34,7 @@ self.match("platform file close 16", [r"file 16 closed."]) self.assertPacketLogContains([ - "vFile:open:2f736f6d652f66696c652e747874,0000020a,000001ed", + "vFile:open:2f736f6d652f66696c652e747874,00000202,000001ed", "vFile:pread:10,d,b", "vFile:pwrite:10,b,teststring", "vFile:close:10", @@ -69,7 +69,7 @@ [r"error: Invalid argument"], error=True) self.assertPacketLogContains([ - "vFile:open:2f736f6d652f66696c652e747874,0000020a,000001ed", + "vFile:open:2f736f6d652f66696c652e747874,00000202,000001ed", "vFile:pread:10,d,b", "vFile:pwrite:10,b,teststring", "vFile:close:10", Index: lldb/source/Commands/CommandObjectPlatform.cpp =================================================================== --- lldb/source/Commands/CommandObjectPlatform.cpp +++ lldb/source/Commands/CommandObjectPlatform.cpp @@ -498,8 +498,7 @@ lldb::eFilePermissionsWorldRead; lldb::user_id_t fd = platform_sp->OpenFile( FileSpec(cmd_line), - File::eOpenOptionReadWrite | File::eOpenOptionAppend | - File::eOpenOptionCanCreate, + File::eOpenOptionReadWrite | File::eOpenOptionCanCreate, perms, error); if (error.Success()) { result.AppendMessageWithFormat("File Descriptor = %" PRIu64 "\n", fd);
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits